[FIX] 整合機台效期管理功能並優化 UI 比例
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 1m2s

- 修正 Alpine.js 作用域問題,恢復效期編輯彈窗功能
- 整合機台日誌與效期管理至主列表頁 (Index)
- 優化大螢幕貨道格線佈局,解決日期折行問題
- 縮小彈窗字體與內距,調整為極簡奢華風 UI
- 新增貨道效期與批號欄位之 Migration 與模型關聯
- 補齊中、英、日三語系翻譯檔
This commit is contained in:
2026-03-24 16:46:04 +08:00
parent 38770b080b
commit 87ef247a48
22 changed files with 2539 additions and 647 deletions

View File

@@ -79,3 +79,13 @@ trigger: always_on
### 5.2 角色權限維護 ### 5.2 角色權限維護
- 初始建立後,該租戶的「管理員」角色即成為獨立資源,可由具有權限的帳號進行細部調整。 - 初始建立後,該租戶的「管理員」角色即成為獨立資源,可由具有權限的帳號進行細部調整。
### 5.3 機台授權原則 (Machine Authorization) [CRITICAL]
- **以帳號為準**:機台授權是基於「帳號 (User)」而非「角色 (Role)」。
- **授權層級**
1. **系統管理員 (isSystemAdmin = true)**:具備全系統所有機台之完整權限。
2. **租戶/公司帳號 (含管理員)**:僅能存取由「系統管理員」明確授權給該帳號的機台(透過 `machine_user` 關聯)。
3. **子帳號**:僅能存取由其「公司管理員」所授權的機台子集。
- **實作要求**
- `Machine` Model 的全域過濾器**不得**對「管理員 (Tenant Admin)」角色進行例外排除。
- 所有的機台存取必須嚴格比對 `machine_user` 表,除非操作者為「系統管理員 (Super Admin)」。

View File

@@ -9,11 +9,13 @@ use Illuminate\View\View;
class MachineController extends AdminController class MachineController extends AdminController
{ {
/** /**
* 顯示所有機台列表 * 顯示所有機台列表或效期管理
*/ */
public function index(Request $request): View public function index(Request $request): View
{ {
$per_page = $request->input('per_page', 10); $tab = $request->input('tab', 'list');
$per_page = $tab === 'list' ? $request->input('per_page', 10) : $request->input('per_page', 12);
$query = Machine::query(); $query = Machine::query();
// 搜尋:名稱或序號 // 搜尋:名稱或序號
@@ -24,14 +26,33 @@ class MachineController extends AdminController
}); });
} }
$machines = $query->when($request->status, function ($query, $status) { if ($tab === 'list') {
return $query->where('status', $status); $machines = $query->when($request->status, function ($query, $status) {
}) return $query->where('status', $status);
->latest() })
->paginate($per_page) ->latest()
->withQueryString(); ->paginate($per_page)
->withQueryString();
return view('admin.machines.index', compact('machines')); return view('admin.machines.index', compact('machines', 'tab'));
} else {
// 效期管理模式:獲取機台及其貨道統計
$machines = $query->withCount(['slots as total_slots'])
->withCount(['slots as expired_count' => function ($q) {
$q->where('expiry_date', '<', now()->toDateString());
}])
->withCount(['slots as pending_count' => function ($q) {
$q->whereNull('expiry_date');
}])
->withCount(['slots as warning_count' => function ($q) {
$q->whereBetween('expiry_date', [now()->toDateString(), now()->addDays(7)->toDateString()]);
}])
->latest()
->paginate($per_page)
->withQueryString();
return view('admin.machines.index', compact('machines', 'tab'));
}
} }
/** /**
@@ -46,25 +67,38 @@ class MachineController extends AdminController
return view('admin.machines.show', compact('machine')); return view('admin.machines.show', compact('machine'));
} }
/** /**
* 顯示所有機台日誌列表 * AJAX: 取得機台抽屜面板所需的歷程日誌
*/ */
public function logs(Request $request): View public function logsAjax(Request $request, Machine $machine)
{ {
$per_page = $request->input('per_page', 10); $per_page = $request->input('per_page', 20);
$logs = \App\Models\Machine\MachineLog::with('machine')
$startDate = $request->get('start_date', now()->format('Y-m-d'));
$endDate = $request->get('end_date', now()->format('Y-m-d'));
$logs = $machine->logs()
->when($request->level, function ($query, $level) { ->when($request->level, function ($query, $level) {
return $query->where('level', $level); return $query->where('level', $level);
}) })
->when($request->machine_id, function ($query, $machineId) { ->whereDate('created_at', '>=', $startDate)
return $query->where('machine_id', $machineId); ->whereDate('created_at', '<=', $endDate)
->when($request->type, function ($query, $type) {
return $query->where('type', $type);
}) })
->latest() ->latest()
->paginate($per_page)->withQueryString(); ->paginate($per_page);
$machines = Machine::select('id', 'name')->get(); return response()->json([
'success' => true,
return view('admin.machines.logs', compact('logs', 'machines')); 'data' => $logs->items(),
'pagination' => [
'total' => $logs->total(),
'current_page' => $logs->currentPage(),
'last_page' => $logs->lastPage(),
]
]);
} }
@@ -132,19 +166,77 @@ class MachineController extends AdminController
} }
/** /**
* 機台使用率統計 (開發中) * 機台使用率統計
*/ */
public function utilization(Request $request): View public function utilization(Request $request): View
{ {
return view('admin.machines.index', ['machines' => Machine::paginate(1)]); // Placeholder // 取得當前使用者有權限的所有機台 (已透過 Global Scope 過濾)
$machines = Machine::all();
return view('admin.machines.utilization', [
'machines' => $machines
]);
} }
/** /**
* 機台到期管理 (開發中) * AJAX: 取得機台所有貨道資訊 (供效期管理視覺化圖表使用)
*/ */
public function expiry(Request $request): View public function slotsAjax(Machine $machine)
{ {
return view('admin.machines.index', ['machines' => Machine::paginate(1)]); // Placeholder $slots = $machine->slots()->with('product:id,name,image')->orderByRaw('CAST(slot_no AS UNSIGNED) ASC')->get();
return response()->json([
'success' => true,
'machine' => $machine->only(['id', 'name', 'serial_no']),
'slots' => $slots
]);
}
/**
* AJAX: 更新貨道效期
*/
public function updateSlotExpiry(Request $request, Machine $machine)
{
$request->validate([
'slot_no' => 'required|integer',
'expiry_date' => 'nullable|date',
'apply_all_same_product' => 'boolean'
]);
$slotNo = $request->slot_no;
$expiryDate = $request->expiry_date;
$applyAll = $request->apply_all_same_product ?? false;
$slot = $machine->slots()->where('slot_no', $slotNo)->firstOrFail();
$slot->update(['expiry_date' => $expiryDate]);
if ($applyAll && $slot->product_id) {
$machine->slots()
->where('product_id', $slot->product_id)
->update(['expiry_date' => $expiryDate]);
}
return response()->json([
'success' => true,
'message' => __('Expiry updated successfully.')
]);
}
/**
* 取得機台統計數據 (AJAX)
*/
public function utilizationData(int $id, Request $request)
{
$machine = Machine::findOrFail($id);
$date = $request->get('date', now()->toDateString());
$service = app(\App\Services\Machine\MachineService::class);
$stats = $service->getUtilizationStats($machine, $date);
return response()->json([
'success' => true,
'data' => $stats
]);
} }
/** /**

View File

@@ -31,6 +31,25 @@ class MachineController extends Controller
], 202); // 202 Accepted ], 202); // 202 Accepted
} }
/**
* B018: Record Machine Restock/Setup Report (Asynchronous)
*/
public function recordRestock(Request $request)
{
$machine = $request->get('machine');
$data = $request->all();
$data['serial_no'] = $machine->serial_no;
\App\Jobs\Machine\ProcessRestockReport::dispatch($data);
return response()->json([
'success' => true,
'code' => 200,
'message' => 'Restock report accepted',
'status' => '49'
], 202);
}
/** /**
* B017: Get Slot Info & Stock (Synchronous) * B017: Get Slot Info & Stock (Synchronous)
*/ */

View File

@@ -0,0 +1,37 @@
<?php
namespace App\Jobs\Machine;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class ProcessRestockReport implements ShouldQueue
{
use Queueable;
protected $data;
/**
* Create a new job instance.
*/
public function __construct(array $data)
{
$this->data = $data;
}
/**
* Execute the job.
*/
public function handle(\App\Services\Machine\MachineService $machineService): void
{
$serialNo = $this->data['serial_no'] ?? null;
$slotsData = $this->data['slots'] ?? [];
if (!$serialNo) return;
$machine = \App\Models\Machine\Machine::where('serial_no', $serialNo)->first();
if ($machine) {
$machineService->syncSlots($machine, $slotsData);
}
}
}

View File

@@ -17,8 +17,8 @@ class Machine extends Model
// 權限隔離:一般帳號登入時只能看到自己被分配的機台 // 權限隔離:一般帳號登入時只能看到自己被分配的機台
static::addGlobalScope('machine_access', function (\Illuminate\Database\Eloquent\Builder $builder) { static::addGlobalScope('machine_access', function (\Illuminate\Database\Eloquent\Builder $builder) {
$user = auth()->user(); $user = auth()->user();
// 如果是在 Console、或是系統管理員、或是租戶的「管理員」角色,則不限制 (可看該公司所有機台) // 如果是在 Console、或是系統管理員則不限制 (可看所有機台)
if (app()->runningInConsole() || !$user || $user->isSystemAdmin() || $user->hasRole('管理員') || $user->hasRole('super-admin')) { if (app()->runningInConsole() || !$user || $user->isSystemAdmin()) {
return; return;
} }
@@ -101,6 +101,11 @@ class Machine extends Model
return $this->hasMany(MachineLog::class); return $this->hasMany(MachineLog::class);
} }
public function slots()
{
return $this->hasMany(MachineSlot::class);
}
public function machineModel() public function machineModel()
{ {
return $this->belongsTo(MachineModel::class); return $this->belongsTo(MachineModel::class);
@@ -121,6 +126,38 @@ class Machine extends Model
return $this->belongsTo(\App\Models\System\User::class, 'updater_id'); return $this->belongsTo(\App\Models\System\User::class, 'updater_id');
} }
public const PAGE_STATUSES = [
'0' => 'Offline',
'1' => 'Home Page',
'2' => 'Vending Page',
'3' => 'Admin Page',
'4' => 'Replenishment Page',
'5' => 'Tutorial Page',
'60' => 'Purchasing',
'61' => 'Locked Page',
'62' => 'Dispense Failed',
'301' => 'Slot Test',
'302' => 'Slot Test',
'401' => 'Payment Selection',
'402' => 'Waiting for Payment',
'403' => 'Dispensing',
'404' => 'Receipt Printing',
'601' => 'Pass Code',
'602' => 'Pickup Code',
'603' => 'Message Display',
'604' => 'Cancel Purchase',
'605' => 'Purchase Finished',
'611' => 'Welcome Gift Status',
'612' => 'Dispense Failed',
];
public function getCurrentPageLabelAttribute(): string
{
$code = (string) $this->current_page;
$label = self::PAGE_STATUSES[$code] ?? $code;
return __($label);
}
public function users() public function users()
{ {
return $this->belongsToMany(\App\Models\System\User::class); return $this->belongsToMany(\App\Models\System\User::class);

View File

@@ -12,8 +12,10 @@ class MachineLog extends Model
const UPDATED_AT = null; const UPDATED_AT = null;
protected $fillable = [ protected $fillable = [
'company_id',
'machine_id', 'machine_id',
'level', 'level',
'type',
'message', 'message',
'context', 'context',
]; ];

View File

@@ -14,17 +14,17 @@ class MachineSlot extends Model
'machine_id', 'machine_id',
'product_id', 'product_id',
'slot_no', 'slot_no',
'slot_name', 'max_stock',
'capacity',
'stock', 'stock',
'price', 'expiry_date',
'status', 'batch_no',
'last_restocked_at', 'is_active',
]; ];
protected $casts = [ protected $casts = [
'price' => 'decimal:2', 'price' => 'decimal:2',
'last_restocked_at' => 'datetime', 'last_restocked_at' => 'datetime',
'expiry_date' => 'date:Y-m-d',
]; ];
public function machine() public function machine()

View File

@@ -21,12 +21,20 @@ class MachineService
return DB::transaction(function () use ($serialNo, $data) { return DB::transaction(function () use ($serialNo, $data) {
$machine = Machine::where('serial_no', $serialNo)->firstOrFail(); $machine = Machine::where('serial_no', $serialNo)->firstOrFail();
// 參數相容性處理 (Mapping legacy fields to new fields)
$temperature = $data['temperature'] ?? $machine->temperature;
$currentPage = $data['current_page'] ?? $data['M_Stus2'] ?? $machine->current_page;
$doorStatus = $data['door_status'] ?? $data['door'] ?? $machine->door_status;
$firmwareVersion = $data['firmware_version'] ?? $data['M_Ver'] ?? $machine->firmware_version;
$model = $data['model'] ?? $data['M_Stus'] ?? $machine->model;
$updateData = [ $updateData = [
'status' => 'online', 'status' => 'online',
'temperature' => $data['temperature'] ?? $machine->temperature, 'temperature' => $temperature,
'current_page' => $data['current_page'] ?? $machine->current_page, 'current_page' => $currentPage,
'door_status' => $data['door_status'] ?? $machine->door_status, 'door_status' => $doorStatus,
'firmware_version' => $data['firmware_version'] ?? $machine->firmware_version, 'firmware_version' => $firmwareVersion,
'model' => $model,
'last_heartbeat_at' => now(), 'last_heartbeat_at' => now(),
]; ];
@@ -35,9 +43,11 @@ class MachineService
// Record log if provided // Record log if provided
if (!empty($data['log'])) { if (!empty($data['log'])) {
$machine->logs()->create([ $machine->logs()->create([
'company_id' => $machine->company_id,
'type' => 'status',
'level' => $data['log_level'] ?? 'info', 'level' => $data['log_level'] ?? 'info',
'message' => $data['log'], 'message' => $data['log'],
'payload' => $data['log_payload'] ?? null, 'context' => $data['log_payload'] ?? null,
]); ]);
} }
@@ -46,17 +56,43 @@ class MachineService
} }
/** /**
* Update machine slot stock. * Sync machine slots based on replenishment report.
*
* @param Machine $machine
* @param array $slotsData
*/ */
public function updateSlotStock(Machine $machine, int $slotNo, int $stock): void public function syncSlots(Machine $machine, array $slotsData): void
{ {
$machine->slots()->where('slot_no', $slotNo)->update([ DB::transaction(function () use ($machine, $slotsData) {
'stock' => $stock, foreach ($slotsData as $slotData) {
'last_restocked_at' => now(), $slotNo = $slotData['slot_no'] ?? null;
]); if (!$slotNo) continue;
$existingSlot = $machine->slots()->where('slot_no', $slotNo)->first();
$updateData = [
'product_id' => $slotData['product_id'] ?? null,
'stock' => $slotData['stock'] ?? 0,
'capacity' => $slotData['capacity'] ?? ($existingSlot->capacity ?? 10),
'price' => $slotData['price'] ?? ($existingSlot->price ?? 0),
'last_restocked_at' => now(),
];
// 如果商品變了,或者這是一次明確的補貨回報,清空效期等待管理員更新
// 這裡我們暫定只要有 report 進來,就需要重新確認效期
$updateData['expiry_date'] = null;
if ($existingSlot) {
$existingSlot->update($updateData);
} else {
$machine->slots()->create(array_merge($updateData, ['slot_no' => $slotNo]));
}
}
});
} }
/** /**
* Update machine slot stock (single slot).
* Legacy support for recordLog (Existing code). * Legacy support for recordLog (Existing code).
*/ */
public function recordLog(int $machineId, array $data): MachineLog public function recordLog(int $machineId, array $data): MachineLog
@@ -66,7 +102,129 @@ class MachineService
return $machine->logs()->create([ return $machine->logs()->create([
'level' => $data['level'] ?? 'info', 'level' => $data['level'] ?? 'info',
'message' => $data['message'], 'message' => $data['message'],
'payload' => $data['context'] ?? null, 'context' => $data['context'] ?? null,
]); ]);
} }
/**
* Get machine utilization and OEE statistics.
*/
public function getUtilizationStats(Machine $machine, string $date): array
{
$start = Carbon::parse($date)->startOfDay();
$end = Carbon::parse($date)->endOfDay();
// 1. Availability: Based on heartbeat logs (status type)
// Assume online if heartbeat within 6 minutes
$logs = $machine->logs()
->where('type', 'status')
->whereBetween('created_at', [$start, $end])
->orderBy('created_at')
->get();
$onlineMinutes = 0;
$lastLogTime = null;
foreach ($logs as $log) {
$currentTime = Carbon::parse($log->created_at);
if ($lastLogTime) {
$diff = $currentTime->diffInMinutes($lastLogTime);
if ($diff <= 6) {
$onlineMinutes += $diff;
}
}
$lastLogTime = $currentTime;
}
$totalMinutes = 24 * 60;
$availability = ($totalMinutes > 0) ? min(100, ($onlineMinutes / $totalMinutes) * 100) : 0;
// 2. Performance: Sales Count (B600)
// Target: 2 sales per hour (48/day)
$salesCount = $machine->logs()
->where('message', 'like', '%B600%')
->whereBetween('created_at', [$start, $end])
->count();
$targetSales = 48;
$performance = ($targetSales > 0) ? min(100, ($salesCount / $targetSales) * 100) : 0;
// 3. Quality: Success Rate
// Exclude failed dispense (B130)
$errorCount = $machine->logs()
->where('message', 'like', '%B130%')
->whereBetween('created_at', [$start, $end])
->count();
$totalAttempts = $salesCount + $errorCount;
$quality = ($totalAttempts > 0) ? (($salesCount / $totalAttempts) * 100) : 100;
// Combined OEE
$oee = ($availability / 100) * ($performance / 100) * ($quality / 100) * 100;
return [
'overview' => [
'availability' => round($availability, 2),
'performance' => round($performance, 2),
'quality' => round($quality, 2),
'oee' => round($oee, 2),
'onlineHours' => round($onlineMinutes / 60, 2),
'salesCount' => $salesCount,
'errorCount' => $errorCount,
],
'chart' => [
'uptime' => $this->formatUptimeTimeline($logs, $start, $end),
'sales' => $this->formatSalesTimeline($machine, $start, $end)
]
];
}
private function formatUptimeTimeline($logs, $start, $end)
{
$data = [];
if ($logs->isEmpty()) return $data;
$lastLog = null;
$currentRangeStart = null;
foreach ($logs as $log) {
$logTime = Carbon::parse($log->created_at);
if (!$currentRangeStart) {
$currentRangeStart = $logTime;
} else {
$diff = $logTime->diffInMinutes(Carbon::parse($lastLog->created_at));
if ($diff > 10) { // Interruption > 10 mins
$data[] = [
'x' => 'Uptime',
'y' => [$currentRangeStart->getTimestamp() * 1000, Carbon::parse($lastLog->created_at)->getTimestamp() * 1000],
'fillColor' => '#06b6d4'
];
$currentRangeStart = $logTime;
}
}
$lastLog = $log;
}
if ($currentRangeStart && $lastLog) {
$data[] = [
'x' => 'Uptime',
'y' => [$currentRangeStart->getTimestamp() * 1000, Carbon::parse($lastLog->created_at)->getTimestamp() * 1000],
'fillColor' => '#06b6d4'
];
}
return $data;
}
private function formatSalesTimeline($machine, $start, $end)
{
return $machine->logs()
->where('message', 'like', '%B600%')
->whereBetween('created_at', [$start, $end])
->get()
->map(function($log) {
return [Carbon::parse($log->created_at)->getTimestamp() * 1000, 1];
})
->toArray();
}
} }

View File

@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('machine_logs', function (Blueprint $table) {
$table->foreignId('company_id')->after('id')->nullable()->constrained()->onDelete('cascade');
$table->string('type')->after('level')->default('status')->index(); // status, login, submachine, device
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('machine_logs', function (Blueprint $table) {
$table->dropForeign(['company_id']);
$table->dropColumn(['company_id', 'type']);
});
}
};

View File

@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('machine_slots', function (Blueprint $table) {
$table->date('expiry_date')->nullable()->after('max_stock')->comment('商品效期');
$table->string('batch_no')->nullable()->after('expiry_date')->comment('補貨批號');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('machine_slots', function (Blueprint $table) {
$table->dropColumn(['expiry_date', 'batch_no']);
});
}
};

View File

@@ -21,6 +21,7 @@ class RoleSeeder extends Seeder
$permissions = [ $permissions = [
'menu.members', 'menu.members',
'menu.machines', 'menu.machines',
'menu.machines.list',
'menu.app', 'menu.app',
'menu.warehouses', 'menu.warehouses',
'menu.sales', 'menu.sales',
@@ -60,6 +61,7 @@ class RoleSeeder extends Seeder
$tenantAdmin->syncPermissions([ $tenantAdmin->syncPermissions([
'menu.members', 'menu.members',
'menu.machines', 'menu.machines',
'menu.machines.list',
'menu.app', 'menu.app',
'menu.warehouses', 'menu.warehouses',
'menu.sales', 'menu.sales',

View File

@@ -1,12 +1,22 @@
{ {
"A new verification link has been sent to your email address.": "A new verification link has been sent to your email address.", "A new verification link has been sent to your email address.": "A new verification link has been sent to your email address.",
"Account created successfully.": "Account created successfully.", "AI Prediction": "AI Prediction",
"Account deleted successfully.": "Account deleted successfully.", "API Token": "API Token",
"APK Versions": "APK Versions",
"APP Features": "APP Features",
"APP Management": "APP Management",
"APP Version": "APP Version",
"APP_ID": "APP_ID",
"APP_KEY": "APP_KEY",
"Account": "帳號",
"Account Management": "Account Management", "Account Management": "Account Management",
"Account Name": "帳號姓名",
"Account Settings": "Account Settings", "Account Settings": "Account Settings",
"Account Status": "Account Status", "Account Status": "Account Status",
"Account created successfully.": "Account created successfully.",
"Account deleted successfully.": "Account deleted successfully.",
"Account updated successfully.": "Account updated successfully.", "Account updated successfully.": "Account updated successfully.",
"accounts": "Account Management", "Account:": "帳號:",
"Accounts / Machines": "Accounts / Machines", "Accounts / Machines": "Accounts / Machines",
"Action": "Action", "Action": "Action",
"Actions": "Actions", "Actions": "Actions",
@@ -17,14 +27,16 @@
"Add Machine Model": "Add Machine Model", "Add Machine Model": "Add Machine Model",
"Add Role": "Add Role", "Add Role": "Add Role",
"Admin": "Admin", "Admin": "Admin",
"Admin display name": "Admin display name",
"Admin Name": "Admin Name", "Admin Name": "Admin Name",
"Admin Page": "Admin Page",
"Admin Sellable Products": "Admin Sellable Products", "Admin Sellable Products": "Admin Sellable Products",
"Admin display name": "Admin display name",
"Administrator": "Administrator", "Administrator": "Administrator",
"Advertisement Management": "Advertisement Management", "Advertisement Management": "Advertisement Management",
"Affiliated Unit": "Affiliated Unit",
"Affiliation": "Affiliation", "Affiliation": "Affiliation",
"AI Prediction": "AI Prediction",
"Alert Summary": "Alert Summary", "Alert Summary": "Alert Summary",
"Alerts": "中心告警",
"Alerts Pending": "Alerts Pending", "Alerts Pending": "Alerts Pending",
"All": "All", "All": "All",
"All Affiliations": "All Affiliations", "All Affiliations": "All Affiliations",
@@ -32,38 +44,40 @@
"All Levels": "All Levels", "All Levels": "All Levels",
"All Machines": "All Machines", "All Machines": "All Machines",
"All Times System Timezone": "All times are in system timezone", "All Times System Timezone": "All times are in system timezone",
"analysis": "Analysis Management", "An error occurred while saving.": "An error occurred while saving.",
"Analysis Management": "Analysis Management", "Analysis Management": "Analysis Management",
"Analysis Permissions": "Analysis Permissions", "Analysis Permissions": "Analysis Permissions",
"API Token": "API Token", "Apply to all identical products in this machine": "Apply to all identical products in this machine",
"APK Versions": "APK Versions",
"app": "APP Management",
"APP Features": "APP Features",
"APP Management": "APP Management",
"APP_ID": "APP_ID",
"APP_KEY": "APP_KEY",
"Are you sure to delete this customer?": "Are you sure to delete this customer?", "Are you sure to delete this customer?": "Are you sure to delete this customer?",
"Are you sure you want to delete this account?": "Are you sure you want to delete this account?", "Are you sure you want to delete this account?": "Are you sure you want to delete this account?",
"Are you sure you want to delete this account? This action cannot be undone.": "Are you sure you want to delete this account? This action cannot be undone.", "Are you sure you want to delete this account? This action cannot be undone.": "Are you sure you want to delete this account? This action cannot be undone.",
"Are you sure you want to delete this configuration?": "您確定要刪除此金流配置嗎?",
"Are you sure you want to delete this configuration? This action cannot be undone.": "Are you sure you want to delete this configuration? This action cannot be undone.", "Are you sure you want to delete this configuration? This action cannot be undone.": "Are you sure you want to delete this configuration? This action cannot be undone.",
"Are you sure you want to delete this item? This action cannot be undone.": "Are you sure you want to delete this item? This action cannot be undone.", "Are you sure you want to delete this item? This action cannot be undone.": "Are you sure you want to delete this item? This action cannot be undone.",
"Are you sure you want to delete this role? This action cannot be undone.": "Are you sure you want to delete this role? This action cannot be undone.", "Are you sure you want to delete this role? This action cannot be undone.": "Are you sure you want to delete this role? This action cannot be undone.",
"Are you sure you want to delete your account?": "Are you sure you want to delete your account?", "Are you sure you want to delete your account?": "Are you sure you want to delete your account?",
"Are you sure you want to proceed? This action cannot be undone.": "您確定要繼續嗎?此操作將無法復原。",
"Are you sure?": "Are you sure?", "Are you sure?": "Are you sure?",
"audit": "Audit Management", "Assign": "Assign",
"Assign Machines": "分配機台",
"Assigned Machines": "授權機台",
"Audit Management": "Audit Management", "Audit Management": "Audit Management",
"Audit Permissions": "Audit Permissions", "Audit Permissions": "Audit Permissions",
"Authorized Machines": "Authorized Machines",
"Availability": "可用性 (Availability)",
"Available Machines": "可供分配的機台",
"Avatar updated successfully.": "Avatar updated successfully.", "Avatar updated successfully.": "Avatar updated successfully.",
"Badge Settings": "Badge Settings", "Badge Settings": "Badge Settings",
"Basic Information": "Basic Information", "Basic Information": "Basic Information",
"Basic Settings": "Basic Settings", "Basic Settings": "Basic Settings",
"basic-settings": "Basic Settings", "Batch No": "Batch No",
"Belongs To": "Belongs To", "Belongs To": "Belongs To",
"Belongs To Company": "Belongs To Company", "Belongs To Company": "Belongs To Company",
"Cancel": "Cancel", "Cancel": "Cancel",
"Cancel Purchase": "Cancel Purchase",
"Cannot Delete Role": "Cannot Delete Role",
"Cannot delete company with active accounts.": "Cannot delete company with active accounts.", "Cannot delete company with active accounts.": "Cannot delete company with active accounts.",
"Cannot delete model that is currently in use by machines.": "Cannot delete model that is currently in use by machines.", "Cannot delete model that is currently in use by machines.": "Cannot delete model that is currently in use by machines.",
"Cannot Delete Role": "Cannot Delete Role",
"Cannot delete role with active users.": "Cannot delete role with active users.", "Cannot delete role with active users.": "Cannot delete role with active users.",
"Card Reader": "Card Reader", "Card Reader": "Card Reader",
"Card Reader No": "Card Reader No", "Card Reader No": "Card Reader No",
@@ -75,22 +89,24 @@
"ChannelSecret": "ChannelSecret", "ChannelSecret": "ChannelSecret",
"Checkout Time 1": "Checkout Time 1", "Checkout Time 1": "Checkout Time 1",
"Checkout Time 2": "Checkout Time 2", "Checkout Time 2": "Checkout Time 2",
"Clear Filter": "Clear Filter",
"Clear Stock": "Clear Stock", "Clear Stock": "Clear Stock",
"Click here to re-send the verification email.": "Click here to re-send the verification email.", "Click here to re-send the verification email.": "Click here to re-send the verification email.",
"Click to upload": "Click to upload", "Click to upload": "Click to upload",
"Close Panel": "Close Panel", "Close Panel": "Close Panel",
"companies": "Customer Management",
"Company": "Company", "Company": "Company",
"Company Code": "Company Code", "Company Code": "Company Code",
"Company Information": "Company Information", "Company Information": "Company Information",
"Company Level": "Company Level", "Company Level": "Company Level",
"Company Name": "Company Name", "Company Name": "Company Name",
"Config Name": "配置名稱",
"Configuration Name": "Configuration Name", "Configuration Name": "Configuration Name",
"Confirm": "Confirm", "Confirm": "Confirm",
"Confirm Deletion": "Confirm Deletion", "Confirm Deletion": "Confirm Deletion",
"Confirm Password": "Confirm Password", "Confirm Password": "Confirm Password",
"Connecting...": "Connecting...", "Connecting...": "Connecting...",
"Connectivity Status": "Connectivity Status", "Connectivity Status": "Connectivity Status",
"Connectivity vs Sales Correlation": "連線狀態與銷售關聯分析",
"Contact & Details": "Contact & Details", "Contact & Details": "Contact & Details",
"Contact Email": "Contact Email", "Contact Email": "Contact Email",
"Contact Name": "Contact Name", "Contact Name": "Contact Name",
@@ -98,24 +114,24 @@
"Contract Until (Optional)": "Contract Until (Optional)", "Contract Until (Optional)": "Contract Until (Optional)",
"Coupons": "Coupons", "Coupons": "Coupons",
"Create": "Create", "Create": "Create",
"Create a new role and assign permissions.": "Create a new role and assign permissions.",
"Create Config": "Create Config", "Create Config": "Create Config",
"Create Machine": "Create Machine", "Create Machine": "Create Machine",
"Create Payment Config": "Create Payment Config", "Create Payment Config": "Create Payment Config",
"Create Role": "Create Role", "Create Role": "Create Role",
"Create a new role and assign permissions.": "Create a new role and assign permissions.",
"Critical": "Critical",
"Current Password": "Current Password", "Current Password": "Current Password",
"Current Stock": "Current Stock", "Current Stock": "Current Stock",
"Customer created successfully.": "Customer created successfully.",
"Customer deleted successfully.": "Customer deleted successfully.",
"Customer Info": "Customer Info", "Customer Info": "Customer Info",
"Customer Management": "Customer Management", "Customer Management": "Customer Management",
"Customer Payment Config": "Customer Payment Config", "Customer Payment Config": "Customer Payment Config",
"Customer created successfully.": "Customer created successfully.",
"Customer deleted successfully.": "Customer deleted successfully.",
"Customer updated successfully.": "Customer updated successfully.", "Customer updated successfully.": "Customer updated successfully.",
"Danger Zone: Delete Account": "Danger Zone: Delete Account", "Danger Zone: Delete Account": "Danger Zone: Delete Account",
"Dashboard": "Dashboard", "Dashboard": "Dashboard",
"Data Configuration": "Data Configuration", "Data Configuration": "Data Configuration",
"Data Configuration Permissions": "Data Configuration Permissions", "Data Configuration Permissions": "Data Configuration Permissions",
"data-config": "Data Configuration",
"Day Before": "Day Before", "Day Before": "Day Before",
"Default Donate": "Default Donate", "Default Donate": "Default Donate",
"Default Not Donate": "Default Not Donate", "Default Not Donate": "Default Not Donate",
@@ -125,15 +141,14 @@
"Delete Account": "Delete Account", "Delete Account": "Delete Account",
"Delete Permanently": "Delete Permanently", "Delete Permanently": "Delete Permanently",
"Deposit Bonus": "Deposit Bonus", "Deposit Bonus": "Deposit Bonus",
"Deselect All": "取消全選",
"Detail": "Detail", "Detail": "Detail",
"Device Status Logs": "Device Status Logs",
"Disabled": "Disabled", "Disabled": "Disabled",
"Discord Notifications": "Discord Notifications", "Discord Notifications": "Discord Notifications",
"e.g. John Doe": "e.g. John Doe", "Dispense Failed": "Dispense Failed",
"e.g. johndoe": "e.g. johndoe", "Dispense Success": "Dispense Success",
"e.g. Taiwan Star": "e.g. Taiwan Star", "Dispensing": "Dispensing",
"e.g. TWSTAR": "e.g. TWSTAR",
"e.g., Company Standard Pay": "e.g., Company Standard Pay",
"e.g., Taipei Station": "e.g., Taipei Station",
"E.SUN QR Scan": "E.SUN QR Scan", "E.SUN QR Scan": "E.SUN QR Scan",
"E.SUN QR Scan Settings Description": "E.SUN Bank QR Scan Payment Settings", "E.SUN QR Scan Settings Description": "E.SUN Bank QR Scan Payment Settings",
"EASY_MERCHANT_ID": "EASY_MERCHANT_ID", "EASY_MERCHANT_ID": "EASY_MERCHANT_ID",
@@ -142,11 +157,15 @@
"Edit": "Edit", "Edit": "Edit",
"Edit Account": "Edit Account", "Edit Account": "Edit Account",
"Edit Customer": "Edit Customer", "Edit Customer": "Edit Customer",
"Edit Expiry": "Edit Expiry",
"Edit Machine": "Edit Machine", "Edit Machine": "Edit Machine",
"Edit Machine Model": "Edit Machine Model", "Edit Machine Model": "Edit Machine Model",
"Edit Machine Settings": "編輯機台設定",
"Edit Payment Config": "Edit Payment Config", "Edit Payment Config": "Edit Payment Config",
"Edit Role": "Edit Role", "Edit Role": "Edit Role",
"Edit Role Permissions": "Edit Role Permissions",
"Edit Settings": "Edit Settings", "Edit Settings": "Edit Settings",
"Edit Sub Account Role": "編輯子帳號角色",
"Email": "Email", "Email": "Email",
"Enabled/Disabled": "Enabled/Disabled", "Enabled/Disabled": "Enabled/Disabled",
"Ensure your account is using a long, random password to stay secure.": "Ensure your account is using a long, random password to stay secure.", "Ensure your account is using a long, random password to stay secure.": "Ensure your account is using a long, random password to stay secure.",
@@ -157,14 +176,23 @@
"Enter role name": "Enter role name", "Enter role name": "Enter role name",
"Enter serial number": "Enter serial number", "Enter serial number": "Enter serial number",
"Enter your password to confirm": "Enter your password to confirm", "Enter your password to confirm": "Enter your password to confirm",
"Equipment efficiency and OEE metrics": "設備效能與 OEE 綜合指標",
"Error": "Error", "Error": "Error",
"Expired": "Expired",
"Expired / Disabled": "Expired / Disabled", "Expired / Disabled": "Expired / Disabled",
"Expiry Date": "Expiry Date",
"Expiry Management": "Expiry Management", "Expiry Management": "Expiry Management",
"Failed to fetch machine data.": "Failed to fetch machine data.",
"Failed to save permissions.": "Failed to save permissions.",
"Failed to update machine images: ": "Failed to update machine images: ", "Failed to update machine images: ": "Failed to update machine images: ",
"files selected": "files selected",
"Firmware Version": "Firmware Version", "Firmware Version": "Firmware Version",
"Fleet Avg OEE": "全機隊平均 OEE",
"Fleet Performance": "全機隊效能",
"From": "From",
"Full Access": "Full Access",
"Full Name": "Full Name", "Full Name": "Full Name",
"Games": "Games", "Games": "Games",
"General permissions not linked to a specific menu.": "未連結到特定選單的一般權限。",
"Gift Definitions": "Gift Definitions", "Gift Definitions": "Gift Definitions",
"Global roles accessible by all administrators.": "Global roles accessible by all administrators.", "Global roles accessible by all administrators.": "Global roles accessible by all administrators.",
"Got it": "Got it", "Got it": "Got it",
@@ -177,93 +205,106 @@
"Heating Range": "Heating Range", "Heating Range": "Heating Range",
"Heating Start Time": "Heating Start Time", "Heating Start Time": "Heating Start Time",
"Helper": "Helper", "Helper": "Helper",
"Home Page": "Home Page",
"Info": "Info", "Info": "Info",
"Initial Admin Account": "Initial Admin Account", "Initial Admin Account": "Initial Admin Account",
"Initial Role": "Initial Role", "Initial Role": "Initial Role",
"Invoice Status": "Invoice Status", "Invoice Status": "Invoice Status",
"items": "items",
"Items": "Items", "Items": "Items",
"JKO_MERCHANT_ID": "JKO_MERCHANT_ID", "JKO_MERCHANT_ID": "JKO_MERCHANT_ID",
"john@example.com": "john@example.com",
"Joined": "Joined", "Joined": "Joined",
"Key": "Key", "Key": "Key",
"Key No": "Key No", "Key No": "Key No",
"LEVEL TYPE": "LEVEL TYPE",
"LINE Pay Direct": "LINE Pay Direct",
"LINE Pay Direct Settings Description": "LINE Pay Official Direct Connection Settings",
"LINE_MERCHANT_ID": "LINE_MERCHANT_ID",
"LIVE": "LIVE",
"Last Heartbeat": "Last Heartbeat", "Last Heartbeat": "Last Heartbeat",
"Last Page": "Last Page",
"Last Signal": "Last Signal", "Last Signal": "Last Signal",
"Last Time": "Last Time",
"Last Updated": "Last Updated", "Last Updated": "Last Updated",
"Level": "Level", "Level": "Level",
"line": "Line Management",
"Line Coupons": "Line Coupons", "Line Coupons": "Line Coupons",
"Line Machines": "Line Machines", "Line Machines": "Line Machines",
"Line Management": "Line Management", "Line Management": "Line Management",
"Line Members": "Line Members", "Line Members": "Line Members",
"Line Official Account": "Line Official Account", "Line Official Account": "Line Official Account",
"Line Orders": "Line Orders", "Line Orders": "Line Orders",
"LINE Pay Direct": "LINE Pay Direct",
"LINE Pay Direct Settings Description": "LINE Pay Official Direct Connection Settings",
"Line Permissions": "Line Permissions", "Line Permissions": "Line Permissions",
"Line Products": "Line Products", "Line Products": "Line Products",
"LINE_MERCHANT_ID": "LINE_MERCHANT_ID", "Loading machines...": "Loading machines...",
"LIVE": "LIVE", "Loading...": "Loading...",
"Location": "Location", "Location": "Location",
"Locked Page": "Locked Page",
"Login History": "Login History", "Login History": "Login History",
"Logout": "Logout", "Logout": "Logout",
"Logs": "Logs", "Logs": "Logs",
"Machine Count": "Machine Count", "Machine Count": "Machine Count",
"Machine created successfully.": "Machine created successfully.",
"Machine Details": "Machine Details", "Machine Details": "Machine Details",
"Machine Images": "Machine Images", "Machine Images": "Machine Images",
"Machine images updated successfully.": "Machine images updated successfully.",
"Machine Info": "Machine Info", "Machine Info": "Machine Info",
"Machine Information": "Machine Information",
"Machine List": "Machine List", "Machine List": "Machine List",
"Machine Login Logs": "Machine Login Logs",
"Machine Logs": "Machine Logs", "Machine Logs": "Machine Logs",
"Machine Management": "Machine Management", "Machine Management": "Machine Management",
"Machine Management Permissions": "Machine Management Permissions", "Machine Management Permissions": "Machine Management Permissions",
"Machine Model": "Machine Model", "Machine Model": "Machine Model",
"Machine model created successfully.": "Machine model created successfully.",
"Machine model deleted successfully.": "Machine model deleted successfully.",
"Machine Model Settings": "Machine Model Settings", "Machine Model Settings": "Machine Model Settings",
"Machine model updated successfully.": "Machine model updated successfully.",
"Machine Name": "Machine Name", "Machine Name": "Machine Name",
"Machine Permissions": "Machine Permissions", "Machine Permissions": "Machine Permissions",
"Machine Reports": "Machine Reports", "Machine Reports": "Machine Reports",
"Machine Restart": "Machine Restart", "Machine Restart": "Machine Restart",
"Machine Settings": "Machine Settings", "Machine Settings": "Machine Settings",
"Machine settings updated successfully.": "Machine settings updated successfully.", "Machine Status": "Machine Status",
"Machine Status List": "Machine Status List", "Machine Status List": "Machine Status List",
"Machine Stock": "Machine Stock", "Machine Stock": "Machine Stock",
"machines": "Machine Management", "Machine created successfully.": "Machine created successfully.",
"Machine images updated successfully.": "Machine images updated successfully.",
"Machine model created successfully.": "Machine model created successfully.",
"Machine model deleted successfully.": "Machine model deleted successfully.",
"Machine model updated successfully.": "Machine model updated successfully.",
"Machine settings updated successfully.": "Machine settings updated successfully.",
"Machines": "Machines", "Machines": "Machines",
"Machines Online": "在線機台數",
"Maintenance Records": "Maintenance Records", "Maintenance Records": "Maintenance Records",
"Manage Account Access": "管理帳號存取",
"Manage Expiry": "Manage Expiry",
"Manage administrative and tenant accounts": "Manage administrative and tenant accounts", "Manage administrative and tenant accounts": "Manage administrative and tenant accounts",
"Manage all tenant accounts and validity": "Manage all tenant accounts and validity", "Manage all tenant accounts and validity": "Manage all tenant accounts and validity",
"Manage your machine fleet and operational data": "Manage your machine fleet and operational data",
"Manage your profile information, security settings, and login history": "Manage your profile information, security settings, and login history", "Manage your profile information, security settings, and login history": "Manage your profile information, security settings, and login history",
"Management of operational parameters": "機台運作參數管理",
"Management of operational parameters and models": "Management of operational parameters and models", "Management of operational parameters and models": "Management of operational parameters and models",
"Max 3": "Max 3", "Max 3": "Max 3",
"Member & External": "Member & External", "Member & External": "Member & External",
"Member List": "Member List", "Member List": "Member List",
"Member Management": "Member Management", "Member Management": "Member Management",
"Member System": "Member System", "Member System": "Member System",
"members": "Member Management",
"Membership Tiers": "Membership Tiers", "Membership Tiers": "Membership Tiers",
"Menu Permissions": "Menu Permissions", "Menu Permissions": "Menu Permissions",
"Merchant IDs": "Merchant IDs", "Merchant IDs": "Merchant IDs",
"Merchant payment gateway settings management": "Merchant payment gateway settings management", "Merchant payment gateway settings management": "Merchant payment gateway settings management",
"Message": "Message", "Message": "Message",
"Message Content": "Message Content", "Message Content": "Message Content",
"Message Display": "Message Display",
"Min 8 characters": "Min 8 characters", "Min 8 characters": "Min 8 characters",
"Model": "Model", "Model": "Model",
"Model Name": "Model Name", "Model Name": "Model Name",
"Models": "Models", "Models": "Models",
"Modifying your own administrative permissions may result in losing access to certain system functions.": "Modifying your own administrative permissions may result in losing access to certain system functions.", "Modifying your own administrative permissions may result in losing access to certain system functions.": "Modifying your own administrative permissions may result in losing access to certain system functions.",
"Monitor events and system activity across your vending fleet.": "Monitor events and system activity across your vending fleet.", "Monitor events and system activity across your vending fleet.": "Monitor events and system activity across your vending fleet.",
"Monthly cumulative revenue overview": "Monthly cumulative revenue overview",
"Monthly Transactions": "Monthly Transactions", "Monthly Transactions": "Monthly Transactions",
"Monthly cumulative revenue overview": "Monthly cumulative revenue overview",
"Name": "Name", "Name": "Name",
"Never Connected": "Never Connected", "Never Connected": "Never Connected",
"New Password": "New Password", "New Password": "New Password",
"New Password (leave blank to keep current)": "New Password (leave blank to keep current)", "New Password (leave blank to keep current)": "New Password (leave blank to keep current)",
"New Sub Account Role": "新增子帳號角色",
"Next": "Next", "Next": "Next",
"No Invoice": "No Invoice",
"No accounts found": "No accounts found", "No accounts found": "No accounts found",
"No alert summary": "No alert summary", "No alert summary": "No alert summary",
"No configurations found": "No configurations found", "No configurations found": "No configurations found",
@@ -271,37 +312,54 @@
"No data available": "No data available", "No data available": "No data available",
"No file uploaded.": "No file uploaded.", "No file uploaded.": "No file uploaded.",
"No images uploaded": "No images uploaded", "No images uploaded": "No images uploaded",
"No Invoice": "No Invoice",
"No location set": "No location set", "No location set": "No location set",
"No login history yet": "No login history yet", "No login history yet": "No login history yet",
"No logs found": "No logs found", "No logs found": "No logs found",
"No machines assigned": "未分配機台",
"No machines available": "No machines available",
"No machines available in this company.": "此客戶目前沒有可供分配的機台。",
"No matching logs found": "No matching logs found", "No matching logs found": "No matching logs found",
"No permissions": "No permissions", "No permissions": "No permissions",
"No roles found.": "No roles found.", "No roles found.": "No roles found.",
"No slots found": "No slots found",
"No users found": "No users found", "No users found": "No users found",
"None": "None", "None": "None",
"Normal": "Normal",
"Not Used": "Not Used", "Not Used": "Not Used",
"Not Used Description": "不使用第三方支付介接",
"Notes": "Notes", "Notes": "Notes",
"of": "of", "OEE Score": "OEE 綜合得分",
"OEE.Activity": "營運活動",
"OEE.Errors": "異常",
"OEE.Hours": "小時",
"OEE.Orders": "訂單",
"OEE.Sales": "銷售",
"Offline": "Offline", "Offline": "Offline",
"Offline Machines": "Offline Machines", "Offline Machines": "Offline Machines",
"Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.", "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.",
"Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.", "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.",
"Online": "Online", "Online": "Online",
"Online Duration": "累積連線時數",
"Online Machines": "Online Machines", "Online Machines": "Online Machines",
"Only system roles can be assigned to platform administrative accounts.": "Only system roles can be assigned to platform administrative accounts.", "Only system roles can be assigned to platform administrative accounts.": "Only system roles can be assigned to platform administrative accounts.",
"Operational Parameters": "Operational Parameters", "Operational Parameters": "Operational Parameters",
"Operations": "Operations", "Operations": "Operations",
"Optimal": "Optimal",
"Optimized for display. Supported formats: JPG, PNG, WebP.": "Optimized for display. Supported formats: JPG, PNG, WebP.", "Optimized for display. Supported formats: JPG, PNG, WebP.": "Optimized for display. Supported formats: JPG, PNG, WebP.",
"Optional": "Optional", "Optional": "Optional",
"Order Management": "Order Management", "Order Management": "Order Management",
"Orders": "Orders", "Orders": "Orders",
"Other Permissions": "其他權限",
"Others": "Others", "Others": "Others",
"Owner": "Owner", "Owner": "Owner",
"Parameters": "Parameters",
"PARTNER_KEY": "PARTNER_KEY", "PARTNER_KEY": "PARTNER_KEY",
"PI_MERCHANT_ID": "PI_MERCHANT_ID",
"PS_MERCHANT_ID": "PS_MERCHANT_ID",
"Parameters": "Parameters",
"Pass Code": "Pass Code",
"Pass Codes": "Pass Codes", "Pass Codes": "Pass Codes",
"Password": "Password", "Password": "Password",
"Password updated successfully.": "密碼已成功變更。",
"Payment & Invoice": "Payment & Invoice", "Payment & Invoice": "Payment & Invoice",
"Payment Buffer Seconds": "Payment Buffer Seconds", "Payment Buffer Seconds": "Payment Buffer Seconds",
"Payment Config": "Payment Config", "Payment Config": "Payment Config",
@@ -309,38 +367,47 @@
"Payment Configuration created successfully.": "Payment Configuration created successfully.", "Payment Configuration created successfully.": "Payment Configuration created successfully.",
"Payment Configuration deleted successfully.": "Payment Configuration deleted successfully.", "Payment Configuration deleted successfully.": "Payment Configuration deleted successfully.",
"Payment Configuration updated successfully.": "Payment Configuration updated successfully.", "Payment Configuration updated successfully.": "Payment Configuration updated successfully.",
"Payment Selection": "Payment Selection",
"Pending": "Pending",
"Performance": "效能 (Performance)",
"Permanent": "Permanent", "Permanent": "Permanent",
"Permanently Delete Account": "Permanently Delete Account", "Permanently Delete Account": "Permanently Delete Account",
"Permission Settings": "Permission Settings", "Permission Settings": "Permission Settings",
"Permissions": "Permissions", "Permissions": "Permissions",
"permissions": "Permission Settings",
"Phone": "Phone", "Phone": "Phone",
"Photo Slot": "Photo Slot", "Photo Slot": "Photo Slot",
"PI_MERCHANT_ID": "PI_MERCHANT_ID", "Pickup Code": "Pickup Code",
"Pickup Codes": "Pickup Codes", "Pickup Codes": "Pickup Codes",
"Please check the following errors:": "Please check the following errors:", "Please check the following errors:": "Please check the following errors:",
"Please check the form for errors.": "Please check the form for errors.", "Please check the form for errors.": "Please check the form for errors.",
"Please select a machine to view metrics": "請選擇機台以查看數據",
"Point Rules": "Point Rules", "Point Rules": "Point Rules",
"Point Settings": "Point Settings", "Point Settings": "Point Settings",
"Previous": "Previous", "Previous": "Previous",
"Product Management": "Product Management", "Product Management": "Product Management",
"Product Reports": "Product Reports", "Product Reports": "Product Reports",
"Product Status": "商品狀態",
"Profile": "Profile", "Profile": "Profile",
"Profile Information": "Profile Information", "Profile Information": "Profile Information",
"Profile Settings": "Profile Settings", "Profile Settings": "Profile Settings",
"Profile updated successfully.": "Profile updated successfully.", "Profile updated successfully.": "Profile updated successfully.",
"Promotions": "Promotions", "Promotions": "Promotions",
"Protected": "Protected", "Protected": "Protected",
"PS_MERCHANT_ID": "PS_MERCHANT_ID",
"Purchase Audit": "Purchase Audit", "Purchase Audit": "Purchase Audit",
"Purchase Finished": "Purchase Finished",
"Purchases": "Purchases", "Purchases": "Purchases",
"Purchasing": "Purchasing",
"Quality": "品質 (Quality)",
"Questionnaire": "Questionnaire", "Questionnaire": "Questionnaire",
"Quick Expiry Check": "Quick Expiry Check",
"Quick Select": "快速選取",
"Quick search...": "Quick search...", "Quick search...": "Quick search...",
"Real-time monitoring across all machines": "Real-time monitoring across all machines", "Real-time OEE analysis awaits": "即時 OEE 分析預備中",
"Real-time Operation Logs (Last 50)": "Real-time Operation Logs (Last 50)", "Real-time Operation Logs (Last 50)": "Real-time Operation Logs (Last 50)",
"Real-time monitoring across all machines": "Real-time monitoring across all machines",
"Real-time status monitoring": "Real-time status monitoring", "Real-time status monitoring": "Real-time status monitoring",
"Receipt Printing": "Receipt Printing",
"Recent Login": "Recent Login", "Recent Login": "Recent Login",
"remote": "Remote Management",
"Remote Change": "Remote Change", "Remote Change": "Remote Change",
"Remote Checkout": "Remote Checkout", "Remote Checkout": "Remote Checkout",
"Remote Dispense": "Remote Dispense", "Remote Dispense": "Remote Dispense",
@@ -348,46 +415,58 @@
"Remote Management": "Remote Management", "Remote Management": "Remote Management",
"Remote Permissions": "Remote Permissions", "Remote Permissions": "Remote Permissions",
"Replenishment Audit": "Replenishment Audit", "Replenishment Audit": "Replenishment Audit",
"Replenishment Page": "Replenishment Page",
"Replenishment Records": "Replenishment Records", "Replenishment Records": "Replenishment Records",
"Replenishments": "Replenishments", "Replenishments": "Replenishments",
"reservation": "Reservation System",
"Reservation Members": "Reservation Members", "Reservation Members": "Reservation Members",
"Reservation System": "Reservation System", "Reservation System": "Reservation System",
"Reservations": "Reservations", "Reservations": "Reservations",
"Returns": "Returns", "Returns": "Returns",
"Risk": "Risk",
"Role": "Role", "Role": "Role",
"Role created successfully.": "Role created successfully.", "Role Identification": "Role Identification",
"Role deleted successfully.": "Role deleted successfully.",
"Role Management": "Role Permission Management", "Role Management": "Role Permission Management",
"Role Name": "Role Name", "Role Name": "Role Name",
"Role name already exists in this company.": "Role name already exists in this company.",
"Role not found.": "Role not found.",
"Role Permissions": "Role Permissions", "Role Permissions": "Role Permissions",
"Role Settings": "Role Permissions", "Role Settings": "Role Permissions",
"Role Type": "Role Type", "Role Type": "Role Type",
"Role created successfully.": "Role created successfully.",
"Role deleted successfully.": "Role deleted successfully.",
"Role name already exists in this company.": "Role name already exists in this company.",
"Role not found.": "Role not found.",
"Role updated successfully.": "Role updated successfully.", "Role updated successfully.": "Role updated successfully.",
"Roles": "Role Permissions", "Roles": "Role Permissions",
"roles": "Role Permissions",
"Roles scoped to specific customer companies.": "Roles scoped to specific customer companies.", "Roles scoped to specific customer companies.": "Roles scoped to specific customer companies.",
"Running Status": "Running Status", "Running Status": "Running Status",
"SYSTEM": "SYSTEM",
"Sales": "Sales", "Sales": "Sales",
"sales": "Sales Management", "Sales Activity": "銷售活動",
"Sales Management": "Sales Management", "Sales Management": "Sales Management",
"Sales Permissions": "Sales Permissions", "Sales Permissions": "Sales Permissions",
"Sales Records": "Sales Records", "Sales Records": "Sales Records",
"Save": "Save", "Save": "Save",
"Save Changes": "Save Changes", "Save Changes": "Save Changes",
"Save Config": "Save Config", "Save Config": "Save Config",
"Save Permissions": "儲存權限",
"Saved.": "Saved.", "Saved.": "Saved.",
"Saving...": "儲存中...",
"Scale level and access control": "層級與存取控制",
"Search configurations...": "Search configurations...", "Search configurations...": "Search configurations...",
"Search customers...": "Search customers...", "Search customers...": "Search customers...",
"Search machines by name or serial...": "Search machines by name or serial...",
"Search machines...": "Search machines...", "Search machines...": "Search machines...",
"Search models...": "Search models...", "Search models...": "Search models...",
"Search roles...": "Search roles...", "Search roles...": "Search roles...",
"Search users...": "Search users...", "Search users...": "Search users...",
"Select All": "全選",
"Select Company": "Select Company", "Select Company": "Select Company",
"Select Machine": "選擇機台",
"Select Machine to view metrics": "請選擇機台以查看指標",
"Select Model": "Select Model", "Select Model": "Select Model",
"Select Owner": "Select Owner", "Select Owner": "Select Owner",
"Select a machine to deep dive": "請選擇機台以開始深度分析",
"Selected": "Selected",
"Selected Date": "查詢日期",
"Serial & Version": "Serial & Version", "Serial & Version": "Serial & Version",
"Serial No": "Serial No", "Serial No": "Serial No",
"Serial Number": "Serial Number", "Serial Number": "Serial Number",
@@ -396,12 +475,15 @@
"Showing :from to :to of :total items": "Showing :from to :to of :total items", "Showing :from to :to of :total items": "Showing :from to :to of :total items",
"Sign in to your account": "Sign in to your account", "Sign in to your account": "Sign in to your account",
"Signed in as": "Signed in as", "Signed in as": "Signed in as",
"Slot": "Slot",
"Slot Mechanism (default: Conveyor, check for Spring)": "Slot Mechanism (default: Conveyor, check for Spring)", "Slot Mechanism (default: Conveyor, check for Spring)": "Slot Mechanism (default: Conveyor, check for Spring)",
"Slot Status": "Slot Status",
"Slot Test": "Slot Test",
"Some fields need attention": "Some fields need attention", "Some fields need attention": "Some fields need attention",
"Special Permission": "Special Permission", "Special Permission": "Special Permission",
"special-permission": "Special Permission",
"Staff Stock": "Staff Stock", "Staff Stock": "Staff Stock",
"Status": "Status", "Status": "Status",
"Status / Temp / Sub / Card / Scan": "Status / Temp / Sub / Card / Scan",
"Stock Management": "Stock Management", "Stock Management": "Stock Management",
"Store Gifts": "Store Gifts", "Store Gifts": "Store Gifts",
"Store ID": "Store ID", "Store ID": "Store ID",
@@ -410,12 +492,15 @@
"Sub Account Management": "Sub Account Management", "Sub Account Management": "Sub Account Management",
"Sub Account Roles": "Sub Account Roles", "Sub Account Roles": "Sub Account Roles",
"Sub Accounts": "Sub Accounts", "Sub Accounts": "Sub Accounts",
"Sub-actions": "子項目",
"Sub-machine Status Request": "Sub-machine Status",
"Success": "Success", "Success": "Success",
"Super Admin": "Super Admin", "Super Admin": "Super Admin",
"Super-admin role cannot be assigned to tenant accounts.": "Super-admin role cannot be assigned to tenant accounts.", "Super-admin role cannot be assigned to tenant accounts.": "Super-admin role cannot be assigned to tenant accounts.",
"Survey Analysis": "Survey Analysis", "Survey Analysis": "Survey Analysis",
"SYSTEM": "SYSTEM", "System Default": "System Default",
"System Level": "System Level", "System Level": "System Level",
"System Official": "System Official",
"System Role": "System Role", "System Role": "System Role",
"System role name cannot be modified.": "System role name cannot be modified.", "System role name cannot be modified.": "System role name cannot be modified.",
"System roles cannot be deleted by tenant administrators.": "System roles cannot be deleted by tenant administrators.", "System roles cannot be deleted by tenant administrators.": "System roles cannot be deleted by tenant administrators.",
@@ -425,34 +510,40 @@
"Systems Initializing": "Systems Initializing", "Systems Initializing": "Systems Initializing",
"TapPay Integration": "TapPay Integration", "TapPay Integration": "TapPay Integration",
"TapPay Integration Settings Description": "TapPay Payment Integration Settings", "TapPay Integration Settings Description": "TapPay Payment Integration Settings",
"Target": "目標",
"Tax ID (Optional)": "Tax ID (Optional)", "Tax ID (Optional)": "Tax ID (Optional)",
"Temperature": "Temperature", "Temperature": "Temperature",
"TermID": "TermID", "TermID": "TermID",
"The image is too large. Please upload an image smaller than 1MB.": "The image is too large. Please upload an image smaller than 1MB.",
"The Super Admin role cannot be deleted.": "The Super Admin role cannot be deleted.", "The Super Admin role cannot be deleted.": "The Super Admin role cannot be deleted.",
"The Super Admin role is immutable.": "The Super Admin role is immutable.", "The Super Admin role is immutable.": "The Super Admin role is immutable.",
"The Super Admin role name cannot be modified.": "The Super Admin role name cannot be modified.", "The Super Admin role name cannot be modified.": "The Super Admin role name cannot be modified.",
"The image is too large. Please upload an image smaller than 1MB.": "The image is too large. Please upload an image smaller than 1MB.",
"This role belongs to another company and cannot be assigned.": "This role belongs to another company and cannot be assigned.", "This role belongs to another company and cannot be assigned.": "This role belongs to another company and cannot be assigned.",
"Time": "Time", "Time": "Time",
"Time Slots": "Time Slots", "Time Slots": "Time Slots",
"Timer": "Timer", "Timer": "Timer",
"Timestamp": "Timestamp", "Timestamp": "Timestamp",
"to": "to", "To": "To",
"Today Cumulative Sales": "Today Cumulative Sales", "Today Cumulative Sales": "Today Cumulative Sales",
"Today's Transactions": "Today's Transactions", "Today's Transactions": "Today's Transactions",
"Total Connected": "Total Connected", "Total Connected": "Total Connected",
"Total Customers": "Total Customers", "Total Customers": "Total Customers",
"Total items": "Total items: :count", "Total Daily Sales": "本日累計銷量",
"Total Logins": "Total Logins", "Total Logins": "Total Logins",
"Total Selected": "已選擇總數",
"Total Slots": "Total Slots",
"Total items": "Total items: :count",
"Transfer Audit": "Transfer Audit", "Transfer Audit": "Transfer Audit",
"Transfers": "Transfers", "Transfers": "Transfers",
"Tutorial Page": "Tutorial Page",
"Type": "Type", "Type": "Type",
"UI Elements": "UI Elements", "UI Elements": "UI Elements",
"Unified Operational Timeline": "整合式營運時序圖",
"Unknown": "Unknown", "Unknown": "Unknown",
"Update": "Update", "Update": "Update",
"Update Customer": "Update Customer", "Update Customer": "Update Customer",
"Update existing role and permissions.": "Update existing role and permissions.",
"Update Password": "Update Password", "Update Password": "Update Password",
"Update existing role and permissions.": "Update existing role and permissions.",
"Update your account's profile information and email address.": "Update your account's profile information and email address.", "Update your account's profile information and email address.": "Update your account's profile information and email address.",
"Upload New Images": "Upload New Images", "Upload New Images": "Upload New Images",
"Uploading new images will replace all existing images.": "Uploading new images will replace all existing images.", "Uploading new images will replace all existing images.": "Uploading new images will replace all existing images.",
@@ -461,59 +552,90 @@
"Username": "Username", "Username": "Username",
"Users": "Users", "Users": "Users",
"Utilization Rate": "Utilization Rate", "Utilization Rate": "Utilization Rate",
"Utilization Timeline": "稼動時序",
"Utilization, OEE and Operational Intelligence": "稼動率、OEE 與營運情報",
"Valid Until": "Valid Until", "Valid Until": "Valid Until",
"Vending Page": "Vending Page",
"Venue Management": "Venue Management", "Venue Management": "Venue Management",
"View Details": "View Details", "View Details": "View Details",
"View Logs": "View Logs", "View Logs": "View Logs",
"vs Yesterday": "vs Yesterday", "Waiting for Payment": "Waiting for Payment",
"Warehouse List": "Warehouse List", "Warehouse List": "Warehouse List",
"Warehouse List (All)": "Warehouse List (All)", "Warehouse List (All)": "Warehouse List (All)",
"Warehouse List (Individual)": "Warehouse List (Individual)", "Warehouse List (Individual)": "Warehouse List (Individual)",
"Warehouse Management": "Warehouse Management", "Warehouse Management": "Warehouse Management",
"Warehouse Permissions": "Warehouse Permissions", "Warehouse Permissions": "Warehouse Permissions",
"warehouses": "Warehouse Management",
"Warning": "Warning", "Warning": "Warning",
"Warning: You are editing your own role!": "Warning: You are editing your own role!", "Warning: You are editing your own role!": "Warning: You are editing your own role!",
"Welcome Gift": "Welcome Gift", "Welcome Gift": "Welcome Gift",
"Welcome Gift Status": "Welcome Gift Status",
"Yesterday": "Yesterday", "Yesterday": "Yesterday",
"You cannot assign permissions you do not possess.": "You cannot assign permissions you do not possess.", "You cannot assign permissions you do not possess.": "You cannot assign permissions you do not possess.",
"You cannot delete your own account.": "You cannot delete your own account.", "You cannot delete your own account.": "You cannot delete your own account.",
"Your email address is unverified.": "Your email address is unverified.", "Your email address is unverified.": "Your email address is unverified.",
"Your recent account activity": "Your recent account activity", "Your recent account activity": "Your recent account activity",
"menu.data-config": "Data Configuration", "accounts": "Account Management",
"menu.data-config.sub-accounts": "Sub Account Management", "admin": "管理員",
"menu.data-config.sub-account-roles": "Sub Account Roles", "analysis": "Analysis Management",
"app": "APP Management",
"audit": "Audit Management",
"basic-settings": "Basic Settings",
"basic.machines": "機台設定",
"basic.payment-configs": "客戶金流設定",
"companies": "Customer Management",
"data-config": "Data Configuration",
"data-config.sub-account-roles": "子帳號角色",
"data-config.sub-accounts": "子帳號管理",
"e.g. John Doe": "e.g. John Doe",
"e.g. TWSTAR": "e.g. TWSTAR",
"e.g. Taiwan Star": "e.g. Taiwan Star",
"e.g. johndoe": "e.g. johndoe",
"e.g., Company Standard Pay": "e.g., Company Standard Pay",
"e.g., Taipei Station": "e.g., Taipei Station",
"files selected": "files selected",
"items": "items",
"john@example.com": "john@example.com",
"line": "Line Management",
"machines": "Machine Management",
"members": "Member Management",
"menu.analysis": "Analysis Management",
"menu.app": "APP Management",
"menu.audit": "Audit Management",
"menu.basic": "基本管理",
"menu.basic-settings": "Basic Settings", "menu.basic-settings": "Basic Settings",
"menu.basic.machines": "Machine Settings", "menu.basic.machines": "Machine Settings",
"menu.basic.payment-configs": "Customer Payment Config", "menu.basic.payment-configs": "Customer Payment Config",
"menu.permission": "Permission Settings", "menu.data-config": "Data Configuration",
"menu.permissions.companies": "Customer Management", "menu.data-config.sub-account-roles": "Sub Account Roles",
"menu.permissions.accounts": "Account Management", "menu.data-config.sub-accounts": "Sub Account Management",
"menu.permissions.roles": "Role Permissions",
"menu.members": "Member Management",
"menu.machines": "Machine Management",
"menu.app": "APP Management",
"menu.warehouses": "Warehouse Management",
"menu.sales": "Sales Management",
"menu.analysis": "Analysis Management",
"menu.audit": "Audit Management",
"menu.remote": "Remote Management",
"menu.line": "Line Management", "menu.line": "Line Management",
"menu.machines": "Machine Management",
"menu.machines.list": "Machine List",
"menu.members": "Member Management",
"menu.permission": "Permission Settings",
"menu.permissions": "權限管理",
"menu.permissions.accounts": "Account Management",
"menu.permissions.companies": "Customer Management",
"menu.permissions.roles": "Role Permissions",
"menu.remote": "Remote Management",
"menu.reservation": "Reservation System", "menu.reservation": "Reservation System",
"menu.sales": "Sales Management",
"menu.special-permission": "Special Permission", "menu.special-permission": "Special Permission",
"Edit Role Permissions": "Edit Role Permissions", "menu.warehouses": "Warehouse Management",
"Role Identification": "Role Identification", "of": "of",
"LEVEL TYPE": "LEVEL TYPE", "permissions": "Permission Settings",
"Affiliated Unit": "Affiliated Unit", "permissions.accounts": "帳號管理",
"System Official": "System Official", "permissions.companies": "客戶管理",
"Full Access": "Full Access", "permissions.roles": "角色權限管理",
"System Default": "System Default", "remote": "Remote Management",
"Authorized Machines": "Authorized Machines", "reservation": "Reservation System",
"Assign": "Assign", "roles": "Role Permissions",
"No machines available": "No machines available", "sales": "Sales Management",
"Selected": "Selected", "special-permission": "Special Permission",
"Failed to fetch machine data.": "Failed to fetch machine data.", "super-admin": "超級管理員",
"Failed to save permissions.": "Failed to save permissions.", "to": "to",
"An error occurred while saving.": "An error occurred while saving.", "user": "一般用戶",
"Loading machines...": "Loading machines..." "vs Yesterday": "vs Yesterday",
"warehouses": "Warehouse Management",
"待填寫": "Pending"
} }

View File

@@ -1,12 +1,22 @@
{ {
"A new verification link has been sent to your email address.": "新しい確認リンクがメールアドレスに送信されました。", "A new verification link has been sent to your email address.": "新しい確認リンクがメールアドレスに送信されました。",
"Account created successfully.": "アカウントが正常に作成されました。", "AI Prediction": "AI予測",
"Account deleted successfully.": "アカウントが正常に削除されました。", "API Token": "API キー",
"APK Versions": "APKバージョン",
"APP Features": "APP機能",
"APP Management": "APP管理",
"APP Version": "APPバージョン",
"APP_ID": "APP_ID",
"APP_KEY": "APP_KEY",
"Account": "帳號",
"Account Management": "アカウント管理", "Account Management": "アカウント管理",
"Account Name": "帳號姓名",
"Account Settings": "アカウント設定", "Account Settings": "アカウント設定",
"Account Status": "アカウント狀態", "Account Status": "アカウント狀態",
"Account created successfully.": "アカウントが正常に作成されました。",
"Account deleted successfully.": "アカウントが正常に削除されました。",
"Account updated successfully.": "アカウントが正常に更新されました。", "Account updated successfully.": "アカウントが正常に更新されました。",
"accounts": "アカウント管理", "Account:": "帳號:",
"Accounts / Machines": "アカウント / 機台", "Accounts / Machines": "アカウント / 機台",
"Action": "操作", "Action": "操作",
"Actions": "操作", "Actions": "操作",
@@ -17,14 +27,16 @@
"Add Machine Model": "機台型號を追加", "Add Machine Model": "機台型號を追加",
"Add Role": "ロールを追加", "Add Role": "ロールを追加",
"Admin": "管理者", "Admin": "管理者",
"Admin display name": "管理者表示名",
"Admin Name": "管理者名", "Admin Name": "管理者名",
"Admin Page": "管理画面",
"Admin Sellable Products": "管理者販売可能商品", "Admin Sellable Products": "管理者販売可能商品",
"Admin display name": "管理者表示名",
"Administrator": "管理者", "Administrator": "管理者",
"Advertisement Management": "廣告管理", "Advertisement Management": "廣告管理",
"Affiliated Unit": "所属ユニット",
"Affiliation": "所属", "Affiliation": "所属",
"AI Prediction": "AI予測",
"Alert Summary": "アラート概要", "Alert Summary": "アラート概要",
"Alerts": "中心告警",
"Alerts Pending": "アラート待機中", "Alerts Pending": "アラート待機中",
"All": "すべて", "All": "すべて",
"All Affiliations": "全ての所属", "All Affiliations": "全ての所属",
@@ -32,38 +44,40 @@
"All Levels": "すべてのレベル", "All Levels": "すべてのレベル",
"All Machines": "すべての機体", "All Machines": "すべての機体",
"All Times System Timezone": "時間はすべてシステムタイムゾーンです", "All Times System Timezone": "時間はすべてシステムタイムゾーンです",
"analysis": "分析管理", "An error occurred while saving.": "儲存時發生錯誤。",
"Analysis Management": "分析管理", "Analysis Management": "分析管理",
"Analysis Permissions": "分析管理權限", "Analysis Permissions": "分析管理權限",
"API Token": "API キー", "Apply to all identical products in this machine": "同步套用至此機台內的所有相同商品",
"APK Versions": "APKバージョン",
"app": "APP管理",
"APP Features": "APP機能",
"APP Management": "APP管理",
"APP_ID": "APP_ID",
"APP_KEY": "APP_KEY",
"Are you sure to delete this customer?": "この顧客を削除してもよろしいですか?", "Are you sure to delete this customer?": "この顧客を削除してもよろしいですか?",
"Are you sure you want to delete this account?": "このアカウントを削除してもよろしいですか?", "Are you sure you want to delete this account?": "このアカウントを削除してもよろしいですか?",
"Are you sure you want to delete this account? This action cannot be undone.": "このアカウントを削除してもよろしいですか?この操作は元に戻せません。", "Are you sure you want to delete this account? This action cannot be undone.": "このアカウントを削除してもよろしいですか?この操作は元に戻せません。",
"Are you sure you want to delete this configuration?": "您確定要刪除此金流配置嗎?",
"Are you sure you want to delete this configuration? This action cannot be undone.": "この設定を削除してもよろしいですか?この操作は元に戻せません。", "Are you sure you want to delete this configuration? This action cannot be undone.": "この設定を削除してもよろしいですか?この操作は元に戻せません。",
"Are you sure you want to delete this item? This action cannot be undone.": "この項目を削除してもよろしいですか?この操作は元に戻せません。", "Are you sure you want to delete this item? This action cannot be undone.": "この項目を削除してもよろしいですか?この操作は元に戻せません。",
"Are you sure you want to delete this role? This action cannot be undone.": "このロールを削除してもよろしいですか?この操作は元に戻せません。", "Are you sure you want to delete this role? This action cannot be undone.": "このロールを削除してもよろしいですか?この操作は元に戻せません。",
"Are you sure you want to delete your account?": "真的にアカウントを削除してもよろしいですか?", "Are you sure you want to delete your account?": "真的にアカウントを削除してもよろしいですか?",
"Are you sure you want to proceed? This action cannot be undone.": "您確定要繼續嗎?此操作將無法復原。",
"Are you sure?": "よろしいですか?", "Are you sure?": "よろしいですか?",
"audit": "監査管理", "Assign": "分配所屬機台",
"Assign Machines": "分配機台",
"Assigned Machines": "授權機台",
"Audit Management": "監査管理", "Audit Management": "監査管理",
"Audit Permissions": "監査管理權限", "Audit Permissions": "監査管理權限",
"Authorized Machines": "授權機台",
"Availability": "可用性 (Availability)",
"Available Machines": "可供分配的機台",
"Avatar updated successfully.": "アバターが正常に更新されました。", "Avatar updated successfully.": "アバターが正常に更新されました。",
"Badge Settings": "バッジ設定", "Badge Settings": "バッジ設定",
"Basic Information": "基本情報", "Basic Information": "基本情報",
"Basic Settings": "基本設定", "Basic Settings": "基本設定",
"basic-settings": "基本設定", "Batch No": "批號",
"Belongs To": "所属", "Belongs To": "所属",
"Belongs To Company": "所属会社", "Belongs To Company": "所属会社",
"Cancel": "キャンセル", "Cancel": "キャンセル",
"Cancel Purchase": "購入キャンセル",
"Cannot Delete Role": "ロールを削除できません",
"Cannot delete company with active accounts.": "アクティブなアカウントを持つ会社は削除できません。", "Cannot delete company with active accounts.": "アクティブなアカウントを持つ会社は削除できません。",
"Cannot delete model that is currently in use by machines.": "機台で使用中の型號は削除できません。", "Cannot delete model that is currently in use by machines.": "機台で使用中の型號は削除できません。",
"Cannot Delete Role": "ロールを削除できません",
"Cannot delete role with active users.": "アクティブなユーザーがいるロールは削除できません。", "Cannot delete role with active users.": "アクティブなユーザーがいるロールは削除できません。",
"Card Reader": "カードリーダー", "Card Reader": "カードリーダー",
"Card Reader No": "カードリーダー番号", "Card Reader No": "カードリーダー番号",
@@ -75,22 +89,24 @@
"ChannelSecret": "チャンネルシークレット", "ChannelSecret": "チャンネルシークレット",
"Checkout Time 1": "決済時間 1", "Checkout Time 1": "決済時間 1",
"Checkout Time 2": "決済時間 2", "Checkout Time 2": "決済時間 2",
"Clear Filter": "フィルターをクリア",
"Clear Stock": "在庫クリア", "Clear Stock": "在庫クリア",
"Click here to re-send the verification email.": "確認メールを再送信するにはここをクリックしてください。", "Click here to re-send the verification email.": "確認メールを再送信するにはここをクリックしてください。",
"Click to upload": "クリックしてアップロード", "Click to upload": "クリックしてアップロード",
"Close Panel": "パネルを閉じる", "Close Panel": "パネルを閉じる",
"companies": "顧客管理",
"Company": "所属顧客", "Company": "所属顧客",
"Company Code": "会社コード", "Company Code": "会社コード",
"Company Information": "会社情報", "Company Information": "会社情報",
"Company Level": "顧客レベル", "Company Level": "顧客レベル",
"Company Name": "会社名", "Company Name": "会社名",
"Config Name": "配置名稱",
"Configuration Name": "設定名称", "Configuration Name": "設定名称",
"Confirm": "確認", "Confirm": "確認",
"Confirm Deletion": "削除の確認", "Confirm Deletion": "削除の確認",
"Confirm Password": "新しいパスワード(確認)", "Confirm Password": "新しいパスワード(確認)",
"Connecting...": "接続中...", "Connecting...": "接続中...",
"Connectivity Status": "接続ステータス概況", "Connectivity Status": "接続ステータス概況",
"Connectivity vs Sales Correlation": "連線狀態與銷售關聯分析",
"Contact & Details": "連絡先と詳細", "Contact & Details": "連絡先と詳細",
"Contact Email": "連絡先メールアドレス", "Contact Email": "連絡先メールアドレス",
"Contact Name": "連絡担当者名", "Contact Name": "連絡担当者名",
@@ -98,24 +114,24 @@
"Contract Until (Optional)": "契約期限 (任意)", "Contract Until (Optional)": "契約期限 (任意)",
"Coupons": "クーポン", "Coupons": "クーポン",
"Create": "作成", "Create": "作成",
"Create a new role and assign permissions.": "新しいロールを作成し、権限を割り当てます。",
"Create Config": "設定を新規作成", "Create Config": "設定を新規作成",
"Create Machine": "機台新規作成", "Create Machine": "機台新規作成",
"Create Payment Config": "決済設定を新規作成", "Create Payment Config": "決済設定を新規作成",
"Create Role": "ロール作成", "Create Role": "ロール作成",
"Create a new role and assign permissions.": "新しいロールを作成し、権限を割り当てます。",
"Critical": "致命的",
"Current Password": "現在のパスワード", "Current Password": "現在のパスワード",
"Current Stock": "現在の在庫", "Current Stock": "現在の在庫",
"Customer created successfully.": "顧客が正常に作成されました。",
"Customer deleted successfully.": "顧客が正常に削除されました。",
"Customer Info": "顧客情報", "Customer Info": "顧客情報",
"Customer Management": "顧客管理", "Customer Management": "顧客管理",
"Customer Payment Config": "決済設定管理", "Customer Payment Config": "決済設定管理",
"Customer created successfully.": "顧客が正常に作成されました。",
"Customer deleted successfully.": "顧客が正常に削除されました。",
"Customer updated successfully.": "顧客が正常に更新されました。", "Customer updated successfully.": "顧客が正常に更新されました。",
"Danger Zone: Delete Account": "危険区域:アカウントの削除", "Danger Zone: Delete Account": "危険区域:アカウントの削除",
"Dashboard": "ダッシュボード", "Dashboard": "ダッシュボード",
"Data Configuration": "データ設定", "Data Configuration": "データ設定",
"Data Configuration Permissions": "データ設定権限", "Data Configuration Permissions": "データ設定権限",
"data-config": "データ設定",
"Day Before": "一昨日", "Day Before": "一昨日",
"Default Donate": "デフォルト寄付", "Default Donate": "デフォルト寄付",
"Default Not Donate": "デフォルト寄付しない", "Default Not Donate": "デフォルト寄付しない",
@@ -125,15 +141,14 @@
"Delete Account": "アカウントの削除", "Delete Account": "アカウントの削除",
"Delete Permanently": "完全に削除", "Delete Permanently": "完全に削除",
"Deposit Bonus": "入金ボーナス", "Deposit Bonus": "入金ボーナス",
"Deselect All": "取消全選",
"Detail": "詳細", "Detail": "詳細",
"Device Status Logs": "デバイス状態ログ",
"Disabled": "停止中", "Disabled": "停止中",
"Discord Notifications": "Discord通知", "Discord Notifications": "Discord通知",
"e.g. John Doe": "例:山田太郎", "Dispense Failed": "出庫失敗",
"e.g. johndoe": "例yamadataro", "Dispense Success": "出庫成功",
"e.g. Taiwan Star": "例:台湾スター", "Dispensing": "出庫中",
"e.g. TWSTAR": "例TWSTAR",
"e.g., Company Standard Pay": "例:標準決済組合せ",
"e.g., Taipei Station": "例:台北駅",
"E.SUN QR Scan": "玉山銀行 QR スキャン", "E.SUN QR Scan": "玉山銀行 QR スキャン",
"E.SUN QR Scan Settings Description": "玉山銀行 QR スキャン決済設定", "E.SUN QR Scan Settings Description": "玉山銀行 QR スキャン決済設定",
"EASY_MERCHANT_ID": "悠遊付 加盟店ID", "EASY_MERCHANT_ID": "悠遊付 加盟店ID",
@@ -142,11 +157,15 @@
"Edit": "編集", "Edit": "編集",
"Edit Account": "アカウントを編集", "Edit Account": "アカウントを編集",
"Edit Customer": "顧客を編集", "Edit Customer": "顧客を編集",
"Edit Expiry": "編輯效期",
"Edit Machine": "機台編集", "Edit Machine": "機台編集",
"Edit Machine Model": "機台型號を編輯", "Edit Machine Model": "機台型號を編輯",
"Edit Machine Settings": "編輯機台設定",
"Edit Payment Config": "決済設定を編集", "Edit Payment Config": "決済設定を編集",
"Edit Role": "ロール編集", "Edit Role": "ロール編集",
"Edit Role Permissions": "ロール権限の編集",
"Edit Settings": "設定編集", "Edit Settings": "設定編集",
"Edit Sub Account Role": "編輯子帳號角色",
"Email": "メールアドレス", "Email": "メールアドレス",
"Enabled/Disabled": "有効/無効", "Enabled/Disabled": "有効/無効",
"Ensure your account is using a long, random password to stay secure.": "セキュリティを維持するため、アカウントには長くランダムなパスワードを使用してください。", "Ensure your account is using a long, random password to stay secure.": "セキュリティを維持するため、アカウントには長くランダムなパスワードを使用してください。",
@@ -157,15 +176,25 @@
"Enter role name": "ロール名を入力してください", "Enter role name": "ロール名を入力してください",
"Enter serial number": "シリアル番号を入力してください", "Enter serial number": "シリアル番号を入力してください",
"Enter your password to confirm": "確認のためパスワードを入力してください", "Enter your password to confirm": "確認のためパスワードを入力してください",
"Equipment efficiency and OEE metrics": "設備效能與 OEE 綜合指標",
"Error": "エラー", "Error": "エラー",
"Expired": "期限切れ",
"Expired / Disabled": "期限切れ / 停止中", "Expired / Disabled": "期限切れ / 停止中",
"Expiry Date": "有效日期",
"Expiry Management": "有効期限管理", "Expiry Management": "有効期限管理",
"Failed to fetch machine data.": "無法取得機台資料。",
"Failed to save permissions.": "無法儲存權限設定。",
"Failed to update machine images: ": "機台画像の更新に失敗しました:", "Failed to update machine images: ": "機台画像の更新に失敗しました:",
"files selected": "ファイルを選択済み",
"Firmware Version": "ファームウェアバージョン", "Firmware Version": "ファームウェアバージョン",
"Fleet Avg OEE": "全機隊平均 OEE",
"Fleet Performance": "全機隊效能",
"From": "から",
"Full Access": "全機台授權",
"Full Name": "氏名", "Full Name": "氏名",
"Games": "ゲーム", "Games": "ゲーム",
"General permissions not linked to a specific menu.": "未連結到特定選單的一般權限。",
"Gift Definitions": "ギフト設定", "Gift Definitions": "ギフト設定",
"Global roles accessible by all administrators.": "適用於所有管理者的全域角色。",
"Got it": "了解", "Got it": "了解",
"Hardware & Network": "ハードウェアとネットワーク", "Hardware & Network": "ハードウェアとネットワーク",
"Hardware & Slots": "ハードウェアと貨道", "Hardware & Slots": "ハードウェアと貨道",
@@ -176,93 +205,106 @@
"Heating Range": "加熱時間帯", "Heating Range": "加熱時間帯",
"Heating Start Time": "加熱開始時間", "Heating Start Time": "加熱開始時間",
"Helper": "ヘルパー", "Helper": "ヘルパー",
"Home Page": "主画面",
"Info": "情報", "Info": "情報",
"Initial Admin Account": "初期管理者アカウント", "Initial Admin Account": "初期管理者アカウント",
"Initial Role": "初期ロール", "Initial Role": "初期ロール",
"Invoice Status": "発票発行状態", "Invoice Status": "発票発行状態",
"items": "個の項目",
"Items": "個の項目", "Items": "個の項目",
"JKO_MERCHANT_ID": "街口支付 加盟店ID", "JKO_MERCHANT_ID": "街口支付 加盟店ID",
"john@example.com": "john@example.com",
"Joined": "入会日", "Joined": "入会日",
"Key": "キー (Key)", "Key": "キー (Key)",
"Key No": "キー番号", "Key No": "キー番号",
"LEVEL TYPE": "層級タイプ",
"LINE Pay Direct": "LINE Pay 直結決済",
"LINE Pay Direct Settings Description": "LINE Pay 公式直結設定",
"LINE_MERCHANT_ID": "LINE Pay 加盟店ID",
"LIVE": "ライブ",
"Last Heartbeat": "最終ハートビート時間", "Last Heartbeat": "最終ハートビート時間",
"Last Page": "最終ページ",
"Last Signal": "最終信号時間", "Last Signal": "最終信号時間",
"Last Time": "最終時間",
"Last Updated": "最終更新", "Last Updated": "最終更新",
"Level": "レベル", "Level": "レベル",
"line": "Line管理",
"Line Coupons": "Lineクーポン", "Line Coupons": "Lineクーポン",
"Line Machines": "Line機台", "Line Machines": "Line機台",
"Line Management": "Line管理", "Line Management": "Line管理",
"Line Members": "Line会員", "Line Members": "Line会員",
"Line Official Account": "Line公式アカウント", "Line Official Account": "Line公式アカウント",
"Line Orders": "Line注文", "Line Orders": "Line注文",
"LINE Pay Direct": "LINE Pay 直結決済",
"LINE Pay Direct Settings Description": "LINE Pay 公式直結設定",
"Line Permissions": "Line管理權限", "Line Permissions": "Line管理權限",
"Line Products": "Line商品", "Line Products": "Line商品",
"LINE_MERCHANT_ID": "LINE Pay 加盟店ID", "Loading machines...": "正在載入機台...",
"LIVE": "ライブ", "Loading...": "読み込み中...",
"Location": "場所", "Location": "場所",
"Locked Page": "ロック画面",
"Login History": "ログイン履歴", "Login History": "ログイン履歴",
"Logout": "ログアウト", "Logout": "ログアウト",
"Logs": "ログ", "Logs": "ログ",
"Machine Count": "機台数量", "Machine Count": "機台数量",
"Machine created successfully.": "機台が正常に作成されました。",
"Machine Details": "機台詳情", "Machine Details": "機台詳情",
"Machine Images": "機台写真", "Machine Images": "機台写真",
"Machine images updated successfully.": "機台画像が正常に更新されました。",
"Machine Info": "機台情報", "Machine Info": "機台情報",
"Machine Information": "機台情報",
"Machine List": "機台リスト", "Machine List": "機台リスト",
"Machine Login Logs": "機台ログイン履歴",
"Machine Logs": "機台ログ", "Machine Logs": "機台ログ",
"Machine Management": "機台管理", "Machine Management": "機台管理",
"Machine Management Permissions": "機台管理權限", "Machine Management Permissions": "機台管理權限",
"Machine Model": "機台型號", "Machine Model": "機台型號",
"Machine model created successfully.": "機台型號が正常に作成されました。",
"Machine model deleted successfully.": "機台型號が正常に削除されました。",
"Machine Model Settings": "機台型號設定", "Machine Model Settings": "機台型號設定",
"Machine model updated successfully.": "機台型號が正常に更新されました。",
"Machine Name": "機台名", "Machine Name": "機台名",
"Machine Permissions": "機台権限", "Machine Permissions": "機台権限",
"Machine Reports": "機台レポート", "Machine Reports": "機台レポート",
"Machine Restart": "機台再起動", "Machine Restart": "機台再起動",
"Machine Settings": "機台設定", "Machine Settings": "機台設定",
"Machine settings updated successfully.": "機台設定が正常に更新されました。", "Machine Status": "機台状態",
"Machine Status List": "機台稼働状況リスト", "Machine Status List": "機台稼働状況リスト",
"Machine Stock": "機台在庫", "Machine Stock": "機台在庫",
"machines": "機台管理", "Machine created successfully.": "機台が正常に作成されました。",
"Machine images updated successfully.": "機台画像が正常に更新されました。",
"Machine model created successfully.": "機台型號が正常に作成されました。",
"Machine model deleted successfully.": "機台型號が正常に削除されました。",
"Machine model updated successfully.": "機台型號が正常に更新されました。",
"Machine settings updated successfully.": "機台設定が正常に更新されました。",
"Machines": "機台リスト", "Machines": "機台リスト",
"Machines Online": "在線機台數",
"Maintenance Records": "メンテナンス記録", "Maintenance Records": "メンテナンス記録",
"Manage Account Access": "管理帳號存取",
"Manage Expiry": "進入效期管理",
"Manage administrative and tenant accounts": "管理者およびテナントアカウントを管理します", "Manage administrative and tenant accounts": "管理者およびテナントアカウントを管理します",
"Manage all tenant accounts and validity": "すべてのテナントアカウントと有効期限を管理します", "Manage all tenant accounts and validity": "すべてのテナントアカウントと有効期限を管理します",
"Manage your machine fleet and operational data": "機台フリートと運用データの管理",
"Manage your profile information, security settings, and login history": "プロフィール情報、セキュリティ設定、ログイン履歴の管理", "Manage your profile information, security settings, and login history": "プロフィール情報、セキュリティ設定、ログイン履歴の管理",
"Management of operational parameters": "機台運作參數管理",
"Management of operational parameters and models": "運用パラメータと型番の管理", "Management of operational parameters and models": "運用パラメータと型番の管理",
"Max 3": "最大3枚", "Max 3": "最大3枚",
"Member & External": "会員と外部システム", "Member & External": "会員と外部システム",
"Member List": "会員リスト", "Member List": "会員リスト",
"Member Management": "会員管理", "Member Management": "会員管理",
"Member System": "会員システム", "Member System": "会員システム",
"members": "会員管理",
"Membership Tiers": "会員ランク", "Membership Tiers": "会員ランク",
"Menu Permissions": "メニュー権限", "Menu Permissions": "メニュー権限",
"Merchant IDs": "マーチャント ID", "Merchant IDs": "マーチャント ID",
"Merchant payment gateway settings management": "マーチャント決済ゲートウェイ設定管理", "Merchant payment gateway settings management": "マーチャント決済ゲートウェイ設定管理",
"Message": "メッセージ", "Message": "メッセージ",
"Message Content": "ログ内容", "Message Content": "ログ内容",
"Message Display": "メッセージ表示",
"Min 8 characters": "最低8文字", "Min 8 characters": "最低8文字",
"Model": "型番", "Model": "型番",
"Model Name": "型號名称", "Model Name": "型號名称",
"Models": "型番リスト", "Models": "型番リスト",
"Modifying your own administrative permissions may result in losing access to certain system functions.": "自身の管理權限を変更すると、一部のシステム機能へのアクセス權を失う可能性があります。", "Modifying your own administrative permissions may result in losing access to certain system functions.": "自身の管理權限を変更すると、一部のシステム機能へのアクセス權を失う可能性があります。",
"Monitor events and system activity across your vending fleet.": "自販機フリート全体のイベントとシステムアクティビティを監視します。", "Monitor events and system activity across your vending fleet.": "自販機フリート全体のイベントとシステムアクティビティを監視します。",
"Monthly cumulative revenue overview": "今月の累計収益概要",
"Monthly Transactions": "今月の取引統計", "Monthly Transactions": "今月の取引統計",
"Monthly cumulative revenue overview": "今月の累計収益概要",
"Name": "氏名", "Name": "氏名",
"Never Connected": "未接続", "Never Connected": "未接続",
"New Password": "新しいパスワード", "New Password": "新しいパスワード",
"New Password (leave blank to keep current)": "新しいパスワード (変更しない場合は空欄)", "New Password (leave blank to keep current)": "新しいパスワード (変更しない場合は空欄)",
"New Sub Account Role": "新增子帳號角色",
"Next": "次へ", "Next": "次へ",
"No Invoice": "発票を発行しない",
"No accounts found": "アカウントが見つかりません", "No accounts found": "アカウントが見つかりません",
"No alert summary": "アラートなし", "No alert summary": "アラートなし",
"No configurations found": "設定が見つかりません", "No configurations found": "設定が見つかりません",
@@ -270,37 +312,54 @@
"No data available": "データなし", "No data available": "データなし",
"No file uploaded.": "ファイルがアップロードされていません。", "No file uploaded.": "ファイルがアップロードされていません。",
"No images uploaded": "写真がアップロードされていません", "No images uploaded": "写真がアップロードされていません",
"No Invoice": "発票を発行しない",
"No location set": "場所が未設定です", "No location set": "場所が未設定です",
"No login history yet": "ログイン履歴はまだありません", "No login history yet": "ログイン履歴はまだありません",
"No logs found": "ログがありません", "No logs found": "ログがありません",
"No machines assigned": "未分配機台",
"No machines available": "目前沒有可供分配的機台",
"No machines available in this company.": "此客戶目前沒有可供分配的機台。",
"No matching logs found": "一致するログが見つかりません", "No matching logs found": "一致するログが見つかりません",
"No permissions": "権限項目なし", "No permissions": "権限項目なし",
"No roles found.": "ロールが見つかりませんでした。", "No roles found.": "ロールが見つかりませんでした。",
"No slots found": "未找到貨道資訊",
"No users found": "ユーザーが見つかりません", "No users found": "ユーザーが見つかりません",
"None": "なし", "None": "なし",
"Normal": "正常",
"Not Used": "未使用", "Not Used": "未使用",
"Not Used Description": "不使用第三方支付介接",
"Notes": "備考", "Notes": "備考",
"of": "件中", "OEE Score": "OEE 綜合得分",
"OEE.Activity": "營運活動",
"OEE.Errors": "異常",
"OEE.Hours": "小時",
"OEE.Orders": "訂單",
"OEE.Sales": "銷售",
"Offline": "オフライン", "Offline": "オフライン",
"Offline Machines": "オフライン機台", "Offline Machines": "オフライン機台",
"Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "アカウントが削除されると、そのすべてのリソース和データが永久に削除されます。アカウントを削除する前に、保持したいデータや情報をダウンロードしてください。", "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "アカウントが削除されると、そのすべてのリソース和データが永久に削除されます。アカウントを削除する前に、保持したいデータや情報をダウンロードしてください。",
"Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "アカウントが削除されると、すべての関連データが永久に削除されます。アカウントの永久削除を確定するため、パスワードを入力してください。", "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "アカウントが削除されると、すべての関連データが永久に削除されます。アカウントの永久削除を確定するため、パスワードを入力してください。",
"Online": "オンライン", "Online": "オンライン",
"Online Duration": "累積連線時數",
"Online Machines": "オンライン機台", "Online Machines": "オンライン機台",
"Only system roles can be assigned to platform administrative accounts.": "プラットフォーム管理アカウントにはシステムロールのみ割り当て可能です。", "Only system roles can be assigned to platform administrative accounts.": "プラットフォーム管理アカウントにはシステムロールのみ割り当て可能です。",
"Operational Parameters": "運用パラメータ", "Operational Parameters": "運用パラメータ",
"Operations": "運用設定", "Operations": "運用設定",
"Optimal": "最適",
"Optimized for display. Supported formats: JPG, PNG, WebP.": "表示用に最適化されています。対応形式JPG, PNG, WebP。", "Optimized for display. Supported formats: JPG, PNG, WebP.": "表示用に最適化されています。対応形式JPG, PNG, WebP。",
"Optional": "任意", "Optional": "任意",
"Order Management": "注文管理", "Order Management": "注文管理",
"Orders": "注文", "Orders": "注文",
"Other Permissions": "其他權限",
"Others": "その他", "Others": "その他",
"Owner": "所属会社", "Owner": "所属会社",
"Parameters": "パラメータ設定",
"PARTNER_KEY": "パートナーキー", "PARTNER_KEY": "パートナーキー",
"PI_MERCHANT_ID": "Pi 拍錢包 加盟店ID",
"PS_MERCHANT_ID": "全盈+Pay 加盟店ID",
"Parameters": "パラメータ設定",
"Pass Code": "パスコード",
"Pass Codes": "パスクード", "Pass Codes": "パスクード",
"Password": "パスワード", "Password": "パスワード",
"Password updated successfully.": "密碼已成功變更。",
"Payment & Invoice": "決済と発票", "Payment & Invoice": "決済と発票",
"Payment Buffer Seconds": "決済バッファ秒数", "Payment Buffer Seconds": "決済バッファ秒数",
"Payment Config": "決済設定", "Payment Config": "決済設定",
@@ -308,38 +367,47 @@
"Payment Configuration created successfully.": "決済設定が正常に作成されました。", "Payment Configuration created successfully.": "決済設定が正常に作成されました。",
"Payment Configuration deleted successfully.": "決済設定が正常に削除されました。", "Payment Configuration deleted successfully.": "決済設定が正常に削除されました。",
"Payment Configuration updated successfully.": "決済設定が正常に更新されました。", "Payment Configuration updated successfully.": "決済設定が正常に更新されました。",
"Payment Selection": "決済選択",
"Pending": "保留中",
"Performance": "效能 (Performance)",
"Permanent": "永久認可", "Permanent": "永久認可",
"Permanently Delete Account": "アカウントを永久に削除", "Permanently Delete Account": "アカウントを永久に削除",
"Permission Settings": "権限設定", "Permission Settings": "権限設定",
"Permissions": "権限", "Permissions": "権限",
"permissions": "權限設定",
"Phone": "電話番号", "Phone": "電話番号",
"Photo Slot": "写真スロット", "Photo Slot": "写真スロット",
"PI_MERCHANT_ID": "Pi 拍錢包 加盟店ID", "Pickup Code": "受取コード",
"Pickup Codes": "受取コード", "Pickup Codes": "受取コード",
"Please check the following errors:": "以下のエラーを確認してください:", "Please check the following errors:": "以下のエラーを確認してください:",
"Please check the form for errors.": "フォームにエラーがないか確認してください。", "Please check the form for errors.": "フォームにエラーがないか確認してください。",
"Please select a machine to view metrics": "請選擇機台以查看數據",
"Point Rules": "ポイントルール", "Point Rules": "ポイントルール",
"Point Settings": "ポイント設定", "Point Settings": "ポイント設定",
"Previous": "前へ", "Previous": "前へ",
"Product Management": "商品管理", "Product Management": "商品管理",
"Product Reports": "商品レポート", "Product Reports": "商品レポート",
"Product Status": "商品狀態",
"Profile": "プロフィール", "Profile": "プロフィール",
"Profile Information": "プロフィール情報", "Profile Information": "プロフィール情報",
"Profile Settings": "個人設定", "Profile Settings": "個人設定",
"Profile updated successfully.": "プロフィールが正常に更新されました。", "Profile updated successfully.": "プロフィールが正常に更新されました。",
"Promotions": "プロモーション", "Promotions": "プロモーション",
"Protected": "保護されています", "Protected": "保護されています",
"PS_MERCHANT_ID": "全盈+Pay 加盟店ID",
"Purchase Audit": "購入監査", "Purchase Audit": "購入監査",
"Purchase Finished": "購入終了",
"Purchases": "購入", "Purchases": "購入",
"Purchasing": "購入中",
"Quality": "品質 (Quality)",
"Questionnaire": "アンケート", "Questionnaire": "アンケート",
"Quick Expiry Check": "效期快速檢查",
"Quick Select": "快速選取",
"Quick search...": "クイック検索...", "Quick search...": "クイック検索...",
"Real-time monitoring across all machines": "全機台のリアルタイム監視", "Real-time OEE analysis awaits": "即時 OEE 分析預備中",
"Real-time Operation Logs (Last 50)": "リアルタイム操作ログ (直近 50 件)", "Real-time Operation Logs (Last 50)": "リアルタイム操作ログ (直近 50 件)",
"Real-time monitoring across all machines": "全機台のリアルタイム監視",
"Real-time status monitoring": "リアルタイムステータス監視", "Real-time status monitoring": "リアルタイムステータス監視",
"Receipt Printing": "レシート印刷",
"Recent Login": "最近のログイン", "Recent Login": "最近のログイン",
"remote": "リモート管理",
"Remote Change": "リモートお釣り", "Remote Change": "リモートお釣り",
"Remote Checkout": "リモート決済", "Remote Checkout": "リモート決済",
"Remote Dispense": "リモート出庫", "Remote Dispense": "リモート出庫",
@@ -347,44 +415,58 @@
"Remote Management": "リモート管理", "Remote Management": "リモート管理",
"Remote Permissions": "リモート管理權限", "Remote Permissions": "リモート管理權限",
"Replenishment Audit": "補充監査", "Replenishment Audit": "補充監査",
"Replenishment Page": "補充画面",
"Replenishment Records": "補充記録", "Replenishment Records": "補充記録",
"Replenishments": "補充", "Replenishments": "補充",
"reservation": "予約システム",
"Reservation Members": "予約会員", "Reservation Members": "予約会員",
"Reservation System": "予約システム", "Reservation System": "予約システム",
"Reservations": "予約", "Reservations": "予約",
"Returns": "返品", "Returns": "返品",
"Risk": "リスク",
"Role": "ロール", "Role": "ロール",
"Role created successfully.": "ロールが正常に作成されました。", "Role Identification": "ロール識別情報",
"Role deleted successfully.": "ロールが正常に削除されました。",
"Role Management": "ロール權限管理", "Role Management": "ロール權限管理",
"Role Name": "ロール名", "Role Name": "ロール名",
"Role name already exists in this company.": "この会社には同じ名前のロールが既に存在します。",
"Role not found.": "ロールが見つかりませんでした。",
"Role Permissions": "ロール權限", "Role Permissions": "ロール權限",
"Role Settings": "ロール權限", "Role Settings": "ロール權限",
"Role Type": "ロールタイプ", "Role Type": "ロールタイプ",
"Role created successfully.": "ロールが正常に作成されました。",
"Role deleted successfully.": "ロールが正常に削除されました。",
"Role name already exists in this company.": "この会社には同じ名前のロールが既に存在します。",
"Role not found.": "ロールが見つかりませんでした。",
"Role updated successfully.": "ロールが正常に更新されました。", "Role updated successfully.": "ロールが正常に更新されました。",
"Roles": "ロール權限", "Roles": "ロール權限",
"roles": "ロール權限", "Roles scoped to specific customer companies.": "適用於各個客戶單位的特定角色。",
"Running Status": "稼働状況", "Running Status": "稼働状況",
"sales": "販売管理", "SYSTEM": "システムレベル",
"Sales": "銷售管理",
"Sales Activity": "銷售活動",
"Sales Management": "販売管理", "Sales Management": "販売管理",
"Sales Permissions": "販売管理権限", "Sales Permissions": "販売管理権限",
"Sales Records": "販売記録", "Sales Records": "販売記録",
"Save": "変更を保存", "Save": "変更を保存",
"Save Changes": "変更を保存", "Save Changes": "変更を保存",
"Save Config": "設定を保存", "Save Config": "設定を保存",
"Save Permissions": "儲存權限",
"Saved.": "保存されました", "Saved.": "保存されました",
"Saving...": "儲存中...",
"Scale level and access control": "層級與存取控制",
"Search configurations...": "設定を検索...", "Search configurations...": "設定を検索...",
"Search customers...": "顧客を検索...", "Search customers...": "顧客を検索...",
"Search machines by name or serial...": "名称またはシリアル番号で検索...",
"Search machines...": "機台を検索...", "Search machines...": "機台を検索...",
"Search models...": "型番を検索...", "Search models...": "型番を検索...",
"Search roles...": "ロールを検索...", "Search roles...": "ロールを検索...",
"Search users...": "ユーザーを検索...", "Search users...": "ユーザーを検索...",
"Select All": "全選",
"Select Company": "会社を選択", "Select Company": "会社を選択",
"Select Machine": "選擇機台",
"Select Machine to view metrics": "請選擇機台以查看指標",
"Select Model": "型番を選択", "Select Model": "型番を選択",
"Select Owner": "所属会社を選択", "Select Owner": "所属会社を選択",
"Select a machine to deep dive": "請選擇機台以開始深度分析",
"Selected": "已選擇",
"Selected Date": "查詢日期",
"Serial & Version": "シリアルとバージョン", "Serial & Version": "シリアルとバージョン",
"Serial No": "機台シリアル番号", "Serial No": "機台シリアル番号",
"Serial Number": "シリアル番号", "Serial Number": "シリアル番号",
@@ -393,12 +475,15 @@
"Showing :from to :to of :total items": ":total 件中 :from から :to 件を表示", "Showing :from to :to of :total items": ":total 件中 :from から :to 件を表示",
"Sign in to your account": "アカウントにサインイン", "Sign in to your account": "アカウントにサインイン",
"Signed in as": "ログイン中", "Signed in as": "ログイン中",
"Slot": "貨道",
"Slot Mechanism (default: Conveyor, check for Spring)": "貨道メカニズム (デフォルト:コンベア、チェックでスプリング)", "Slot Mechanism (default: Conveyor, check for Spring)": "貨道メカニズム (デフォルト:コンベア、チェックでスプリング)",
"Slot Status": "貨道效期",
"Slot Test": "テスト中",
"Some fields need attention": "一部のフィールドに注意が必要です", "Some fields need attention": "一部のフィールドに注意が必要です",
"Special Permission": "特別権限", "Special Permission": "特別権限",
"special-permission": "特別権限",
"Staff Stock": "スタッフ在庫", "Staff Stock": "スタッフ在庫",
"Status": "ステータス", "Status": "ステータス",
"Status / Temp / Sub / Card / Scan": "状態 / 温度 / 下位機 / カード / スキャン",
"Stock Management": "在庫管理", "Stock Management": "在庫管理",
"Store Gifts": "来店特典", "Store Gifts": "来店特典",
"Store ID": "加盟店ID (MerchantID)", "Store ID": "加盟店ID (MerchantID)",
@@ -407,12 +492,15 @@
"Sub Account Management": "サブアカウント管理", "Sub Account Management": "サブアカウント管理",
"Sub Account Roles": "サブアカウントロール", "Sub Account Roles": "サブアカウントロール",
"Sub Accounts": "サブアカウント", "Sub Accounts": "サブアカウント",
"Sub-actions": "子項目",
"Sub-machine Status Request": "下位機状態リクエスト",
"Success": "成功", "Success": "成功",
"Super Admin": "スーパー管理者", "Super Admin": "スーパー管理者",
"Super-admin role cannot be assigned to tenant accounts.": "スーパー管理者ロールはテナントアカウントに割り当てることはできません。", "Super-admin role cannot be assigned to tenant accounts.": "スーパー管理者ロールはテナントアカウントに割り当てることはできません。",
"Survey Analysis": "アンケート分析", "Survey Analysis": "アンケート分析",
"SYSTEM": "システムレベル", "System Default": "系統預設",
"System Level": "システムレベル", "System Level": "システムレベル",
"System Official": "公式",
"System Role": "システムロール", "System Role": "システムロール",
"System role name cannot be modified.": "システムロール名は変更できません。", "System role name cannot be modified.": "システムロール名は変更できません。",
"System roles cannot be deleted by tenant administrators.": "テナント管理者はシステムロールを削除できません。", "System roles cannot be deleted by tenant administrators.": "テナント管理者はシステムロールを削除できません。",
@@ -422,34 +510,40 @@
"Systems Initializing": "システム初期化中", "Systems Initializing": "システム初期化中",
"TapPay Integration": "TapPay 統合決済", "TapPay Integration": "TapPay 統合決済",
"TapPay Integration Settings Description": "TapPay 決済連携設定", "TapPay Integration Settings Description": "TapPay 決済連携設定",
"Target": "目標",
"Tax ID (Optional)": "納税者番号 (任意)", "Tax ID (Optional)": "納税者番号 (任意)",
"Temperature": "温度", "Temperature": "温度",
"TermID": "端末ID (TermID)", "TermID": "端末ID (TermID)",
"The image is too large. Please upload an image smaller than 1MB.": "画像が大きすぎます。1MB未満の画像をアップロードしてください。",
"The Super Admin role cannot be deleted.": "スーパー管理者ロールは削除できません。", "The Super Admin role cannot be deleted.": "スーパー管理者ロールは削除できません。",
"The Super Admin role is immutable.": "スーパー管理者ロールは変更できません。", "The Super Admin role is immutable.": "スーパー管理者ロールは変更できません。",
"The Super Admin role name cannot be modified.": "スーパー管理者のロール名は変更できません。", "The Super Admin role name cannot be modified.": "スーパー管理者のロール名は変更できません。",
"The image is too large. Please upload an image smaller than 1MB.": "画像が大きすぎます。1MB未満の画像をアップロードしてください。",
"This role belongs to another company and cannot be assigned.": "このロールは他の会社に属しており、割り当てることはできません。", "This role belongs to another company and cannot be assigned.": "このロールは他の会社に属しており、割り当てることはできません。",
"Time": "時間", "Time": "時間",
"Time Slots": "タイムスロット", "Time Slots": "タイムスロット",
"Timer": "タイマー", "Timer": "タイマー",
"Timestamp": "タイムスタンプ", "Timestamp": "タイムスタンプ",
"to": "から", "To": "まで",
"Today Cumulative Sales": "本日累計販売", "Today Cumulative Sales": "本日累計販売",
"Today's Transactions": "今日の取引額", "Today's Transactions": "今日の取引額",
"Total Connected": "接続数合計", "Total Connected": "接続数合計",
"Total Customers": "顧客總數", "Total Customers": "顧客總數",
"Total items": "合計 :count 件", "Total Daily Sales": "本日累計銷量",
"Total Logins": "總ログイン數", "Total Logins": "總ログイン數",
"Total Selected": "已選擇總數",
"Total Slots": "合計スロット数",
"Total items": "合計 :count 件",
"Transfer Audit": "転送監査", "Transfer Audit": "転送監査",
"Transfers": "転送", "Transfers": "転送",
"Tutorial Page": "チュートリアル画面",
"Type": "タイプ", "Type": "タイプ",
"UI Elements": "UI要素", "UI Elements": "UI要素",
"Unified Operational Timeline": "整合式營運時序圖",
"Unknown": "不明", "Unknown": "不明",
"Update": "更新", "Update": "更新",
"Update Customer": "顧客を更新", "Update Customer": "顧客を更新",
"Update existing role and permissions.": "既存のロールと権限を更新します。",
"Update Password": "パスワードの更新", "Update Password": "パスワードの更新",
"Update existing role and permissions.": "既存のロールと権限を更新します。",
"Update your account's profile information and email address.": "アカウントの氏名、電話番号、メールアドレスを更新します。", "Update your account's profile information and email address.": "アカウントの氏名、電話番号、メールアドレスを更新します。",
"Upload New Images": "新しい写真をアップロード", "Upload New Images": "新しい写真をアップロード",
"Uploading new images will replace all existing images.": "新しい写真をアップロードすると、既存のすべての写真が置き換えられます。", "Uploading new images will replace all existing images.": "新しい写真をアップロードすると、既存のすべての写真が置き換えられます。",
@@ -458,49 +552,90 @@
"Username": "ユーザー名", "Username": "ユーザー名",
"Users": "ユーザー数", "Users": "ユーザー数",
"Utilization Rate": "稼働率", "Utilization Rate": "稼働率",
"Utilization Timeline": "稼動時序",
"Utilization, OEE and Operational Intelligence": "稼動率、OEE 與營運情報",
"Valid Until": "有効期限", "Valid Until": "有効期限",
"Vending Page": "販売画面",
"Venue Management": "会場管理", "Venue Management": "会場管理",
"View Details": "詳細表示", "View Details": "詳細表示",
"View Logs": "ログを表示", "View Logs": "ログを表示",
"vs Yesterday": "前日比", "Waiting for Payment": "決済待ち",
"Warehouse List": "倉庫リスト", "Warehouse List": "倉庫リスト",
"Warehouse List (All)": "倉庫リスト(全)", "Warehouse List (All)": "倉庫リスト(全)",
"Warehouse List (Individual)": "倉庫リスト(個)", "Warehouse List (Individual)": "倉庫リスト(個)",
"Warehouse Management": "倉庫管理", "Warehouse Management": "倉庫管理",
"Warehouse Permissions": "倉庫管理權限", "Warehouse Permissions": "倉庫管理權限",
"warehouses": "倉庫管理",
"Warning": "警告", "Warning": "警告",
"Warning: You are editing your own role!": "警告:現在使用中のロールを編集しています!", "Warning: You are editing your own role!": "警告:現在使用中のロールを編集しています!",
"Welcome Gift": "会員登録特典", "Welcome Gift": "会員登録特典",
"Welcome Gift Status": "来店特典",
"Yesterday": "昨日", "Yesterday": "昨日",
"You cannot assign permissions you do not possess.": "ご自身が所有していない権限を割り當てることはできません。", "You cannot assign permissions you do not possess.": "ご自身が所有していない権限を割り當てることはできません。",
"You cannot delete your own account.": "ご自身のアカウントは削除できません。", "You cannot delete your own account.": "ご自身のアカウントは削除できません。",
"Your email address is unverified.": "メールアドレスが未確認です。", "Your email address is unverified.": "メールアドレスが未確認です。",
"Your recent account activity": "最近のアカウントアクティビティ", "Your recent account activity": "最近のアカウントアクティビティ",
"menu.data-config": "データ設定", "accounts": "アカウント管理",
"menu.data-config.sub-accounts": "サブアカウント管理", "admin": "管理",
"menu.data-config.sub-account-roles": "サブアカウントロール", "analysis": "分析管理",
"app": "APP管理",
"audit": "監査管理",
"basic-settings": "基本設定",
"basic.machines": "機台設定",
"basic.payment-configs": "客戶金流設定",
"companies": "顧客管理",
"data-config": "データ設定",
"data-config.sub-account-roles": "子帳號角色",
"data-config.sub-accounts": "子帳號管理",
"e.g. John Doe": "例:山田太郎",
"e.g. TWSTAR": "例TWSTAR",
"e.g. Taiwan Star": "例:台湾スター",
"e.g. johndoe": "例yamadataro",
"e.g., Company Standard Pay": "例:標準決済組合せ",
"e.g., Taipei Station": "例:台北駅",
"files selected": "ファイルを選択済み",
"items": "個の項目",
"john@example.com": "john@example.com",
"line": "Line管理",
"machines": "機台管理",
"members": "会員管理",
"menu.analysis": "データ分析",
"menu.app": "APP 運用",
"menu.audit": "監査管理",
"menu.basic": "基本管理",
"menu.basic-settings": "基本設定", "menu.basic-settings": "基本設定",
"menu.basic.machines": "機台設定", "menu.basic.machines": "機台設定",
"menu.basic.payment-configs": "決済設定管理", "menu.basic.payment-configs": "決済設定管理",
"menu.permission": "權限設定", "menu.data-config": "データ設定",
"menu.permissions.companies": "顧客管理", "menu.data-config.sub-account-roles": "サブアカウントロール",
"menu.permissions.accounts": "アカウント管理", "menu.data-config.sub-accounts": "サブアカウント管理",
"menu.permissions.roles": "ロール權限管理",
"menu.members": "会員管理",
"menu.machines": "機台管理",
"menu.app": "APP 運用",
"menu.warehouses": "倉庫管理",
"menu.sales": "売上レポート",
"menu.analysis": "データ分析",
"menu.audit": "監査管理",
"menu.remote": "リモート指令",
"menu.line": "LINE 設定", "menu.line": "LINE 設定",
"menu.machines": "機台管理",
"menu.machines.list": "機台リスト",
"menu.members": "会員管理",
"menu.permission": "權限設定",
"menu.permissions": "權限管理",
"menu.permissions.accounts": "アカウント管理",
"menu.permissions.companies": "顧客管理",
"menu.permissions.roles": "ロール權限管理",
"menu.remote": "リモート指令",
"menu.reservation": "予約管理", "menu.reservation": "予約管理",
"menu.sales": "売上レポート",
"menu.special-permission": "特殊権限", "menu.special-permission": "特殊権限",
"Edit Role Permissions": "ロール権限の編集", "menu.warehouses": "倉庫管理",
"Role Identification": "ロール識別情報", "of": "件中",
"LEVEL TYPE": "層級タイプ", "permissions": "權限設定",
"Affiliated Unit": "所属ユニット", "permissions.accounts": "帳號管理",
"System Official": "公式" "permissions.companies": "客戶管理",
"permissions.roles": "角色權限管理",
"remote": "リモート管理",
"reservation": "予約システム",
"roles": "ロール權限",
"sales": "販売管理",
"special-permission": "特別権限",
"super-admin": "超級管理員",
"to": "から",
"user": "一般用戶",
"vs Yesterday": "前日比",
"warehouses": "倉庫管理",
"待填寫": "待填寫"
} }

View File

@@ -1,12 +1,22 @@
{ {
"A new verification link has been sent to your email address.": "已將新的驗證連結發送至您的電子郵件地址。", "A new verification link has been sent to your email address.": "已將新的驗證連結發送至您的電子郵件地址。",
"Account created successfully.": "帳號已成功建立。", "AI Prediction": "AI智能預測",
"Account deleted successfully.": "帳號已成功刪除。", "API Token": "API 金鑰",
"APK Versions": "APK版本",
"APP Features": "APP功能",
"APP Management": "APP管理",
"APP Version": "APP版本號",
"APP_ID": "APP_ID",
"APP_KEY": "APP_KEY",
"Account": "帳號",
"Account Management": "帳號管理", "Account Management": "帳號管理",
"Account Name": "帳號姓名",
"Account Settings": "帳戶設定", "Account Settings": "帳戶設定",
"Account Status": "帳號狀態", "Account Status": "帳號狀態",
"Account created successfully.": "帳號已成功建立。",
"Account deleted successfully.": "帳號已成功刪除。",
"Account updated successfully.": "帳號已成功更新。", "Account updated successfully.": "帳號已成功更新。",
"accounts": "帳號管理", "Account:": "帳號:",
"Accounts / Machines": "帳號 / 機台", "Accounts / Machines": "帳號 / 機台",
"Action": "操作", "Action": "操作",
"Actions": "操作", "Actions": "操作",
@@ -17,26 +27,16 @@
"Add Machine Model": "新增機台型號", "Add Machine Model": "新增機台型號",
"Add Role": "新增角色", "Add Role": "新增角色",
"Admin": "管理員", "Admin": "管理員",
"admin": "管理員",
"Admin display name": "管理員顯示名稱",
"Admin Name": "管理員姓名", "Admin Name": "管理員姓名",
"Account Name": "帳號姓名", "Admin Page": "管理頁",
"Account": "帳號",
"Account:": "帳號:",
"Manage Account Access": "管理帳號存取",
"Assigned Machines": "授權機台",
"No machines assigned": "未分配機台",
"Available Machines": "可供分配的機台",
"Loading machines...": "正在載入機台...",
"No machines available in this company.": "此客戶目前沒有可供分配的機台。",
"Saving...": "儲存中...",
"Save Permissions": "儲存權限",
"Admin Sellable Products": "管理者可賣", "Admin Sellable Products": "管理者可賣",
"Admin display name": "管理員顯示名稱",
"Administrator": "管理員", "Administrator": "管理員",
"Advertisement Management": "廣告管理", "Advertisement Management": "廣告管理",
"Affiliated Unit": "所屬單位",
"Affiliation": "所屬單位", "Affiliation": "所屬單位",
"AI Prediction": "AI智能預測",
"Alert Summary": "告警摘要", "Alert Summary": "告警摘要",
"Alerts": "中心告警",
"Alerts Pending": "待處理告警", "Alerts Pending": "待處理告警",
"All": "全部", "All": "全部",
"All Affiliations": "全部單位", "All Affiliations": "全部單位",
@@ -44,16 +44,10 @@
"All Levels": "所有層級", "All Levels": "所有層級",
"All Machines": "所有機台", "All Machines": "所有機台",
"All Times System Timezone": "所有時間為系統時區", "All Times System Timezone": "所有時間為系統時區",
"analysis": "分析管理", "An error occurred while saving.": "儲存時發生錯誤。",
"Analysis Management": "分析管理", "Analysis Management": "分析管理",
"Analysis Permissions": "分析管理權限", "Analysis Permissions": "分析管理權限",
"API Token": "API 金鑰", "Apply to all identical products in this machine": "同步套用至此機台內的所有相同商品",
"APK Versions": "APK版本",
"app": "APP 管理",
"APP Features": "APP功能",
"APP Management": "APP管理",
"APP_ID": "APP_ID",
"APP_KEY": "APP_KEY",
"Are you sure to delete this customer?": "您確定要刪除此客戶嗎?", "Are you sure to delete this customer?": "您確定要刪除此客戶嗎?",
"Are you sure you want to delete this account?": "您確定要刪除此帳號嗎?", "Are you sure you want to delete this account?": "您確定要刪除此帳號嗎?",
"Are you sure you want to delete this account? This action cannot be undone.": "確定要刪除此帳號嗎?此操作無法復原。", "Are you sure you want to delete this account? This action cannot be undone.": "確定要刪除此帳號嗎?此操作無法復原。",
@@ -64,20 +58,26 @@
"Are you sure you want to delete your account?": "您確定要刪除您的帳號嗎?", "Are you sure you want to delete your account?": "您確定要刪除您的帳號嗎?",
"Are you sure you want to proceed? This action cannot be undone.": "您確定要繼續嗎?此操作將無法復原。", "Are you sure you want to proceed? This action cannot be undone.": "您確定要繼續嗎?此操作將無法復原。",
"Are you sure?": "確定要執行此操作嗎?", "Are you sure?": "確定要執行此操作嗎?",
"audit": "稽核管理", "Assign": "分配所屬機台",
"Assign Machines": "分配機台",
"Assigned Machines": "授權機台",
"Audit Management": "稽核管理", "Audit Management": "稽核管理",
"Audit Permissions": "稽核管理權限", "Audit Permissions": "稽核管理權限",
"Authorized Machines": "授權機台",
"Availability": "可用性 (Availability)",
"Available Machines": "可供分配的機台",
"Avatar updated successfully.": "頭像已成功更新。", "Avatar updated successfully.": "頭像已成功更新。",
"Badge Settings": "識別證", "Badge Settings": "識別證",
"Basic Information": "基本資訊", "Basic Information": "基本資訊",
"Basic Settings": "基本設定", "Basic Settings": "基本設定",
"basic-settings": "基本設定", "Batch No": "批號",
"Belongs To": "所屬公司", "Belongs To": "所屬公司",
"Belongs To Company": "所屬公司", "Belongs To Company": "所屬公司",
"Cancel": "取消", "Cancel": "取消",
"Cancel Purchase": "取消購買",
"Cannot Delete Role": "無法刪除該角色",
"Cannot delete company with active accounts.": "無法刪除仍有帳號的客戶", "Cannot delete company with active accounts.": "無法刪除仍有帳號的客戶",
"Cannot delete model that is currently in use by machines.": "無法刪除目前正在被機台使用的型號。", "Cannot delete model that is currently in use by machines.": "無法刪除目前正在被機台使用的型號。",
"Cannot Delete Role": "無法刪除該角色",
"Cannot delete role with active users.": "無法刪除已有綁定帳號的角色。", "Cannot delete role with active users.": "無法刪除已有綁定帳號的角色。",
"Card Reader": "刷卡機", "Card Reader": "刷卡機",
"Card Reader No": "刷卡機編號", "Card Reader No": "刷卡機編號",
@@ -89,11 +89,11 @@
"ChannelSecret": "ChannelSecret", "ChannelSecret": "ChannelSecret",
"Checkout Time 1": "卡機結帳時間1", "Checkout Time 1": "卡機結帳時間1",
"Checkout Time 2": "卡機結帳時間2", "Checkout Time 2": "卡機結帳時間2",
"Clear Filter": "清除篩選",
"Clear Stock": "庫存清空", "Clear Stock": "庫存清空",
"Click here to re-send the verification email.": "點擊此處重新發送驗證郵件。", "Click here to re-send the verification email.": "點擊此處重新發送驗證郵件。",
"Click to upload": "點擊上傳", "Click to upload": "點擊上傳",
"Close Panel": "關閉面板", "Close Panel": "關閉面板",
"companies": "客戶管理",
"Company": "所屬客戶", "Company": "所屬客戶",
"Company Code": "公司代碼", "Company Code": "公司代碼",
"Company Information": "公司資訊", "Company Information": "公司資訊",
@@ -106,6 +106,7 @@
"Confirm Password": "確認新密碼", "Confirm Password": "確認新密碼",
"Connecting...": "連線中", "Connecting...": "連線中",
"Connectivity Status": "連線狀態概況", "Connectivity Status": "連線狀態概況",
"Connectivity vs Sales Correlation": "連線狀態與銷售關聯分析",
"Contact & Details": "聯絡資訊與詳情", "Contact & Details": "聯絡資訊與詳情",
"Contact Email": "聯絡人信箱", "Contact Email": "聯絡人信箱",
"Contact Name": "聯絡人姓名", "Contact Name": "聯絡人姓名",
@@ -113,24 +114,24 @@
"Contract Until (Optional)": "合約到期日 (選填)", "Contract Until (Optional)": "合約到期日 (選填)",
"Coupons": "優惠券", "Coupons": "優惠券",
"Create": "建立", "Create": "建立",
"Create a new role and assign permissions.": "建立新角色並分配對應權限。",
"Create Config": "建立配置", "Create Config": "建立配置",
"Create Machine": "新增機台", "Create Machine": "新增機台",
"Create Payment Config": "新增金流配置", "Create Payment Config": "新增金流配置",
"Create Role": "建立角色", "Create Role": "建立角色",
"Create a new role and assign permissions.": "建立新角色並分配對應權限。",
"Critical": "嚴重",
"Current Password": "當前密碼", "Current Password": "當前密碼",
"Current Stock": "當前庫存", "Current Stock": "當前庫存",
"Customer created successfully.": "客戶新增成功",
"Customer deleted successfully.": "客戶刪除成功",
"Customer Info": "客戶資訊", "Customer Info": "客戶資訊",
"Customer Management": "客戶管理", "Customer Management": "客戶管理",
"Customer Payment Config": "客戶金流設定", "Customer Payment Config": "客戶金流設定",
"Customer created successfully.": "客戶新增成功",
"Customer deleted successfully.": "客戶刪除成功",
"Customer updated successfully.": "客戶更新成功", "Customer updated successfully.": "客戶更新成功",
"Danger Zone: Delete Account": "危險區域:刪除帳號", "Danger Zone: Delete Account": "危險區域:刪除帳號",
"Dashboard": "儀表板", "Dashboard": "儀表板",
"Data Configuration": "資料設定", "Data Configuration": "資料設定",
"Data Configuration Permissions": "資料設定權限", "Data Configuration Permissions": "資料設定權限",
"data-config": "資料設定",
"Day Before": "前日", "Day Before": "前日",
"Default Donate": "預設捐贈", "Default Donate": "預設捐贈",
"Default Not Donate": "預設不捐贈", "Default Not Donate": "預設不捐贈",
@@ -140,15 +141,14 @@
"Delete Account": "刪除帳號", "Delete Account": "刪除帳號",
"Delete Permanently": "確認永久刪除資料", "Delete Permanently": "確認永久刪除資料",
"Deposit Bonus": "儲值回饋", "Deposit Bonus": "儲值回饋",
"Deselect All": "取消全選",
"Detail": "詳細", "Detail": "詳細",
"Device Status Logs": "設備狀態紀錄",
"Disabled": "已停用", "Disabled": "已停用",
"Discord Notifications": "Discord通知", "Discord Notifications": "Discord通知",
"e.g. John Doe": "例如:張曉明", "Dispense Failed": "出貨失敗",
"e.g. johndoe": "例如xiaoming", "Dispense Success": "出貨成功",
"e.g. Taiwan Star": "例如:台灣之星", "Dispensing": "出貨",
"e.g. TWSTAR": "例如TWSTAR",
"e.g., Company Standard Pay": "例如:公司標準支付",
"e.g., Taipei Station": "例如:台北車站",
"E.SUN QR Scan": "玉山銀行標籤支付", "E.SUN QR Scan": "玉山銀行標籤支付",
"E.SUN QR Scan Settings Description": "玉山銀行掃碼支付設定", "E.SUN QR Scan Settings Description": "玉山銀行掃碼支付設定",
"EASY_MERCHANT_ID": "悠遊付 商店代號", "EASY_MERCHANT_ID": "悠遊付 商店代號",
@@ -157,12 +157,15 @@
"Edit": "編輯", "Edit": "編輯",
"Edit Account": "編輯帳號", "Edit Account": "編輯帳號",
"Edit Customer": "編輯客戶", "Edit Customer": "編輯客戶",
"Edit Expiry": "編輯效期",
"Edit Machine": "編輯機台", "Edit Machine": "編輯機台",
"Edit Machine Model": "編輯機台型號", "Edit Machine Model": "編輯機台型號",
"Edit Machine Settings": "編輯機台設定", "Edit Machine Settings": "編輯機台設定",
"Edit Payment Config": "編輯金流配置", "Edit Payment Config": "編輯金流配置",
"Edit Role": "編輯角色", "Edit Role": "編輯角色",
"Edit Role Permissions": "編輯角色權限",
"Edit Settings": "編輯設定", "Edit Settings": "編輯設定",
"Edit Sub Account Role": "編輯子帳號角色",
"Email": "電子郵件", "Email": "電子郵件",
"Enabled/Disabled": "啟用/停用", "Enabled/Disabled": "啟用/停用",
"Ensure your account is using a long, random password to stay secure.": "確保您的帳號使用了足夠強度的隨機密碼以維持安全。", "Ensure your account is using a long, random password to stay secure.": "確保您的帳號使用了足夠強度的隨機密碼以維持安全。",
@@ -173,14 +176,23 @@
"Enter role name": "請輸入角色名稱", "Enter role name": "請輸入角色名稱",
"Enter serial number": "請輸入機台序號", "Enter serial number": "請輸入機台序號",
"Enter your password to confirm": "請輸入您的密碼以確認", "Enter your password to confirm": "請輸入您的密碼以確認",
"Equipment efficiency and OEE metrics": "設備效能與 OEE 綜合指標",
"Error": "異常", "Error": "異常",
"Expired": "已過期",
"Expired / Disabled": "已過期 / 停用", "Expired / Disabled": "已過期 / 停用",
"Expiry Date": "有效日期",
"Expiry Management": "效期管理", "Expiry Management": "效期管理",
"Failed to fetch machine data.": "無法取得機台資料。",
"Failed to save permissions.": "無法儲存權限設定。",
"Failed to update machine images: ": "更新機台圖片失敗:", "Failed to update machine images: ": "更新機台圖片失敗:",
"files selected": "個檔案已選擇",
"Firmware Version": "韌體版本", "Firmware Version": "韌體版本",
"Fleet Avg OEE": "全機隊平均 OEE",
"Fleet Performance": "全機隊效能",
"From": "從",
"Full Access": "全機台授權",
"Full Name": "全名", "Full Name": "全名",
"Games": "互動遊戲", "Games": "互動遊戲",
"General permissions not linked to a specific menu.": "未連結到特定選單的一般權限。",
"Gift Definitions": "禮品設定", "Gift Definitions": "禮品設定",
"Global roles accessible by all administrators.": "適用於所有管理者的全域角色。", "Global roles accessible by all administrators.": "適用於所有管理者的全域角色。",
"Got it": "知道了", "Got it": "知道了",
@@ -193,66 +205,76 @@
"Heating Range": "加熱時段", "Heating Range": "加熱時段",
"Heating Start Time": "開啟-加熱時間", "Heating Start Time": "開啟-加熱時間",
"Helper": "小幫手", "Helper": "小幫手",
"Home Page": "主頁面",
"Info": "一般", "Info": "一般",
"Initial Admin Account": "初始管理帳號", "Initial Admin Account": "初始管理帳號",
"Initial Role": "初始角色", "Initial Role": "初始角色",
"Invoice Status": "發票開立狀態", "Invoice Status": "發票開立狀態",
"items": "筆項目",
"Items": "個項目", "Items": "個項目",
"JKO_MERCHANT_ID": "街口支付 商店代號", "JKO_MERCHANT_ID": "街口支付 商店代號",
"john@example.com": "john@example.com",
"Joined": "加入日期", "Joined": "加入日期",
"Key": "金鑰 (Key)", "Key": "金鑰 (Key)",
"Key No": "鑰匙編號", "Key No": "鑰匙編號",
"LEVEL TYPE": "層級類型",
"LINE Pay Direct": "LINE Pay 官方直連",
"LINE Pay Direct Settings Description": "LINE Pay 官方直連設定",
"LINE_MERCHANT_ID": "LINE Pay 商店代號",
"LIVE": "實時",
"Last Heartbeat": "最後心跳時間", "Last Heartbeat": "最後心跳時間",
"Last Page": "最後頁面",
"Last Signal": "最後訊號時間", "Last Signal": "最後訊號時間",
"Last Time": "最後時間",
"Last Updated": "最後更新日期", "Last Updated": "最後更新日期",
"Level": "層級", "Level": "層級",
"line": "Line 管理",
"Line Coupons": "Line優惠券", "Line Coupons": "Line優惠券",
"Line Machines": "Line機台", "Line Machines": "Line機台",
"Line Management": "Line管理", "Line Management": "Line管理",
"Line Members": "Line會員", "Line Members": "Line會員",
"Line Official Account": "Line生活圈", "Line Official Account": "Line生活圈",
"Line Orders": "Line訂單", "Line Orders": "Line訂單",
"LINE Pay Direct": "LINE Pay 官方直連",
"LINE Pay Direct Settings Description": "LINE Pay 官方直連設定",
"Line Permissions": "Line 管理權限", "Line Permissions": "Line 管理權限",
"Line Products": "Line商品", "Line Products": "Line商品",
"LINE_MERCHANT_ID": "LINE Pay 商店代號", "Loading machines...": "正在載入機台...",
"LIVE": "實時", "Loading...": "載入中...",
"Location": "位置", "Location": "位置",
"Locked Page": "鎖定頁",
"Login History": "登入歷史", "Login History": "登入歷史",
"Logout": "登出", "Logout": "登出",
"Logs": "日誌", "Logs": "日誌",
"Machine Count": "機台數量", "Machine Count": "機台數量",
"Machine created successfully.": "機台已成功建立。",
"Machine Details": "機台詳情", "Machine Details": "機台詳情",
"Machine Images": "機台照片", "Machine Images": "機台照片",
"Machine images updated successfully.": "機台圖片已成功更新。",
"Machine Info": "機台資訊", "Machine Info": "機台資訊",
"Machine Information": "機台資訊",
"Machine List": "機台列表", "Machine List": "機台列表",
"Machine Login Logs": "機台登入紀錄",
"Machine Logs": "機台日誌", "Machine Logs": "機台日誌",
"Machine Management": "機台管理", "Machine Management": "機台管理",
"Machine Management Permissions": "機台管理權限", "Machine Management Permissions": "機台管理權限",
"Machine Model": "機台型號", "Machine Model": "機台型號",
"Machine model created successfully.": "機台型號已成功建立。",
"Machine model deleted successfully.": "機台型號已成功刪除。",
"Machine Model Settings": "機台型號設定", "Machine Model Settings": "機台型號設定",
"Machine model updated successfully.": "機台型號已成功更新。",
"Machine Name": "機台名稱", "Machine Name": "機台名稱",
"Machine Permissions": "授權機台", "Machine Permissions": "授權機台",
"Machine Reports": "機台報表", "Machine Reports": "機台報表",
"Machine Restart": "機台重啟", "Machine Restart": "機台重啟",
"Machine Settings": "機台設定", "Machine Settings": "機台設定",
"Machine settings updated successfully.": "機台設定已成功更新。", "Machine Status": "機台狀態",
"Machine Status List": "機台運行狀態列表", "Machine Status List": "機台運行狀態列表",
"Machine Stock": "機台庫存", "Machine Stock": "機台庫存",
"machines": "機台管理", "Machine created successfully.": "機台已成功建立。",
"Machine images updated successfully.": "機台圖片已成功更新。",
"Machine model created successfully.": "機台型號已成功建立。",
"Machine model deleted successfully.": "機台型號已成功刪除。",
"Machine model updated successfully.": "機台型號已成功更新。",
"Machine settings updated successfully.": "機台設定已成功更新。",
"Machines": "機台列表", "Machines": "機台列表",
"Machines Online": "在線機台數",
"Maintenance Records": "維修管理單", "Maintenance Records": "維修管理單",
"Manage Account Access": "管理帳號存取",
"Manage Expiry": "進入效期管理",
"Manage administrative and tenant accounts": "管理系統管理者與租戶帳號", "Manage administrative and tenant accounts": "管理系統管理者與租戶帳號",
"Manage all tenant accounts and validity": "管理所有租戶帳號與合約效期", "Manage all tenant accounts and validity": "管理所有租戶帳號與合約效期",
"Manage your machine fleet and operational data": "管理您的機台群組與營運數據",
"Manage your profile information, security settings, and login history": "管理您的個人資訊、安全設定與登入紀錄", "Manage your profile information, security settings, and login history": "管理您的個人資訊、安全設定與登入紀錄",
"Management of operational parameters": "機台運作參數管理", "Management of operational parameters": "機台運作參數管理",
"Management of operational parameters and models": "管理運作參數與型號", "Management of operational parameters and models": "管理運作參數與型號",
@@ -261,26 +283,28 @@
"Member List": "會員列表", "Member List": "會員列表",
"Member Management": "會員管理", "Member Management": "會員管理",
"Member System": "會員系統", "Member System": "會員系統",
"members": "會員管理",
"Membership Tiers": "會員等級", "Membership Tiers": "會員等級",
"Menu Permissions": "選單權限", "Menu Permissions": "選單權限",
"Merchant IDs": "特店代號清單", "Merchant IDs": "特店代號清單",
"Merchant payment gateway settings management": "特約商店支付網關參數管理", "Merchant payment gateway settings management": "特約商店支付網關參數管理",
"Message": "訊息", "Message": "訊息",
"Message Content": "日誌內容", "Message Content": "日誌內容",
"Message Display": "訊息顯示",
"Min 8 characters": "至少 8 個字元", "Min 8 characters": "至少 8 個字元",
"Model": "機台型號", "Model": "機台型號",
"Model Name": "型號名稱", "Model Name": "型號名稱",
"Models": "型號列表", "Models": "型號列表",
"Modifying your own administrative permissions may result in losing access to certain system functions.": "修改自身管理權限可能導致失去對部分系統功能的控制權。", "Modifying your own administrative permissions may result in losing access to certain system functions.": "修改自身管理權限可能導致失去對部分系統功能的控制權。",
"Monitor events and system activity across your vending fleet.": "跨機台連線動態與系統日誌監控。", "Monitor events and system activity across your vending fleet.": "跨機台連線動態與系統日誌監控。",
"Monthly cumulative revenue overview": "本月累計營收概況",
"Monthly Transactions": "本月交易統計", "Monthly Transactions": "本月交易統計",
"Monthly cumulative revenue overview": "本月累計營收概況",
"Name": "姓名", "Name": "姓名",
"Never Connected": "從未連線", "Never Connected": "從未連線",
"New Password": "新密碼", "New Password": "新密碼",
"New Password (leave blank to keep current)": "新密碼 (若不修改請留空)", "New Password (leave blank to keep current)": "新密碼 (若不修改請留空)",
"New Sub Account Role": "新增子帳號角色",
"Next": "下一頁", "Next": "下一頁",
"No Invoice": "不開立發票",
"No accounts found": "找不到帳號資料", "No accounts found": "找不到帳號資料",
"No alert summary": "暫無告警記錄", "No alert summary": "暫無告警記錄",
"No configurations found": "暫無相關配置", "No configurations found": "暫無相關配置",
@@ -288,36 +312,51 @@
"No data available": "暫無資料", "No data available": "暫無資料",
"No file uploaded.": "未上傳任何檔案。", "No file uploaded.": "未上傳任何檔案。",
"No images uploaded": "尚未上傳照片", "No images uploaded": "尚未上傳照片",
"No Invoice": "不開立發票",
"No location set": "尚未設定位置", "No location set": "尚未設定位置",
"No login history yet": "尚無登入紀錄", "No login history yet": "尚無登入紀錄",
"No logs found": "暫無相關日誌", "No logs found": "暫無相關日誌",
"No machines assigned": "未分配機台",
"No machines available": "目前沒有可供分配的機台",
"No machines available in this company.": "此客戶目前沒有可供分配的機台。",
"No matching logs found": "找不到符合條件的日誌", "No matching logs found": "找不到符合條件的日誌",
"No permissions": "無權限項目", "No permissions": "無權限項目",
"No roles found.": "找不到角色資料。", "No roles found.": "找不到角色資料。",
"No slots found": "未找到貨道資訊",
"No users found": "找不到用戶資料", "No users found": "找不到用戶資料",
"None": "無", "None": "無",
"Normal": "正常",
"Not Used": "不使用", "Not Used": "不使用",
"Not Used Description": "不使用第三方支付介接", "Not Used Description": "不使用第三方支付介接",
"Notes": "備註", "Notes": "備註",
"of": "總計", "OEE Score": "OEE 綜合得分",
"OEE.Activity": "營運活動",
"OEE.Errors": "異常",
"OEE.Hours": "小時",
"OEE.Orders": "訂單",
"OEE.Sales": "銷售",
"Offline": "離線", "Offline": "離線",
"Offline Machines": "離線機台", "Offline Machines": "離線機台",
"Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "一旦您的帳號被刪除,其所有資源和數據將被永久刪除。在刪除帳號之前,請下載您希望保留的任何數據或資訊。", "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "一旦您的帳號被刪除,其所有資源和數據將被永久刪除。在刪除帳號之前,請下載您希望保留的任何數據或資訊。",
"Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "帳號一旦刪除,所有關連數據將被永久移除。請輸入您的密碼以確認您希望永久刪除此帳號。", "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "帳號一旦刪除,所有關連數據將被永久移除。請輸入您的密碼以確認您希望永久刪除此帳號。",
"Online": "線上", "Online": "線上",
"Online Duration": "累積連線時數",
"Online Machines": "在線機台", "Online Machines": "在線機台",
"Only system roles can be assigned to platform administrative accounts.": "僅系統角色可指派給平台管理帳號。", "Only system roles can be assigned to platform administrative accounts.": "僅系統角色可指派給平台管理帳號。",
"Operational Parameters": "運作參數", "Operational Parameters": "運作參數",
"Operations": "運作設定", "Operations": "運作設定",
"Optimal": "良好",
"Optimized for display. Supported formats: JPG, PNG, WebP.": "已針對顯示進行優化。支援格式JPG, PNG, WebP。", "Optimized for display. Supported formats: JPG, PNG, WebP.": "已針對顯示進行優化。支援格式JPG, PNG, WebP。",
"Optional": "選填", "Optional": "選填",
"Order Management": "訂單管理", "Order Management": "訂單管理",
"Orders": "購買單", "Orders": "購買單",
"Other Permissions": "其他權限",
"Others": "其他功能", "Others": "其他功能",
"Owner": "所屬公司", "Owner": "所屬公司",
"Parameters": "參數設定",
"PARTNER_KEY": "PARTNER_KEY", "PARTNER_KEY": "PARTNER_KEY",
"PI_MERCHANT_ID": "Pi 拍錢包 商店代號",
"PS_MERCHANT_ID": "全盈+Pay 商店代號",
"Parameters": "參數設定",
"Pass Code": "通行碼",
"Pass Codes": "通行碼", "Pass Codes": "通行碼",
"Password": "密碼", "Password": "密碼",
"Password updated successfully.": "密碼已成功變更。", "Password updated successfully.": "密碼已成功變更。",
@@ -328,17 +367,20 @@
"Payment Configuration created successfully.": "金流設定已成功建立。", "Payment Configuration created successfully.": "金流設定已成功建立。",
"Payment Configuration deleted successfully.": "金流設定已成功刪除。", "Payment Configuration deleted successfully.": "金流設定已成功刪除。",
"Payment Configuration updated successfully.": "金流設定已成功更新。", "Payment Configuration updated successfully.": "金流設定已成功更新。",
"Payment Selection": "付款選擇",
"Pending": "待核效期",
"Performance": "效能 (Performance)",
"Permanent": "永久授權", "Permanent": "永久授權",
"Permanently Delete Account": "永久刪除帳號", "Permanently Delete Account": "永久刪除帳號",
"Permission Settings": "權限設定", "Permission Settings": "權限設定",
"Permissions": "權限", "Permissions": "權限",
"permissions": "權限設定",
"Phone": "手機號碼", "Phone": "手機號碼",
"Photo Slot": "照片欄位", "Photo Slot": "照片欄位",
"PI_MERCHANT_ID": "Pi 拍錢包 商店代號", "Pickup Code": "取貨碼",
"Pickup Codes": "取貨碼", "Pickup Codes": "取貨碼",
"Please check the following errors:": "請檢查以下錯誤:", "Please check the following errors:": "請檢查以下錯誤:",
"Please check the form for errors.": "請檢查欄位內容是否正確。", "Please check the form for errors.": "請檢查欄位內容是否正確。",
"Please select a machine to view metrics": "請選擇機台以查看數據",
"Point Rules": "點數規則", "Point Rules": "點數規則",
"Point Settings": "點數設定", "Point Settings": "點數設定",
"Previous": "上一頁", "Previous": "上一頁",
@@ -351,16 +393,21 @@
"Profile updated successfully.": "個人資料已成功更新。", "Profile updated successfully.": "個人資料已成功更新。",
"Promotions": "促銷時段", "Promotions": "促銷時段",
"Protected": "受保護", "Protected": "受保護",
"PS_MERCHANT_ID": "全盈+Pay 商店代號",
"Purchase Audit": "採購單", "Purchase Audit": "採購單",
"Purchase Finished": "購買結束",
"Purchases": "採購單", "Purchases": "採購單",
"Purchasing": "購買中",
"Quality": "品質 (Quality)",
"Questionnaire": "問卷", "Questionnaire": "問卷",
"Quick Expiry Check": "效期快速檢查",
"Quick Select": "快速選取",
"Quick search...": "快速搜尋...", "Quick search...": "快速搜尋...",
"Real-time monitoring across all machines": "跨機台即時狀態監控", "Real-time OEE analysis awaits": "即時 OEE 分析預備中",
"Real-time Operation Logs (Last 50)": "即時操作日誌 (最後 50 筆)", "Real-time Operation Logs (Last 50)": "即時操作日誌 (最後 50 筆)",
"Real-time monitoring across all machines": "跨機台即時狀態監控",
"Real-time status monitoring": "即時監控機台連線動態", "Real-time status monitoring": "即時監控機台連線動態",
"Receipt Printing": "收據簽單",
"Recent Login": "最近登入", "Recent Login": "最近登入",
"remote": "遠端管理",
"Remote Change": "遠端找零", "Remote Change": "遠端找零",
"Remote Checkout": "遠端結帳", "Remote Checkout": "遠端結帳",
"Remote Dispense": "遠端出貨", "Remote Dispense": "遠端出貨",
@@ -368,46 +415,58 @@
"Remote Management": "遠端管理", "Remote Management": "遠端管理",
"Remote Permissions": "遠端管理權限", "Remote Permissions": "遠端管理權限",
"Replenishment Audit": "補貨單", "Replenishment Audit": "補貨單",
"Replenishment Page": "補貨頁",
"Replenishment Records": "機台補貨紀錄", "Replenishment Records": "機台補貨紀錄",
"Replenishments": "機台補貨單", "Replenishments": "機台補貨單",
"reservation": "預約系統",
"Reservation Members": "預約會員", "Reservation Members": "預約會員",
"Reservation System": "預約系統", "Reservation System": "預約系統",
"Reservations": "預約管理", "Reservations": "預約管理",
"Returns": "回庫單", "Returns": "回庫單",
"Risk": "風險狀態",
"Role": "角色", "Role": "角色",
"Role created successfully.": "角色已成功建立。", "Role Identification": "角色識別資訊",
"Role deleted successfully.": "角色已成功刪除。",
"Role Management": "角色權限管理", "Role Management": "角色權限管理",
"Role Name": "角色名稱", "Role Name": "角色名稱",
"Role name already exists in this company.": "該公司已存在相同名稱的角色。",
"Role not found.": "角色不存在。",
"Role Permissions": "角色權限", "Role Permissions": "角色權限",
"Role Settings": "角色權限", "Role Settings": "角色權限",
"Role Type": "角色類型", "Role Type": "角色類型",
"Role created successfully.": "角色已成功建立。",
"Role deleted successfully.": "角色已成功刪除。",
"Role name already exists in this company.": "該公司已存在相同名稱的角色。",
"Role not found.": "角色不存在。",
"Role updated successfully.": "角色已成功更新。", "Role updated successfully.": "角色已成功更新。",
"Roles": "角色權限", "Roles": "角色權限",
"roles": "角色權限",
"Roles scoped to specific customer companies.": "適用於各個客戶單位的特定角色。", "Roles scoped to specific customer companies.": "適用於各個客戶單位的特定角色。",
"Running Status": "運行狀態", "Running Status": "運行狀態",
"SYSTEM": "系統層級",
"Sales": "銷售管理", "Sales": "銷售管理",
"sales": "銷售管理", "Sales Activity": "銷售活動",
"Sales Management": "銷售管理", "Sales Management": "銷售管理",
"Sales Permissions": "銷售管理權限", "Sales Permissions": "銷售管理權限",
"Sales Records": "銷售紀錄", "Sales Records": "銷售紀錄",
"Save": "儲存變更", "Save": "儲存變更",
"Save Changes": "儲存變更", "Save Changes": "儲存變更",
"Save Config": "儲存配置", "Save Config": "儲存配置",
"Save Permissions": "儲存權限",
"Saved.": "已儲存", "Saved.": "已儲存",
"Saving...": "儲存中...",
"Scale level and access control": "層級與存取控制",
"Search configurations...": "搜尋設定...", "Search configurations...": "搜尋設定...",
"Search customers...": "搜尋客戶...", "Search customers...": "搜尋客戶...",
"Search machines by name or serial...": "搜尋機台名稱或序號...",
"Search machines...": "搜尋機台...", "Search machines...": "搜尋機台...",
"Search models...": "搜尋型號...", "Search models...": "搜尋型號...",
"Search roles...": "搜尋角色...", "Search roles...": "搜尋角色...",
"Search users...": "搜尋用戶...", "Search users...": "搜尋用戶...",
"Select All": "全選",
"Select Company": "選擇所屬公司", "Select Company": "選擇所屬公司",
"Select Machine": "選擇機台",
"Select Machine to view metrics": "請選擇機台以查看指標",
"Select Model": "選擇型號", "Select Model": "選擇型號",
"Select Owner": "選擇所屬公司", "Select Owner": "選擇所屬公司",
"Select a machine to deep dive": "請選擇機台以開始深度分析",
"Selected": "已選擇",
"Selected Date": "查詢日期",
"Serial & Version": "序號與版本", "Serial & Version": "序號與版本",
"Serial No": "機台序號", "Serial No": "機台序號",
"Serial Number": "機台序號", "Serial Number": "機台序號",
@@ -416,12 +475,15 @@
"Showing :from to :to of :total items": "顯示第 :from 到 :to 項,共 :total 項", "Showing :from to :to of :total items": "顯示第 :from 到 :to 項,共 :total 項",
"Sign in to your account": "隨時隨地掌控您的業務。", "Sign in to your account": "隨時隨地掌控您的業務。",
"Signed in as": "登入身份", "Signed in as": "登入身份",
"Slot": "貨道",
"Slot Mechanism (default: Conveyor, check for Spring)": "貨道機制 (預設履帶,勾選為彈簧)", "Slot Mechanism (default: Conveyor, check for Spring)": "貨道機制 (預設履帶,勾選為彈簧)",
"Slot Status": "貨道效期",
"Slot Test": "貨道測試",
"Some fields need attention": "部分欄位需要注意", "Some fields need attention": "部分欄位需要注意",
"Special Permission": "特殊權限", "Special Permission": "特殊權限",
"special-permission": "特殊權限",
"Staff Stock": "人員庫存", "Staff Stock": "人員庫存",
"Status": "狀態", "Status": "狀態",
"Status / Temp / Sub / Card / Scan": "狀態 / 溫度 / 下位機 / 刷卡機 / 掃碼機",
"Stock Management": "庫存管理單", "Stock Management": "庫存管理單",
"Store Gifts": "來店禮", "Store Gifts": "來店禮",
"Store ID": "商店代號", "Store ID": "商店代號",
@@ -430,13 +492,15 @@
"Sub Account Management": "子帳號管理", "Sub Account Management": "子帳號管理",
"Sub Account Roles": "子帳號角色", "Sub Account Roles": "子帳號角色",
"Sub Accounts": "子帳號", "Sub Accounts": "子帳號",
"Sub-actions": "子項目",
"Sub-machine Status Request": "下位機狀態回傳",
"Success": "成功", "Success": "成功",
"Super Admin": "超級管理員", "Super Admin": "超級管理員",
"super-admin": "超級管理員",
"Super-admin role cannot be assigned to tenant accounts.": "超級管理員角色無法指派給租戶帳號。", "Super-admin role cannot be assigned to tenant accounts.": "超級管理員角色無法指派給租戶帳號。",
"Survey Analysis": "問卷分析", "Survey Analysis": "問卷分析",
"SYSTEM": "系統層級", "System Default": "系統預設",
"System Level": "系統層級", "System Level": "系統層級",
"System Official": "系統層",
"System Role": "系統角色", "System Role": "系統角色",
"System role name cannot be modified.": "內建系統角色的名稱無法修改。", "System role name cannot be modified.": "內建系統角色的名稱無法修改。",
"System roles cannot be deleted by tenant administrators.": "租戶管理員無法刪除系統角色。", "System roles cannot be deleted by tenant administrators.": "租戶管理員無法刪除系統角色。",
@@ -446,115 +510,132 @@
"Systems Initializing": "系統初始化中", "Systems Initializing": "系統初始化中",
"TapPay Integration": "TapPay 支付串接", "TapPay Integration": "TapPay 支付串接",
"TapPay Integration Settings Description": "喬睿科技支付串接設定", "TapPay Integration Settings Description": "喬睿科技支付串接設定",
"Target": "目標",
"Tax ID (Optional)": "統一編號 (選填)", "Tax ID (Optional)": "統一編號 (選填)",
"Temperature": "溫度", "Temperature": "溫度",
"TermID": "終端代號 (TermID)", "TermID": "終端代號 (TermID)",
"The image is too large. Please upload an image smaller than 1MB.": "圖片檔案太大,請上傳小於 1MB 的圖片。",
"The Super Admin role cannot be deleted.": "超級管理員角色不可刪除。", "The Super Admin role cannot be deleted.": "超級管理員角色不可刪除。",
"The Super Admin role is immutable.": "超級管理員角色不可修改。", "The Super Admin role is immutable.": "超級管理員角色不可修改。",
"The Super Admin role name cannot be modified.": "超級管理員角色的名稱無法修改。", "The Super Admin role name cannot be modified.": "超級管理員角色的名稱無法修改。",
"The image is too large. Please upload an image smaller than 1MB.": "圖片檔案太大,請上傳小於 1MB 的圖片。",
"This role belongs to another company and cannot be assigned.": "此角色屬於其他公司,無法指派。", "This role belongs to another company and cannot be assigned.": "此角色屬於其他公司,無法指派。",
"Time": "時間", "Time": "時間",
"Time Slots": "時段組合", "Time Slots": "時段組合",
"Timer": "計時器", "Timer": "計時器",
"Timestamp": "時間戳記", "Timestamp": "時間戳記",
"to": "至", "To": "至",
"Today Cumulative Sales": "今日累積銷售", "Today Cumulative Sales": "今日累積銷售",
"Today's Transactions": "今日交易額", "Today's Transactions": "今日交易額",
"Total Connected": "總計連線數", "Total Connected": "總計連線數",
"Total Customers": "客戶總數", "Total Customers": "客戶總數",
"Total items": "總計 :count 項", "Total Daily Sales": "本日累計銷量",
"Total Logins": "總登入次數", "Total Logins": "總登入次數",
"Total Selected": "已選擇總數",
"Total Slots": "總貨道數",
"Total items": "總計 :count 項",
"Transfer Audit": "調撥單", "Transfer Audit": "調撥單",
"Transfers": "調撥單", "Transfers": "調撥單",
"Tutorial Page": "教學頁",
"Type": "類型", "Type": "類型",
"UI Elements": "UI元素", "UI Elements": "UI元素",
"Unified Operational Timeline": "整合式營運時序圖",
"Unknown": "未知", "Unknown": "未知",
"Update": "更新", "Update": "更新",
"Update Customer": "更新客戶", "Update Customer": "更新客戶",
"Update existing role and permissions.": "更新現有角色與權限設定。",
"Update Password": "更改密碼", "Update Password": "更改密碼",
"Update existing role and permissions.": "更新現有角色與權限設定。",
"Update your account's profile information and email address.": "更新您的帳號姓名、手機號碼與電子郵件地址。", "Update your account's profile information and email address.": "更新您的帳號姓名、手機號碼與電子郵件地址。",
"Upload New Images": "上傳新照片", "Upload New Images": "上傳新照片",
"Uploading new images will replace all existing images.": "上傳新照片將會取代所有現有照片。", "Uploading new images will replace all existing images.": "上傳新照片將會取代所有現有照片。",
"User": "一般用戶", "User": "一般用戶",
"user": "一般用戶",
"User Info": "用戶資訊", "User Info": "用戶資訊",
"Username": "使用者帳號", "Username": "使用者帳號",
"Users": "帳號數", "Users": "帳號數",
"Utilization Rate": "機台稼動率", "Utilization Rate": "機台稼動率",
"Utilization Timeline": "稼動時序",
"Utilization, OEE and Operational Intelligence": "稼動率、OEE 與營運情報",
"Valid Until": "合約到期日", "Valid Until": "合約到期日",
"Vending Page": "販賣頁",
"Venue Management": "場地管理", "Venue Management": "場地管理",
"View Details": "查看詳情", "View Details": "查看詳情",
"View Logs": "查看日誌", "View Logs": "查看日誌",
"vs Yesterday": "較昨日", "Waiting for Payment": "等待付款",
"Warehouse List": "倉庫清單", "Warehouse List": "倉庫清單",
"Warehouse List (All)": "倉庫列表(全)", "Warehouse List (All)": "倉庫列表(全)",
"Warehouse List (Individual)": "倉庫列表(個)", "Warehouse List (Individual)": "倉庫列表(個)",
"Warehouse Management": "倉庫管理", "Warehouse Management": "倉庫管理",
"Warehouse Permissions": "倉庫管理權限", "Warehouse Permissions": "倉庫管理權限",
"warehouses": "倉庫管理", "Warning": "即將過期",
"Warning": "警告",
"Warning: You are editing your own role!": "警告:您正在編輯目前使用的角色!", "Warning: You are editing your own role!": "警告:您正在編輯目前使用的角色!",
"Welcome Gift": "註冊成效禮", "Welcome Gift": "註冊成效禮",
"Welcome Gift Status": "來店禮",
"Yesterday": "昨日", "Yesterday": "昨日",
"You cannot assign permissions you do not possess.": "您無法指派您自身不具備的權限。", "You cannot assign permissions you do not possess.": "您無法指派您自身不具備的權限。",
"You cannot delete your own account.": "您無法刪除自己的帳號。", "You cannot delete your own account.": "您無法刪除自己的帳號。",
"Your email address is unverified.": "您的電子郵件地址尚未驗證。", "Your email address is unverified.": "您的電子郵件地址尚未驗證。",
"Your recent account activity": "最近的帳號活動", "Your recent account activity": "最近的帳號活動",
"menu.members": "會員管理", "accounts": "帳號管理",
"menu.machines": "機台管理", "admin": "管理",
"menu.app": "APP 運維", "analysis": "分析管理",
"menu.warehouses": "倉儲管理", "app": "APP 管理",
"menu.sales": "銷售報表", "audit": "稽核管理",
"basic-settings": "基本設定",
"basic.machines": "機台設定",
"basic.payment-configs": "客戶金流設定",
"companies": "客戶管理",
"data-config": "資料設定",
"data-config.sub-account-roles": "子帳號角色",
"data-config.sub-accounts": "子帳號管理",
"e.g. John Doe": "例如:張曉明",
"e.g. TWSTAR": "例如TWSTAR",
"e.g. Taiwan Star": "例如:台灣之星",
"e.g. johndoe": "例如xiaoming",
"e.g., Company Standard Pay": "例如:公司標準支付",
"e.g., Taipei Station": "例如:台北車站",
"files selected": "個檔案已選擇",
"items": "筆項目",
"john@example.com": "john@example.com",
"line": "Line 管理",
"machines": "機台管理",
"members": "會員管理",
"menu.analysis": "數據分析", "menu.analysis": "數據分析",
"menu.app": "APP 運維",
"menu.audit": "審核管理", "menu.audit": "審核管理",
"menu.remote": "遠端指令",
"menu.line": "LINE 配置",
"menu.reservation": "預約管理",
"menu.special-permission": "特殊權限",
"menu.data-config": "資料設定",
"menu.data-config.sub-accounts": "子帳號管理",
"menu.data-config.sub-account-roles": "子帳號角色",
"menu.basic": "基本管理", "menu.basic": "基本管理",
"menu.basic-settings": "基本設定", "menu.basic-settings": "基本設定",
"menu.basic.machines": "機台設定", "menu.basic.machines": "機台設定",
"menu.basic.payment-configs": "客戶金流設定", "menu.basic.payment-configs": "客戶金流設定",
"menu.data-config": "資料設定",
"menu.data-config.sub-account-roles": "子帳號角色",
"menu.data-config.sub-accounts": "子帳號管理",
"menu.line": "LINE 配置",
"menu.machines": "機台管理",
"menu.machines.list": "機台列表",
"menu.members": "會員管理",
"menu.permission": "權限設定", "menu.permission": "權限設定",
"menu.permissions": "權限管理", "menu.permissions": "權限管理",
"menu.permissions.companies": "客戶管理",
"menu.permissions.accounts": "帳號管理", "menu.permissions.accounts": "帳號管理",
"menu.permissions.companies": "客戶管理",
"menu.permissions.roles": "角色權限管理", "menu.permissions.roles": "角色權限管理",
"Select All": "全選", "menu.remote": "遠端指令",
"Deselect All": "取消全選", "menu.reservation": "預約管理",
"Sub-actions": "子項目", "menu.sales": "銷售報表",
"Quick Select": "快速選取", "menu.special-permission": "特殊權限",
"Total Selected": "已選擇總數", "menu.warehouses": "倉儲管理",
"Scale level and access control": "層級與存取控制", "of": "總計",
"Edit Role Permissions": "編輯角色權限", "permissions": "權限設定",
"Role Identification": "角色識別資訊",
"LEVEL TYPE": "層級類型",
"Affiliated Unit": "所屬單位",
"System Official": "系統層",
"Other Permissions": "其他權限",
"General permissions not linked to a specific menu.": "未連結到特定選單的一般權限。",
"Assign Machines": "分配機台",
"data-config.sub-accounts": "子帳號管理",
"data-config.sub-account-roles": "子帳號角色",
"basic.machines": "機台設定",
"basic.payment-configs": "客戶金流設定",
"permissions.companies": "客戶管理",
"permissions.accounts": "帳號管理", "permissions.accounts": "帳號管理",
"permissions.companies": "客戶管理",
"permissions.roles": "角色權限管理", "permissions.roles": "角色權限管理",
"Edit Sub Account Role": "編輯子帳號角色", "remote": "遠端管理",
"New Sub Account Role": "新增子帳號角色", "reservation": "預約系統",
"Full Access": "全機台授權", "roles": "角色權限",
"System Default": "系統預設", "sales": "銷售管理",
"Authorized Machines": "授權機台", "special-permission": "特殊權限",
"Assign": "分配所屬機台", "super-admin": "超級管理員",
"No machines available": "目前沒有可供分配的機台", "to": "至",
"Selected": "已選擇", "user": "一般用戶",
"Failed to fetch machine data.": "無法取得機台資料。", "vs Yesterday": "較昨日",
"Failed to save permissions.": "無法儲存權限設定。", "warehouses": "倉庫管理",
"An error occurred while saving.": "儲存時發生錯誤。" "待填寫": "待填寫"
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,129 +0,0 @@
@extends('layouts.admin')
@section('title', __('Machine Logs'))
@section('content')
<div class="space-y-10 pb-20">
<!-- Header -->
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-6">
<div>
<h1 class="text-3xl font-black text-slate-800 dark:text-white tracking-tight font-display">{{ __('Machine Logs') }}</h1>
<p class="text-sm font-bold text-slate-500 dark:text-slate-400 mt-1 uppercase tracking-widest">{{ __('Monitor events and system activity across your vending fleet.') }}</p>
</div>
</div>
<!-- Machine Logs Content (Integrated Card - Same as Roles) -->
<div class="luxury-card rounded-3xl p-8 animate-luxury-in">
<!-- Toolbar (Integrated Filters) -->
<div class="flex flex-col md:flex-row md:items-center justify-between gap-6 mb-10">
<form method="GET" action="{{ route('admin.machines.logs') }}" class="flex flex-wrap items-center gap-4 group">
<div class="space-y-1">
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest px-1">{{ __('Machine') }}</label>
<select name="machine_id" class="luxury-select text-xs h-9 py-0" onchange="this.form.submit()">
<option value="">{{ __('All Machines') }}</option>
@foreach($machines as $machine)
<option value="{{ $machine->id }}" {{ request('machine_id') == $machine->id ? 'selected' : '' }}>
{{ $machine->name }}
</option>
@endforeach
</select>
</div>
<div class="space-y-1">
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest px-1">{{ __('Level') }}</label>
<select name="level" class="luxury-select text-xs h-9 py-0" onchange="this.form.submit()">
<option value="">{{ __('All Levels') }}</option>
<option value="info" {{ request('level') == 'info' ? 'selected' : '' }}>{{ __('Info') }}</option>
<option value="warning" {{ request('level') == 'warning' ? 'selected' : '' }}>{{ __('Warning') }}</option>
<option value="error" {{ request('level') == 'error' ? 'selected' : '' }}>{{ __('Error') }}</option>
</select>
</div>
<div class="flex items-end gap-2 mt-5">
<button type="submit" class="p-2 rounded-xl bg-slate-50 dark:bg-slate-800 text-slate-400 hover:text-cyan-500 transition-colors border border-slate-200 dark:border-slate-700">
<svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
</button>
<a href="{{ route('admin.machines.logs') }}" class="p-2 rounded-xl bg-slate-50 dark:bg-slate-800 text-slate-400 hover:text-rose-500 transition-colors border border-slate-200 dark:border-slate-700">
<svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/><path d="M3 3v5h5"/></svg>
</a>
</div>
<input type="hidden" name="per_page" value="{{ request('per_page', 10) }}">
</form>
</div>
<div class="overflow-x-auto">
<table class="w-full text-left border-separate border-spacing-y-0">
<thead>
<tr class="bg-slate-50/50 dark:bg-slate-900/10">
<th class="px-6 py-4 text-[11px] font-black text-slate-400 dark:text-slate-500 uppercase tracking-[0.2em] border-b border-slate-100 dark:border-slate-800">{{ __('Timestamp') }}</th>
<th class="px-6 py-4 text-[11px] font-black text-slate-400 dark:text-slate-500 uppercase tracking-[0.2em] border-b border-slate-100 dark:border-slate-800">{{ __('Machine') }}</th>
<th class="px-6 py-4 text-[11px] font-black text-slate-400 dark:text-slate-500 uppercase tracking-[0.2em] border-b border-slate-100 dark:border-slate-800">{{ __('Level') }}</th>
<th class="px-6 py-4 text-[11px] font-black text-slate-400 dark:text-slate-500 uppercase tracking-[0.2em] border-b border-slate-100 dark:border-slate-800">{{ __('Message Content') }}</th>
</tr>
</thead>
<tbody class="divide-y divide-slate-50 dark:divide-slate-800/80">
@forelse ($logs as $log)
<tr class="group hover:bg-slate-50/80 dark:hover:bg-slate-800/40 transition-all duration-300">
<td class="px-6 py-6 transition-colors">
<div class="text-[13px] font-bold font-display tracking-widest text-slate-600 dark:text-slate-300">
{{ $log->created_at->format('Y-m-d') }}
</div>
<div class="text-[11px] font-bold text-slate-400 dark:text-slate-500 tracking-wider mt-0.5 uppercase">
{{ $log->created_at->format('H:i:s') }}
</div>
</td>
<td class="px-6 py-6 transition-colors">
<a href="{{ route('admin.machines.show', $log->machine_id) }}" class="inline-flex items-center gap-2 group/link">
<span class="text-base font-extrabold text-slate-800 dark:text-slate-100 group-hover/link:text-cyan-500 transition-colors">
{{ $log->machine->name ?? __('Unknown') }}
</span>
<svg class="w-3.5 h-3.5 text-slate-300 dark:text-slate-600 opacity-0 group-hover/link:opacity-100 transition-all -translate-x-2 group-hover/link:translate-x-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="3"><path stroke-linecap="round" stroke-linejoin="round" d="M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3"/></svg>
</a>
</td>
<td class="px-6 py-6 transition-colors">
@php
$badgeStyles = [
'info' => 'bg-cyan-500/10 text-cyan-600 dark:text-cyan-400 border-cyan-500/20',
'warning' => 'bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20',
'error' => 'bg-rose-500/10 text-rose-600 dark:text-rose-400 border-rose-500/20',
];
$currentStyle = $badgeStyles[$log->level] ?? 'bg-slate-500/10 text-slate-600 border-slate-500/20';
@endphp
<span class="inline-flex items-center px-3 py-1 rounded-lg border text-[11px] font-black uppercase tracking-wider {{ $currentStyle }}">
<span class="w-1.5 h-1.5 rounded-full bg-current mr-2 animate-pulse"></span>
{{ __(ucfirst($log->level)) }}
</span>
</td>
<td class="px-6 py-6 transition-colors">
<p class="text-[14px] font-medium text-slate-700 dark:text-slate-200 leading-relaxed max-w-xl">
{{ $log->message }}
</p>
@if($log->context)
<div class="mt-3 p-4 rounded-xl bg-slate-50/50 dark:bg-[#0f172a]/50 border border-slate-100 dark:border-slate-800/50 group-hover:bg-white dark:group-hover:bg-[#0f172a] transition-colors">
<pre class="text-[10px] font-bold text-slate-400 dark:text-slate-500 whitespace-pre-wrap break-all">{{ json_encode($log->context, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) }}</pre>
</div>
@endif
</td>
</tr>
@empty
<tr>
<td colspan="4" class="px-6 py-24 text-center">
<div class="flex flex-col items-center">
<div class="p-4 rounded-full bg-slate-50 dark:bg-slate-800/50 mb-4 border border-slate-100 dark:border-slate-800/50">
<svg class="w-8 h-8 text-slate-300 dark:text-slate-600" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M21 7v10c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2V7c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2z"/><path d="M12 11l4-4"/><path d="M8 15l4-4"/></svg>
</div>
<span class="text-sm font-bold text-slate-400 dark:text-slate-500 uppercase tracking-widest">{{ __('No matching logs found') }}</span>
</div>
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
<div class="mt-8 border-t border-slate-100 dark:border-slate-800 pt-6">
{{ $logs->links('vendor.pagination.luxury') }}
</div>
</div>
</div>
@endsection

View File

@@ -30,6 +30,12 @@
<p class="text-xs text-gray-500 uppercase">{{ __('Last Heartbeat') }}</p> <p class="text-xs text-gray-500 uppercase">{{ __('Last Heartbeat') }}</p>
<p class="text-sm">{{ $machine->last_heartbeat_at ?? __('N/A') }}</p> <p class="text-sm">{{ $machine->last_heartbeat_at ?? __('N/A') }}</p>
</div> </div>
<div>
<p class="text-xs text-gray-500 uppercase">{{ __('Current Page') }}</p>
<p class="text-sm font-bold shadow-sm inline-block px-2 py-1 rounded bg-slate-100 dark:bg-slate-800 text-slate-700 dark:text-slate-300">
{{ $machine->current_page_label ?: '-' }}
</p>
</div>
</div> </div>
</div> </div>

View File

@@ -0,0 +1,351 @@
@extends('layouts.admin')
@section('header')
<h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight font-display tracking-tight">
{{ __('Machine Management') }} > {{ __('Utilization Rate') }}
</h2>
@endsection
@section('content')
<div class="space-y-8" x-data="utilizationDashboard()">
<!-- Page Header & Global Discovery -->
<div class="flex flex-col md:flex-row md:items-end md:justify-between gap-6">
<div>
<h1 class="text-4xl font-black text-slate-800 dark:text-white tracking-tighter font-display">{{ __('Fleet Performance') }}</h1>
<p class="text-sm font-bold text-slate-500 dark:text-slate-400 mt-1 uppercase tracking-[0.2em]">{{ __('Utilization, OEE and Operational Intelligence') }}</p>
</div>
<!-- Global Date Filter -->
<div class="flex items-center bg-white dark:bg-slate-900 rounded-2xl p-1.5 shadow-sm border border-slate-200 dark:border-slate-800 animate-luxury-in">
<button @click="prevDay()" class="p-2 hover:bg-slate-50 dark:hover:bg-slate-800 rounded-xl transition-colors text-slate-400"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M15 19l-7-7 7-7" /></svg></button>
<div class="px-4 text-sm font-black text-slate-700 dark:text-slate-200 font-mono tracking-tight" x-text="startDate"></div>
<button @click="nextDay()" class="p-2 hover:bg-slate-50 dark:hover:bg-slate-800 rounded-xl transition-colors text-slate-400"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M9 5l7 7-7 7" /></svg></button>
</div>
</div>
<!-- Fleet Summary Cards (Always visible) -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 animate-luxury-in">
<!-- Avg OEE Card -->
<div class="luxury-card p-8 rounded-3xl bg-white dark:bg-slate-900 border border-slate-100 dark:border-slate-800 relative group overflow-hidden shadow-lg">
<p class="text-xs font-black text-slate-400 dark:text-slate-500 uppercase tracking-widest flex items-center gap-2 mb-4">
<span class="w-2 h-2 rounded-full bg-cyan-500"></span>
{{ __('Fleet Avg OEE') }}
</p>
<div class="flex items-baseline gap-2">
<span class="text-6xl font-black text-slate-900 dark:text-white font-display tracking-tighter" x-text="fleetStats.avgOee">0</span>
<span class="text-2xl font-black text-cyan-500/80">%</span>
</div>
<div class="mt-8 flex items-center justify-between text-[10px] font-bold uppercase tracking-widest text-slate-400">
<span>{{ __('Target Performance') }}</span>
<span class="text-emerald-500 text-xs">85%</span>
</div>
</div>
<!-- Online Count Card -->
<div class="luxury-card p-8 rounded-3xl bg-white dark:bg-slate-900 border border-slate-100 dark:border-slate-800 relative group overflow-hidden shadow-lg">
<p class="text-xs font-black text-slate-400 dark:text-slate-500 uppercase tracking-widest flex items-center gap-2 mb-4">
<span class="w-2 h-2 rounded-full bg-emerald-500 animate-pulse"></span>
{{ __('Machines Online') }}
</p>
<div class="flex items-baseline gap-2">
<span class="text-6xl font-black text-slate-900 dark:text-white font-display tracking-tighter" x-text="fleetStats.onlineCount">0</span>
<span class="text-2xl font-black text-emerald-500/80">/ {{ count($machines) }}</span>
</div>
<div class="mt-8 flex items-center justify-between text-[10px] font-bold uppercase tracking-widest text-slate-400">
<span>{{ __('Current Operational State') }}</span>
<span class="text-emerald-500 text-xs">LIVE</span>
</div>
</div>
<!-- Total Sales Card -->
<div class="luxury-card p-8 rounded-3xl bg-white dark:bg-slate-900 border border-slate-100 dark:border-slate-800 relative group overflow-hidden shadow-lg">
<p class="text-xs font-black text-slate-400 dark:text-slate-500 uppercase tracking-widest flex items-center gap-2 mb-4">
<span class="w-2 h-2 rounded-full bg-amber-500"></span>
{{ __('Total Daily Sales') }}
</p>
<div class="flex items-baseline gap-2">
<span class="text-6xl font-black text-slate-900 dark:text-white font-display tracking-tighter" x-text="fleetStats.totalSales">0</span>
<span class="text-2xl font-black text-amber-500/80">{{ __('Orders') }}</span>
</div>
<div class="mt-8 flex items-center justify-between text-[10px] font-bold uppercase tracking-widest text-slate-400">
<span>{{ __('System Health') }}</span>
<div class="flex items-center gap-1.5 text-rose-500">
<span class="w-1.5 h-1.5 rounded-full bg-rose-500"></span>
<span x-text="fleetStats.alertCount">0</span> Alerts
</div>
</div>
</div>
</div>
<!-- Main Workspace -->
<div class="grid grid-cols-1 lg:grid-cols-4 gap-8">
<!-- Navigation: Machine Sidebar -->
<div class="lg:col-span-1">
<div class="luxury-card p-0 rounded-3xl overflow-hidden shadow-xl sticky top-24 border border-slate-100 dark:border-slate-800">
<div class="p-6 border-b border-slate-50 dark:border-slate-800 bg-slate-50/50 dark:bg-slate-900/50">
<h3 class="text-xs font-black text-slate-400 uppercase tracking-widest">{{ __('Select Machine') }}</h3>
</div>
<div class="max-h-[500px] overflow-y-auto custom-scrollbar divide-y divide-slate-50 dark:divide-slate-800">
@foreach($machines as $machine)
<button @click="selectMachine('{{ $machine->id }}', '{{ $machine->serial_no }}', '{{ addslashes($machine->name) }}')"
:class="selectedMachineId == '{{ $machine->id }}' ? 'bg-cyan-500/5 dark:bg-cyan-500/10' : 'hover:bg-slate-50/80 dark:hover:bg-slate-800/40'"
class="w-full text-left p-6 transition-all duration-300 relative group">
<div x-show="selectedMachineId == '{{ $machine->id }}'" class="absolute inset-y-0 left-0 w-1 bg-cyan-500 rounded-r-full"></div>
<div class="flex items-center gap-4">
<div class="flex-shrink-0 relative">
<div :class="selectedMachineId == '{{ $machine->id }}' ? 'bg-cyan-500 shadow-cyan-500/20' : 'bg-slate-100 dark:bg-slate-800'"
class="w-12 h-12 rounded-2xl flex items-center justify-center transition-all duration-500 shadow-lg group-hover:scale-110">
<svg class="w-6 h-6" :class="selectedMachineId == '{{ $machine->id }}' ? 'text-white' : 'text-slate-400'" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2.5"><path d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" /></svg>
</div>
<span class="absolute -top-1 -right-1 w-3 h-3 rounded-full border-2 border-white dark:border-slate-900"
:class="'{{ $machine->status }}' === 'online' ? 'bg-emerald-500' : 'bg-slate-400'"></span>
</div>
<div class="min-w-0">
<div class="text-sm font-black text-slate-800 dark:text-slate-100 truncate tracking-tight" :class="selectedMachineId == '{{ $machine->id }}' ? 'text-cyan-600 dark:text-cyan-400' : ''">{{ $machine->name }}</div>
<div class="text-[10px] font-mono font-bold text-slate-400 uppercase tracking-[0.2em] mt-0.5">{{ $machine->serial_no }}</div>
</div>
</div>
</button>
@endforeach
</div>
</div>
</div>
<!-- Detail: Metrics & Insights -->
<div class="lg:col-span-3 space-y-8">
<template x-if="selectedMachineId">
<div class="animate-luxury-in space-y-8">
<!-- OEE Triple Gauges -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<div class="luxury-card p-6 rounded-3xl text-center">
<div id="gauge-availability" class="mx-auto h-40"></div>
<h4 class="text-[10px] font-black text-slate-400 uppercase tracking-widest -mt-4">{{ __('Availability') }}</h4>
</div>
<div class="luxury-card p-6 rounded-3xl text-center">
<div id="gauge-performance" class="mx-auto h-40"></div>
<h4 class="text-[10px] font-black text-slate-400 uppercase tracking-widest -mt-4">{{ __('Performance') }}</h4>
</div>
<div class="luxury-card p-6 rounded-3xl text-center">
<div id="gauge-quality" class="mx-auto h-40"></div>
<h4 class="text-[10px] font-black text-slate-400 uppercase tracking-widest -mt-4">{{ __('Quality') }}</h4>
</div>
</div>
<!-- Unified Timeline Chart -->
<div class="luxury-card p-8 rounded-3xl relative overflow-hidden">
<div class="flex items-center justify-between mb-8">
<div>
<h3 class="text-xl font-black text-slate-800 dark:text-white tracking-tight">{{ __('Unified Operational Timeline') }}</h3>
<p class="text-[10px] font-bold text-slate-500 uppercase tracking-widest mt-1">{{ __('Connectivity vs Sales Correlation') }}</p>
</div>
<div class="flex items-center gap-4">
<div class="flex items-center gap-2">
<span class="w-3 h-1 rounded-full bg-cyan-500"></span>
<span class="text-[10px] font-black text-slate-400 uppercase tracking-widest">連線狀態</span>
</div>
<div class="flex items-center gap-2">
<span class="w-3 h-3 rounded-full bg-amber-500"></span>
<span class="text-[10px] font-black text-slate-400 uppercase tracking-widest">銷售事件</span>
</div>
</div>
</div>
<div id="unified-timeline" class="w-full min-h-[350px]"></div>
<div x-show="loading" class="absolute inset-0 bg-white/60 dark:bg-slate-900/60 backdrop-blur-[2px] z-20 flex items-center justify-center">
<div class="flex flex-col items-center gap-3">
<div class="w-8 h-8 border-4 border-cyan-500/20 border-t-cyan-500 rounded-full animate-spin"></div>
<span class="text-[10px] font-black text-slate-400 uppercase tracking-widest">Aggregating intelligence...</span>
</div>
</div>
</div>
</div>
</template>
<!-- Initial State -->
<template x-if="!selectedMachineId">
<div class="luxury-card p-24 rounded-3xl flex flex-col items-center justify-center text-center opacity-80 border-dashed border-2 border-slate-200 dark:border-slate-800">
<div class="w-24 h-24 rounded-full bg-slate-50 dark:bg-slate-800/50 flex items-center justify-center mb-8">
<svg class="w-12 h-12 text-slate-300 dark:text-slate-600" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-2.123-7.947c-2.333 0-4.66.307-6.877.914m-1.5-3.619l1.125-1.125m0 0l1.125 1.125m-1.125-1.125V3h-.75m-6.75 4.5V3h-.75m2.25 13.5v3.25a2.25 2.25 0 01-2.25 2.25h-5.25a2.25 2.25 0 01-2.25-2.25V5.25A2.25 2.25 0 015.25 3H12m1.5 12l1.125-1.125m0 0l1.125 1.125m-1.125-1.125V18" /></svg>
</div>
<h3 class="text-2xl font-black text-slate-400 dark:text-slate-600 tracking-tighter">{{ __('Select a machine to deep dive') }}</h3>
<p class="text-sm font-bold text-slate-400 mt-2 uppercase tracking-widest">{{ __('Real-time OEE analysis awaits') }}</p>
</div>
</template>
</div>
</div>
</div>
@push('scripts')
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
<script>
function utilizationDashboard() {
return {
selectedMachineId: '',
selectedMachineSn: '',
selectedMachineName: '',
startDate: new Date().toISOString().split('T')[0],
loading: false,
fleetStats: { avgOee: 0, onlineCount: 0, totalSales: 0, alertCount: 0 },
charts: {},
prevDay() {
let d = new Date(this.startDate);
d.setDate(d.getDate() - 1);
this.startDate = d.toISOString().split('T')[0];
this.fetchData();
},
nextDay() {
let d = new Date(this.startDate);
d.setDate(d.getDate() + 1);
this.startDate = d.toISOString().split('T')[0];
this.fetchData();
},
init() {
// Fleet stats from server/mock
this.fleetStats = {
avgOee: 72.4,
onlineCount: Number("{{ count($machines->where('status', 'online')) }}") || 0,
totalSales: 128,
alertCount: 3
};
},
selectMachine(id, sn, name) {
this.selectedMachineId = id;
this.selectedMachineSn = sn;
this.selectedMachineName = name;
this.fetchData();
},
async fetchData() {
if (!this.selectedMachineId) return;
this.loading = true;
try {
const response = await fetch(`/admin/machines/${this.selectedMachineId}/utilization-ajax?date=${this.startDate}`);
const result = await response.json();
if (result.success) {
const stats = result.data.overview;
const chartData = result.data.chart;
this.$nextTick(() => {
this.renderGauges(stats);
this.renderTimeline(chartData);
});
}
} catch (error) {
console.error('Failed to fetch utilization data:', error);
} finally {
this.loading = false;
}
},
renderGauges({availability, performance, quality}) {
const isDark = document.documentElement.classList.contains('dark');
const trackColor = isDark ? '#1e293b' : '#f1f5f9';
const createGauge = (id, value, color) => {
const el = document.querySelector(`#${id}`);
if (!el) return;
if (this.charts[id]) this.charts[id].destroy();
const options = {
series: [value],
chart: { height: 200, type: 'radialBar', sparkline: { enabled: true } },
plotOptions: {
radialBar: {
hollow: { size: '65%' },
dataLabels: {
name: { show: false },
value: {
offsetY: 10,
fontSize: '22px',
fontWeight: 900,
fontFamily: 'Outfit',
color: isDark ? '#fff' : '#1e293b',
formatter: (v) => v + '%'
}
},
track: { background: trackColor }
}
},
colors: [color],
stroke: { lineCap: 'round' }
};
this.charts[id] = new ApexCharts(el, options);
this.charts[id].render();
};
createGauge('gauge-availability', availability, '#06b6d4');
createGauge('gauge-performance', performance, '#f59e0b');
createGauge('gauge-quality', quality, '#10b981');
},
renderTimeline(chartData) {
const el = document.querySelector("#unified-timeline");
if (!el) return;
if (this.charts['timeline']) this.charts['timeline'].destroy();
const isDark = document.documentElement.classList.contains('dark');
const options = {
series: [
{
name: '{{ __("OEE.Activity") }}',
type: 'rangeBar',
data: chartData.uptime || []
},
{
name: '{{ __("OEE.Sales") }}',
type: 'scatter',
data: chartData.sales || []
}
],
chart: {
height: 350,
toolbar: { show: false },
background: 'transparent',
fontFamily: 'Outfit'
},
plotOptions: {
bar: {
horizontal: true,
barHeight: '40%',
rangeBarGroupRows: true
}
},
xaxis: {
type: 'datetime',
labels: { style: { colors: isDark ? '#94a3b8' : '#64748b', fontWeight: 700 } }
},
yaxis: {
labels: { style: { colors: isDark ? '#94a3b8' : '#64748b', fontWeight: 700 } }
},
markers: { size: 6, colors: ['#f59e0b'], strokeColors: '#fff', strokeWidth: 2 },
grid: { borderColor: isDark ? '#1e293b' : '#f1f5f9', strokeDashArray: 4 },
legend: { show: false },
tooltip: {
theme: isDark ? 'dark' : 'light',
x: { format: 'HH:mm' }
},
noData: {
text: '{{ __("No machines available") }}',
align: 'center',
verticalAlign: 'middle',
style: { color: isDark ? '#475569' : '#94a3b8', fontSize: '14px', fontFamily: 'Outfit' }
}
};
this.charts['timeline'] = new ApexCharts(el, options);
this.charts['timeline'].render();
}
}
}
</script>
@endpush
@endsection

View File

@@ -80,83 +80,91 @@
} }
// 3. 處理最後一個動作/頁面 // 3. 處理最後一個動作/頁面
if ($lastSegment !== 'index') { $pageLabel = match($lastSegment) {
$pageLabel = match($lastSegment) { 'index' => match($segments[1] ?? '') {
'edit' => str_starts_with($routeName, 'profile') ? null : __('Edit'), 'members' => __('Member List'),
'create' => __('Create'), 'machines' => request()->input('tab') === 'expiry' ? __('Expiry Management') : __('Machine List'),
'show' => __('Detail'), 'warehouses' => __('Warehouse List (All)'),
'logs' => __('Machine Logs'), 'sales' => __('Sales Records'),
'permissions' => __('Machine Permissions'), 'analysis' => __('Analysis Management'),
'utilization' => __('Utilization Rate'), 'audit' => __('Audit Management'),
'expiry' => __('Expiry Management'), 'permission' => __('Permission Settings'),
'maintenance' => __('Maintenance Records'),
'ui-elements' => __('UI Elements'),
'helper' => __('Helper'),
'questionnaire' => __('Questionnaire'),
'games' => __('Games'),
'timer' => __('Timer'),
'personal' => __('Warehouse List (Individual)'),
'stock-management' => __('Stock Management'),
'transfers' => __('Transfers'),
'purchases' => __('Purchases'),
'replenishments' => __('Replenishments'),
'replenishment-records' => __('Replenishment Records'),
'machine-stock' => __('Machine Stock'),
'staff-stock' => __('Staff Stock'),
'returns' => __('Returns'),
'pickup-codes' => __('Pickup Codes'),
'orders' => __('Orders'),
'promotions' => __('Promotions'),
'pass-codes' => __('Pass Codes'),
'store-gifts' => __('Store Gifts'),
'change-stock' => __('Change Stock'),
'machine-reports' => __('Machine Reports'),
'product-reports' => __('Product Reports'),
'survey-analysis' => __('Survey Analysis'),
'products' => __('Product Management'),
'advertisements' => __('Advertisement Management'),
'admin-products' => __('Admin Sellable Products'),
'accounts' => __('Account Management'),
'sub-accounts' => __('Sub Accounts'),
'sub-account-roles' => __('Sub Account Roles'),
'points' => __('Point Settings'),
'badges' => __('Badge Settings'),
'restart' => __('Machine Restart'),
'restart-card-reader' => __('Card Reader Restart'),
'checkout' => __('Remote Checkout'),
'lock' => __('Remote Lock'),
'change' => __('Remote Change'),
'dispense' => __('Remote Dispense'),
'official-account' => __('Line Official Account'),
'coupons' => __('Line Coupons'),
'stores' => __('Store Management'),
'time-slots' => __('Time Slots'),
'venues' => __('Venue Management'),
'reservations' => __('Reservations'),
'clear-stock' => __('Clear Stock'),
'apk-versions' => __('APK Versions'),
'discord-notifications' => __('Discord Notifications'),
'app-features' => __('APP Features'),
'roles' => __('Roles'),
'others' => __('Others'),
'ai-prediction' => __('AI Prediction'),
'data-config' => __('Data Configuration Permissions'),
'sales' => __('Sales Permissions'),
'machines' => __('Machine Management Permissions'),
'warehouses' => __('Warehouse Permissions'),
'analysis' => __('Analysis Permissions'),
'audit' => __('Audit Permissions'),
'remote' => __('Remote Permissions'),
'line' => __('Line Permissions'),
default => null, default => null,
}; },
'edit' => str_starts_with($routeName, 'profile') ? null : __('Edit'),
'create' => __('Create'),
'show' => __('Detail'),
'logs' => __('Machine Logs'),
'permissions' => __('Machine Permissions'),
'utilization' => __('Utilization Rate'),
'expiry' => __('Expiry Management'),
'maintenance' => __('Maintenance Records'),
'ui-elements' => __('UI Elements'),
'helper' => __('Helper'),
'questionnaire' => __('Questionnaire'),
'games' => __('Games'),
'timer' => __('Timer'),
'personal' => __('Warehouse List (Individual)'),
'stock-management' => __('Stock Management'),
'transfers' => __('Transfers'),
'purchases' => __('Purchases'),
'replenishments' => __('Replenishments'),
'replenishment-records' => __('Replenishment Records'),
'machine-stock' => __('Machine Stock'),
'staff-stock' => __('Staff Stock'),
'returns' => __('Returns'),
'pickup-codes' => __('Pickup Codes'),
'orders' => __('Orders'),
'promotions' => __('Promotions'),
'pass-codes' => __('Pass Codes'),
'store-gifts' => __('Store Gifts'),
'change-stock' => __('Change Stock'),
'machine-reports' => __('Machine Reports'),
'product-reports' => __('Product Reports'),
'survey-analysis' => __('Survey Analysis'),
'products' => __('Product Management'),
'advertisements' => __('Advertisement Management'),
'admin-products' => __('Admin Sellable Products'),
'accounts' => __('Account Management'),
'sub-accounts' => __('Sub Accounts'),
'sub-account-roles' => __('Sub Account Roles'),
'points' => __('Point Settings'),
'badges' => __('Badge Settings'),
'restart' => __('Machine Restart'),
'restart-card-reader' => __('Card Reader Restart'),
'checkout' => __('Remote Checkout'),
'lock' => __('Remote Lock'),
'change' => __('Remote Change'),
'dispense' => __('Remote Dispense'),
'official-account' => __('Line Official Account'),
'coupons' => __('Line Coupons'),
'stores' => __('Store Management'),
'time-slots' => __('Time Slots'),
'venues' => __('Venue Management'),
'reservations' => __('Reservations'),
'clear-stock' => __('Clear Stock'),
'apk-versions' => __('APK Versions'),
'discord-notifications' => __('Discord Notifications'),
'app-features' => __('APP Features'),
'roles' => __('Roles'),
'others' => __('Others'),
'ai-prediction' => __('AI Prediction'),
'data-config' => __('Data Configuration Permissions'),
'sales' => __('Sales Permissions'),
'machines' => __('Machine Management Permissions'),
'warehouses' => __('Warehouse Permissions'),
'analysis' => __('Analysis Permissions'),
'audit' => __('Audit Permissions'),
'remote' => __('Remote Permissions'),
'line' => __('Line Permissions'),
default => null,
};
if ($pageLabel) { if ($pageLabel) {
$links[] = [ $links[] = [
'label' => $pageLabel, 'label' => $pageLabel,
'active' => true 'active' => true
]; ];
}
} }
// 確保最後一個 link 是 active 的 // 確保最後一個 link 是 active 的

View File

@@ -56,11 +56,11 @@
</button> </button>
<div x-show="open" x-collapse> <div x-show="open" x-collapse>
<ul class="luxury-submenu" data-sidebar-sub> <ul class="luxury-submenu" data-sidebar-sub>
<li><a class="flex items-center gap-x-3.5 py-2 px-2.5 text-sm transition-colors rounded-lg {{ request()->routeIs('admin.machines.logs') ? 'text-slate-900 dark:text-white bg-slate-100 dark:bg-white/5' : 'text-slate-500 dark:text-slate-400 hover:text-slate-900 dark:hover:text-white' }}" href="{{ route('admin.machines.logs') }}">{{ __('Machine Logs') }}</a></li> @can('menu.machines.list')
<li><a class="flex items-center gap-x-3.5 py-2 px-2.5 text-sm transition-colors rounded-lg {{ request()->routeIs('admin.machines.index') ? 'text-slate-900 dark:text-white bg-slate-100 dark:bg-white/5' : 'text-slate-500 dark:text-slate-400 hover:text-slate-900 dark:hover:text-white' }}" href="{{ route('admin.machines.index') }}">{{ __('Machine List') }}</a></li> <li><a class="flex items-center gap-x-3.5 py-2 px-2.5 text-sm transition-colors rounded-lg {{ request()->routeIs('admin.machines.index') ? 'text-slate-900 dark:text-white bg-slate-100 dark:bg-white/5' : 'text-slate-500 dark:text-slate-400 hover:text-slate-900 dark:hover:text-white' }}" href="{{ route('admin.machines.index') }}">{{ __('Machine List') }}</a></li>
@endcan
<li><a class="flex items-center gap-x-3.5 py-2 px-2.5 text-sm transition-colors rounded-lg {{ request()->routeIs('admin.machines.utilization') ? 'text-slate-900 dark:text-white bg-slate-100 dark:bg-white/5' : 'text-slate-500 dark:text-slate-400 hover:text-slate-900 dark:hover:text-white' }}" href="{{ route('admin.machines.utilization') }}">{{ __('Utilization Rate') }}</a></li> <li><a class="flex items-center gap-x-3.5 py-2 px-2.5 text-sm transition-colors rounded-lg {{ request()->routeIs('admin.machines.utilization') ? 'text-slate-900 dark:text-white bg-slate-100 dark:bg-white/5' : 'text-slate-500 dark:text-slate-400 hover:text-slate-900 dark:hover:text-white' }}" href="{{ route('admin.machines.utilization') }}">{{ __('Utilization Rate') }}</a></li>
<li><a class="flex items-center gap-x-3.5 py-2 px-2.5 text-sm transition-colors rounded-lg {{ request()->routeIs('admin.machines.expiry') ? 'text-slate-900 dark:text-white bg-slate-100 dark:bg-white/5' : 'text-slate-500 dark:text-slate-400 hover:text-slate-900 dark:hover:text-white' }}" href="{{ route('admin.machines.expiry') }}">{{ __('Expiry Management') }}</a></li>
<li><a class="flex items-center gap-x-3.5 py-2 px-2.5 text-sm transition-colors rounded-lg {{ request()->routeIs('admin.machines.maintenance') ? 'text-slate-900 dark:text-white bg-slate-100 dark:bg-white/5' : 'text-slate-500 dark:text-slate-400 hover:text-slate-900 dark:hover:text-white' }}" href="{{ route('admin.machines.maintenance') }}">{{ __('Maintenance Records') }}</a></li> <li><a class="flex items-center gap-x-3.5 py-2 px-2.5 text-sm transition-colors rounded-lg {{ request()->routeIs('admin.machines.maintenance') ? 'text-slate-900 dark:text-white bg-slate-100 dark:bg-white/5' : 'text-slate-500 dark:text-slate-400 hover:text-slate-900 dark:hover:text-white' }}" href="{{ route('admin.machines.maintenance') }}">{{ __('Maintenance Records') }}</a></li>
</ul> </ul>
</div> </div>

View File

@@ -56,6 +56,7 @@ Route::prefix('v1')->middleware(['throttle:api'])->group(function () {
Route::post('machine/member/verify/B650', [App\Http\Controllers\Api\V1\App\MachineController::class, 'verifyMember']); Route::post('machine/member/verify/B650', [App\Http\Controllers\Api\V1\App\MachineController::class, 'verifyMember']);
// 交易、發票與出貨 (B600, B601, B602) // 交易、發票與出貨 (B600, B601, B602)
Route::post('machine/restock/B018', [App\Http\Controllers\Api\V1\App\MachineController::class, 'recordRestock']);
Route::post('B600', [App\Http\Controllers\Api\V1\App\TransactionController::class, 'store']); Route::post('B600', [App\Http\Controllers\Api\V1\App\TransactionController::class, 'store']);
Route::post('B601', [App\Http\Controllers\Api\V1\App\TransactionController::class, 'recordInvoice']); Route::post('B601', [App\Http\Controllers\Api\V1\App\TransactionController::class, 'recordInvoice']);
Route::post('B602', [App\Http\Controllers\Api\V1\App\TransactionController::class, 'recordDispense']); Route::post('B602', [App\Http\Controllers\Api\V1\App\TransactionController::class, 'recordDispense']);

View File

@@ -36,17 +36,17 @@ Route::middleware(['auth', 'verified', 'tenant.access'])->prefix('admin')->name(
Route::resource('point-rules', App\Http\Controllers\Admin\PointRuleController::class)->except(['show', 'create', 'edit']); Route::resource('point-rules', App\Http\Controllers\Admin\PointRuleController::class)->except(['show', 'create', 'edit']);
Route::resource('gift-definitions', App\Http\Controllers\Admin\GiftDefinitionController::class)->except(['show', 'create', 'edit']); Route::resource('gift-definitions', App\Http\Controllers\Admin\GiftDefinitionController::class)->except(['show', 'create', 'edit']);
// 3. 機台管理 Route::prefix('machines')->name('machines.')->group(function () {
Route::prefix('machines')->name('machines.')->group(function () {
Route::get('/logs', [App\Http\Controllers\Admin\MachineController::class , 'logs'])->name('logs');
// Route::get('/permissions', [App\Http\Controllers\Admin\MachineController::class , 'permissions'])->name('permissions'); // Merged into Sub-account Management // Route::get('/permissions', [App\Http\Controllers\Admin\MachineController::class , 'permissions'])->name('permissions'); // Merged into Sub-account Management
Route::get('/permissions/accounts/{user}', [App\Http\Controllers\Admin\MachineController::class, 'getAccountMachines'])->name('permissions.accounts.get'); Route::get('/permissions/accounts/{user}', [App\Http\Controllers\Admin\MachineController::class, 'getAccountMachines'])->name('permissions.accounts.get');
Route::post('/permissions/accounts/{user}', [App\Http\Controllers\Admin\MachineController::class, 'syncAccountMachines'])->name('permissions.accounts.sync'); Route::post('/permissions/accounts/{user}', [App\Http\Controllers\Admin\MachineController::class, 'syncAccountMachines'])->name('permissions.accounts.sync');
Route::get('/utilization', [App\Http\Controllers\Admin\MachineController::class , 'utilization'])->name('utilization'); Route::get('/utilization', [App\Http\Controllers\Admin\MachineController::class , 'utilization'])->name('utilization');
Route::get('/expiry', [App\Http\Controllers\Admin\MachineController::class , 'expiry'])->name('expiry'); Route::get('/{id}/utilization-ajax', [App\Http\Controllers\Admin\MachineController::class, 'utilizationData'])->name('utilization-ajax');
Route::get('/{machine}/slots-ajax', [App\Http\Controllers\Admin\MachineController::class, 'slotsAjax'])->name('slots-ajax');
Route::post('/{machine}/slots/expiry', [App\Http\Controllers\Admin\MachineController::class, 'updateSlotExpiry'])->name('slots.expiry.update');
Route::get('/{machine}/logs-ajax', [App\Http\Controllers\Admin\MachineController::class, 'logsAjax'])->name('logs-ajax');
Route::get('/maintenance', [App\Http\Controllers\Admin\MachineController::class , 'maintenance'])->name('maintenance'); Route::get('/maintenance', [App\Http\Controllers\Admin\MachineController::class , 'maintenance'])->name('maintenance');
} });
);
Route::resource('machines', App\Http\Controllers\Admin\MachineController::class); Route::resource('machines', App\Http\Controllers\Admin\MachineController::class);
// 4. APP管理 // 4. APP管理