Răsfoiți Sursa

营销活动接口调整

sgc 2 luni în urmă
părinte
comite
f2d5bdffe8

+ 17 - 9
src/api/modules/operationManagement.ts

@@ -36,7 +36,7 @@ storeAxiosInstance.interceptors.response.use(
   (response: any) => {
     const { data } = response;
     const userStore = useUserStore();
-    
+
     // 登录失效
     if (data.code == ResultEnum.OVERDUE) {
       userStore.setToken("");
@@ -83,12 +83,20 @@ export const getCouponTemplateList = params => {
 };
 
 /**
- * 获取运营活动列表
- * @param params 请求参数
+ * 获取运营活动列表(分页查询)
+ * @param params { activityName?: string, activityStatus?: string, pageNum?: string, pageSize?: string, status?: number, storeId?: string, storeName?: string }
  * @returns 运营活动列表数据
  */
-export const getActivityList = params => {
-  return http.post<ResPage<any>>(PORT_NONE + `/operationalActivity/queryActivityList`, params);
+export const getActivityList = (params: {
+  activityName?: string; // 活动名称(模糊查询)
+  activityStatus?: string; // 活动状态
+  pageNum?: string; // 当前页
+  pageSize?: string; // 每页数量
+  status?: number; // 状态(1-待审核, 2-未开始, 3-审核拒绝, 4-已售罄, 5-进行中, 6-已下架, 7-已结束, 8-审核成功)
+  storeId?: string; // 商户ID
+  storeName?: string; // 商户名称(模糊查询)
+}) => {
+  return http.get<ResPage<any>>(PORT_NONE + `/operationalActivity/detail`, params);
 };
 
 /**
@@ -167,7 +175,7 @@ export const getPersonCaseList = (params: {
   pageSize?: number; // 每页条数(非必填)
 }) => {
   // 此接口需要使用 VITE_API_URL_STORE,使用专门的 axios 实例
-  return storeAxiosInstance.post<ResPage<any>>(PORT_NONE + `/storeOperationalActivity/achievement/case/store/list`, params );
+  return storeAxiosInstance.post<ResPage<any>>(PORT_NONE + `/storeOperationalActivity/achievement/case/store/list`, params);
 };
 
 /**
@@ -191,7 +199,7 @@ export const getPersonnelList = (params: {
  * @returns 案例详情信息
  */
 export const getPersonCaseDetail = (params: { activityId: number; userId: number }) => {
-  return storeAxiosInstance.get<any>(PORT_NONE + `/storeOperationalActivity/achievement/case/detail`, {params});
+  return storeAxiosInstance.get<any>(PORT_NONE + `/storeOperationalActivity/achievement/case/detail`, { params });
 };
 
 /**
@@ -223,8 +231,8 @@ export const rejectPersonnel = (params: { id: number; rejectReason?: string }) =
 
 /**
  * 上传活动结果
- * @param params 
- * @returns 
+ * @param params
+ * @returns
  */
 export const uploadActivityResult = (params: {
   id: number; // 活动ID(必填)

+ 67 - 44
src/views/operationManagement/activityList.vue

@@ -1,7 +1,6 @@
 <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">
       <template #tableHeader="scope">
         <div class="action-buttons">
           <el-button :icon="Plus" class="button" type="primary" @click="newActivity" v-if="type"> 新建活动 </el-button>
@@ -10,23 +9,39 @@
       <!-- 表格操作 -->
       <template #operation="scope">
         <!-- 上架按钮 -->
-        <el-button v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.上架)" link type="primary"
-          @click="changeStatus(scope.row, 1)">
+        <el-button
+          v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.上架)"
+          link
+          type="primary"
+          @click="changeStatus(scope.row, 1)"
+        >
           上架
         </el-button>
         <!-- 下架按钮 -->
-        <el-button v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.下架)" link type="primary"
-          @click="changeStatus(scope.row, 6)">
+        <el-button
+          v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.下架)"
+          link
+          type="primary"
+          @click="changeStatus(scope.row, 6)"
+        >
           下架
         </el-button>
         <!-- 编辑按钮 -->
-        <el-button v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.编辑)" link type="primary"
-          @click="editRow(scope.row)">
+        <el-button
+          v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.编辑)"
+          link
+          type="primary"
+          @click="editRow(scope.row)"
+        >
           编辑
         </el-button>
         <!-- 查看详情按钮 -->
-        <el-button v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.查看详情)" link type="primary"
-          @click="toDetail(scope.row)">
+        <el-button
+          v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.查看详情)"
+          link
+          type="primary"
+          @click="toDetail(scope.row)"
+        >
           查看详情
         </el-button>
         <!-- 上传活动结果按钮 -->
@@ -39,13 +54,21 @@
           上传活动结果
         </el-button>
         <!-- 删除按钮 -->
-        <el-button v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.删除)" link type="primary"
-          @click="deleteRow(scope.row)">
+        <el-button
+          v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.删除)"
+          link
+          type="primary"
+          @click="deleteRow(scope.row)"
+        >
           删除
         </el-button>
         <!-- 查看拒绝原因按钮 -->
-        <el-button v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.查看拒绝原因)" link type="primary"
-          @click="viewRejectReason(scope.row)">
+        <el-button
+          v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.查看拒绝原因)"
+          link
+          type="primary"
+          @click="viewRejectReason(scope.row)"
+        >
           查看拒绝原因
         </el-button>
       </template>
@@ -88,8 +111,14 @@
         <!-- 文字输入 -->
         <div v-if="uploadResultForm.resultType === 0" class="result-content-section">
           <div class="result-content-label">文字</div>
-          <el-input v-model="uploadResultForm.resultText" type="textarea" :rows="8" placeholder="请输入" maxlength="1000"
-            show-word-limit />
+          <el-input
+            v-model="uploadResultForm.resultText"
+            type="textarea"
+            :rows="8"
+            placeholder="请输入"
+            maxlength="1000"
+            show-word-limit
+          />
         </div>
 
         <!-- 图片上传 -->
@@ -124,8 +153,12 @@
     </el-drawer>
 
     <!-- 图片预览 -->
-    <el-image-viewer v-if="resultImageViewerVisible" :url-list="resultImageViewerUrlList"
-      :initial-index="resultImageViewerInitialIndex" @close="resultImageViewerVisible = false" />
+    <el-image-viewer
+      v-if="resultImageViewerVisible"
+      :url-list="resultImageViewerUrlList"
+      :initial-index="resultImageViewerInitialIndex"
+      @close="resultImageViewerVisible = false"
+    />
   </div>
 </template>
 
@@ -206,17 +239,8 @@ const OPERATION_PERMISSIONS = {
   ],
   上架: [ACTIVITY_STATUS.已下架],
   下架: [ACTIVITY_STATUS.进行中],
-  编辑: [
-    ACTIVITY_STATUS.未开始,
-    ACTIVITY_STATUS.审核驳回,
-    ACTIVITY_STATUS.已下架,
-    ACTIVITY_STATUS.已结束
-  ],
-  删除: [
-    ACTIVITY_STATUS.未开始,
-    ACTIVITY_STATUS.已下架,
-    ACTIVITY_STATUS.已结束
-  ],
+  编辑: [ACTIVITY_STATUS.未开始, ACTIVITY_STATUS.审核驳回, ACTIVITY_STATUS.已下架, ACTIVITY_STATUS.已结束],
+  删除: [ACTIVITY_STATUS.未开始, ACTIVITY_STATUS.已下架, ACTIVITY_STATUS.已结束],
   查看拒绝原因: [ACTIVITY_STATUS.审核驳回],
   上传活动结果: [ACTIVITY_STATUS.已结束]
 } as const;
@@ -262,7 +286,7 @@ const columns = reactive<ColumnProps<any>[]>([
     prop: "activityType",
     label: "活动类型",
     width: 120,
-    isShow:false,
+    isShow: false,
     enum: activityTypeEnum,
     fieldNames: { label: "label", value: "value" },
     search: {
@@ -310,7 +334,8 @@ const columns = reactive<ColumnProps<any>[]>([
     prop: "status",
     label: "活动状态",
     render: (scope: any) => {
-      return getStatusLabel(scope.row.status);
+      // 优先使用返回的 statusName,如果没有则使用 getStatusLabel
+      return scope.row.statusName || getStatusLabel(scope.row.status);
     },
     search: {
       el: "select",
@@ -337,7 +362,17 @@ const dataCallback = (data: any) => {
 
 // 获取表格列表
 const getTableList = (params: any) => {
-  return getActivityList(params);
+  // 处理参数:确保 status 是 number 类型,pageNum 和 pageSize 转换为 string
+  const newParams: any = {
+    ...params,
+    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
+  };
+  // 移除 activityType 参数(如果存在),因为新接口不支持此参数
+  delete newParams.activityType;
+  return getActivityList(newParams);
 };
 
 // 新建活动
@@ -565,23 +600,18 @@ onMounted(async () => {
   flex: 0 0 auto;
   gap: 10px;
   margin-right: 20px;
-
   .button {
     margin-bottom: 0;
   }
 }
-
 .reject-reason-content {
   padding: 20px 0;
-
   .reject-reason-item {
     display: flex;
     margin-bottom: 20px;
-
     &:last-child {
       margin-bottom: 0;
     }
-
     .reject-reason-label {
       flex-shrink: 0;
       min-width: 100px;
@@ -589,13 +619,11 @@ onMounted(async () => {
       font-weight: 500;
       color: #606266;
     }
-
     .reject-reason-value {
       flex: 1;
       font-size: 14px;
       color: #303133;
       word-break: break-word;
-
       &.reject-reason-text {
         min-height: 80px;
         padding: 12px;
@@ -611,10 +639,8 @@ onMounted(async () => {
 // 上传活动结果抽屉样式
 .upload-result-content {
   padding: 20px 0;
-
   .result-type-section {
     margin-bottom: 24px;
-
     .result-type-label {
       margin-bottom: 12px;
       font-size: 14px;
@@ -622,7 +648,6 @@ onMounted(async () => {
       color: #606266;
     }
   }
-
   .result-content-section {
     .result-content-label {
       margin-bottom: 12px;
@@ -630,7 +655,6 @@ onMounted(async () => {
       font-weight: 500;
       color: #606266;
     }
-
     .upload-area-wrapper {
       // 当有文件时,隐藏上传框
       &.has-file {
@@ -641,7 +665,6 @@ onMounted(async () => {
     }
   }
 }
-
 .drawer-footer {
   display: flex;
   gap: 12px;