sgc 2 kuukautta sitten
vanhempi
commit
86d1e38e82

+ 1 - 0
src/api/modules/operationManagement.ts

@@ -90,6 +90,7 @@ export const getCouponTemplateList = params => {
 export const getActivityList = (params: {
   activityName?: string; // 活动名称(模糊查询)
   activityStatus?: string; // 活动状态
+  activityType?: number; // 活动类型(1-营销活动,2-评论有礼)
   pageNum?: string; // 当前页
   pageSize?: string; // 每页数量
   status?: number; // 状态(1-待审核, 2-未开始, 3-审核拒绝, 4-已售罄, 5-进行中, 6-已下架, 7-已结束, 8-审核成功)

+ 15 - 2
src/components/ProTable/index.vue

@@ -21,7 +21,7 @@
       <div v-if="toolButton" class="header-button-ri">
         <slot name="tableHeaderRight" />
         <slot name="toolButton">
-          <el-button v-if="showToolButton('refresh')" :icon="Refresh" circle @click="getTableList" />
+          <el-button v-if="showToolButton('refresh')" :icon="Refresh" circle @click="handleRefresh" />
           <el-button v-if="showToolButton('setting') && columns.length" :icon="Operation" circle @click="openColSetting" />
           <el-button
             v-if="showToolButton('search') && searchColumns?.length"
@@ -132,6 +132,7 @@ export interface ProTableProps {
   toolButton?: ("refresh" | "setting" | "search")[] | boolean; // 是否显示表格功能按钮 ==> 非必传(默认为true)
   rowKey?: string; // 行数据的 Key,用来优化 Table 的渲染,当表格数据多选时,所指定的 id ==> 非必传(默认为 id)
   searchCol?: number | Record<BreakPoint, number>; // 表格搜索项 每列占比配置 ==> 非必传 { xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }
+  refreshResetPage?: boolean; // 刷新按钮是否重置分页到第1页 ==> 非必传(默认为false)
 }
 
 // 接受父组件参数,配置默认值
@@ -143,7 +144,8 @@ const props = withDefaults(defineProps<ProTableProps>(), {
   border: true,
   toolButton: true,
   rowKey: "id",
-  searchCol: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 })
+  searchCol: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }),
+  refreshResetPage: false
 });
 
 // table 实例
@@ -284,6 +286,17 @@ const _reset = () => {
   emit("reset");
 };
 
+// 处理刷新按钮点击
+const handleRefresh = () => {
+  if (props.refreshResetPage) {
+    // 如果设置了刷新重置分页,则调用search()重置到第1页
+    search();
+  } else {
+    // 否则保持当前页码,只刷新数据
+    getTableList();
+  }
+};
+
 // 表格拖拽排序
 const dragSort = () => {
   const tbody = document.querySelector(`#${uuid.value} tbody`) as HTMLElement;

+ 19 - 8
src/views/operationManagement/activityList.vue

@@ -1,6 +1,13 @@
 <template>
   <div class="table-box button-table">
-    <ProTable ref="proTable" :columns="columns" :request-api="getTableList" :init-param="initParam" :data-callback="dataCallback">
+    <ProTable
+      ref="proTable"
+      :columns="columns"
+      :request-api="getTableList"
+      :init-param="initParam"
+      :data-callback="dataCallback"
+      :refresh-reset-page="true"
+    >
       <template #tableHeader="scope">
         <div class="action-buttons">
           <el-button :icon="Plus" class="button" type="primary" @click="newActivity" v-if="type"> 新建活动 </el-button>
@@ -163,7 +170,7 @@
 </template>
 
 <script setup lang="tsx" name="activityList">
-import { reactive, ref, onMounted, computed } from "vue";
+import { reactive, ref, onMounted, computed, nextTick } from "vue";
 import { useRouter } from "vue-router";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { Plus } from "@element-plus/icons-vue";
@@ -368,10 +375,13 @@ const getTableList = (params: any) => {
     pageNum: params.pageNum ? String(params.pageNum) : undefined,
     pageSize: params.pageSize ? String(params.pageSize) : undefined,
     status: params.status !== undefined && params.status !== null && params.status !== "" ? Number(params.status) : undefined,
-    storeId: params.storeId ? String(params.storeId) : undefined
+    storeId: params.storeId ? String(params.storeId) : undefined,
+    // 处理 activityType:如果存在且不为空,转换为 number 类型
+    activityType:
+      params.activityType !== undefined && params.activityType !== null && params.activityType !== ""
+        ? Number(params.activityType)
+        : undefined
   };
-  // 移除 activityType 参数(如果存在),因为新接口不支持此参数
-  delete newParams.activityType;
   return getActivityList(newParams);
 };
 
@@ -414,8 +424,8 @@ const deleteRow = (row: any) => {
 
 // 修改状态(上架/下架)
 const changeStatus = async (row: any, status: number) => {
-  const res = await updateActivityStatus({ id: row.id, status: status });
-  if (res && res.code == 200) {
+  const res: any = await updateActivityStatus({ id: row.id, status: status });
+  if (res && (res.code === 200 || res.code === "200")) {
     ElMessage.success("操作成功");
     proTable.value?.getTableList();
   }
@@ -518,7 +528,8 @@ const handleResultImageExceed: UploadProps["onExceed"] = () => {
 
 // 预览活动结果图片
 const handleResultImagePreview: UploadProps["onPreview"] = (uploadFile: UploadFile) => {
-  const url = uploadFile.url || uploadFile.response?.url || uploadFile.response?.data?.[0];
+  const response = uploadFile.response as any;
+  const url = uploadFile.url || response?.url || (Array.isArray(response?.data) ? response.data[0] : null);
   if (url) {
     resultImageViewerUrlList.value = [url];
     resultImageViewerInitialIndex.value = 0;

+ 1 - 25
src/views/operationManagement/newActivity.vue

@@ -88,7 +88,7 @@
               </el-form-item>
 
               <!-- 活动限制人数 -->
-              <el-form-item label="活动限制人数" prop="activityLimitPeople">
+              <el-form-item label="活动限制人数">
                 <el-input v-model="activityModel.activityLimitPeople" placeholder="请输入" maxlength="6" />
               </el-form-item>
 
@@ -416,30 +416,6 @@ const rules = reactive({
       trigger: "change"
     }
   ],
-  activityLimitPeople: [
-    { required: true, message: "请输入活动限制人数", trigger: "blur" },
-    {
-      validator: (rule: any, value: any, callback: any) => {
-        if (activityModel.value.activityType === 2) {
-          if (!value) {
-            callback(new Error("请输入活动限制人数"));
-            return;
-          }
-          const numValue = Number(value);
-          if (isNaN(numValue) || !Number.isInteger(numValue) || numValue <= 0) {
-            callback(new Error("活动限制人数必须为正整数"));
-            return;
-          }
-          if (numValue > 999999) {
-            callback(new Error("活动限制人数必须小于999999"));
-            return;
-          }
-        }
-        callback();
-      },
-      trigger: "blur"
-    }
-  ],
   activityDetails: [
     { required: true, message: "请输入活动详情", trigger: ["blur", "change"] },
     {