📋 電子券設定/維護
📝 文件版本
v1.0
📅 建立日期
2026-01-19
👤 撰寫者
Abby
🔄 最後更新
2026-01-27
📌 附註:
本文件為「電子券管理 / 電子券設定」頁面的按鈕功能詳細規格,所有 UI 互動應遵循此規格實作。如有異動需求,請更新本文件並通知相關人員。
1. 頁面概述
本頁面用於建立券種本身(定義這是什麼券),包含券種名稱、代碼、金額、有效期間、折扣等基本資訊設定,建立完成後可於「出券設定」頁面設定發券規則。
2. 主要功能說明
📋 功能說明
依據使用者輸入的篩選條件,查詢符合條件的電子券列表資料。可不帶入任何條件,查詢全部資料。
▲ 電子券設定查詢畫面
⚙️ 查詢欄位說明 (tblProduct + 關聯表)
| DB欄位 | 欄位名稱 | 資料類型 | 說明 | 必填 |
|---|---|---|---|---|
| cproductName | 電子券名稱 | 文字 | 模糊搜尋電子券名稱 例:新年折價券、春季特惠券、滿500折100 |
否 |
| cproductNo | 電子券代碼 | 文字 | 模糊搜尋電子券代碼 格式:[券種代碼][流水號] 例:Y001、I002、C003 |
否 |
| ceffDateFrom ceffDateTo |
有效期間 | 日期區間 | 篩選有效期間範圍 起始日期不得大於結束日期 格式:YYYY/MM/DD ~ YYYY/MM/DD |
否 |
| ccardType (tblCard) |
券種 | 下拉式選單 | 篩選券種類型 預設:全部(-1) 選項來源:TblCard 資料表(關聯 TblVendor、TblParameter) 格式:[廠商名稱]/[卡片名稱]/[卡片類型] 卡種類型:Y=Y卡(代理券)、Z=Z卡(儲值卡)、I=I卡(實體卡)、J=J卡(APP賣禮物卡)、L=L卡(禮物卡)、C=C卡、K=K卡(禮物券) |
否 |
| cproductBu (tblProductBu) |
使用場域 | 下拉式選單 | 篩選使用場域(依系統設定的使用場域) 預設:全部(0) 選項來源:TblBusinessUnit 資料表(CName 欄位) |
否 |
| cavailableStatus | 上架狀態 | 下拉式選單 | 篩選上架狀態 預設:全部(-1) 選項:-1=全部、0=未上架、1=已上架 |
否 |
📤 執行結果
- 成功:顯示符合條件的電子券列表,包含分頁資訊
- 無資料:顯示空白列表與「查無資料」提示
- 失敗:顯示錯誤訊息,並保留原有查詢結果
💡 注意事項
- 若未填寫任何篩選條件,將查詢所有電子券資料
- 查詢結果預設每頁顯示 10 筆資料
- 查詢結果依照建立時間由新到舊排序
📋 功能說明
開啟新增電子券視窗,填寫電子券相關資訊後建立新的電子券商品。
▲ 電子券設定新增畫面(圖1)
▲ 新增電子券介面(圖2)
⚙️ 新增欄位說明 (tblProduct + 關聯表)
| DB欄位 | 欄位名稱 | 資料類型 | 說明 | 必填 |
|---|---|---|---|---|
| cproductNo | 電子券代碼 | 文字輸入框 | 系統自動產生的電子券代碼(新增時唯讀,不需手動輸入) 格式:[券種代碼][流水號] 例:Y001、I002、C003 產生邏輯:由 GetProductNo() API 根據券種取得最後流水號並 +1 |
否 |
| cproductName | 電子券名稱 | 文字輸入框 | 輸入電子券名稱 最長 20 字元 例:全聯折扣券、滿500折100 |
是 |
| ccardId (tblCard) |
券種 | 下拉式選單 | 選擇券種類型 儲存後不可修改 選項來源:TblCard 資料表 + TblParameter(Ccodetype='ccard_type') 例:依系統設定的卡種,如 Y卡、I卡、C卡、K卡等 |
是 |
| cproductType | 電子券類型 | 下拉式選單 | 選擇電子券的折扣類型(當券種=Y卡時顯示並必填) 選項: 1:折價額 2:折數 3:折至指定面額 4:結算額的N% 儲存後不可修改 |
條件必填 |
| ceffDateFrom ceffDateTo |
有效期間 | 日期區間 | 選擇電子券可使用的期間 起始日期 ≤ 結束日期 最大日期:9999-12-31 可勾選「長期活動」取消結束日限制 ※ Y卡不可選擇長期活動 |
是 |
| 多個欄位 (TblProductByAmt) |
金額 | 複合欄位 (一對多) |
依據電子券類型設定不同的金額欄位(來自關聯表 TblProductByAmt) 可設定多筆金額區間記錄,包含: • ceffDateFrom / ceffDateTo(區間日期) • cprepaidAmtLowLimit(下限金額 / 折數 / %數) • cprepaidAmtUpLimit(上限金額 / 折數 / %數) 欄位標籤根據電子券類型動態改變: - 類型1(折價額)/類型3(折至指定面額):顯示「下限金額/上限金額」 - 類型2(折數):顯示「折數(0.0-10.0)」 - 類型4(結算額N%):顯示「%數(0-100)」 |
條件必填 |
| cpriceSale (CardType='J') |
商品面額 | 數字輸入框 | 輸入禮物卡的面額(僅當 CardType = 'J' 時顯示) 例:500、1000、3000 |
條件必填 |
| cproductCost (CardType='J') |
商品售價 | 數字輸入框 | 輸入禮物卡的售價(僅當 CardType = 'J' 時顯示) 例:500、1000、3000 |
條件必填 |
| cBoxBookCount | 設定箱(盒數) | 數字輸入框 (唯讀) |
設定一箱內含的盒數 整數,需大於0 例:10(代表1箱=10盒) |
否 |
| cBookPieceCount | 設定盒(張數) | 數字輸入框 (唯讀) |
設定一盒內含的張數 整數,需大於0 例:50(代表1盒=50張) |
否 |
| cisInvoice | 是否開發票 | 單選按鈕 (唯讀) |
選擇此電子券是否需開立發票 選項:是 / 否 預設:否 |
否 |
| cdescription | 商品說明 | 多行文字輸入框 | 輸入電子券的商品說明 字數限制:2000字內 例:本券適用全館商品折扣,部分特價品除外 |
否 |
| cCardPrecautions | 票券注意事項 | 多行文字輸入框 | 輸入票券使用注意事項 字數限制:2000字內 例:本券不得兌換現金、不找零、使用期限至2026/12/31 |
否 |
| cproductImg | 上傳圖片 | 檔案上傳 | 上傳電子券的商品圖片 圖片格式:JPG、PNG檔 建議尺寸長寬比:1:1,檔案大小:勿超過 100 kB |
是 |
| 多個欄位 (TblProductByItem) |
銷售適用期間 | 複合欄位 (一對多) |
設定電子券的銷售期間(來自關聯表 TblProductByItem) 可設定多筆銷售期間記錄,包含: • citemEffDateFrom(開始時間) • citemEffDateTo(結束時間) • citemNo(項目編號) 【新增按鈕功能】 • 驗證:結束時間不可早於開始時間 • 檢查:新增時間區間不可與現有列表時間重疊 • 新增成功後清空輸入欄位 • 已開始的區間不可刪除 |
否 |
| cPayCountSetting | 可銷售倍數設定 | 數字輸入框 | 設定可銷售的數量倍數 整數,需大於0 例:5(代表只能購買5的倍數:5張、10張、15張...) |
否 |
| cNdayNoRefund cNday |
銷售日+N日後不可自行退款 | 複合欄位 | 設定退款限制規則 • cNdayNoRefund(是否啟用:true/false) • cNday(天數:整數) 例:勾選並設定7,表示購買後7天內可退款,超過則不可自行退款 |
否 |
| 多個欄位 (TblProductBu) |
適用場域 (可兌換品牌BU) |
多選核取方塊 (一對多) |
選擇電子券適用的兌換場域 選項為:□ 全部 □ 全聯福利中心 □ 大全聯 ※ 選擇「全部」時會清空其他已勾選項目 |
否 |
| 多個欄位 (TblProductBu) |
出券場域 (可販售的通路) |
多選核取方塊 (一對多) |
設定可販售此電子券的通路場域 選項為:□ 全聯pos □ 全聯支付APP □ 全聯2B企業網站 □ 宜睿 □ 精誠 |
否 |
📤 執行結果
- 成功:顯示成功訊息「執行成功」,關閉視窗,重新載入列表
- 失敗:顯示錯誤訊息,保留表單內容供使用者修改
💡 注意事項
- 電子券代碼由系統自動產生,格式為 [券種代碼][流水號](如 Y001、I002)
- 券種選擇後無法修改,請謹慎選擇
- 電子券類型選擇後無法修改
- Y卡類型不支援「長期活動」選項
- 金額設定需依據電子券類型填寫對應欄位
- 設定箱(盒數)和設定盒(張數)用於票券庫存管理
- 商品說明和票券注意事項會顯示於前台供消費者查閱
📋 功能說明
開啟商品排序設定視窗,透過拖曳排序或輸入排序號來設定商品在前台的顯示順序。
▲ 商品排序設定
▲ 商品排序設定-加入商品按鈕
⚙️ 功能說明
- 拖曳排序:透過滑鼠拖曳調整商品順序
- 輸入排序號:直接輸入數字設定排序位置
- 加入商品:點擊「加入商品」按鈕,選擇要加入排序的商品
- 移除商品:點擊列表中的刪除按鈕移除已加入的商品
📤 執行結果
- 成功:顯示成功訊息「執行成功」,關閉視窗,重新載入列表
- 失敗:顯示錯誤訊息,保留視窗內容供使用者修改
💡 注意事項
- 排序號越小越靠前,從 1 開始
- 修改排序後需點擊「儲存」按鈕才會生效
- 未加入排序的商品不會在前台顯示
2.4 訊息提示
✅ 成功訊息
樣式:使用 Nebular Toast 通知(NbToastrService),顯示於畫面右上角,自動消失
狀態:success(綠色)
標題:「成功」
內容:執行成功
狀態:success(綠色)
標題:「成功」
內容:執行成功
❌ 錯誤訊息
樣式:使用 Nebular Toast 通知(NbToastrService),顯示於畫面右上角,自動消失
狀態:danger(紅色)
標題:「錯誤」
內容示例:
- 欄位驗證錯誤:顯示具體欄位名稱與錯誤訊息(例:「[電子券名稱] 不可為空」)
- 業務規則錯誤:「此電子券已加入,不可重複選擇」
- 單一商品不能同時擁有包含及排除
- 請選擇項目
狀態:danger(紅色)
標題:「錯誤」
內容示例:
- 欄位驗證錯誤:顯示具體欄位名稱與錯誤訊息(例:「[電子券名稱] 不可為空」)
- 業務規則錯誤:「此電子券已加入,不可重複選擇」
- 單一商品不能同時擁有包含及排除
- 請選擇項目
⚠️ 確認訊息
樣式:使用瀏覽器原生 confirm 對話框(window.confirm)
內容:是否確定刪除?
觸發時機:點擊刪除按鈕時
內容:是否確定刪除?
觸發時機:點擊刪除按鈕時
2.5 列表功能
- 分頁:支援分頁顯示,預設每頁 10 筆(pageSize = 10),可調整每頁筆數
- 排序:不支援前端排序功能,資料依 API 回傳順序顯示
- 選取:不支援批次選取與操作
- 匯出:不支援匯出功能
- 權限控制:編輯、刪除按鈕依 isUpdate、isDelete 權限顯示,檢視按鈕所有使用者皆可使用
2.6 操作按鈕說明
- 🔍 查詢按鈕:執行查詢功能。呼叫 GetList API,根據篩選條件取得電子券列表
- ➕ 新增按鈕:開啟新增電子券對話框(NbDialogService)。權限控制:isCreate = true 時顯示,否則隱藏
- 👁️ 檢視按鈕:以唯讀模式查看電子券詳細資料。呼叫 GetData API,所有使用者均可點擊,表單欄位設為 disabled 狀態
- ✏️ 編輯按鈕:開啟編輯對話框修改電子券資訊。權限控制:isUpdate = true 時顯示,呼叫 SaveData API 儲存更新。注意:部分欄位如電子券代碼、券種、電子券類型可能有禁用限制(disabled)
- 🗑️ 刪除按鈕:刪除選定的電子券資料。權限控制:isDelete = true 時顯示,點擊後顯示確認對話框(window.confirm)「是否確定刪除?」,確認後呼叫 RemoveData API
3. 列表功能與操作
3.1 列表欄位
| 欄位名稱 | 資料庫欄位 | 資料類型 | 格式 | 說明 |
|---|---|---|---|---|
| 上架狀態 | cavailableStatus | 文字 | 已上架/未上架 | 顯示電子券的上架狀態 |
| 電子券名稱 | cproductName | 文字 | 原始文字 | 顯示電子券的名稱 |
| 有效期間 | ceffDateFrom ceffDateTo |
日期時間 | yyyy/MM/dd ~ yyyy/MM/dd | UTC時間轉換為本地時間顯示 |
| 銷售適用期間 | cpayDateFrom cpayDateTo |
日期時間 | yyyy/MM/dd ~ yyyy/MM/dd | UTC時間轉換為本地時間顯示 |
| 使用場域 | cproductBuNoName | 文字 | 原始文字 | 顯示適用的使用場域名稱 |
| 電子券代碼 | cproductNo | 文字 | 原始文字 | 唯一識別碼 |
| 操作 | - | 按鈕組 | 檢視/編輯/刪除 | 依權限顯示對應按鈕 |
3.2 表單欄位
電子券類型欄位
💡 顯示條件:
- 僅當券種 (ccardId) = Y卡 時顯示
- 選項來源:Enum - Product / ProductType
| 選項值 | 選項名稱 | 說明 |
|---|---|---|
| -1 | 請選擇 | 預設值,未選擇狀態 |
| 1 | 折價額 | 固定金額折扣(如:折抵100元) |
| 2 | 折數 | 百分比折扣(如:打9折) 輸入範圍:0.0 ~ 10.0 |
| 3 | 折至指定面額 | 折扣至特定金額 |
| 4 | 結算額的N% | 依結算金額百分比計算 輸入範圍:0 ~ 100 可輸入兩位小數 |
5.2 金額設定欄位邏輯
⚠️ 重要規則:
- 當 cproductType = 2(折數)時:cprepaidAmtLowLimit = cprepaidAmtLowLimit
- 當 cproductType = 4(結算額的N%)時:cprepaidAmtLowLimit = cprepaidAmtLowLimit,允許兩位小數
- 其他類型則顯示標準的下限金額、上限金額欄位
| 電子券類型 | 顯示欄位 | 欄位標籤 | 輸入限制 |
|---|---|---|---|
| 折價額 (1) | 下限金額、上限金額 | 下限金額(為顯示銷售) | 整數,下限 ≤ 上限 |
| 折數 (2) | 折數欄位 | 折數(0.0-10.0) | 小數點後一位,0.0 ~ 10.0 |
| 折至指定面額 (3) | 下限金額、上限金額 | 下限金額(為顯示銷售) | 整數,下限 ≤ 上限 |
| 結算額的N% (4) | 百分比欄位 | %數(0-100) | 允許兩位小數,0 ~ 100 |
5.3 長期活動選項
功能說明:勾選「長期活動」後,結束日期將設為 9999-12-31
停用條件:當券種為 Y卡 (ccardId = YcardId) 時,此選項停用
4. API 規格
| 按鈕名稱 | 啟用條件 | 停用條件 | 隱藏條件 |
|---|---|---|---|
| 查詢 | 永遠啟用 | - | - |
| 新增 | isCreate = true | - | isCreate = false |
| 商品排序設定 | 永遠啟用 | - | - |
| 檢視(列表) | 永遠啟用 | - | - |
| 編輯(列表) | isUpdate = true | - | isUpdate = false |
| 刪除(列表) | isDelete = true 且 haveItemNo = true |
isView = true | isDelete = false 或 haveItemNo = false |
| 儲存(表單) | 表單驗證通過 | isView = true 或表單驗證失敗 |
isView = true |
| 取消(表單) | 永遠啟用 | - | - |
| 長期活動(勾選框) | ccardId ≠ YcardId | isView = true 或 ccardId = YcardId |
- |
| 電子券類型(下拉選單) | ccardId = YcardId 且 isNew = true |
isView = true 或 isNew = false |
ccardId ≠ YcardId |
7. 互動流程圖
7.1 新增電子券流程
開始
↓
點擊「新增」按鈕
↓
開啟新增表單視窗
↓
選擇卡種類型(ccardId)
├─ 若為Y卡 → 顯示電子券類型下拉選單(必填)
└─ 若為其他卡種 → 隱藏電子券類型,顯示長期活動勾選框
↓
填寫基本資訊
├─ 電子券編號(自動產生或手動輸入)
├─ 電子券名稱(必填)
├─ 有效期間(必填,起日 ≤ 迄日)
└─ 若勾選長期活動 → 迄日設定為 2099/12/31
↓
設定金額規則
├─ 選擇電子券類型(1=折價額, 2=折數, 3=折至指定面額, 4=結算額的N%)
├─ 設定預付款金額範圍(下限 ≤ 上限)
└─ 設定折扣金額或比例
↓
設定適用條件
├─ 選擇頻率類型(月、週)
├─ 設定可使用次數
├─ 設定適用會員類型
└─ 設定適用商品範圍(大/中/小分類或特定商品)
↓
點擊「儲存」
↓
前端驗證
├─ 必填欄位檢查
├─ 日期合理性檢查
├─ 金額範圍檢查
└─ 長期活動限制檢查(Y卡不可設定為長期活動)
↓
API 呼叫:POST /api/Product/SaveData
↓
後端驗證與儲存
├─ 檢查電子券編號是否重複
├─ 儲存至 tblProduct
├─ 儲存核銷設定至 tblWriteOffSettings
└─ 儲存商品明細至相關資料表
↓
回傳結果
├─ 成功 → 顯示成功訊息,刷新列表,關閉視窗
└─ 失敗 → 顯示錯誤訊息,保留表單資料
↓
結束
7.2 編輯電子券流程
開始
↓
點擊列表中的「編輯」按鈕
↓
API 呼叫:GET /api/Product/GetData?productNo={電子券編號}
↓
載入電子券資料
├─ 基本資訊
├─ 金額設定
├─ 適用條件
└─ 核銷設定
↓
開啟編輯表單視窗(預填現有資料)
↓
欄位狀態判斷
├─ 電子券類型(cproductType) → 編輯模式下停用
├─ 卡種類型(ccardId) → 編輯模式下停用
├─ 若為檢視模式(isView=true) → 所有欄位停用,隱藏儲存按鈕
└─ 若已有商品綁定(haveItemNo=true) → 停用刪除按鈕
↓
使用者修改資料
├─ 可修改電子券名稱
├─ 可修改有效期間(遵循日期限制)
├─ 可修改金額設定
├─ 可修改適用條件
└─ 可修改核銷設定
↓
點擊「儲存」
↓
前端驗證(同新增流程)
↓
API 呼叫:PUT /api/Product/SaveData
↓
後端更新
├─ 更新 tblProduct
├─ 更新 tblWriteOffSettings
└─ 更新相關明細資料
↓
回傳結果
├─ 成功 → 顯示成功訊息,刷新列表,關閉視窗
└─ 失敗 → 顯示錯誤訊息,保留表單資料
↓
結束
7.3 刪除電子券流程
開始
↓
點擊列表中的「刪除」按鈕
↓
前置檢查
├─ isDelete = false → 按鈕隱藏,無法執行
├─ haveItemNo = false → 按鈕隱藏,無法執行
└─ isView = true → 按鈕停用,無法執行
↓
顯示確認對話框
「確定要刪除此電子券嗎?」
├─ 點擊「確定」 → 繼續
└─ 點擊「取消」 → 取消刪除,返回列表
↓
API 呼叫:DELETE /api/Product/RemoveData?productNo={電子券編號}
↓
後端檢查
├─ 檢查是否已有商品綁定
├─ 檢查是否已發放給會員
└─ 檢查是否已有核銷記錄
↓
執行刪除
├─ 刪除 tblProduct 記錄
├─ 刪除 tblWriteOffSettings 記錄
└─ 刪除相關明細記錄
↓
回傳結果
├─ 成功 → 顯示成功訊息,刷新列表
├─ 失敗(已有綁定) → 顯示錯誤訊息「此電子券已有商品綁定,無法刪除」
└─ 失敗(其他錯誤) → 顯示錯誤訊息
↓
結束
8. 訊息提示規範
8.1 成功訊息
| 觸發條件 | 訊息內容 | 訊息類型 |
|---|---|---|
| 新增成功 | 電子券新增成功! | Success |
| 編輯成功 | 電子券更新成功! | Success |
| 刪除成功 | 電子券刪除成功! | Success |
| 商品排序設定成功 | 商品排序設定成功! | Success |
8.2 錯誤訊息
| 觸發條件 | 訊息內容 | 處理方式 |
|---|---|---|
| 必填欄位未填寫 | [欄位名稱] 為必填欄位 | 標示必填欄位,阻止提交 |
| 電子券編號重複 | 此電子券編號已存在,請使用其他編號 | 要求使用者修改編號 |
| 日期範圍錯誤 | 有效期間起日不可大於迄日 | 調整日期範圍 |
| 金額範圍錯誤 | 預付款金額下限不可大於上限 | 調整金額範圍 |
| Y卡設定長期活動 | Y卡類型不可設定為長期活動 | 取消長期活動勾選 |
| 刪除失敗(已有綁定) | 此電子券已有商品綁定,無法刪除 | 取消刪除操作 |
| 權限不足 | 您沒有執行此操作的權限 | 按鈕隱藏或停用 |
| API 呼叫失敗 | 操作失敗,請稍後再試 | 保留表單資料,可重試 |
| 折數輸入錯誤 | 折數必須介於 0.1 ~ 1.0 之間 | 調整折數值 |
| 資料載入失敗 | 無法載入電子券資料 | 刷新頁面或稍後再試 |
8.3 警告訊息
| 觸發條件 | 訊息內容 | 使用者操作 |
|---|---|---|
| 刪除確認 | 確定要刪除此電子券嗎?刪除後將無法復原。 | 確定 / 取消 |
| 取消編輯確認 | 尚未儲存的變更將會遺失,確定要取消嗎? | 確定 / 取消 |
| 長期活動設定 | 設定為長期活動後,有效迄日將自動設定為 2099/12/31 | 確認 |
4. API 規格
4.1 查詢電子券列表
端點 (Endpoint): GET /api/Product/GetList
請求參數 (Request):
{
"cproductNo": "電子券編號(模糊查詢)",
"cproductName": "電子券名稱(模糊查詢)",
"cproductType": "電子券類型(1/2/3/4)",
"ccardId": "卡種代碼",
"ceffDateFrom": "有效起日(yyyy-MM-dd)",
"ceffDateTo": "有效迄日(yyyy-MM-dd)",
"page": "頁碼",
"pageSize": "每頁筆數"
}
回應格式 (Response):
{
"StatusCode": 200,
"Message": "查詢成功",
"Data": {
"totalCount": 100,
"items": [
{
"cproductNo": "E001",
"cproductName": "新年折價券",
"cproductType": 1,
"ccardName": "福利卡",
"ceffDateFrom": "2024-01-01",
"ceffDateTo": "2024-12-31",
"haveItemNo": true
}
]
}
}
9.2 取得單筆電子券資料
端點 (Endpoint): GET /api/Product/GetData
請求參數 (Request Query String):
?productNo=E001
回應格式 (Response):
{
"StatusCode": 200,
"Message": "查詢成功",
"Data": {
"cproductNo": "E001",
"cproductName": "新年折價券",
"cproductType": 1,
"ccardId": "YcardId",
"ceffDateFrom": "2024-01-01T00:00:00Z",
"ceffDateTo": "2024-12-31T23:59:59Z",
"cprepaidAmtLowLimit": 100,
"cprepaidAmtUpLimit": 5000,
"cdiscountAmt": 50,
"cfrequencyType": 1,
"cuseTimes": 10,
"cmemberType": "A",
"writeOffSettings": {
"majorCategoryIds": [1, 2],
"mediumCategoryIds": [10, 20],
"minorCategoryIds": [100, 200],
"specificItemNos": ["ITEM001", "ITEM002"]
}
}
}
9.3 新增/更新電子券
端點 (Endpoint): POST /api/Product/SaveData
請求參數 (Request Body):
{
"cproductNo": "E001",
"cproductName": "新年折價券",
"cproductType": 1,
"ccardId": "YcardId",
"ceffDateFrom": "2024-01-01T00:00:00Z",
"ceffDateTo": "2024-12-31T23:59:59Z",
"cprepaidAmtLowLimit": 100,
"cprepaidAmtUpLimit": 5000,
"cdiscountAmt": 50,
"cfrequencyType": 1,
"cuseTimes": 10,
"cmemberType": "A",
"isLongTerm": false,
"writeOffSettings": {
"majorCategoryIds": [1, 2],
"mediumCategoryIds": [10, 20],
"minorCategoryIds": [100, 200],
"specificItemNos": ["ITEM001", "ITEM002"]
}
}
回應格式 (Response):
{
"StatusCode": 200,
"Message": "儲存成功",
"Data": {
"cproductNo": "E001"
}
}
9.4 刪除電子券
端點 (Endpoint): DELETE /api/Product/RemoveData
請求參數 (Request Query String):
?productNo=E001
回應格式 (Response):
{
"StatusCode": 200,
"Message": "刪除成功",
"Data": null
}
9.5 更新商品排序
端點 (Endpoint): POST /api/Product/UpdateSorting
請求參數 (Request Body):
{
"sortingList": [
{
"cproductNo": "E001",
"sortOrder": 1
},
{
"cproductNo": "E002",
"sortOrder": 2
}
]
}
回應格式 (Response):
{
"StatusCode": 200,
"Message": "排序更新成功",
"Data": null
}
10. 測試案例
10.1 查詢功能測試案例
| 測試案例編號 | 測試項目 | 測試步驟 | 預期結果 | 測試狀態 |
|---|---|---|---|---|
| TC-Q-001 | 查詢全部電子券 |
1. 進入電子券設定頁面 2. 不填寫任何查詢條件 3. 點擊「查詢」按鈕 |
顯示所有電子券列表,包含所有卡種和類型 | 待測試 |
| TC-Q-002 | 依電子券編號查詢 |
1. 輸入電子券編號「E001」 2. 點擊「查詢」按鈕 |
顯示編號為 E001 的電子券資料 | 待測試 |
| TC-Q-003 | 依電子券名稱模糊查詢 |
1. 輸入電子券名稱關鍵字「新年」 2. 點擊「查詢」按鈕 |
顯示所有名稱包含「新年」的電子券 | 待測試 |
| TC-Q-004 | 依卡種類型查詢 |
1. 選擇卡種類型「Y卡」 2. 點擊「查詢」按鈕 |
僅顯示 Y 卡的電子券 | 待測試 |
| TC-Q-005 | 依有效期間查詢 |
1. 設定有效起日「2024-01-01」 2. 設定有效迄日「2024-12-31」 3. 點擊「查詢」按鈕 |
顯示有效期間在此範圍內的電子券 | 待測試 |
| TC-Q-006 | 複合條件查詢 |
1. 選擇卡種「福利卡」 2. 選擇電子券類型「折價額」 3. 點擊「查詢」按鈕 |
顯示同時符合卡種和類型的電子券 | 待測試 |
10.2 新增功能測試案例
| 測試案例編號 | 測試項目 | 測試步驟 | 預期結果 | 測試狀態 |
|---|---|---|---|---|
| TC-A-001 | 成功新增折價額電子券 |
1. 點擊「新增」按鈕 2. 填寫電子券編號「E001」 3. 填寫電子券名稱「新年折價券」 4. 選擇卡種「福利卡」 5. 選擇電子券類型「折價額」 6. 設定有效期間 7. 設定折扣金額 50 元 8. 點擊「儲存」 |
顯示「電子券新增成功!」,列表刷新並顯示新增的電子券 | 待測試 |
| TC-A-002 | 新增Y卡電子券(顯示類型下拉選單) |
1. 點擊「新增」按鈕 2. 選擇卡種「Y卡」 3. 確認電子券類型下拉選單顯示且為必填 |
電子券類型下拉選單正常顯示,長期活動勾選框隱藏 | 待測試 |
| TC-A-003 | 新增非Y卡電子券(顯示長期活動) |
1. 點擊「新增」按鈕 2. 選擇卡種「福利卡」 3. 確認長期活動勾選框顯示 |
長期活動勾選框正常顯示,電子券類型下拉選單隱藏 | 待測試 |
| TC-A-004 | 勾選長期活動自動設定迄日 |
1. 新增福利卡電子券 2. 勾選「長期活動」 3. 檢查有效迄日 |
有效迄日自動設定為 2099/12/31,且欄位停用 | 待測試 |
| TC-A-005 | 必填欄位驗證 |
1. 點擊「新增」按鈕 2. 不填寫任何欄位 3. 點擊「儲存」 |
顯示必填欄位錯誤訊息,阻止提交 | 待測試 |
| TC-A-006 | 日期範圍驗證 |
1. 新增電子券 2. 設定有效起日「2024-12-31」 3. 設定有效迄日「2024-01-01」 4. 點擊「儲存」 |
顯示「有效期間起日不可大於迄日」錯誤訊息 | 待測試 |
| TC-A-007 | 金額範圍驗證 |
1. 新增電子券 2. 設定預付款金額下限 5000 3. 設定預付款金額上限 100 4. 點擊「儲存」 |
顯示「預付款金額下限不可大於上限」錯誤訊息 | 待測試 |
| TC-A-008 | Y卡不可設定長期活動驗證 | 1. 嘗試透過API設定Y卡為長期活動 | 顯示「Y卡類型不可設定為長期活動」錯誤訊息 | 待測試 |
10.3 編輯功能測試案例
| 測試案例編號 | 測試項目 | 測試步驟 | 預期結果 | 測試狀態 |
|---|---|---|---|---|
| TC-E-001 | 成功編輯電子券 |
1. 點擊列表中的「編輯」按鈕 2. 修改電子券名稱 3. 修改有效期間 4. 點擊「儲存」 |
顯示「電子券更新成功!」,列表刷新並顯示更新後的資料 | 待測試 |
| TC-E-002 | 編輯模式下電子券類型停用 |
1. 點擊「編輯」按鈕 2. 檢查電子券類型欄位狀態 |
電子券類型(cproductType)欄位停用,無法修改 | 待測試 |
| TC-E-003 | 編輯模式下卡種類型停用 |
1. 點擊「編輯」按鈕 2. 檢查卡種類型欄位狀態 |
卡種類型(ccardId)欄位停用,無法修改 | 待測試 |
| TC-E-004 | 檢視模式下所有欄位停用 |
1. 以檢視權限登入(isView=true) 2. 點擊「檢視」按鈕 3. 檢查所有欄位狀態 |
所有欄位停用,儲存按鈕隱藏 | 待測試 |
| TC-E-005 | 取消編輯確認 |
1. 編輯電子券並修改資料 2. 點擊「取消」按鈕 |
顯示確認對話框「尚未儲存的變更將會遺失,確定要取消嗎?」 | 待測試 |
10.4 刪除功能測試案例
| 測試案例編號 | 測試項目 | 測試步驟 | 預期結果 | 測試狀態 |
|---|---|---|---|---|
| TC-D-001 | 成功刪除電子券 |
1. 點擊列表中的「刪除」按鈕 2. 在確認對話框中點擊「確定」 |
顯示「電子券刪除成功!」,列表刷新且該電子券不再顯示 | 待測試 |
| TC-D-002 | 刪除已綁定商品的電子券 | 1. 嘗試刪除已有商品綁定的電子券(haveItemNo=true) | 刪除按鈕隱藏或停用,無法執行刪除 | 待測試 |
| TC-D-003 | 刪除確認對話框 |
1. 點擊「刪除」按鈕 2. 檢查確認對話框內容 |
顯示「確定要刪除此電子券嗎?刪除後將無法復原。」 | 待測試 |
| TC-D-004 | 取消刪除 |
1. 點擊「刪除」按鈕 2. 在確認對話框中點擊「取消」 |
關閉對話框,不執行刪除,電子券仍存在 | 待測試 |
| TC-D-005 | 無刪除權限 |
1. 以無刪除權限登入(isDelete=false) 2. 檢查刪除按鈕狀態 |
刪除按鈕隱藏 | 待測試 |
10.5 權限控制測試案例
| 測試案例編號 | 測試項目 | 測試步驟 | 預期結果 | 測試狀態 |
|---|---|---|---|---|
| TC-P-001 | 無新增權限 |
1. 以無新增權限登入(isCreate=false) 2. 檢查新增按鈕狀態 |
新增按鈕隱藏 | 待測試 |
| TC-P-002 | 無編輯權限 |
1. 以無編輯權限登入(isUpdate=false) 2. 檢查編輯按鈕狀態 |
編輯按鈕隱藏 | 待測試 |
| TC-P-003 | 僅檢視權限 |
1. 以僅檢視權限登入(isView=true, 其他=false) 2. 檢查所有操作按鈕狀態 |
僅顯示「檢視」按鈕,「新增」「編輯」「刪除」按鈕隱藏 | 待測試 |
11. 附註
11.1 資料庫相關
- 主要資料表:tblProduct(電子券主檔)
- 核銷設定表:tblWriteOffSettings(核銷設定主檔)
- 商品明細表:tblWriteOffSettingsDetail(核銷設定明細)
- 商品資料表:tblCommodity(商品資料)
- 重要欄位:
- cproductNo(電子券編號,主鍵)
- cproductName(電子券名稱)
- cproductType(電子券類型:1=折價額, 2=折數, 3=折至指定面額, 4=結算額的N%)
- ccardId(卡種代碼,關聯 TblCard 資料表的主鍵)
- ceffDateFrom(有效起日,UTC 時間)
- ceffDateTo(有效迄日,UTC 時間)
- cprepaidAmtLowLimit(預付款金額下限)
- cprepaidAmtUpLimit(預付款金額上限)
- cdiscountAmt(折扣金額)
- cfrequencyType(頻率類型:1=月, 2=週)
- cuseTimes(可使用次數)
- cmemberType(適用會員類型)
- haveItemNo(是否已有商品綁定,影響刪除權限)
11.2 權限說明
- isCreate:新增權限,控制「新增」按鈕顯示
- isUpdate:編輯權限,控制「編輯」按鈕顯示
- isDelete:刪除權限,控制「刪除」按鈕顯示(需同時滿足 haveItemNo=false)
- isView:檢視權限,當為 true 時所有欄位停用,僅可查看資料
11.3 其他注意事項
- UTC 時間轉換:前端顯示時需將 UTC 時間轉換為本地時間(+8小時),儲存時需轉回 UTC
- 長期活動限制:Y卡類型不可設定為長期活動,長期活動的有效迄日固定為 2099/12/31
- 編輯限制:電子券類型(cproductType)和卡種類型(ccardId)在編輯模式下不可修改
- 刪除限制:已有商品綁定(haveItemNo=true)的電子券無法刪除
- 電子券類型顯示邏輯:
- Y卡:顯示電子券類型下拉選單(必填),隱藏長期活動勾選框
- 其他卡種:隱藏電子券類型下拉選單,顯示長期活動勾選框
- 商品排序:商品排序功能獨立於 CRUD 操作,透過專用的排序設定介面進行
- 金額驗證:預付款金額下限必須 ≤ 上限,折數範圍為 0.1 ~ 1.0
- 日期驗證:有效起日必須 ≤ 迄日
11.4 版本歷程
| 版本 | 日期 | 修改者 | 修改內容 |
|---|---|---|---|
| v1.0 | 2026-01-19 | Abby | 初版建立 |