[PROMOTE] 晉升 demo 變更至 main 生產環境

1. [FIX] 補全下位機 Command(0x02) 狀態代碼與對齊三語系資源檔。
2. [FEAT] 新增溫控感測器離散事件接收處理機制與文件同步。
3. [FIX] 修正商品管理分頁排序不唯一導致的重複商品問題。
This commit is contained in:
sky121113 2026-06-02 16:41:56 +08:00
commit de8477bc7e
8 changed files with 194 additions and 14 deletions

View File

@ -9,6 +9,7 @@ use App\Jobs\Machine\ProcessHeartbeat;
use App\Jobs\Machine\ProcessMachineError;
use App\Jobs\Machine\ProcessTransaction;
use App\Jobs\Machine\ProcessStatus;
use App\Jobs\Machine\ProcessMachineEvent;
use App\Jobs\Transaction\ProcessInvoice;
use App\Jobs\Transaction\ProcessDispenseRecord;
use App\Jobs\Machine\ProcessCommandAck;
@ -97,6 +98,9 @@ class ListenMqttQueue extends Command
case 'status':
ProcessStatus::dispatch($serialNo, $payload);
break;
case 'event':
ProcessMachineEvent::dispatch($serialNo, $payload);
break;
case 'error':
ProcessMachineError::dispatch($serialNo, $payload);
break;

View File

@ -54,7 +54,7 @@ class ProductController extends Controller
}
}
$products = $productQuery->latest()->paginate($per_page, ['*'], 'product_page')->withQueryString();
$products = $productQuery->orderBy('created_at', 'desc')->orderBy('id', 'desc')->paginate($per_page, ['*'], 'product_page')->withQueryString();
// Categories Query
$categoryQuery = ProductCategory::with(['translations', 'company']);
@ -70,7 +70,7 @@ class ProductController extends Controller
});
}
$categories = $categoryQuery->latest()->paginate($per_page, ['*'], 'category_page')->withQueryString();
$categories = $categoryQuery->orderBy('created_at', 'desc')->orderBy('id', 'desc')->paginate($per_page, ['*'], 'category_page')->withQueryString();
$companies = $user->isSystemAdmin() ? Company::all() : collect();
// Settings for Modal (use current user company or fallback)
@ -140,7 +140,7 @@ class ProductController extends Controller
]);
}
$logs = $logQuery->latest()->paginate($per_page, ['*'], 'log_page')->withQueryString();
$logs = $logQuery->orderBy('created_at', 'desc')->orderBy('id', 'desc')->paginate($per_page, ['*'], 'log_page')->withQueryString();
return response()->json([
'success' => true,

View File

@ -0,0 +1,59 @@
<?php
namespace App\Jobs\Machine;
use App\Models\Machine\Machine;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
class ProcessMachineEvent implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $serialNo;
protected $payload;
/**
* Create a new job instance.
*/
public function __construct($serialNo, $payload)
{
$this->serialNo = $serialNo;
$this->payload = $payload;
}
/**
* Execute the job.
*/
public function handle(): void
{
$machine = Machine::withoutGlobalScopes()->where('serial_no', $this->serialNo)->first();
if (!$machine) {
Log::warning("ProcessMachineEvent: Machine not found [{$this->serialNo}]");
return;
}
$event = $this->payload['event'] ?? null;
if (!$event) {
Log::warning("ProcessMachineEvent: Missing event in payload", ['payload' => $this->payload]);
return;
}
// 寫入機台狀態日誌type 為 'status' 以便正確歸類顯示於「機台狀態」日誌中
$machine->logs()->create([
'company_id' => $machine->company_id,
'type' => 'status', // 忠實呈現於機台狀態中
'level' => 'info',
'message' => $event, // 例如 "fanon" 或 "fanoff"
'context' => $this->payload,
]);
Log::info("ProcessMachineEvent: Machine [{$machine->serial_no}] recorded event [{$event}] to status logs");
}
}

View File

@ -92,15 +92,34 @@ class MachineService
// ═══════════════════════════════════════════════════════════════
// 貨道與馬達狀態類 (Prefix: 02 - SLOT_STATUS)
// ═══════════════════════════════════════════════════════════════
'0201' => ['label' => 'Slot normal', 'level' => 'info'],
'0202' => ['label' => 'Product empty', 'level' => 'warning'],
'0203' => ['label' => 'Slot empty', 'level' => 'warning'],
'0205' => ['label' => 'Slot sensor blocked', 'level' => 'warning'],
'0206' => ['label' => 'Slot not closed', 'level' => 'warning'],
'0207' => ['label' => 'Slot motor error (0207)', 'level' => 'error'],
'0208' => ['label' => 'Slot motor error (0208)', 'level' => 'error'],
'0209' => ['label' => 'Slot motor error (0209)', 'level' => 'error'],
'0212' => ['label' => 'Hopper empty (0212)', 'level' => 'warning'],
'0201' => ['label' => 'Slot normal', 'level' => 'info'], // 貨道正常
'0202' => ['label' => 'Slot out of stock', 'level' => 'warning'], // 貨道缺貨
'0203' => ['label' => 'Slot does not exist', 'level' => 'warning'], // 貨道不存在
'0204' => ['label' => 'Slot suspended', 'level' => 'warning'], // 貨道暫停使用
'0205' => ['label' => 'Elevator contains items', 'level' => 'warning'], // 升降台裡面有物品
'0206' => ['label' => 'Pickup door not closed', 'level' => 'warning'], // 取貨口門沒關上
'0207' => ['label' => 'Elevator failure (0207)', 'level' => 'error'], // 升降機故障
'0208' => ['label' => 'Elevator self-check error', 'level' => 'error'], // 升降機自檢錯誤
'0209' => ['label' => 'Microwave pickup door close error (0209)', 'level' => 'error'], // 微波爐取貨口門關閉錯誤
'020B' => ['label' => 'Machine temperature exceeds limit', 'level' => 'warning'], // 機器超過設定溫度,暫停購買
'020C' => ['label' => 'Bento machine cooling water tank empty', 'level' => 'error'], // 盒飯機冷卻水箱缺水
'020D' => ['label' => 'Age verification required', 'level' => 'warning'], // 貨道需要年齡驗證
'020E' => ['label' => 'Water level too low', 'level' => 'warning'], // 水量過低
'020F' => ['label' => 'Weight sensor communication error', 'level' => 'error'], // 重量傳感器通訊錯誤
'0210' => ['label' => 'Microwave delivery door open error (0210)', 'level' => 'error'],// 微波爐進貨口門打開錯誤
'0211' => ['label' => 'Microwave delivery door close error (0211)', 'level' => 'error'],// 微波爐進貨口門關閉錯誤
'0212' => ['label' => 'Bento not detected', 'level' => 'warning'], // 沒檢測到盒飯
'0213' => ['label' => 'Bento heating', 'level' => 'info'], // 盒飯正在加熱
'0214' => ['label' => 'Microwave pickup door open error (0214)', 'level' => 'error'], // 微波爐取貨口門打開錯誤
'0215' => ['label' => 'Please remove bento from microwave', 'level' => 'warning'], // 請取出微波爐內盒飯
'0216' => ['label' => 'Support rod return error', 'level' => 'error'], // 撐桿回位錯誤
'0217' => ['label' => 'Main motor failure', 'level' => 'error'], // 主電機故障
'0218' => ['label' => 'Translation motor failure', 'level' => 'error'], // 平移電機故障
'0219' => ['label' => 'Support rod push error', 'level' => 'error'], // 撐桿推出錯誤
'0220' => ['label' => 'Elevator enter microwave error (0220)', 'level' => 'error'], // 升降台進去微波爐錯誤
'0221' => ['label' => 'Elevator exit microwave error (0221)', 'level' => 'error'], // 升降台出去微波爐錯誤
'0222' => ['label' => 'Microwave push rod push error (0222)', 'level' => 'error'], // 微波爐內推桿推出錯誤
'0223' => ['label' => 'Microwave push rod retract error (0223)', 'level' => 'error'], // 微波爐內推桿收回錯誤
// ═══════════════════════════════════════════════════════════════
// 機台整體狀態類 (Prefix: 54 - MACHINE_STATUS)

View File

@ -534,12 +534,26 @@ return [
'qos' => 0,
'description' => '用於機台連線與斷線的即時狀態同步。通常用於 MQTT 的遺囑訊息 (LWT) 設定,或由 Broker 連線事件觸發。',
'payload_parameters' => [
'status' => ['type' => 'string', 'description' => '連線狀態。接受值online, offline'],
'status' => ['type' => 'string', 'description' => '連線狀態。接受值online, offline, restarting'],
],
'payload_example' => [
'status' => 'online'
],
],
[
'name' => '機台硬體事件上報 (Event)',
'slug' => 'mqtt-event',
'action' => 'PUB',
'topic' => 'machine/{serial_no}/event',
'qos' => 1,
'description' => '用於機台上報各種獨立的硬體運行與物理事件。後台收到後會直接寫入機台狀態日誌中並進行多語系翻譯。',
'payload_parameters' => [
'event' => ['type' => 'string', 'description' => '事件識別碼。例如fanon (風扇開), fanoff (風扇關) 等。'],
],
'payload_example' => [
'event' => 'fanon'
],
],
[
'name' => '機台異常上報 (Error)',
'slug' => 'mqtt-error',

View File

@ -91,6 +91,7 @@
"Affiliated Unit": "Affiliated Unit",
"Affiliation": "Affiliation",
"After Qty": "After Qty",
"Age verification required": "Age verification required",
"Alert Severity Levels": "Alert Severity Levels",
"Alert Summary": "Alert Summary",
"Alert Switch": "Alert Switch",
@ -220,6 +221,9 @@
"Before Qty": "Before Qty",
"Belongs To": "Belongs To",
"Belongs To Company": "Belongs To Company",
"Bento heating": "Bento heating",
"Bento machine cooling water tank empty": "Bento machine cooling water tank low water",
"Bento not detected": "Bento not detected",
"Bill Acceptor": "Bill Acceptor",
"Bracelet drop not detected": "Bracelet drop not detected",
"Bracelet scan failed": "Bracelet scan failed",
@ -590,13 +594,18 @@
"Electronic Invoice": "Electronic Invoice",
"Electronic Invoices": "Electronic Invoices",
"Elevator belt self-check error": "Elevator belt self-check error",
"Elevator contains items": "Elevator contains items",
"Elevator descending": "Elevator descending",
"Elevator descent error": "Elevator descent error",
"Elevator enter microwave error": "Elevator enter microwave error",
"Elevator enter microwave error (0220)": "Elevator enter microwave error (0220)",
"Elevator exit microwave error": "Elevator exit microwave error",
"Elevator exit microwave error (0221)": "Elevator exit microwave error (0221)",
"Elevator failure": "Elevator failure",
"Elevator failure (0207)": "Elevator failure (0207)",
"Elevator rise error": "Elevator rise error",
"Elevator rising": "Elevator rising",
"Elevator self-check error": "Elevator self-check error",
"Elevator sensor error": "Elevator sensor error",
"Elevator support rod push error": "Elevator support rod push error",
"Elevator support rod return error": "Elevator support rod return error",
@ -1014,6 +1023,7 @@
"Machine not found": "Machine not found",
"Machine permissions updated successfully.": "Machine permissions updated successfully.",
"Machine settings updated successfully.": "Machine settings updated successfully.",
"Machine temperature exceeds limit": "Machine temperature exceeds limit, purchase suspended",
"Machine to Warehouse": "Machine to Warehouse",
"Machine to Warehouse Return": "Machine to Warehouse Return",
"Machine to warehouse returns": "Machine to warehouse returns",
@ -1023,6 +1033,7 @@
"Machines Online": "Machines Online",
"Main": "Main",
"Main Warehouses": "Main Warehouses",
"Main motor failure": "Main motor failure",
"Maintenance": "Maintenance",
"Maintenance Content": "Maintenance Content",
"Maintenance Date": "Maintenance Date",
@ -1102,17 +1113,23 @@
"Message Content": "Message Content",
"Message Display": "Message Display",
"Microwave delivery door close error": "Microwave delivery door close error",
"Microwave delivery door close error (0211)": "Microwave delivery door close error (0211)",
"Microwave delivery door closing": "Microwave delivery door closing",
"Microwave delivery door open error": "Microwave delivery door open error",
"Microwave delivery door open error (0210)": "Microwave delivery door open error (0210)",
"Microwave delivery door opening": "Microwave delivery door opening",
"Microwave door error": "Microwave door error",
"Microwave door opened": "Microwave door opened",
"Microwave pickup door close error": "Microwave pickup door close error",
"Microwave pickup door close error (0209)": "Microwave pickup door close error (0209)",
"Microwave pickup door closing": "Microwave pickup door closing",
"Microwave pickup door open error": "Microwave pickup door open error",
"Microwave pickup door open error (0214)": "Microwave pickup door open error (0214)",
"Microwave pickup door opening": "Microwave pickup door opening",
"Microwave push rod push error": "Microwave push rod push error",
"Microwave push rod push error (0222)": "Microwave push rod push error (0222)",
"Microwave push rod retract error": "Microwave push rod retract error",
"Microwave push rod retract error (0223)": "Microwave push rod retract error (0223)",
"Milk dispense timeout": "Milk dispense timeout",
"Min 8 characters": "Min 8 characters",
"Model": "Model",
@ -1427,6 +1444,7 @@
"Please enter version name": "Please enter version name",
"Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.",
"Please provide a download URL": "Please provide a download URL",
"Please remove bento from microwave": "Please remove bento from microwave",
"Please select a company": "Please select a company",
"Please select a company.": "Please select a company.",
"Please select a machine": "Please select a machine",
@ -1773,6 +1791,7 @@
"Slot No": "Slot No",
"Slot Status": "Slot Status",
"Slot Test": "Slot Test",
"Slot does not exist": "Slot does not exist",
"Slot empty": "Slot empty",
"Slot jammed": "Slot jammed",
"Slot motor error (0207)": "Slot motor error (0207)",
@ -1781,8 +1800,10 @@
"Slot normal": "Slot normal",
"Slot not closed": "Slot not closed",
"Slot not found": "Slot not found",
"Slot out of stock": "Slot out of stock",
"Slot report synchronized success": "Slot report synchronized success",
"Slot sensor blocked": "Slot sensor blocked",
"Slot suspended": "Slot suspended",
"Slot updated successfully.": "Slot updated successfully.",
"Slots": "Slots",
"Slots need replenishment": "Slots need replenishment",
@ -1881,6 +1902,8 @@
"Superseded by new adjustment": "Superseded by new adjustment",
"Superseded by new command": "Superseded by new command",
"Superseded by new command (Timeout)": "Superseded by new command (Timeout)",
"Support rod push error": "Support rod push error",
"Support rod return error": "Support rod return error",
"Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.",
"Survey Analysis": "Survey Analysis",
"Sync Ads": "Sync Ads",
@ -2020,6 +2043,7 @@
"Transfer order status tracking": "Transfer order status tracking",
"Transfer out": "Transfer out",
"Transfers": "Transfers",
"Translation motor failure": "Translation motor failure",
"Trigger": "Trigger",
"Trigger Dispense": "Trigger Dispense",
"Trigger Remote Dispense": "Trigger Remote Dispense",
@ -2161,8 +2185,10 @@
"Warranty End": "Warranty End",
"Warranty Service": "Warranty Service",
"Warranty Start": "Warranty Start",
"Water level too low": "Water level too low",
"Webhook Status": "Webhook Status",
"Webhook URL": "Webhook URL",
"Weight sensor communication error": "Weight sensor communication error",
"Welcome Gift": "Welcome Gift",
"Welcome Gift Code": "Welcome Gift Code",
"Welcome Gift Code (8 Digits)": "Welcome Gift Code (8 Digits)",
@ -2250,6 +2276,8 @@
"enabled": "enabled",
"error": "error",
"failed": "failed",
"fanoff": "Fan turned off",
"fanon": "Fan turned on",
"files selected": "files selected",
"hours ago": "hours ago",
"image": "image",

View File

@ -91,6 +91,7 @@
"Affiliated Unit": "所属ユニット",
"Affiliation": "所属",
"After Qty": "変動後数量",
"Age verification required": "年齢認証が必要です",
"Alert Severity Levels": "アラート深刻度",
"Alert Summary": "アラート概要",
"Alert Switch": "アラートスイッチ",
@ -220,6 +221,9 @@
"Before Qty": "変動前数量",
"Belongs To": "会社名",
"Belongs To Company": "所属会社",
"Bento heating": "弁当加熱中",
"Bento machine cooling water tank empty": "弁当機冷却水タンク空",
"Bento not detected": "弁当が検出されません",
"Bill Acceptor": "紙幣識別機",
"Bracelet drop not detected": "ブレスレット落下未検出",
"Bracelet scan failed": "ブレスレットスキャン失敗",
@ -590,13 +594,18 @@
"Electronic Invoice": "電子領収書",
"Electronic Invoices": "電子領収書",
"Elevator belt self-check error": "エレベーターベルト自己診断エラー",
"Elevator contains items": "リフト内に商品あり",
"Elevator descending": "エレベーター下降中",
"Elevator descent error": "エレベーター下降エラー",
"Elevator enter microwave error": "エレベーター電子レンジ進入エラー",
"Elevator enter microwave error (0220)": "リフト電子レンジ進入エラー (0220)",
"Elevator exit microwave error": "エレベーター電子レンジ退出エラー",
"Elevator exit microwave error (0221)": "リフト電子レンジ退出エラー (0221)",
"Elevator failure": "エレベーター故障",
"Elevator failure (0207)": "リフト故障 (0207)",
"Elevator rise error": "エレベーター上昇エラー",
"Elevator rising": "エレベーター上昇中",
"Elevator self-check error": "リフト自己診断エラー",
"Elevator sensor error": "エレベーターセンサーエラー",
"Elevator support rod push error": "エレベーター支柱押し出しエラー",
"Elevator support rod return error": "エレベーター支柱復帰エラー",
@ -1014,6 +1023,7 @@
"Machine not found": "機器が見つかりません",
"Machine permissions updated successfully.": "機器権限が正常に更新されました。",
"Machine settings updated successfully.": "機器設定が正常に更新されました。",
"Machine temperature exceeds limit": "設定温度超過のため購入一時停止",
"Machine to Warehouse": "機器から倉庫",
"Machine to Warehouse Return": "自販機から倉庫への返品",
"Machine to warehouse returns": "機器から倉庫への返却",
@ -1023,6 +1033,7 @@
"Machines Online": "オンライン機器",
"Main": "本庫",
"Main Warehouses": "本庫数",
"Main motor failure": "メインモーター故障",
"Maintenance": "メンテナンス",
"Maintenance Content": "メンテナンス内容",
"Maintenance Date": "メンテナンス日",
@ -1102,17 +1113,23 @@
"Message Content": "メッセージ内容",
"Message Display": "メッセージ表示",
"Microwave delivery door close error": "電子レンジ搬入口扉閉鎖エラー",
"Microwave delivery door close error (0211)": "電子レンジ搬入口扉閉エラー (0211)",
"Microwave delivery door closing": "電子レンジ搬入口扉閉鎖中",
"Microwave delivery door open error": "電子レンジ搬入口扉開放エラー",
"Microwave delivery door open error (0210)": "電子レンジ搬入口扉開エラー (0210)",
"Microwave delivery door opening": "電子レンジ搬入口扉開放中",
"Microwave door error": "電子レンジ扉エラー",
"Microwave door opened": "電子レンジ扉開放",
"Microwave pickup door close error": "電子レンジ取り出し口扉閉鎖エラー",
"Microwave pickup door close error (0209)": "電子レンジ取出扉閉エラー (0209)",
"Microwave pickup door closing": "電子レンジ取り出し口扉閉鎖中",
"Microwave pickup door open error": "電子レンジ取り出し口扉開放エラー",
"Microwave pickup door open error (0214)": "電子レンジ取出扉開エラー (0214)",
"Microwave pickup door opening": "電子レンジ取り出し口扉開放中",
"Microwave push rod push error": "電子レンジ内プッシャー押し出しエラー",
"Microwave push rod push error (0222)": "電子レンジプッシュロッド押し出しエラー (0222)",
"Microwave push rod retract error": "電子レンジ内プッシャー回収エラー",
"Microwave push rod retract error (0223)": "電子レンジプッシュロッド引き込みエラー (0223)",
"Milk dispense timeout": "牛乳抽出タイムアウト",
"Min 8 characters": "最低 8文字",
"Model": "機器モデル",
@ -1412,7 +1429,7 @@
"Pickup door closed": "受取扉が閉まりました",
"Pickup door closed (cart mode)": "取り出し口扉閉鎖成功",
"Pickup door error": "受取扉エラー",
"Pickup door not closed": "取り出し口扉未閉鎖",
"Pickup door not closed": "取出扉が閉まっていません",
"Pickup door opened (cart mode)": "取り出し口扉開放成功",
"Pickup door unlocked": "取り出し口扉開錠",
"Platform Operator": "プラットフォーム事業者",
@ -1427,6 +1444,7 @@
"Please enter version name": "Please enter version name",
"Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "商品の画像やスタイル付きコンポーネントを正しく印刷するために、ブラウザの印刷設定で『背景のグラフィック』を有効にしてください。",
"Please provide a download URL": "Please provide a download URL",
"Please remove bento from microwave": "電子レンジ内の弁当を取り出してください",
"Please select a company": "会社を選択してください",
"Please select a company.": "会社を選択してください。",
"Please select a machine": "機器を選択してください",
@ -1773,6 +1791,7 @@
"Slot No": "スロット番号",
"Slot Status": "スロット期限ステータス",
"Slot Test": "スロットテスト",
"Slot does not exist": "チャンネルが存在しません",
"Slot empty": "チャンネル在庫切れ",
"Slot jammed": "商品詰まり",
"Slot motor error (0207)": "チャンネルモーターエラー (0207)",
@ -1781,8 +1800,10 @@
"Slot normal": "チャンネル正常",
"Slot not closed": "チャンネル未閉鎖",
"Slot not found": "指定されたスロットが見つかりません",
"Slot out of stock": "チャンネル在庫切れ",
"Slot report synchronized success": "スロットレポートの同期に成功しました",
"Slot sensor blocked": "チャンネルセンサー遮蔽",
"Slot suspended": "チャンネル一時停止",
"Slot updated successfully.": "スロットが正常に更新されました。",
"Slots": "スロット数",
"Slots need replenishment": "補充が必要なスロット",
@ -1881,6 +1902,8 @@
"Superseded by new adjustment": "新しい調整により上書きされました",
"Superseded by new command": "新しいコマンドにより上書きされました",
"Superseded by new command (Timeout)": "新しいコマンドにより上書きされました (タイムアウト)",
"Support rod push error": "サポートロッド押し出しエラー",
"Support rod return error": "サポートロッド復帰エラー",
"Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "JPEG、PNG、SVGをサポート最大2MB。推奨比率横長または正方形。",
"Survey Analysis": "アンケート分析",
"Sync Ads": "広告を同期",
@ -2020,6 +2043,7 @@
"Transfer order status tracking": "移動伝票ステータス追跡",
"Transfer out": "移動(出)",
"Transfers": "移動伝票",
"Translation motor failure": "平行移動モーター故障",
"Trigger": "実行",
"Trigger Dispense": "出庫トリガー",
"Trigger Remote Dispense": "遠隔出庫をトリガー",
@ -2161,8 +2185,10 @@
"Warranty End": "保証終了",
"Warranty Service": "保証サービス",
"Warranty Start": "保証開始",
"Water level too low": "水量低下",
"Webhook Status": "Webhook ステータス",
"Webhook URL": "Webhook URL",
"Weight sensor communication error": "重量センサー通信エラー",
"Welcome Gift": "来店プレゼント",
"Welcome Gift Code": "来店プレゼントコード",
"Welcome Gift Code (8 Digits)": "ウェルカムギフトコード (8桁)",
@ -2250,6 +2276,8 @@
"enabled": "有効",
"error": "異常",
"failed": "失敗",
"fanoff": "ファン停止",
"fanon": "ファン起動",
"files selected": "個のファイルを選択しました",
"hours ago": "時間前",
"image": "画像",

View File

@ -91,6 +91,7 @@
"Affiliated Unit": "公司名稱",
"Affiliation": "所屬單位",
"After Qty": "異動後數量",
"Age verification required": "貨道需要年齡驗證",
"Alert Severity Levels": "告警重要級別",
"Alert Summary": "告警摘要",
"Alert Switch": "告警開關",
@ -220,6 +221,9 @@
"Before Qty": "異動前數量",
"Belongs To": "公司名稱",
"Belongs To Company": "公司名稱",
"Bento heating": "盒飯正在加熱",
"Bento machine cooling water tank empty": "盒飯機冷卻水箱缺水",
"Bento not detected": "沒檢測到盒飯",
"Bill Acceptor": "紙鈔機",
"Bracelet drop not detected": "沒檢測到手環掉入取貨斗",
"Bracelet scan failed": "沒掃碼到手環",
@ -590,13 +594,18 @@
"Electronic Invoice": "電子發票",
"Electronic Invoices": "電子發票",
"Elevator belt self-check error": "昇降機皮帶自檢錯誤",
"Elevator contains items": "升降台裡面有物品",
"Elevator descending": "昇降機正在下降",
"Elevator descent error": "昇降機下降錯誤",
"Elevator enter microwave error": "昇降台進微波爐錯誤",
"Elevator enter microwave error (0220)": "升降台進去微波爐錯誤",
"Elevator exit microwave error": "昇降台出微波爐錯誤",
"Elevator exit microwave error (0221)": "升降台出去微波爐錯誤",
"Elevator failure": "昇降機故障",
"Elevator failure (0207)": "升降機故障",
"Elevator rise error": "昇降機上升錯誤",
"Elevator rising": "昇降機正在上升",
"Elevator self-check error": "升降機自檢錯誤",
"Elevator sensor error": "昇降機感測器錯誤",
"Elevator support rod push error": "昇降台撐桿推出錯誤",
"Elevator support rod return error": "昇降台撐桿回位錯誤",
@ -1014,6 +1023,7 @@
"Machine not found": "找不到機台",
"Machine permissions updated successfully.": "機台權限已成功更新。",
"Machine settings updated successfully.": "機台設定已成功更新。",
"Machine temperature exceeds limit": "機器超過設定溫度,暫停購買",
"Machine to Warehouse": "機台對倉庫",
"Machine to Warehouse Return": "機台退庫至倉庫",
"Machine to warehouse returns": "機台退回倉庫",
@ -1023,6 +1033,7 @@
"Machines Online": "在線機台數",
"Main": "總倉",
"Main Warehouses": "總倉數量",
"Main motor failure": "主電機故障",
"Maintenance": "保養",
"Maintenance Content": "維修內容",
"Maintenance Date": "維修日期",
@ -1102,17 +1113,23 @@
"Message Content": "日誌內容",
"Message Display": "訊息顯示",
"Microwave delivery door close error": "微波爐進貨口門關閉錯誤",
"Microwave delivery door close error (0211)": "微波爐進貨口門關閉錯誤",
"Microwave delivery door closing": "正在關閉微波爐進貨口門",
"Microwave delivery door open error": "微波爐進貨口門打開錯誤",
"Microwave delivery door open error (0210)": "微波爐進貨口門打開錯誤",
"Microwave delivery door opening": "正在打開微波爐進貨口門",
"Microwave door error": "微波爐門異常",
"Microwave door opened": "微波爐門開啟",
"Microwave pickup door close error": "微波爐取貨口門關閉錯誤",
"Microwave pickup door close error (0209)": "微波爐取貨口門關閉錯誤",
"Microwave pickup door closing": "正在關閉微波爐取貨口門",
"Microwave pickup door open error": "微波爐取貨口門打開錯誤",
"Microwave pickup door open error (0214)": "微波爐取貨口門打開錯誤",
"Microwave pickup door opening": "正在打開微波爐取貨口門",
"Microwave push rod push error": "微波爐內推桿推出錯誤",
"Microwave push rod push error (0222)": "微波爐內推桿推出錯誤",
"Microwave push rod retract error": "微波爐內推桿收回錯誤",
"Microwave push rod retract error (0223)": "微波爐內推桿收回錯誤",
"Milk dispense timeout": "按鍵出奶超時",
"Min 8 characters": "至少 8 個字元",
"Model": "機台型號",
@ -1427,6 +1444,7 @@
"Please enter version name": "請輸入版本名稱",
"Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "請確保在瀏覽器列印設定中啟用「背景圖形」,以便正確列印商品圖片和樣式元件。",
"Please provide a download URL": "請提供下載連結",
"Please remove bento from microwave": "請取出微波爐內盒飯",
"Please select a company": "請選擇公司",
"Please select a company.": "請選擇公司",
"Please select a machine": "請選擇機台",
@ -1773,6 +1791,7 @@
"Slot No": "貨道編號",
"Slot Status": "貨道效期",
"Slot Test": "貨道測試",
"Slot does not exist": "貨道不存在",
"Slot empty": "貨道缺貨",
"Slot jammed": "貨道卡貨",
"Slot motor error (0207)": "貨道馬達錯誤 (0207)",
@ -1781,8 +1800,10 @@
"Slot normal": "貨道正常",
"Slot not closed": "貨道未關閉",
"Slot not found": "找不到指定貨道",
"Slot out of stock": "貨道缺貨",
"Slot report synchronized success": "貨道狀態同步成功",
"Slot sensor blocked": "貨道感測器受阻",
"Slot suspended": "貨道暫停使用",
"Slot updated successfully.": "貨道更新成功。",
"Slots": "貨道數",
"Slots need replenishment": "需要補貨的貨道",
@ -1881,6 +1902,8 @@
"Superseded by new adjustment": "此指令已由後面最新的調整所取代",
"Superseded by new command": "此指令已由後面最新的指令所取代",
"Superseded by new command (Timeout)": "指令逾時 (1 分鐘未回報),已被新指令覆蓋。",
"Support rod push error": "撐桿推出錯誤",
"Support rod return error": "撐桿回位錯誤",
"Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "支援 JPEG, PNG, SVG (最大 2MB)。建議比例:橫式或正方形。",
"Survey Analysis": "問卷分析",
"Sync Ads": "同步廣告",
@ -2020,6 +2043,7 @@
"Transfer order status tracking": "調撥單狀態追蹤",
"Transfer out": "調撥調出",
"Transfers": "調撥單",
"Translation motor failure": "平移電機故障",
"Trigger": "執行",
"Trigger Dispense": "觸發出貨",
"Trigger Remote Dispense": "觸發遠端出貨",
@ -2161,8 +2185,10 @@
"Warranty End": "保固結束",
"Warranty Service": "保固服務",
"Warranty Start": "保固起始",
"Water level too low": "水量過低",
"Webhook Status": "Webhook 狀態",
"Webhook URL": "Webhook 網址",
"Weight sensor communication error": "重量傳感器通訊錯誤",
"Welcome Gift": "來店禮",
"Welcome Gift Code": "來店禮代碼",
"Welcome Gift Code (8 Digits)": "來店禮代碼 (8位數)",
@ -2250,6 +2276,8 @@
"enabled": "啟用",
"error": "異常",
"failed": "失敗",
"fanoff": "風扇關",
"fanon": "風扇開",
"files selected": "個檔案已選擇",
"hours ago": "小時前",
"image": "圖片",