sky121113
3293a76c91
[FIX] 庫存效期管理補上 MQTT 下發逾時自動解鎖
...
1. slotsAjax 的 is_pending 僅計入 1 分鐘內的 pending reload_stock 指令,超過視為逾時自動解鎖,避免機台未回 ACK 時介面永久卡住
2. updateSlot 重新下發時,逾時舊指令標記為 timeout、未逾時標記為 superseded,與 dispense 逾時邏輯一致
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 08:57:56 +08:00
sky121113
d1c7940db9
[PROMOTE] feat/expiry-clear-on-sellout → demo:售完清效期測試驗收
...
1. recordDispense 售完(stock=0)即清空貨道 expiry_date 與 batch_no,避免舊批效期殘留誤鎖新批貨
2. 新增 ExpiryClearOnSelloutMysqlTest 驗收測試
3. 同步併入 main 既有提交:每機台商品定價 + 補貨單/機台列表 RWD 修正(fcd0588、c5a3f99)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts:
# app/Services/Transaction/TransactionService.php
2026-06-23 17:24:12 +08:00
sky121113
e0532a539f
[FEAT] 售完即清空貨道效期與批號
...
1. recordDispense 扣庫存後,若 stock 歸 0 則一併清空 expiry_date 與 batch_no,避免舊批效期殘留:日後僅補 stock 未改效期時,update_inventory 不會把過期日下發、誤將新批貨鎖成「暫不販售」,與機台端「賣完清效期」對稱
2. 新增 ExpiryClearOnSelloutMysqlTest 驗證售完清效期行為
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 17:23:02 +08:00
sky121113
94a941e100
[FIX] backport 至 dev:每機台商品定價 + 機台列表 RWD + 多語系對齊
2026-06-23 16:43:46 +08:00
sky121113
fcd0588686
[RELEASE] feat/per-machine-product-pricing → main:每機台商品定價 + 補貨單/機台列表 RWD 修正上線
2026-06-23 16:36:31 +08:00
sky121113
c5a3f99113
[FIX] 每機台定價多語系三語對齊
...
1. en.json、ja.json 補齊定價功能 15 個新 key(原本只有 zh_TW 有)
2. zh_TW.json 依 ksort 重排,三語系 key 集合 100% 對齊(各 2620)
3. 斜線不逸出,JSON_UNESCAPED_SLASHES/UNICODE 格式
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 16:23:29 +08:00
sky121113
f37f41c5c3
[PROMOTE] feat/per-machine-product-pricing → demo:機台列表行動版補上硬體狀態
2026-06-23 16:15:32 +08:00
sky121113
8d951a64e6
[FIX] 機台列表行動版補上硬體狀態,與桌機資料對齊
...
1. 行動/平板卡片 Info Grid 新增「硬體狀態」欄位(原本僅桌機表格有,RWD 漏顯示)
2. 沿用桌機相同邏輯:下位機 hardware_status,啟用刷卡機時顯示 card_terminal_status,燈號配色一致
3. 欄位排於 Status 旁填滿兩欄列,標籤樣式遵循 Mobile Card Info Grid 規範
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 16:15:24 +08:00
sky121113
cfbe16c519
[PROMOTE] feat/per-machine-product-pricing → demo:定價頁麵包屑標籤
2026-06-23 16:07:48 +08:00
sky121113
3c1d5b73ed
[FEAT] 定價頁新增麵包屑標籤
...
1. breadcrumbs.blade.php 機台子頁對照新增 pricing => Machine Pricing,定價頁麵包屑正確顯示
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 16:07:42 +08:00
sky121113
5621cad1bf
[PROMOTE] feat/per-machine-product-pricing → demo:每機台商品定價 (WIP) 上 demo 測試
2026-06-23 15:55:14 +08:00
sky121113
3a793978b4
[REFACTOR] 每機台定價改置於機台主模組(自基本設定移出)
...
1. 路由 /{machine}/pricing、/{machine}/pricing (POST) 由 BasicSettings\MachineSettingController 移至 MachineController
2. pricing / updatePricing 方法搬遷至 Admin\MachineController
3. 視圖由 basic-settings/machines/pricing.blade.php 移至 machines/pricing.blade.php
4. 機台列表頁 index.blade.php 新增定價入口;移除基本設定 tab-machines.blade.php 內的舊入口
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 15:54:16 +08:00
sky121113
1685b858f9
[FEAT] 每機台商品定價 WIP 暫存
...
1. 新增 MachineProductPrice 模型與 machine_product_prices 資料表 migration
2. 機台設定頁新增定價分頁 pricing.blade.php
3. 調整 ProductCatalogService、MachineController、Machine 模型支援每機台價格
4. 補貨單修正前的進度暫存,待後續完成
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 15:38:14 +08:00
sky121113
0da3887aa6
[FIX] backport 至 dev:補貨單歸屬改以機台所綁公司為準
2026-06-23 15:34:22 +08:00
sky121113
8e0a30eb98
[PROMOTE] fix/replenishment-company-by-machine → demo:補貨單歸屬改以機台所綁公司為準
2026-06-23 15:34:14 +08:00
sky121113
db9769b209
[RELEASE] fix/replenishment-company-by-machine → main:補貨單歸屬改以機台所綁公司為準上線
2026-06-23 15:27:50 +08:00
sky121113
62d3242db5
[FIX] 補貨單歸屬改以機台所綁公司為準
...
1. storeReplenishment / autoReplenishment 建單時 company_id 由「建立者」改為「機台的 company_id」
2. 修正系統管理員為他公司機台建單時 company_id 被寫成 null,導致篩選列選公司及租戶帳號登入皆看不到補貨單
3. 新增 migration 依機台回填既有舊單據的 company_id
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 15:27:31 +08:00
sky121113
5a501eb199
[FIX] backport 至 dev:遠端強制重啟 APP 指令
2026-06-23 14:13:56 +08:00
sky121113
9e9ed4bc9e
[RELEASE] fix/remote-dispense → main:遠端強制重啟 APP 指令正式上線
2026-06-23 14:13:20 +08:00
sky121113
ecfbc904a7
[PROMOTE] fix/remote-dispense → demo:遠端強制重啟 APP 指令上 demo 測試
2026-06-23 14:06:07 +08:00
sky121113
871b223440
[FEAT] 遠端控制新增「強制重啟 APP」(reboot_force) 指令
...
1. RemoteController storeCommand 驗證白名單新增 reboot_force
2. ProcessCommandAck 將 reboot_force 納入維護類指令日誌記錄
3. 遠端控制頁新增強制重啟按鈕(琥珀色,提示卡死時使用,無視忙碌狀態)
4. 指令歷史篩選與庫存頁指令名稱對應補上 reboot_force
5. 三語系新增 Machine Force Reboot / command.reboot_force / 忙碌狀態提示,並 ksort 對齊
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 14:05:52 +08:00
sky121113
9856a68d84
[PROMOTE] dev → demo:領藥單 UI 改版、機台報表手機支付標籤、員工卡 hotfix
...
1. [FEAT] 領藥單頁面改套極簡奢華風 UI(對齊取貨碼):x-page-header、Alpine 建立彈窗、x-searchable-select 機台下拉、+/- 數量計數器、桌面表格+手機卡片、取消確認彈窗、luxury 分頁;新增 productsAjax 端點與路由;修正麵包屑顯示「領藥單」層級。
2. [FEAT] 機台報表付款類型對照表新增代碼 10「手機支付」(NFC 手機感應)標籤。
3. [FIX] 員工卡編輯彈窗回填所屬公司並防止 company_id 被洗為 null(backport hotfix 至 dev)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 13:36:13 +08:00
sky121113
f5cb9a8f7d
[FEAT] 領藥單頁面改套極簡奢華風 UI(對齊取貨碼)並修正麵包屑
...
1. 重寫 pharmacy-pickup/index.blade.php:改用 x-page-header、Alpine 建立彈窗、x-searchable-select 機台下拉、每項藥品 +/- 數量計數器、桌面表格+手機卡片、x-confirm-modal 取消確認、luxury 分頁,全面對齊取貨碼 UI。
2. PharmacyPickupController 新增 productsAjax():依機台 AJAX 回傳可領藥品清單(對齊取貨碼 slots-ajax 模式),並維持取物單模式+領藥開關雙閘驗證。
3. routes/web.php 新增 pharmacy-pickup/{machine}/products-ajax 路由(受 menu.sales.pharmacy-pickup 權限控管)。
4. breadcrumbs.blade.php 補上 pharmacy-pickup 對照,修正麵包屑斷層,正確顯示「領藥單」層級。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 13:33:44 +08:00
sky121113
eb5b75cf78
[FEAT] 機台報表付款類型新增「手機支付」標籤
...
1. AnalysisController::machineReports 付款類型對照表新增代碼 10 = Mobile Pay(NFC 手機感應)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 13:33:31 +08:00
sky121113
6b430bdd88
[FIX] backport hotfix 至 dev:修正員工卡編輯彈窗公司未回填 (Preline getInstance)
2026-06-23 11:40:30 +08:00
sky121113
a5291545a5
[FIX] backport hotfix 至 demo:修正員工卡編輯彈窗公司未回填 (Preline getInstance)
2026-06-23 11:40:26 +08:00
sky121113
7b6dc3cb8e
[FIX] 合併 hotfix:修正員工卡編輯彈窗 Preline getInstance 取錯物件導致公司未回填
2026-06-23 11:40:09 +08:00
sky121113
76409c5f21
[FIX] 員工卡編輯彈窗所屬公司仍未回填:修正 Preline getInstance 取錯物件
...
1. 接續前一個 hotfix:員工卡編輯彈窗的「所屬公司」下拉雖已部署字串轉型,仍顯示空白「選擇公司」。根因為 Preline v3 的 HSSelect.getInstance(target, true) 回傳的是 collection 包裝物件({id, element})而非元件實例,其上沒有 setValue,呼叫即丟 TypeError 並讓 $nextTick 回填中斷。
2. 移除錯誤的第二個參數 true,改以 window.HSSelect.getInstance(el) 取得真正實例(對齊全站 ads / welcome-gifts / pickup-codes 既有可運作寫法)。
3. 一併沿用 welcome-gifts 的穩健流程:先設原生 <select>.value 再呼叫 setValue,並保留數字轉字串、空值以 ' ' 對應 placeholder 的處理。
4. 影響範圍:僅 resources/views/admin/data-config/staff-cards/index.blade.php 之 openStaffModal 回填邏輯,無後端與資料異動。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 11:39:56 +08:00
sky121113
f415e138da
[FIX] backport hotfix 至 dev:員工卡編輯回填公司 + company_id 寫入保護
2026-06-23 11:27:01 +08:00
sky121113
ca3d3df398
[FIX] backport hotfix 至 demo:員工卡編輯回填公司 + company_id 寫入保護
2026-06-23 11:26:28 +08:00
sky121113
09d669cc7c
[FIX] 合併 hotfix:員工卡編輯彈窗回填公司並防止 company_id 被洗為 null
2026-06-23 11:25:11 +08:00
sky121113
99debbf259
[FIX] 員工卡編輯彈窗未回填所屬公司,並防止儲存時洗掉 company_id
...
1. 修正系統管理員開啟「編輯員工識別卡」時,所屬公司下拉顯示為「選擇公司」空值的問題:Preline 的 option value 為字串,原本直接以數字型別的 company_id 呼叫 setValue,嚴格比對失配導致無法回填,現統一轉為字串 (對齊 ads / welcome-gifts / pickup-codes 既有寫法)。
2. 強化 StaffCardController@update 的寫入安全 (RBAC 1.3):非系統管理員一律強制綁定自身 company_id;系統管理員若未帶入公司則保留原本歸屬,避免在上述空值狀態按下儲存時把 company_id 洗成 null,造成機台刷卡「查無此員工卡」的孤兒卡。
3. 影響範圍:資料設定 → 員工識別管理之新增/編輯彈窗 (resources/views/admin/data-config/staff-cards/index.blade.php) 與 App\Http\Controllers\Admin\StaffCardController;僅前端回填與後端寫入保護,不更動資料表結構與既有正常卡片資料。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 11:18:13 +08:00
root
2cecdba73a
[PROMOTE] dev → demo:領藥單(Pharmacy Pickup / Rx)功能晉升驗收
...
1. 領藥單後台模組:列表/建立/作廢/列印 QR,受 menu.sales.pharmacy-pickup 權限控管。
2. 機台「領藥單」開關(僅取物單模式可啟用);B660 取貨核銷擴充多貨道出貨清單、庫存不足嚴格擋關。
3. TransactionService 領藥單獨立冪等出貨流程;recordDispense 負庫存防呆、syncSlots 空清單防全量刪除。
4. 資料庫:orders 新增領藥單欄位、pickup_codes 之 slot_no 改 nullable(2 個 migration)。
5. 新增權限 menu.sales.pharmacy-pickup;三語系(zh_TW/en/ja)對齊補譯領藥單詞彙。
2026-06-23 02:32:43 +00:00
root
003ba9b1ad
[FEAT] 新增領藥單(Pharmacy Pickup / Rx)功能並強化出貨防呆
...
1. 領藥單後台:新增 PharmacyPickupController 與 PharmacyPickupService,提供領藥單列表/建立/作廢/列印 QR;routes/web.php 新增受 menu.sales.pharmacy-pickup 權限控管的路由群組,RoleSeeder 補該權限、sidebar 新增選單。
2. 訂單模型:Order 新增 order_type(sale/pharmacy_pickup)、pricing_slip_no、created_by 欄位與 AWAITING_PICKUP 狀態,新增 sales/pharmacyPickup scope 及 creator/pickupCode 關聯。
3. 機台設定:系統設定新增「領藥單」開關,僅在取物單(pickup_sheet)模式下可啟用、其他模式強制關閉;含後端防呆、toggle UI 與啟用功能標籤顯示。
4. 機台 API:getSettings FunctionSet 增加 PharmacyPickup 旗標;B660 取貨核銷擴充領藥單多貨道出貨清單回傳,庫存不足/無可用貨道時嚴格擋關且不消耗領藥碼。
5. 出貨流程:TransactionService finalizeTransaction 以 order_no(RX) 對應預建領藥單,走 finalizePharmacyDispense 獨立冪等出貨流程,並標記領藥碼已領與核銷日誌。
6. 防呆修正:recordDispense 庫存<=0 時不再扣減以避免負庫存;syncSlots 上報清單為空時不執行全量刪除,避免誤清貨道。
7. 資料庫:新增 2 個 migration(orders 增領藥單欄位、pickup_codes 之 slot_no 改 nullable);PickupCode 開放 status 可填、isValid 容許 null expires_at。
8. 多語系/文件:zh_TW/en/ja 三語系對齊補齊領藥單相關詞彙(27 個);config/api-docs.php 補 PharmacyPickup 旗標說明。
2026-06-23 02:19:17 +00:00
sky121113
e3593a4ba8
[RELEASE] demo → main:銷售紀錄流水號顯示優化上線
...
1. [FEAT] 銷售紀錄流水號顯示剝除機台序號前綴 — 新增 HasDisplayFlowId trait,訂單詳情與發票匯出改顯示乾淨流水號;DB 仍存完整 serial+flow_id 唯一值供去重/冪等/對帳判斷,含防禦性處理與測試。
備註:純顯示層變更,無資料庫遷移、無設定檔變更、無 RBAC 權限調整。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 09:32:41 +08:00
sky121113
d8495766e1
[PROMOTE] dev → demo:銷售紀錄流水號顯示優化
...
1. [FEAT] 銷售紀錄流水號顯示剝除機台序號前綴 — 新增 HasDisplayFlowId trait,訂單詳情與發票匯出改顯示乾淨流水號,DB 仍存完整 serial+flow_id 唯一值;含防禦性處理與測試。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 09:20:55 +08:00
sky121113
ae4556584f
[FEAT] 銷售紀錄流水號顯示剝除機台序號前綴
...
1. 新增 HasDisplayFlowId trait,提供 display_flow_id accessor:僅顯示時剝除 flow_id 開頭的機台序號前綴,DB 仍存完整 serial+flow_id 唯一值供去重/冪等/對帳判斷。
2. Order 與 Invoice 兩 Model 套用此 trait。
3. 訂單詳情面板 (order-detail-panel) 與發票匯出 (SalesController) 改顯示 display_flow_id,呈現乾淨易讀的機台流水號。
4. accessor 具防禦性:機台關聯為 null 或舊的未前綴資料皆原樣顯示,不誤剝。
5. 新增測試驗證 display_flow_id 正確剝除序號前綴且 DB 值維持完整。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 09:16:13 +08:00
sky121113
8a7cb4fcf7
[RELEASE] demo → main:交易冪等強化與銷售紀錄未付款單顯示修正正式上線
...
1. [FEAT] 交易結算冪等性強化與 flow_id 跨機台命名空間:finalizeTransaction 加機台序號前綴使全域唯一、終態檢查移入交易並加排他鎖防重複出貨/扣庫存/核銷、取貨碼與來店禮核銷防並發超量、含 FinalizeIdempotency/FinalizeStockMysql 測試。
2. [FIX] 銷售紀錄未付款單顯示:付款狀態「已棄單」改為「未支付」、非付款成功(未完成/支付失敗/未支付)的單出貨狀態統一顯示「--」,避免 delivery_status 預設值誤顯示為出貨成功;判斷收斂至 Order::hasDeliveryOutcome(),三語系對齊。
2026-06-18 17:29:21 +08:00
sky121113
eeb9a67577
[PROMOTE] dev → demo:交易冪等強化與銷售紀錄未付款單顯示修正晉升驗收
...
1. 交易結算冪等性強化與 flow_id 跨機台命名空間(含並發排他鎖、核銷防超量、測試)。
2. 銷售紀錄未付款單顯示:已棄單改未支付、未出貨統一顯示 --。
2026-06-18 17:24:24 +08:00
sky121113
b7e8401a99
[FIX] 銷售紀錄未付款單顯示:已棄單改未支付、未出貨顯示 --
...
1. 付款狀態「已棄單(abandoned)」顯示文字改為「未支付」;新增 Unpaid 語系、移除孤兒 Abandoned key,三語系(zh_TW/en/ja)對齊排序。
2. 出貨狀態:非付款成功(未完成 pending/支付失敗 failed/未支付 abandoned)的單從未出貨,一律顯示「--」,避免 delivery_status 欄位 DB 預設值 1 誤顯示為「出貨成功」。
3. 判斷邏輯收斂至 Order::hasDeliveryOutcome(),桌機表格、手機卡片、明細面板與匯出 delivery_status_label accessor 共用同一基準。
4. 補齊匯出訂單狀態對照表原本缺漏的 failed/abandoned 標籤。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 17:14:29 +08:00
sky121113
ddac862cee
[FEAT] 交易結算冪等性強化與 flow_id 跨機台命名空間
...
1. finalizeTransaction 將 flow_id 前綴機台序號(serial+rawFlowId)使其全域唯一,解決跨機台單機 flow_id 撞號問題;ACK 仍回傳原始 flow_id,App/outbox 對帳無感。
2. 終態冪等檢查移入 DB transaction 並對既有 order 加 lockForUpdate 排他鎖,防止兩個 worker 同時穿透 pending 而重複出貨/扣庫存/核銷。
3. 取貨碼(PickupCode)與來店禮(WelcomeGift)核銷加排他鎖,防並發 lost-update 使 usage_count 突破 usage_limit。
4. recordInvoice 的 RelateNumber 推導改為直接取用已前綴序號的 flow_id,與線上既有 serial+rawFlowId 逐字等價,不重複加序號。
5. 新增 FinalizeIdempotencyTest、FinalizeStockMysqlTest 與 phpunit.mysql.xml(MySQL-only DDL 測試設定)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 17:14:19 +08:00
sky121113
95ac9cc10d
[RELEASE] demo → main:電子發票強化與機台刷卡機健康狀態上線
...
1. [FEAT] 電子發票作廢權限控管、訂單/發票備註、作廢發票差異顯示
- 發票作廢限平台系統管理員(後端 403 守衛 + 前端隱藏)。
- orders/invoices 新增 remark 欄位,列表與訂單詳情、作廢視窗皆可編輯。
- 訂單列表已作廢發票以刪除線加「已作廢」標記。
2. [FEAT] 交易訂單與電子發票列表新增可編輯備註欄位(x-remark-cell 共用元件)。
3. [FIX] 電子發票列印限縮為僅統編發票,避免載具/捐贈列印失敗。
4. [FEAT] 機台刷卡機 (Nexsys 終端機) 健康狀態燈號與失敗日誌
- 信用卡/電子票證/手機支付共用同一台刷卡機,以交易結果維護燈號。
- finalize 成功消警、失敗解析回應碼寫 card_terminal 日誌。
- 僅基礎版且啟用刷卡機的機台顯示燈號與日誌分頁。
5. [STYLE] 銷售中心與 admin header 手機版響應式調整。
資料庫 migration(首次於正式站執行):
- add_remark_to_orders_and_invoices_tables(orders/invoices 加 nullable remark)。
- add_status_lookup_index_to_machine_logs(machine_logs 加複合索引,資料量大會短暫鎖表)。
- change_products_spec_to_text 已存在不重跑。
2026-06-18 14:06:23 +08:00
sky121113
e7acea8ffc
[PROMOTE] dev → demo:機台刷卡機健康狀態燈號功能晉升驗收
...
1. [FEAT] 機台刷卡機 (Nexsys 終端機) 健康狀態燈號與失敗日誌(df3c72e)
- 信用卡/電子票證/手機支付共用同一台刷卡機,以交易結果維護燈號。
- finalize 成功消警、失敗解析回應碼寫 card_terminal 日誌。
- 新增 NCCC 回應碼對照表與多語訊息、機台列表燈號與刷卡機日誌分頁。
2. [FEAT] 刷卡機狀態顯示限基礎版啟用機台,並加機台日誌查詢索引(fd954c8)
- show_card_terminal:僅 shopping_mode=basic 且啟用刷卡機者顯示燈號/分頁。
- 列表狀態欄文案調整(Sub-machine Status → Hardware Status)。
- machine_logs 加複合索引加速狀態查詢。
備註:
- migration change_products_spec_to_text 僅加 sqlite 守衛,demo 已執行過不會重跑、無實際影響。
- 新增 machine_logs 索引 migration 於 demo 部署執行;正式站資料量大建議離峰。
2026-06-18 13:49:05 +08:00
sky121113
fd954c80a0
[FEAT] 刷卡機狀態顯示限基礎版啟用機台,並加機台日誌查詢索引
...
1. Machine 新增 show_card_terminal 取值器:僅 shopping_mode=basic 且 card_terminal_enabled 的機台才呈現刷卡機燈號與日誌分頁(購物車模式或未啟用刷卡機者隱藏)。
2. 機台列表頁:刷卡機狀態燈號與「刷卡機日誌」分頁改以 show_card_terminal 控制顯示;openLogPanel 多帶 cardTerminalEnabled 參數,分頁不可見時自動退回機台狀態分頁。
3. 列表狀態欄文案調整:欄位標頭由「Sub-machine Status」改為「Hardware Status」,下位機燈號標籤改顯示「Sub-machine」,與新增的刷卡機燈號並列更清楚。
4. 新增 migration:machine_logs 加複合索引 (machine_id, type, is_resolved, level),加速列表頁逐台的狀態未解決日誌查詢(正式環境資料量大,建議離峰執行)。
5. CardTerminalStatusTest 新增 show_card_terminal 顯示條件測試(基礎版啟用才顯示、未啟用或非基礎版皆不顯示)。
6. 新增三語系 key(Hardware Status、Sub-machine),zh_TW/en/ja 對齊並 ksort 排序。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:44:22 +08:00
sky121113
df3c72e927
[FEAT] 機台刷卡機 (Nexsys 終端機) 健康狀態燈號與失敗日誌
...
1. 刷卡機共用判定:信用卡(1)、電子票證(2)、手機支付(10) 走同一台實體刷卡機,以交易結果維護燈號(刷卡機無斷線心跳)。
2. ProcessTransactionFinalized 新增 syncCardTerminalStatus:成功交易自動消除該機台未解決的 card_terminal 警告;失敗交易解析 payment_response 的 "| code=XXXX" 回應碼,寫一筆 type='card_terminal' 的 warning 日誌(warning 級不觸發 Discord)。
3. MachineService 新增 CARD_TERMINAL_CODE_MAP(NCCC/聯卡中心回應碼對照,值為英文翻譯鍵);MachineLog 依 card_code 重組多語可讀失敗原因。
4. Machine 模型新增 card_terminal_status 與 latest_card_terminal_log_time 取值器;MachineController 列表以 withCount + 相關子查詢預載彙總,避免 N+1。
5. 機台列表頁新增「刷卡機」狀態燈號(綠/琥珀/紅 + 最近異常時間)與「刷卡機日誌」分頁。
6. 文件更新:config/api-docs.php 與 api-technical-specs SKILL.md 補充 payment_type 說明(2/10 與 1 共用同一台刷卡機、補列 42 取物單與 100 遠端出貨)。
7. 既有 migration change_products_spec_to_text 加 sqlite 守衛,讓測試環境可跑(VARCHAR/TEXT 在 sqlite 等價且不支援 MODIFY)。
8. 新增 CardTerminalStatusTest 功能測試(18 斷言通過,涵蓋成功消警、失敗寫日誌、掃碼排除、多語訊息、N+1 預載路徑)。
9. 新增 25 組三語系 key(刷卡機狀態與回應碼),zh_TW/en/ja 對齊並 ksort 排序。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:09:05 +08:00
sky121113
1ec149a624
[PROMOTE] dev → demo:發票列印限縮統編 + 銷售中心 RWD 調整
...
1. [FIX] 電子發票列印限縮為僅統編發票,避免載具/捐贈列印失敗(69a1d02)
- printInvoice() 守衛與前端列印鈕改用 metadata['business_tax_id'] 判定。
- 非統編發票顯示「此發票無可列印紙本」。
- 新增兩組三語系 key。
2. [STYLE] 銷售中心與 admin header 手機版響應式調整(840052d)
- 三個 Tab 容器圓角/內距行動優先、搜尋欄手機滿版。
- admin layout 防水平溢出與行動版 header 間距調整。
備註:本次無 migration 變更。
2026-06-18 11:42:10 +08:00
sky121113
840052dd5a
[STYLE] 銷售中心與 admin header 手機版響應式調整
...
1. 銷售中心三個 Tab 容器圓角與內距改為行動優先(rounded-2xl sm:rounded-3xl、p-4 sm:p-6 lg:p-8)。
2. 訂單/發票/出貨三個列表的搜尋欄寬度改為手機滿版、桌面才套 min-w-[280px](w-full min-w-0 lg:min-w-[280px])。
3. admin layout:body 加 overflow-x-clip 防止水平溢出;行動版品牌字在窄螢幕隱藏、自動刷新與 logo 區塊調整間距與 shrink-0 避免擠壓。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:41:37 +08:00
sky121113
69a1d02fc7
[FIX] 電子發票列印限縮為僅統編發票,避免載具/捐贈列印失敗
...
1. 釐清綠界規則:InvoicePrint 僅能列印開立時 Print=1 的發票;本系統開立邏輯為「有統編才 Print=1」,故載具、捐贈、一般無統編 B2C 皆 Print=0,列印會回「取得發票列印網址失敗」。
2. 後端 printInvoice() 守衛改為檢查 metadata['business_tax_id'],非統編發票直接回「Only invoices with a tax ID can be printed」,取代原本僅擋捐贈(love_code)的舊邏輯。
3. 訂單詳情面板列印鈕顯示條件改為 business_tax_id 有值才顯示,非統編發票改顯示「此發票無可列印紙本」。
4. 新增三語系 key(Only invoices with a tax ID can be printed、This invoice has no printable copy),zh_TW/en/ja 對齊排序。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:41:26 +08:00
sky121113
f8a56f2b4e
[PROMOTE] dev → demo:交易訂單與發票列表備註欄位晉升驗收
...
1. [FEAT] 交易訂單與電子發票列表新增可編輯備註欄位(ae4c9fb)
- 新增 x-remark-cell 共用元件,列表內嵌備註編輯(AJAX PATCH + toast,不重整)。
- 交易訂單列表(桌面+手機)新增備註欄,接 order.remark。
- 電子發票列表(桌面+手機)新增備註欄,接 invoice.remark。
- 列表與訂單詳情面板共用同一 remark 欄位。
- 新增三語系 key「Add Remark」並對齊排序。
備註:本次無 migration 變更(remark 欄位已於前次晉升建立)。
2026-06-18 11:14:10 +08:00
sky121113
ae4c9fb93a
[FEAT] 交易訂單與電子發票列表新增可編輯備註欄位
...
1. 新增共用元件 x-remark-cell:列表內嵌備註編輯,點擊文字進入編輯,儲存走 AJAX PATCH 並以 toast 提示,不重整頁面;空白時顯示淡色「新增備註」提示。
2. 交易訂單列表(tab-orders)桌面表格於「發票號碼」與「操作」間新增備註欄,手機卡片於操作鈕上方新增備註區塊,接 order.remark,並同步調整空狀態 colspan。
3. 電子發票列表(tab-invoices)桌面表格於「關聯訂單」與「操作」間新增備註欄,手機卡片新增備註區塊,接 invoice.remark,並同步調整空狀態 colspan。
4. 列表與訂單詳情面板共用同一 remark 欄位,任一處編輯皆同步。
5. 新增三語系 key「Add Remark(新增備註)」,zh_TW/en/ja 對齊排序至 2573 鍵。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:13:41 +08:00