浏览代码

fix:新增人数字段

ALIEZ 3 天之前
父节点
当前提交
53de48cb11
共有 4 个文件被更改,包括 107 次插入5 次删除
  1. 二进制
      dist.tar.gz
  2. 7 1
      src/api/modules/settings/rewardAmount.ts
  3. 68 1
      src/views/courses/GoodsView.vue
  4. 32 3
      src/views/settings/RewardAmountView.vue

二进制
dist.tar.gz


+ 7 - 1
src/api/modules/settings/rewardAmount.ts

@@ -5,6 +5,7 @@ export interface RewardAmountItem {
   id: number
   email: string
   amount: number | string
+  addNum: number | string
 }
 
 export interface RewardAmountSearchParams {
@@ -13,7 +14,11 @@ export interface RewardAmountSearchParams {
   page?: PageParam
 }
 
-export function addRewardAmount(data: { email: string; amount: number | string }) {
+export function addRewardAmount(data: {
+  email: string
+  amount: number | string
+  addNum: number | string
+}) {
   return request.post<unknown>('/reward/amount/add', data)
 }
 
@@ -21,6 +26,7 @@ export function updateRewardAmount(data: {
   id: number
   email: string
   amount: number | string
+  addNum: number | string
 }) {
   return request.post<unknown>('/reward/amount/update', data)
 }

+ 68 - 1
src/views/courses/GoodsView.vue

@@ -277,6 +277,14 @@ function typeLabel(t: number) {
   return GOODS_TYPE_MAP[t] ?? `类型${t}`;
 }
 
+const showIntroModal = ref(false);
+const introModalText = ref("");
+
+function openIntroductionModal(text: string) {
+  introModalText.value = text;
+  showIntroModal.value = true;
+}
+
 const allColumns = ref<DataTableColumns<GoodsItem>>([
   {
     title: "封面",
@@ -298,7 +306,31 @@ const allColumns = ref<DataTableColumns<GoodsItem>>([
   },
   { title: "名称", key: "goodsName", ellipsis: { tooltip: true } },
   { title: "标题", key: "title", ellipsis: { tooltip: true } },
-  { title: "简介", key: "introduction", ellipsis: { tooltip: true } },
+  {
+    title: "简介",
+    key: "introduction",
+    minWidth: 160,
+    ellipsis: { tooltip: false },
+    render(row) {
+      const text = row.introduction?.trim();
+      if (!text) return "-";
+      return h(
+        "span",
+        {
+          class: "table-ellipsis-clickable",
+          style: {
+            color: "#7b79d6",
+            cursor: "pointer",
+          },
+          onClick: (e: MouseEvent) => {
+            e.stopPropagation();
+            openIntroductionModal(text);
+          },
+        },
+        text,
+      );
+    },
+  },
   {
     title: "类型",
     key: "goodsType",
@@ -510,6 +542,20 @@ const { visibleKeys, displayColumns, columnOptions } =
       v-model:show="showVideoModal"
       :goods="videoModalGoods"
     />
+
+    <NModal
+      v-model:show="showIntroModal"
+      preset="card"
+      title="简介"
+      style="width: min(560px, 94vw)"
+    >
+      <div class="intro-modal-content">{{ introModalText }}</div>
+      <template #footer>
+        <NSpace justify="end">
+          <NButton @click="showIntroModal = false">关闭</NButton>
+        </NSpace>
+      </template>
+    </NModal>
   </div>
 </template>
 
@@ -558,4 +604,25 @@ const { visibleKeys, displayColumns, columnOptions } =
   border-radius: 4px;
   border: 1px solid var(--n-border-color);
 }
+
+.data-table-fill :deep(.table-ellipsis-clickable) {
+  display: block;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  color: #7b79d6;
+  cursor: pointer;
+}
+
+.data-table-fill :deep(.table-ellipsis-clickable:hover) {
+  color: #6a68c4;
+}
+
+.intro-modal-content {
+  white-space: pre-wrap;
+  word-break: break-word;
+  line-height: 1.6;
+  max-height: 60vh;
+  overflow-y: auto;
+}
 </style>

+ 32 - 3
src/views/settings/RewardAmountView.vue

@@ -94,9 +94,10 @@ const showModal = ref(false)
 const submitting = ref(false)
 const editingRow = ref<RewardAmountItem | null>(null)
 const formRef = ref<FormInst | null>(null)
-const form = ref<{ email: string; amount: number | null }>({
+const form = ref<{ email: string; amount: number | null; addNum: number | null }>({
   email: '',
   amount: null,
+  addNum: null,
 })
 
 const rules: FormRules = {
@@ -109,11 +110,19 @@ const rules: FormRules = {
       trigger: ['blur', 'change'],
     },
   ],
+  addNum: [
+    {
+      required: true,
+      type: 'number',
+      message: '请输入人数',
+      trigger: ['blur', 'change'],
+    },
+  ],
 }
 
 function openAdd() {
   editingRow.value = null
-  form.value = { email: '', amount: null }
+  form.value = { email: '', amount: null, addNum: null }
   showModal.value = true
 }
 
@@ -122,6 +131,7 @@ function openEdit(row: RewardAmountItem) {
   form.value = {
     email: row.email ?? '',
     amount: Number(row.amount ?? 0),
+    addNum: Number(row.addNum ?? 0),
   }
   showModal.value = true
 }
@@ -132,11 +142,16 @@ async function submit() {
     message.warning('请输入金额')
     return
   }
+  if (form.value.addNum == null) {
+    message.warning('请输入人数')
+    return
+  }
   submitting.value = true
   try {
     const payload = {
       email: form.value.email.trim(),
       amount: form.value.amount,
+      addNum: form.value.addNum,
     }
     if (editingRow.value) {
       if (!editingRow.value.id) {
@@ -172,6 +187,11 @@ const allColumns = ref<DataTableColumns<RewardAmountItem>>([
     // width: 140,
     render: (row) => amountText(row.amount),
   },
+  {
+    title: '人数',
+    key: 'addNum',
+    render: (row) => String(row.addNum ?? 0),
+  },
   {
     title: '操作',
     key: 'actions',
@@ -254,7 +274,7 @@ onActivated(() => {
             flex-height
             class="data-table-fill"
             :row-key="(row: RewardAmountItem) => String(row.id)"
-            :scroll-x="520"
+            :scroll-x="620"
           />
         </div>
 
@@ -294,6 +314,15 @@ onActivated(() => {
             style="width: 100%"
           />
         </NFormItem>
+        <NFormItem label="人数" path="addNum">
+          <NInputNumber
+            v-model:value="form.addNum"
+            :min="0"
+            :precision="0"
+            placeholder="请输入人数"
+            style="width: 100%"
+          />
+        </NFormItem>
       </NForm>
       <template #footer>
         <NSpace justify="end">