Sfoglia il codice sorgente

feat(groupPackage): 添加查看拒绝原因功能

- 在列表页新增“查看拒绝原因”按钮,仅在审核拒绝状态下显示
- 新增查看拒绝原因弹窗,展示团购名称、编号及多种可能的拒绝原因字段- 扩展状态判断逻辑,支持查看拒绝原因操作权限控制
- 调整表格状态列宽度以适应新按钮布局
- 优化节假日不可用日期处理逻辑,统一类型转换避免匹配问题
congxuesong 1 mese fa
parent
commit
eb4caf6be1

+ 112 - 2
src/views/groupPackageManagement/index.vue

@@ -57,6 +57,14 @@
           修改库存
         </el-button>
         <el-button
+          link
+          type="primary"
+          @click="viewRejectReason(scope.row)"
+          v-if="canShowButton(scope.row.status, OPERATION_PERMISSIONS.查看拒绝原因)"
+        >
+          查看拒绝原因
+        </el-button>
+        <el-button
           type="primary"
           link
           @click="toDetail(scope.row)"
@@ -101,6 +109,40 @@
         </div>
       </template>
     </el-dialog>
+    <!-- 查看拒绝原因弹窗 -->
+    <el-dialog v-model="rejectReasonDialogVisible" title="查看拒绝原因" width="600px">
+      <div class="reject-reason-content">
+        <div class="reject-reason-item">
+          <div class="reject-reason-label">团购名称:</div>
+          <div class="reject-reason-value">
+            {{ rejectReasonData.groupName || "--" }}
+          </div>
+        </div>
+        <div class="reject-reason-item">
+          <div class="reject-reason-label">团购编号:</div>
+          <div class="reject-reason-value">
+            {{ rejectReasonData.groupNo || "--" }}
+          </div>
+        </div>
+        <div class="reject-reason-item">
+          <div class="reject-reason-label">拒绝原因:</div>
+          <div class="reject-reason-value reject-reason-text">
+            {{
+              rejectReasonData.rejectReason ||
+              rejectReasonData.rejectionReason ||
+              rejectReasonData.refuseReason ||
+              rejectReasonData.auditReason ||
+              "暂无拒绝原因"
+            }}
+          </div>
+        </div>
+      </div>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="closeRejectReasonDialog"> 确定 </el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -124,6 +166,16 @@ const formInventory: any = ref({
 });
 const rowData = ref<any>();
 const activeName = ref("");
+// 查看拒绝原因弹窗相关
+const rejectReasonDialogVisible = ref(false);
+const rejectReasonData = ref<any>({
+  groupName: "",
+  groupNo: "",
+  rejectReason: "",
+  rejectionReason: "",
+  refuseReason: "",
+  auditReason: ""
+});
 
 // 定义表单类型
 interface RuleForm {
@@ -182,7 +234,9 @@ const OPERATION_PERMISSIONS = {
   // 编辑:草稿、审核拒绝、已售罄、已下架、已结束
   编辑: [STATUS.草稿, STATUS.审核拒绝, STATUS.已售罄, STATUS.已下架, STATUS.已结束],
   // 删除:草稿、未开始、审核拒绝、已售罄、已结束
-  删除: [STATUS.草稿, STATUS.未开始, STATUS.审核拒绝, STATUS.已售罄, STATUS.已结束]
+  删除: [STATUS.草稿, STATUS.未开始, STATUS.审核拒绝, STATUS.已售罄, STATUS.已结束],
+  // 查看拒绝原因:审核拒绝
+  查看拒绝原因: [STATUS.审核拒绝]
 } as const;
 
 // 判断按钮是否显示的工具函数
@@ -269,7 +323,8 @@ const columns = reactive<ColumnProps<any>[]>([
   },
   {
     prop: "status",
-    label: "状态"
+    label: "状态",
+    width: 200
   },
   { prop: "operation", label: "操作", fixed: "right", width: 330 }
 ]);
@@ -406,6 +461,30 @@ const closeDialog = () => {
     newInventory: ""
   };
 };
+// 查看拒绝原因
+const viewRejectReason = (row: any) => {
+  rejectReasonData.value = {
+    groupName: row.groupName || "",
+    groupNo: row.groupNo || "",
+    rejectReason: row.rejectReason || "",
+    rejectionReason: row.rejectionReason || "",
+    refuseReason: row.refuseReason || "",
+    auditReason: row.auditReason || ""
+  };
+  rejectReasonDialogVisible.value = true;
+};
+// 关闭拒绝原因弹窗
+const closeRejectReasonDialog = () => {
+  rejectReasonDialogVisible.value = false;
+  rejectReasonData.value = {
+    groupName: "",
+    groupNo: "",
+    rejectReason: "",
+    rejectionReason: "",
+    refuseReason: "",
+    auditReason: ""
+  };
+};
 </script>
 
 <style lang="scss" scoped>
@@ -435,4 +514,35 @@ const closeDialog = () => {
     align-items: flex-start;
   }
 }
+.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;
+      font-size: 14px;
+      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;
+        line-height: 1.6;
+        white-space: pre-wrap;
+        background-color: #f5f7fa;
+        border-radius: 4px;
+      }
+    }
+  }
+}
 </style>

+ 10 - 18
src/views/groupPackageManagement/newGroup.vue

@@ -298,7 +298,7 @@
                       <el-button
                         v-for="holiday in holidayList"
                         :key="holiday.id"
-                        :type="storeInfoModel.unavailableHolidays?.includes(holiday.id) ? 'primary' : ''"
+                        :type="storeInfoModel.unavailableHolidays?.includes(String(holiday.id)) ? 'primary' : ''"
                         class="date-select-btn"
                         @click="toggleHoliday(holiday.id)"
                       >
@@ -1064,9 +1064,11 @@ onMounted(async () => {
     storeInfoModel.value.imageList = imageList;
     storeInfoModel.value.invoiceInformation = storeInfoModel.value.invoiceType.split(";");
     // 确保星期和节日字段存在
-    const listVal = storeInfoModel.value.disableDateValue.split(";");
-    storeInfoModel.value.unavailableWeekdays = listVal[0].split(",");
-    storeInfoModel.value.unavailableHolidays = listVal[1].split(",");
+    if (storeInfoModel.value.disableDateType == 1) {
+      const listVal = storeInfoModel.value.disableDateValue.split(";");
+      storeInfoModel.value.unavailableWeekdays = listVal[0] ? listVal[0].split(",").filter((item: string) => item) : [];
+      storeInfoModel.value.unavailableHolidays = listVal[1] ? listVal[1].split(",").filter((item: string) => item) : [];
+    }
     if (res.data.lifeGroupBuyThalis && res.data.lifeGroupBuyThalis.length > 0) {
       lifeGroupBuyThalis.value = res.data.lifeGroupBuyThalis;
       // 确保每个分组都有必要的字段
@@ -1224,13 +1226,14 @@ const toggleHoliday = value => {
   if (!storeInfoModel.value.unavailableHolidays) {
     storeInfoModel.value.unavailableHolidays = [];
   }
-  const index = storeInfoModel.value.unavailableHolidays.indexOf(value);
+  // 统一转换为字符串进行比较
+  const valueStr = String(value);
+  const index = storeInfoModel.value.unavailableHolidays.findIndex((item: any) => String(item) === valueStr);
   if (index > -1) {
     storeInfoModel.value.unavailableHolidays.splice(index, 1);
   } else {
-    storeInfoModel.value.unavailableHolidays.push(value);
+    storeInfoModel.value.unavailableHolidays.push(valueStr);
   }
-  console.log(storeInfoModel.value.unavailableHolidays);
   // 触发表单验证
   nextTick(() => {
     ruleFormRef.value?.validateField("unavailableHolidays");
@@ -1721,21 +1724,10 @@ const handleSubmit = async (type?) => {
   let params: any = { ...storeInfoModel.value };
   if (params.disableDateType == 1) {
     params.disableDateValue = params.unavailableWeekdays.join(",") + ";" + params.unavailableHolidays.join(",");
-    // params.disableDateValue = [params.unavailableWeekdays, params.unavailableHolidays];
     delete params.unavailableWeekdays;
     delete params.unavailableHolidays;
-  } else if (params.disableDateType == 2) {
-    // params.disableDateValue = params.disableDateList.map(subArray => subArray.join(",")).join(";");
   }
   params.invoiceType = params.invoiceInformation.join(",");
-  // const output = lifeGroupBuyThalis.value.flatMap(group =>
-  //   group.dishes.map(dish => ({
-  //     groupName: group.groupName,
-  //     detailId: dish.detailId,
-  //     qty: dish.qty,
-  //     dishPrice: dish.dishPrice
-  //   }))
-  // );
   const paramsObj: any = {
     lifeGroupBuyMain: params,
     lifeGroupBuyThalis: lifeGroupBuyThalis.value