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
sky121113
80300dfc67
[PROMOTE] dev → demo:電子發票作廢權限與備註功能晉升驗收
...
1. [FEAT] 電子發票作廢權限控管、交易訂單與發票備註、作廢發票差異顯示(4766ec6)
- 發票作廢限平台系統管理員(後端 403 守衛 + 前端按鈕隱藏)。
- orders/invoices 新增 remark 欄位與更新端點,訂單詳情面板內嵌備註編輯。
- 作廢確認視窗加備註輸入框,寫入 invoice.remark。
- 訂單列表已作廢發票以刪除線加「已作廢」標記顯示。
- 新增 5 組三語系 key 並對齊排序。
備註:本次含新增 migration(orders.remark、invoices.remark,皆 nullable,非破壞性),demo 部署將自動套用。
2026-06-18 10:53:53 +08:00
sky121113
4766ec6939
[FEAT] 電子發票作廢權限控管、交易訂單與發票備註、作廢發票差異顯示
...
1. 發票作廢改為僅限平台系統管理員:voidInvoice() 加 isSystemAdmin() 403 守衛,訂單詳情面板與 tab-invoices 手機卡片作廢按鈕同步加 isSystemAdmin 顯示條件(列印鈕維持所有人可用)。
2. 新增 orders、invoices 各自獨立的 remark 欄位(migration + Model fillable),供管理者編輯內部備註。
3. 新增 updateOrderRemark / updateInvoiceRemark 端點與 PATCH 路由,AJAX 回傳 JSON、租戶隔離沿用 TenantScoped。
4. 訂單詳情面板加入訂單與發票備註的 Alpine 內嵌編輯(fetch + toast,不重整頁面),所有可進銷售中心者皆可編輯。
5. confirm-modal 加可選 slot;作廢確認視窗加備註輸入框,submitInvoiceAction() 送出前注入隱藏 remark,寫入 invoice.remark(不影響送綠界的 void_reason)。
6. 訂單列表(桌面與手機)已作廢發票改以灰色刪除線加「已作廢」標記顯示,index eager load 補載 invoice.status。
7. 新增 5 組三語系 key(Voided、Enter remark (optional)、Remark updated、No remark、Only system administrators can void invoices),zh_TW/en/ja 對齊排序至 2572 鍵。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 10:48:04 +08:00
sky121113
f01bffecd9
[RELEASE] demo → main:OTA 更新進度 ACK 處理修復上線
...
1. [FIX] OTA 更新進度 ACK 不應視為指令終態:update_app 指令收到 result="progress" 時維持 pending,僅將進度訊息寫入 note,避免 APK 下載/安裝過程被誤標為完成、與機台實際版本不符。
2026-06-17 20:03:17 +08:00
sky121113
3dc5bd6ee1
[PROMOTE] dev → demo:OTA 更新進度 ACK 處理修復
...
1. [FIX] OTA 更新進度 ACK 不應視為指令終態:update_app 指令收到 result="progress" 時維持 pending,僅將進度訊息寫入 note,避免下載過程被誤標為完成。
2026-06-17 20:00:45 +08:00
sky121113
bfaf0e7317
[FIX] OTA 更新進度 ACK 不應視為指令終態
...
1. ProcessCommandAck 新增 OTA 例外處理:當 command_type 為 update_app 且 result 為 "progress" 時,視為過程回報而非終態。
2. 進度訊息(如「Downloading 45%」「Installing...」)僅寫入 note 供後台檢視,指令維持 pending 狀態。
3. 避免 APK 下載/安裝長時程作業在「剛開始下載」即被誤標為完成,與機台實際版本不符。
4. 保留等待最終 success/failed ACK 的判定流程,並補上對應的 Log 記錄。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 19:59:15 +08:00
sky121113
159fa38fc0
[RELEASE] demo → main 正式上線:遠端管理租戶 500 修復與電子發票調整
...
1. [FIX] 遠端管理歷史紀錄套用機台授權過濾(whereHas('machine')),修復租戶帳號進入遠端管理與庫存歷史時 machine 為 null 導致的 500,並對 Blade 加上 null-safe 防禦;系統管理員不受影響。
2. [FIX] 開立電子發票前檢查機台電子發票開關(tax_invoice_enabled),未開啟者不開立。
3. [STYLE] 發票操作按鈕配置調整,作廢確認框改用自製 UI。
2026-06-17 11:17:38 +08:00
sky121113
338bd2914f
[PROMOTE] dev → demo:遠端管理租戶 500 修復
...
1. [FIX] 遠端管理歷史紀錄套用機台授權過濾(whereHas('machine')),修復租戶帳號(晟崴/中國醫)進入遠端管理與庫存歷史 tab 時因 machine 關聯為 null 導致的 500 錯誤;系統管理員不受影響仍可看全部。
2026-06-17 11:15:55 +08:00
sky121113
63219a31fb
[FIX] 遠端管理歷史紀錄套用機台授權過濾,修復租戶帳號 500
...
1. RemoteController index() 與 stock() 的歷史查詢加上 whereHas('machine'),透過 Machine 的 machine_access 全域作用域,使租戶僅能看到自己被授權機台的指令/補貨紀錄;系統管理員不受限制仍可看全部,符合 RBAC 機台以帳號授權原則。
2. 修復根因:先前重構將 Blade 改為對 machine 關聯直接呼叫 only(),租戶遇到未授權機台時 machine 為 null 導致整頁 500。
3. tab-history 與 tab-history-index 三處 $item->machine->only() 改為 null-safe(?->...?? null)作為防禦,避免未來其他查詢路徑漏過濾再次崩潰。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 11:15:05 +08:00
sky121113
04195caf9b
[PROMOTE] dev 晉升至 demo:電子發票開關閘門與發票操作 UI 調整
...
1. [FIX] 開立電子發票前檢查機台電子發票開關(tax_invoice_enabled),關閉時略過開立並記 log。
2. [STYLE] 發票操作按鈕配置調整,作廢確認框改用自製 UI。
2026-06-16 16:30:59 +08:00
sky121113
cbc4ae3749
[FIX] 開立電子發票前檢查機台電子發票開關
...
1. finalizeTransaction() 開立發票條件改為「機台 tax_invoice_enabled 開啟 AND 上報帶 invoice」,兩者皆成立才開立。
2. 機台關閉電子發票時:不建發票、不送綠界 IssueInvoiceJob,僅記 warning log(machine_id / flow_id / order_id)供追查。
3. 修正原本只判斷上報是否帶 invoice、完全忽略機台開關而可能誤開發票的問題。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 16:30:17 +08:00
sky121113
83015b841b
[RELEASE] 晉升 demo 至正式 main:商品匯入圖片、電子發票、多語系與支付類型
...
1. 商品匯入支援圖片:Excel 圖片檔名欄 + 圖片壓縮檔上傳,並改為全背景處理避免請求逾時。
2. 電子發票後台開立/對帳/補開/作廢流程,訂單 pending 狀態轉移與逾時交易自動清除。
3. 商品與機台多語系架構,商品詳情多行排版與欄位標題調整。
4. 新增 B016 機台系統設定回寫端點、B000 登入回應 identity 身分欄位。
5. 新增手機支付與 LINE Pay 官方直連支付類型,銷售掃碼支付方式細分(玉山/TayPay)。
6. 多項修正:取貨碼有效期限、訪客取貨 QR Code 公開路由、商品分類頁 Alpine 範圍、捐贈發票排除列印等。
7. 含 4 個資料庫遷移(spec 字典鍵、機台顯示語系回填、spec 改 TEXT、發票對帳狀態欄位)。
2026-06-16 14:54:14 +08:00
sky121113
7a90e8c6de
[STYLE] 發票操作按鈕配置調整與作廢確認框改用自製 UI
...
1. 發票列表「操作」欄:查詢、補開改為 icon 按鈕呈現,與檢視 icon 風格一致;補開改用自製確認框 UI(取代瀏覽器原生 confirm)。
2. 訂單詳情發票區塊:列印、作廢維持文字按鈕樣式(不改 icon);作廢改接自製確認框 UI,捐贈發票維持隱藏列印並顯示提示。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 14:32:43 +08:00
sky121113
33d3eba998
[PROMOTE] dev → demo:商品匯入改為全背景處理
...
1. [REFACTOR] 商品匯入改為全背景處理:Controller 存檔後派發 ProcessProductImportJob 並立即回應,背景一條龍完成商品與圖片匯入,避免大批匯入受 Cloudflare 100 秒等請求逾時限制;結果寫入操作日誌查詢。
2026-06-16 13:58:43 +08:00
sky121113
f1115825b2
[REFACTOR] 商品匯入改為全背景處理避免請求逾時
...
1. 新增 ProcessProductImportJob:背景一條龍處理解壓圖片、匯入商品(含圖片轉 WebP 入庫)、重建目錄快取、寫入結果摘要日誌並清除暫存。
2. ProductController::import 改為僅存檔(xlsx/圖片 zip)後派發背景 Job 並立即回應 202,避免大批匯入受 Cloudflare 100 秒等請求逾時限制。
3. 移除 AttachProductImagesJob,邏輯折入單一 ProcessProductImportJob。
4. 匯入 Modal 改為提示「已排入背景處理,完成後重新整理列表查看」,匯入結果改寫入操作日誌查詢。
5. 三語系新增背景處理提示文案並對齊排序。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 13:58:13 +08:00
sky121113
db0099f8c9
[PROMOTE] dev → demo:商品匯入圖片功能與銷售發票調整
...
1. [FEAT] 商品匯入支援圖片:Excel 新增「圖片檔名」欄,搭配圖片壓縮檔(上限 60MB)一併上傳,背景 Job 轉 WebP 入庫;含安全解壓防護與 retry_after 調整。
2. [FIX] 銷售掃碼支付方式細分為玉山/TayPay,並調整訂單詳情發票操作按鈕與相關分頁顯示。
2026-06-16 13:44:50 +08:00
sky121113
5875fe380e
[FIX] 銷售掃碼支付方式細分與訂單詳情發票操作調整
...
1. AnalysisController 與 Order 將付款方式 3 由「掃碼支付」細分為「掃碼支付-玉山」,並新增 11「掃碼支付-TayPay」。
2. 訂單詳情面板(order-detail-panel)發票操作按鈕(列印/作廢/勾稽/補開)改為一致的圖示按鈕樣式,並補上捐贈發票不可列印提示。
3. 銷售列表(sales/index)與發票分頁(tab-invoices)配合調整顯示。
4. 三語系新增 QR Code Payment - E.SUN/TayPay 文案並對齊排序。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 13:41:51 +08:00
sky121113
4a86be6cbf
[FEAT] 商品匯入支援圖片:Excel 圖片檔名欄 + 圖片壓縮檔背景處理
...
1. ProductImportService 新增 deferImages 模式與第 18 欄「圖片檔名」,匯入時收集 pending_images 供背景處理,並保留同步轉檔路徑。
2. 新增 AttachProductImagesJob:背景逐筆將圖片轉為 WebP 入庫、更新時刪除舊圖、重建目錄快取、清除暫存資料夾並寫入操作日誌。
3. ProductController::import 新增圖片 zip 上傳(上限 60MB)與安全解壓 extractImageZip:副檔名白名單、getimagesize 內容驗證、basename 防路徑穿越、項目數與單檔及總量上限防 zip bomb,解壓後派發背景 Job。
4. 匯入 Modal 新增選填的圖片 .zip 上傳欄位與背景處理提示文字。
5. config/queue.php 的 redis retry_after 提高至 1830(可由 REDIS_QUEUE_RETRY_AFTER 覆寫),避免長時間圖片任務未完成即被重複派發造成重複處理。
6. 三語系新增圖片匯入相關文案並對齊排序。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 13:41:22 +08:00
sky121113
372f2fc55d
[PROMOTE] 晉升捐贈發票列印修正至 demo
...
1. 捐贈發票排除列印按鈕並補上不可列印提示,後端加守衛防偽造 POST。
2026-06-16 11:41:56 +08:00
sky121113
02e4e99308
[FIX] 捐贈發票排除列印並補上不可列印提示
...
1. 訂單詳情發票區塊:新增可列印判斷(love_code 為空才可列印),捐贈發票不顯示列印按鈕,改顯示「捐贈發票無法列印」提示。
2. SalesController::printInvoice() 加入後端守衛,捐贈發票直接回傳明確錯誤訊息,防偽造 POST 呼叫綠界 InvoicePrint 取得查無資料。
3. 三語系新增 key「Donation invoices cannot be printed」,完成 zh_TW/en/ja 對齊排序。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:41:17 +08:00
sky121113
8256fcb623
[PROMOTE] dev -> demo:綠界電子發票設定條件式必填驗證
...
1. [FEAT] 綠界電子發票設定整組選填一旦啟用即全欄必填:store/update 加入 required_with 群組驗證、email 格式驗證、三語系訊息與表單動態必填提示。
2026-06-16 10:42:40 +08:00
sky121113
e81756833c
[FEAT] 綠界電子發票設定整組選填一旦啟用即全欄必填
...
1. PaymentConfigController 的 store/update 新增 ecpay_invoice 群組條件式驗證:四欄全空時整組選填,只要填寫任一欄(store_id/hash_key/hash_iv/email)即透過 required_with 強制其餘全部必填。
2. email 欄位加上格式驗證,從源頭避免空值導致綠界開立失敗(綠界規定 CustomerPhone 與 CustomerEmail 至少擇一,本系統 email 為唯一來源)。
3. 新增三語系驗證訊息與表單提示 key(zh_TW/en/ja),維持字母排序與斜線不逸出。
4. create/edit 表單加入動態必填提示:填入任一欄時 label 顯示紅色星號,並於各欄下方顯示 @error 驗證訊息。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 10:30:06 +08:00
sky121113
c0f6cb5ab6
[PROMOTE] 晉升銷售與發票模組修正至 demo
...
1. 修正訂單詳情發票狀態勾稽:徽章改為動態讀取狀態,新增列印發票功能並接上作廢按鈕。
2. 補齊銷售紀錄訂單狀態多語系並調整電子票證顯示。
2026-06-16 10:00:39 +08:00
sky121113
d3e455fc82
[FIX] 修正訂單詳情發票狀態勾稽與列印作廢按鈕
...
1. 訂單詳情發票徽章改為動態讀取 invoice->status,依 pending/issued/failed/void 顯示對應狀態與顏色,不再寫死「有效」。
2. 移除不存在的 invoice_time 欄位引用,開立時間改以 invoice_date 格式化顯示。
3. 作廢按鈕接上既有 admin.sales.invoices.void 路由,僅於 issued 狀態顯示並加上確認對話框。
4. 新增列印發票功能:EcpayInvoiceService::invoicePrint() 呼叫綠界 B2CInvoice/InvoicePrint 取得列印頁網址,SalesController::printInvoice() 加守衛後 302 導向,並新增 admin.sales.invoices.print 路由,按鈕以新分頁開啟。
5. 補齊三語系 key(Failed to get invoice print URL、Only issued invoices can be printed),完成 zh_TW/en/ja 對齊排序。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 09:57:37 +08:00
sky121113
07e8a6887c
[FIX] 補齊銷售紀錄訂單狀態多語系並調整電子票證顯示
...
1. 修正 resources/views/admin/sales/partials/tab-orders.blade.php:兩處 statusMap 補上 failed、abandoned 狀態(含 __() 多語系與徽章配色),解決訂單狀態改版後 failed/abandoned 顯示原始英文字串、未經多語系處理的問題。
2. 修正 resources/views/admin/sales/partials/order-detail-panel.blade.php:statusMap 與 labelMap 同步補上 failed、abandoned 狀態對應。
3. 更新 lang/zh_TW.json、en.json、ja.json:新增 Abandoned(已棄單 / Abandoned / 放棄済み);依需求將 E-Ticket (EasyCard/iPass) 的繁中顯示由「電子票證 (悠遊卡/一卡通)」改為「電子票證」;並清除 zh_TW.json 重複且無效的 Pending key,三語系完成對齊與字母排序。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 09:41:46 +08:00
sky121113
a32572facb
[PROMOTE] 晉升 dev 變更至 demo 環境
...
1. 實作訂單 pending 狀態轉移與逾時交易自動清除機制。
2. 實作電子發票後台開立、對帳、補開與作廢流程。
2026-06-16 08:52:49 +08:00
sky121113
b506d64dd3
[FEAT] 實作訂單 pending 狀態轉移與逾時交易自動清除機制
...
1. 修改 app/Models/Transaction/Order.php:新增訂單生命週期狀態常數與 TERMINAL_STATUSES 終態定義。
2. 修改 app/Services/Transaction/TransactionService.php:優化 processTransaction 與 finalizeTransaction 的冪等性邏輯,支援 pending 狀態訂單的狀態轉移,並拆分輔助函式 transitionOrder 與 createOrderItems。
3. 新增 app/Console/Commands/SweepAbandonedOrdersCommand.php:建立 orders:sweep-abandoned 指令,將停留在 pending 狀態超過 15 分鐘的逾時訂單標記為 abandoned。
4. 修改 app/Console/Kernel.php:將 orders:sweep-abandoned 定期清理指令註冊至 Schedule 排程中,設定每 5 分鐘執行一次。
2026-06-16 08:32:06 +08:00
sky121113
d9edeb0d5d
[FEAT] 電子發票後台開立、對帳、補開與作廢流程
...
1. 新增發票狀態機(pending/issued/failed/void)與冪等鍵 relate_number,並補上 last_checked_at、retry_count、voided_at、void_reason 欄位(migration 全欄位 nullable/有預設,對既有資料零影響並回填既有狀態)。
2. finalize 帶入發票輸入時改為先建 pending 發票,commit 後派發 IssueInvoiceJob 非同步向綠界開立,避免在交易內等待 ECPay 造成長交易。
3. 新增 EcpayInvoiceService 封裝綠界 B2C API(GetIssue 查詢、Issue 補開、Invalid 作廢),金鑰仍取自各機台 payment_configs。
4. 新增 invoices:reconcile 排程指令,每 5 分鐘對 pending 發票以 RelateNumber 向綠界 GetIssue 查證,補登 issued 或標記 failed 待補開。
5. SalesController 新增 reconcileInvoice/reissueInvoice/voidInvoice 三個後台操作端點與對應路由。
6. 發票列表改以 created_at 篩選(pending/failed 尚無 invoice_date 也能顯示),新增狀態過濾器與查詢/補開/作廢操作按鈕,狀態徽章改以狀態機顯示。
7. recordInvoice 改以 flow_id updateOrCreate 收斂,避免重送產生重複發票列;查詢機台/訂單時加上 withoutGlobalScopes。
8. 同步新增相關三語系字串並加入 ecpay_invoice base_url 設定。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 16:18:33 +08:00
sky121113
b8135acca9
[PROMOTE] 晉升手機支付與 LINE Pay 官方直連支付類型至 Demo
...
1. [FEAT] 新增支付碼 10(手機支付/NFC 行動支付)與 70(LINE Pay 官方直連),同步更新 Order.php、api-docs.php、api-technical-specs 規格與三語系。
2026-06-15 14:02:03 +08:00
sky121113
3d35218d6b
[FEAT] 新增手機支付與 LINE Pay 官方直連支付類型
...
1. Order.php getPaymentTypeLabels() 新增支付碼 10(手機支付/NFC 行動支付,走信用卡軌道)與 70(LINE Pay 官方直連,非 TapPay 底下的 30)。
2. config/api-docs.php B600 order.payment_type 說明字串補上 10 與 70 兩碼定義。
3. api-technical-specs SKILL.md Appendix A 支付類型對照表同步補上 10、70,並將 30 備註明確為「TapPay 底下的 LINE Pay」以區分兩條 LINE Pay 路線。
4. 三語系 (zh_TW/en/ja) 新增 "Mobile Pay"、"LINE Pay (Official)" 詞條,並重新 ksort 對齊字母排序。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 13:55:08 +08:00
sky121113
a44b981059
[PROMOTE] dev → demo:商品詳情多行排版
...
1. [FEAT] 商品詳情支援多行排版並原樣下發 APP(textarea 輸入、放寬字數上限至 2000、products.spec 改 TEXT)。
2026-06-15 11:44:22 +08:00
sky121113
9511ebe71f
[FEAT] 商品詳情支援多行排版並原樣下發 APP
...
1. 多語系輸入元件 product-locale-tabs 新增 multiline 參數,啟用時改用 textarea(保留換行、可垂直拖曳),名稱欄位維持單行 input。
2. 商品新增/編輯頁的「詳情」欄位改為多行輸入。
3. ProductController store/update 將 specs.* 與 spec 驗證上限由 255 放寬至 2000。
4. 新增 migration 將 products.spec 由 VARCHAR(255) 改為 TEXT,避免較長 zh_TW 詳情被截斷(translations.value 本即 TEXT)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 11:42:06 +08:00
sky121113
d84b2de1b7
[PROMOTE] dev → demo:商品多語系欄位標題改為「詳情」
...
1. [STYLE] 商品建立/編輯頁多語系區塊標題由「規格(多語系)」改為「詳情(多語系)」,三語系 JSON 同步換 key (Details (Multilingual));底層 spec 欄位與 B012 t060v03 不變。
2026-06-15 11:06:15 +08:00
sky121113
7f700df418
[STYLE] 商品多語系欄位標題由「規格」改為「詳情」
...
1. 商品建立/編輯頁多語系區塊標題改用 key Details (Multilingual),顯示為「詳情(多語系)」。
2. 三語系 JSON 以 Details (Multilingual) 取代 Specification (Multilingual)(zh_TW=詳情(多語系)/ en=Details (Multilingual) / ja=詳細(多言語)),維持字母排序與三語對齊。
3. 底層欄位 spec 與 B012 t060v03 不變,僅調整前台顯示標籤。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 10:22:20 +08:00
sky121113
7a97792b67
[PROMOTE] dev → demo:顯示語系選中態樣式調整
...
1. [STYLE] 機台系統設定彈窗「顯示語系」勾選按鈕與商品多語系 Tab:選中態由整顆深底反白改為淡 cyan 強調 (bg-cyan-500/10 + cyan 邊框/文字),降低對比、與 toggle 開關一致。
2026-06-15 09:31:17 +08:00
sky121113
a6caf0ded5
[STYLE] 調整顯示語系選中態為淡 cyan 強調
...
1. 機台系統設定彈窗「顯示語系」勾選按鈕:選中態由整顆深底反白 (bg-slate-900/dark:bg-white) 改為淡 cyan 強調 (bg-cyan-500/10 + border-cyan-500/40 + text-cyan-600/dark:text-cyan-300),降低對比、與 toggle 開關同一 cyan 語彙。
2. 商品名稱/規格多語系 Tab 元件 (product-locale-tabs):選中態比照改為相同淡 cyan 強調。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 09:24:30 +08:00
sky121113
6fe2ef4349
[PROMOTE] dev → demo:商品與機台多語系架構
...
1. [FEAT] 商品與機台多語系架構:config/locales.php 11 種語系白名單、公司機台語系聯集 (Company::activeLocalesFor)、商品名稱與規格多語系 (translations + spec_dictionary_key)、B012 新增 t060v01_i18n/t060v03_i18n (保留舊欄相容)、B014 新增 LangSet、機台設定顯示語系勾選 UI、商品編輯多語 Tab。
2. [FEAT] 系統設定同步:sync-settings 路由與 update_settings 指令類型、遠端歷史標籤、機台設定頁同步按鈕、B016 回寫測試。
3. [FIX] 修正多語系升級導致既有環境商品編輯器只剩繁中 Tab:回填 migration 補機台 languages=[zh_TW,en,ja]、商品編輯器 Tab 併入已有翻譯語系。
4. [DOCS] 同步更新 product_multilingual_spec 規格書、api-technical-specs SKILL、config/api-docs。
2026-06-15 09:10:07 +08:00