From 6a972c54fe99a186b5885db1b1319643ce9679dd Mon Sep 17 00:00:00 2001
From: shinnosuke <tantao@1hoper.com>
Date: 星期三, 26 八月 2026 18:43:38 +0800
Subject: [PATCH] 又又更新

---
 talent-card-admin/src/views/MovieTicketView.vue |   32 ++++++++++++++++++++++----------
 1 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/talent-card-admin/src/views/MovieTicketView.vue b/talent-card-admin/src/views/MovieTicketView.vue
index c9ee280..0992ee4 100644
--- a/talent-card-admin/src/views/MovieTicketView.vue
+++ b/talent-card-admin/src/views/MovieTicketView.vue
@@ -73,7 +73,7 @@
 
 const form = reactive({
   packageName: '',
-  totalQuantity: 0,
+  totalQuantity: 1,
   merchantIds: [] as Array<number | string>,
   validStart: '',
   validEnd: '',
@@ -83,7 +83,7 @@
   usageText: '',
   status: 1,
   sortNo: 0,
-  levelRules: ticketRuleLevels.map(level => ({ talentLevel: level, enabled: 1, claimableCount: undefined as number | undefined, resetCycle: '每天' })),
+  levelRules: ticketRuleLevels.map(level => ({ talentLevel: level, enabled: 1, claimableCount: 1, resetCycle: '每天' })),
 })
 
 const codeForm = reactive({ batchNo: '', codesText: '', remark: '' })
@@ -237,7 +237,7 @@
   editingId.value = row ? rowId(row) : null
   Object.assign(form, {
     packageName: row?.packageName || '',
-    totalQuantity: Number(row?.totalQuantity || row?.totalCount || row?.totalCodes || 0),
+    totalQuantity: Number(row?.totalQuantity || row?.totalCount || row?.totalCodes || 1),
     merchantIds: Array.isArray(row?.merchantIds) && row.merchantIds.length ? row.merchantIds.map(String) : row?.merchantId ? [String(row.merchantId)] : [],
     validStart: row?.validStart || '',
     validEnd: row?.validEnd || '',
@@ -254,7 +254,7 @@
     return {
       talentLevel: level,
       enabled: Number(found?.enabled ?? 1),
-      claimableCount: found?.claimableCount === undefined ? undefined : Number(found.claimableCount),
+      claimableCount: Number(found?.claimableCount) > 0 ? Number(found?.claimableCount) : 1,
       resetCycle: found?.resetCycle || '每天',
     }
   })
@@ -275,17 +275,30 @@
     ElMessage.warning('请输入票包名称')
     return
   }
+  const totalQuantity = Number(form.totalQuantity)
+  if (!Number.isInteger(totalQuantity) || totalQuantity < 1) {
+    ElMessage.warning('数量必须为正整数')
+    return
+  }
+  const invalidLevelRule = form.levelRules.find(rule => {
+    const claimableCount = Number(rule.claimableCount)
+    return !Number.isInteger(claimableCount) || claimableCount < 1
+  })
+  if (invalidLevelRule) {
+    ElMessage.warning(`${invalidLevelRule.talentLevel}可领数量必须为正整数`)
+    return
+  }
   saving.value = true
   try {
     const levelRules = form.levelRules.map(rule => ({
       talentLevel: rule.talentLevel,
       enabled: rule.enabled,
-      claimableCount: Number(rule.claimableCount || 1),
+      claimableCount: Number(rule.claimableCount),
       resetCycle: rule.resetCycle || '每天',
     }))
     const payload = {
       packageName: form.packageName.trim(),
-      totalQuantity: Number(form.totalQuantity || 0),
+      totalQuantity,
       merchantId: form.merchantIds[0] ? Number(form.merchantIds[0]) : undefined,
       merchantIds: form.merchantIds.map(item => Number(item)).filter(Boolean),
       talentLevels: levelRules.filter(rule => Number(rule.enabled) === 1).map(rule => rule.talentLevel),
@@ -535,10 +548,9 @@
             <el-button :icon="Refresh" @click="resetCodeFilters">重置</el-button>
           </div>
         </el-form>
-        <div class="movie-ticket-package-tools">
+        <div class="movie-ticket-package-tools movie-ticket-code-pool-tools">
           <el-button v-permission="'admin.movie-tickets.import'" type="primary" @click="openImport(selectedPackage || {})">导入码</el-button>
           <el-button @click="openGenerate(selectedPackage || {})">批量生成</el-button>
-          <span />
         </div>
         <el-table v-loading="loading" :data="rows" border class="movie-ticket-package-table" empty-text="暂无兑换码">
           <el-table-column label="码ID" min-width="90" align="center"><template #default="{ row }">{{ text(row.codeId || row.id) }}</template></el-table-column>
@@ -569,7 +581,7 @@
               <span>票包名称</span>
               <el-input v-model="form.packageName" />
               <span>数量</span>
-              <el-input-number v-model="form.totalQuantity" :min="0" controls-position="right" />
+              <el-input-number v-model="form.totalQuantity" :min="1" :step="1" :precision="0" controls-position="right" />
               <el-button type="primary" @click="merchantDialogVisible = true">可用商家</el-button>
             </div>
             <div v-if="selectedMerchantNames" class="movie-ticket-selected-merchants">已选商家:{{ selectedMerchantNames }}</div>
@@ -587,7 +599,7 @@
               <strong>{{ rule.talentLevel }}</strong>
               <el-switch v-model="rule.enabled" :active-value="1" :inactive-value="0" />
               <span>可领数量</span>
-              <el-input-number v-model="rule.claimableCount" :min="1" controls-position="right" placeholder="请输入" />
+              <el-input-number v-model="rule.claimableCount" :min="1" :step="1" :precision="0" controls-position="right" placeholder="请输入" />
               <span>张</span>
               <span>重置周期</span>
               <el-select v-model="rule.resetCycle">

--
Gitblit v1.7.1