Răsfoiți Sursa

页面建立

congxuesong 1 lună în urmă
părinte
comite
3db5b5f1a0

+ 6 - 1
src/api/modules/storeUser.ts → src/api/modules/groupPackageManagement.ts

@@ -68,7 +68,12 @@ export const addBusinessSectionAndTypes = (params: {
 export const saveStoreInfo = (params: { id: string }) => {
   return http.post(PORT_NONE + `/store/info/saveStoreInfo`, params);
 };
-
+export const getUserByPhone = params => {
+  return http.get(PORT_NONE + `/store/user/getUserByPhone`, params);
+};
+export const getDetail = params => {
+  return http.get(PORT_NONE + `/store/info/getDetail`, params);
+};
 //获取商铺明细信息
 export const getStoreDetail = (params: StoreUser.ReqUserParams) => {
   return http.get<StoreUser.ResStoreUserList>(PORT_NONE + `/store/info/getStoreDetail`, params);

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

@@ -215,12 +215,12 @@ const getTableList = (params: any) => {
 
 // 跳转详情页
 const toDetail = row => {
-  router.push(`/groupPackageManagement/detail?id=${row.id}`);
+  router.push(`/groupPackageManagement/detail?id=${row.id}&type=edit`);
 };
 const editRow = row => {};
 const deleteRow = row => {};
 const newGroupBuying = () => {
-  router.push(`/groupPackageManagement/newGroup?id=1`);
+  router.push(`/groupPackageManagement/newGroup?id=361&type=add`);
 };
 const handleClick = () => {};
 const changeTypes = (row: any, status: string) => {

+ 214 - 187
src/views/groupPackageManagement/newGroup.vue

@@ -9,9 +9,9 @@
           <div class="model">
             <h3 style="font-weight: bold">基础信息:</h3>
             <!-- 团购图片上传 -->
-            <el-form-item label="图片" prop="fileList">
+            <el-form-item label="图片" prop="imageList">
               <el-upload
-                v-model:file-list="storeInfoModel.fileList"
+                v-model:file-list="storeInfoModel.imageList"
                 :action="uploadUrl"
                 list-type="picture-card"
                 :accept="'.jpg,.png'"
@@ -28,24 +28,23 @@
               </el-upload>
             </el-form-item>
             <!-- 团购名称 -->
-            <el-form-item label="团购名称" prop="storeName">
-              <el-input maxlength="50" v-model="storeInfoModel.storeName" placeholder="请填写团购名称" clearable />
+            <el-form-item label="团购名称" prop="groupName">
+              <el-input maxlength="50" v-model="storeInfoModel.groupName" placeholder="请填写团购名称" clearable />
             </el-form-item>
             <!-- 开始售卖时间设置方式 -->
-            <el-form-item label="开始售卖时间" prop="storeStatus">
-              <el-radio-group v-model="storeInfoModel.storeStatus" class="ml-4">
+            <el-form-item label="开始售卖时间" prop="startTimeType">
+              <el-radio-group v-model="storeInfoModel.startTimeType" class="ml-4">
                 <el-radio v-for="status in storeStatusList" :value="status.value" :key="status.value">
                   {{ status.label }}
                 </el-radio>
               </el-radio-group>
             </el-form-item>
             <!-- 自定义开始售卖时间(当选择"设置售卖时间"时显示) -->
-            <el-form-item label="" prop="startTime" v-if="storeInfoModel.storeStatus == 1">
+            <el-form-item label="" prop="saleTimeStr" v-if="storeInfoModel.startTimeType == 1">
               <el-date-picker
-                v-model="storeInfoModel.startTime"
-                format="YYYY/MM/DD hh:mm:ss"
-                value-format="YYYY-MM-DD h:m:s"
-                type="datetime"
+                v-model="storeInfoModel.saleTimeStr"
+                format="YYYY/MM/DD"
+                value-format="YYYY-MM-DD"
                 placeholder="请选择开始售卖时间"
               />
             </el-form-item>
@@ -53,27 +52,26 @@
             <el-form-item label="结束售卖时间" prop="endTime">
               <el-date-picker
                 v-model="storeInfoModel.endTime"
-                format="YYYY/MM/DD hh:mm:ss"
-                value-format="YYYY-MM-DD h:m:s"
-                type="datetime"
+                format="YYYY/MM/DD"
+                value-format="YYYY-MM-DD"
                 placeholder="请选择结束售卖时间"
               />
             </el-form-item>
             <!-- 库存数量 -->
-            <el-form-item label="库存数量" prop="stockQuantity">
-              <el-input v-model="storeInfoModel.stockQuantity" maxlength="15" placeholder="请填写库存数量" clearable />
+            <el-form-item label="库存数量" prop="inventoryNum">
+              <el-input v-model="storeInfoModel.inventoryNum" maxlength="15" placeholder="请填写库存数量" clearable />
             </el-form-item>
             <!-- 每人限购设置 -->
-            <el-form-item label="每人限购" prop="purchaseLimitPerPerson">
-              <el-radio-group v-model="storeInfoModel.purchaseLimitPerPerson" class="ml-4">
+            <el-form-item label="每人限购" prop="quotaType">
+              <el-radio-group v-model="storeInfoModel.quotaType" class="ml-4">
                 <el-radio v-for="status in perList" :value="status.value" :key="status.value">
                   {{ status.label }}
                 </el-radio>
               </el-radio-group>
             </el-form-item>
             <!-- 自定义限购数量(当选择"自定义限购数量"时显示) -->
-            <el-form-item label="" prop="purchaseLimit" v-if="storeInfoModel.purchaseLimitPerPerson == 1">
-              <el-input v-model="storeInfoModel.purchaseLimit" maxlength="15" placeholder="请填写自定义限购数量" clearable />
+            <el-form-item label="" prop="quotaValue" v-if="storeInfoModel.quotaType == 1">
+              <el-input v-model="storeInfoModel.quotaValue" maxlength="15" placeholder="请填写自定义限购数量" clearable />
             </el-form-item>
             <!-- 套餐内容 -->
             <el-form-item label="套餐内容" prop="packageContent" class="package-content-item">
@@ -140,12 +138,12 @@
           <div class="model">
             <h3 style="font-weight: bold">价格:</h3>
             <!-- 原价 -->
-            <el-form-item label="原价" prop="price">
-              <el-input maxlength="50" v-model="storeInfoModel.price" placeholder="请填写原价" clearable />
+            <el-form-item label="原价" prop="originalPrice">
+              <el-input maxlength="50" v-model="storeInfoModel.originalPrice" placeholder="请填写原价" clearable />
             </el-form-item>
             <!-- 优惠价 -->
-            <el-form-item label="优惠价" prop="discountedPrice">
-              <el-input maxlength="50" v-model="storeInfoModel.discountedPrice" placeholder="请填写优惠价" clearable />
+            <el-form-item label="优惠价" prop="preferentialPrice">
+              <el-input maxlength="50" v-model="storeInfoModel.preferentialPrice" placeholder="请填写优惠价" clearable />
             </el-form-item>
           </div>
         </div>
@@ -154,43 +152,38 @@
           <!-- 购买须知模块 -->
           <div class="model">
             <h3 style="font-weight: bold">购买须知:</h3>
-            <el-form-item label="有效期" prop="expirationDate">
-              <el-radio-group v-model="storeInfoModel.expirationDate" class="ml-4">
+            <el-form-item label="有效期" prop="effectiveDateType">
+              <el-radio-group v-model="storeInfoModel.effectiveDateType" class="ml-4">
                 <el-radio v-for="status in expirationDateList" :value="status.value" :key="status.value">
                   {{ status.label }}
                 </el-radio>
               </el-radio-group>
             </el-form-item>
-            <el-form-item label="" prop="expirationDateZdts" v-if="storeInfoModel.expirationDate == 0">
+            <el-form-item label="" prop="expirationDate" v-if="storeInfoModel.effectiveDateType == 0">
               <div class="expiration-date-container">
                 <span class="expiration-label">用户购买</span>
-                <el-input-number
-                  v-model="storeInfoModel.expirationDateZdts"
-                  placeholder="请输入"
-                  :min="0"
-                  :max="9999999"
-                  class="expiration-input"
-                />
+                <el-input-number v-model="storeInfoModel.expirationDate" placeholder="请输入" :min="0" class="expiration-input" />
                 <span class="expiration-label">天内有效</span>
               </div>
             </el-form-item>
-            <el-form-item label="" prop="expirationDateZdsjd" v-else>
+            <el-form-item label="" prop="effectiveDateValue" v-else>
               <el-date-picker
-                v-model="storeInfoModel.expirationDateZdsjd"
-                type="datetimerange"
+                v-model="storeInfoModel.effectiveDateValue"
+                type="daterange"
+                value-format="YYYY-MM-DD"
                 range-separator="-"
                 start-placeholder="开始时间"
                 end-placeholder="结束时间"
               />
             </el-form-item>
-            <el-form-item label="不可用日期" prop="unavailableDates">
-              <el-radio-group v-model="storeInfoModel.unavailableDates" class="ml-4">
+            <el-form-item label="不可用日期" prop="disableDateType">
+              <el-radio-group v-model="storeInfoModel.disableDateType" class="ml-4">
                 <el-radio v-for="status in unavailableDatesList" :value="status.value" :key="status.value">
                   {{ status.label }}
                 </el-radio>
               </el-radio-group>
             </el-form-item>
-            <template v-if="storeInfoModel.unavailableDates == 1">
+            <template v-if="storeInfoModel.disableDateType == 1">
               <el-form-item label="" prop="unavailableWeekdays">
                 <div class="unavailable-dates-container">
                   <!-- 星期选择 -->
@@ -199,12 +192,12 @@
                     <div class="button-group">
                       <el-button
                         v-for="weekday in weekdayList"
-                        :key="weekday.value"
-                        :type="storeInfoModel.unavailableWeekdays?.includes(weekday.value) ? 'primary' : ''"
+                        :key="weekday.oName"
+                        :type="storeInfoModel.unavailableWeekdays?.includes(weekday.oName) ? 'primary' : ''"
                         class="date-select-btn"
-                        @click="toggleWeekday(weekday.value)"
+                        @click="toggleWeekday(weekday.oName)"
                       >
-                        {{ weekday.label }}
+                        {{ weekday.name }}
                       </el-button>
                     </div>
                   </div>
@@ -218,25 +211,26 @@
                     <div class="button-group">
                       <el-button
                         v-for="holiday in holidayList"
-                        :key="holiday.value"
-                        :type="storeInfoModel.unavailableHolidays?.includes(holiday.value) ? 'primary' : ''"
+                        :key="holiday.id"
+                        :type="storeInfoModel.unavailableHolidays?.includes(holiday.id) ? 'primary' : ''"
                         class="date-select-btn"
-                        @click="toggleHoliday(holiday.value)"
+                        @click="toggleHoliday(holiday.id)"
                       >
-                        {{ holiday.label }}
+                        {{ holiday.festivalName }}
                       </el-button>
                     </div>
                   </div>
                 </div>
               </el-form-item>
             </template>
-            <el-form-item label="" prop="customUnavailableDates" v-else-if="storeInfoModel.unavailableDates == 2">
+            <el-form-item label="" prop="customUnavailableDates" v-else-if="storeInfoModel.disableDateType == 2">
               <div class="date-picker-container">
                 <el-button :icon="Plus" class="add-date-btn" type="primary" @click="addDate"> 添加日期 </el-button>
                 <div v-for="(item, index) in dates" :key="index" class="date-item">
                   <el-date-picker
                     v-model="dates[index]"
-                    type="datetimerange"
+                    type="daterange"
+                    value-format="YYYY-MM-DD"
                     range-separator="-"
                     start-placeholder="开始时间"
                     end-placeholder="结束时间"
@@ -255,28 +249,28 @@
               </div>
             </el-form-item>
             <!-- 预约规则 -->
-            <el-form-item label="预约规则" prop="appointmentRules">
+            <el-form-item label="预约规则" prop="reservationRules">
               <el-input
                 maxlength="300"
-                v-model="storeInfoModel.appointmentRules"
+                v-model="storeInfoModel.reservationRules"
                 :rows="4"
                 type="textarea"
                 placeholder="请输入预约规则"
               />
             </el-form-item>
             <!-- 使用规则 -->
-            <el-form-item label="使用规则" prop="rulesOfUse">
+            <el-form-item label="使用规则" prop="useRules">
               <el-input
                 maxlength="300"
-                v-model="storeInfoModel.rulesOfUse"
+                v-model="storeInfoModel.useRules"
                 :rows="4"
                 type="textarea"
                 placeholder="请输入使用规则"
               />
             </el-form-item>
             <!-- 适用人数 -->
-            <el-form-item label="适用人数" prop="numberOfPeople">
-              <el-input v-model="storeInfoModel.numberOfPeople" maxlength="15" placeholder="请填写适用人数" clearable />
+            <el-form-item label="适用人数" prop="applicableNum">
+              <el-input v-model="storeInfoModel.applicableNum" maxlength="15" placeholder="请填写适用人数" clearable />
             </el-form-item>
             <!-- 其他规则 -->
             <el-form-item label="其他规则" prop="otherRules">
@@ -289,16 +283,16 @@
               />
             </el-form-item>
             <!-- 发票信息 -->
-            <el-form-item label="发票信息" prop="businessTypes">
-              <el-checkbox-group v-model="storeInfoModel.businessTypes">
+            <el-form-item label="发票信息" prop="invoiceInformation">
+              <el-checkbox-group v-model="storeInfoModel.invoiceInformation">
                 <el-checkbox v-for="bt in businessTypes" :key="bt.value" :value="bt.value" :label="bt.label">
                   {{ bt.label }}
                 </el-checkbox>
               </el-checkbox-group>
             </el-form-item>
             <!-- 发票说明 -->
-            <el-form-item label="发票说明" prop="invoiceDescription">
-              <el-input v-model="storeInfoModel.invoiceDescription" maxlength="15" placeholder="请填写发票说明" clearable />
+            <el-form-item label="发票说明" prop="invoiceDescribe">
+              <el-input v-model="storeInfoModel.invoiceDescribe" maxlength="15" placeholder="请填写发票说明" clearable />
             </el-form-item>
           </div>
         </div>
@@ -307,7 +301,8 @@
     <!-- 底部按钮区域 -->
     <div class="button-container">
       <el-button @click="goBack"> 返回 </el-button>
-      <el-button type="primary" @click="handleSubmit"> 确定 </el-button>
+      <el-button @click="handleSubmit('cg')"> 存草稿 </el-button>
+      <el-button type="primary" @click="handleSubmit()"> 确定 </el-button>
     </div>
     <!-- 图片预览对话框 -->
     <el-dialog v-model="imagePopupVisible" title="预览" width="30%">
@@ -337,7 +332,7 @@
               </div>
               <div class="dish-price">¥{{ dish.price }}/份</div>
             </div>
-            <el-radio :model-value="selectedDishId" :label="dish.id" @click.stop="selectDish(dish)" />
+            <el-radio v-model="selectedDishId" :label="dish.id" @click.stop="selectDish(dish)" />
           </div>
         </div>
       </div>
@@ -358,9 +353,17 @@
 import { ref, reactive, onMounted, watch, nextTick } from "vue";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { Plus, Delete, ArrowDown, ArrowUp, Picture } from "@element-plus/icons-vue";
-import { saveStoreInfo, editStoreInfo, getStoreDetail } from "@/api/modules/storeUser";
+import {
+  saveStoreInfo,
+  editStoreInfo,
+  getDetail,
+  getStoreDetail,
+  getHolidayList,
+  getUserByPhone
+} from "@/api/modules/groupPackageManagement";
 import { useRouter, useRoute } from "vue-router";
 import type { UploadProps, FormInstance } from "element-plus";
+import { localGet, localSet } from "@/utils";
 
 // ==================== 响应式数据定义 ====================
 
@@ -382,12 +385,12 @@ const uploadUrl = ref(`${import.meta.env.VITE_API_URL_STORE}/file/upload`);
 
 // ==================== 表单验证规则 ====================
 const rules = reactive({
-  fileList: [{ required: true, message: "请上传图片" }],
-  storeName: [{ required: true, message: "请填写团购名称" }],
-  storeStatus: [{ required: true, message: "请选择开始售卖时间" }],
-  startTime: [{ required: true, message: "请选择开始售卖时间" }],
+  imageList: [{ required: true, message: "请上传图片" }],
+  groupName: [{ required: true, message: "请填写团购名称" }],
+  startTimeType: [{ required: true, message: "请选择开始售卖时间" }],
+  saleTimeStr: [{ required: true, message: "请选择开始售卖时间" }],
   endTime: [{ required: true, message: "请选择结束售卖时间" }],
-  stockQuantity: [
+  inventoryNum: [
     { required: true, message: "请填写库存数量" },
     {
       validator: (rule: any, value: any, callback: any) => {
@@ -409,12 +412,12 @@ const rules = reactive({
       trigger: "blur"
     }
   ],
-  purchaseLimitPerPerson: [{ required: true, message: "请选择每人限购" }],
-  purchaseLimit: [
+  quotaType: [{ required: true, message: "请选择每人限购" }],
+  quotaValue: [
     {
       required: true,
       validator: (rule: any, value: any, callback: any) => {
-        if (storeInfoModel.value.purchaseLimitPerPerson === 1) {
+        if (storeInfoModel.value.quotaType === 1) {
           if (!value || value.toString().trim() === "") {
             callback(new Error("请输入自定义限购数量"));
             return;
@@ -434,51 +437,51 @@ const rules = reactive({
       trigger: "blur"
     }
   ],
-  packageContent: [
-    {
-      required: true,
-      validator: (rule: any, value: any, callback: any) => {
-        if (!value || value.length === 0) {
-          callback(new Error("请至少添加一个套餐分组"));
-          return;
-        }
-        for (let i = 0; i < value.length; i++) {
-          const group = value[i];
-          if (!group.category || group.category.trim() === "") {
-            callback(new Error(`第${i + 1}个分组的类别不能为空`));
-            return;
-          }
-          if (!group.dishes || group.dishes.length === 0) {
-            callback(new Error(`第${i + 1}个分组至少需要添加一个菜品`));
-            return;
-          }
-          for (let j = 0; j < group.dishes.length; j++) {
-            const dish = group.dishes[j];
-            if (!dish.dishId) {
-              callback(new Error(`第${i + 1}个分组的第${j + 1}个菜品未选择`));
-              return;
-            }
-            if (!dish.quantity || dish.quantity.toString().trim() === "") {
-              callback(new Error(`第${i + 1}个分组的第${j + 1}个菜品数量不能为空`));
-              return;
-            }
-            const quantityNum = Number(dish.quantity);
-            if (isNaN(quantityNum) || quantityNum <= 0) {
-              callback(new Error(`第${i + 1}个分组的第${j + 1}个菜品数量必须为正整数`));
-              return;
-            }
-            if (!Number.isInteger(quantityNum)) {
-              callback(new Error(`第${i + 1}个分组的第${j + 1}个菜品数量必须为正整数`));
-              return;
-            }
-          }
-        }
-        callback();
-      },
-      trigger: "blur"
-    }
-  ],
-  price: [
+  // packageContent: [
+  //   {
+  //     required: true,
+  //     validator: (rule: any, value: any, callback: any) => {
+  //       if (!value || value.length === 0) {
+  //         callback(new Error("请至少添加一个套餐分组"));
+  //         return;
+  //       }
+  //       for (let i = 0; i < value.length; i++) {
+  //         const group = value[i];
+  //         if (!group.category || group.category.trim() === "") {
+  //           callback(new Error(`第${i + 1}个分组的类别不能为空`));
+  //           return;
+  //         }
+  //         if (!group.dishes || group.dishes.length === 0) {
+  //           callback(new Error(`第${i + 1}个分组至少需要添加一个菜品`));
+  //           return;
+  //         }
+  //         for (let j = 0; j < group.dishes.length; j++) {
+  //           const dish = group.dishes[j];
+  //           if (!dish.dishId) {
+  //             callback(new Error(`第${i + 1}个分组的第${j + 1}个菜品未选择`));
+  //             return;
+  //           }
+  //           if (!dish.quantity || dish.quantity.toString().trim() === "") {
+  //             callback(new Error(`第${i + 1}个分组的第${j + 1}个菜品数量不能为空`));
+  //             return;
+  //           }
+  //           const quantityNum = Number(dish.quantity);
+  //           if (isNaN(quantityNum) || quantityNum <= 0) {
+  //             callback(new Error(`第${i + 1}个分组的第${j + 1}个菜品数量必须为正整数`));
+  //             return;
+  //           }
+  //           if (!Number.isInteger(quantityNum)) {
+  //             callback(new Error(`第${i + 1}个分组的第${j + 1}个菜品数量必须为正整数`));
+  //             return;
+  //           }
+  //         }
+  //       }
+  //       callback();
+  //     },
+  //     trigger: "blur"
+  //   }
+  // ],
+  originalPrice: [
     { required: true, message: "请输入原价" },
     {
       validator: (rule: any, value: any, callback: any) => {
@@ -496,7 +499,7 @@ const rules = reactive({
       trigger: "blur"
     }
   ],
-  discountedPrice: [
+  preferentialPrice: [
     { required: true, message: "请输入优惠价" },
     {
       validator: (rule: any, value: any, callback: any) => {
@@ -514,8 +517,8 @@ const rules = reactive({
       trigger: "blur"
     }
   ],
-  expirationDate: [{ required: true, message: "请选择有效期" }],
-  expirationDateZdts: [
+  effectiveDateType: [{ required: true, message: "请选择有效期" }],
+  expirationDate: [
     {
       required: true,
       validator: (rule: any, value: any, callback: any) => {
@@ -534,7 +537,7 @@ const rules = reactive({
       trigger: "blur"
     }
   ],
-  expirationDateZdsjd: [
+  effectiveDateValue: [
     {
       required: true,
       validator: (rule: any, value: any, callback: any) => {
@@ -549,7 +552,7 @@ const rules = reactive({
       trigger: "blur"
     }
   ],
-  unavailableDates: [{ required: true, message: "请选择不可用日期" }],
+  disableDateType: [{ required: true, message: "请选择不可用日期" }],
   unavailableWeekdays: [
     {
       required: true,
@@ -602,9 +605,9 @@ const rules = reactive({
       trigger: "blur"
     }
   ],
-  appointmentRules: [{ required: true, message: "请输入预约规则" }],
-  rulesOfUse: [{ required: true, message: "请输入使用规则" }],
-  numberOfPeople: [
+  reservationRules: [{ required: true, message: "请输入预约规则" }],
+  useRules: [{ required: true, message: "请输入使用规则" }],
+  applicableNum: [
     { required: true, message: "请输入适用人数" },
     {
       validator: (rule: any, value: any, callback: any) => {
@@ -627,28 +630,28 @@ const rules = reactive({
     }
   ],
   otherRules: [{ required: true, message: "请输入其他规则" }],
-  businessTypes: [{ required: true, message: "请选择发票信息" }],
-  invoiceDescription: [{ required: true, message: "请输入发票说明" }]
+  invoiceInformation: [{ required: true, message: "请选择发票信息" }],
+  invoiceDescribe: [{ required: true, message: "请输入发票说明" }]
 });
 
 // ==================== 团购包信息数据模型 ====================
 const storeInfoModel = ref<any>({
   // 团购图片列表
-  fileList: [],
+  imageList: [],
   // 团购名称
-  storeName: "",
+  groupName: "",
   // 开始售卖时间设置方式:0-审核通过后立即开始,1-设置售卖时间
-  storeStatus: 0,
+  startTimeType: 0,
   // 开始售卖时间(当storeStatus为1时必填)
-  startTime: "",
+  saleTimeStr: "",
   // 结束售卖时间
   endTime: "",
   // 库存数量
-  stockQuantity: "",
+  inventoryNum: "",
   // 每人限购设置:0-不限量,1-自定义限购数量
-  purchaseLimitPerPerson: 0,
-  // 自定义限购数量(当purchaseLimitPerPerson为1时必填)
-  purchaseLimit: "",
+  quotaValueStr: 0,
+  // 自定义限购数量(当quotaType为1时必填)
+  quotaValue: 0,
   // 套餐内容(数组,每个元素是一个分组)
   packageContent: [
     {
@@ -667,37 +670,39 @@ const storeInfoModel = ref<any>({
     }
   ],
   // 原价
-  price: "",
+  originalPrice: "",
   // 优惠价
-  discountedPrice: "",
+  preferentialPrice: "",
   // 有效期设置:0-指定天数,1-指定时间段内可用
+  effectiveDateType: 0,
   expirationDate: 0,
+  effectiveDateValue: [],
   // 不可用日期设置:0-全部日期可用,1-限制日期,2-自定义不可用日期
-  unavailableDates: 0,
+  disableDateType: 0,
   // 限制日期 - 星期选择(数组,存储选中的星期值)
   unavailableWeekdays: [],
   // 限制日期 - 节日选择(数组,存储选中的节日值)
   unavailableHolidays: [],
   // 预约规则
-  appointmentRules: "",
+  reservationRules: "",
   // 使用规则
-  rulesOfUse: "",
+  useRules: "",
   // 适用人数
-  numberOfPeople: "",
+  applicableNum: "",
   // 其他规则
   otherRules: "",
   // 发票信息(复选框,可多选)
-  businessTypes: [],
+  invoiceInformation: [],
   // 发票说明
-  invoiceDescription: ""
+  invoiceDescribe: ""
 });
 
 // ==================== 下拉选项数据 ====================
 
 // 发票类型列表
 const businessTypes = ref<any[]>([
-  { value: 1, label: "提供电子发票" },
-  { value: 2, label: "提供纸质发票" }
+  { value: 0, label: "提供电子发票" },
+  { value: 1, label: "提供纸质发票" }
 ]);
 
 // 开始售卖时间设置方式列表
@@ -729,13 +734,13 @@ const dates = ref<any[]>([]);
 
 // 星期选项列表
 const weekdayList = ref<any[]>([
-  { value: 1, label: "周一" },
-  { value: 2, label: "周二" },
-  { value: 3, label: "周三" },
-  { value: 4, label: "周四" },
-  { value: 5, label: "周五" },
-  { value: 6, label: "周六" },
-  { value: 7, label: "周日" }
+  { name: "周一", id: "0", oName: "星期一" },
+  { name: "周二", id: "1", oName: "星期二" },
+  { name: "周三", id: "2", oName: "星期三" },
+  { name: "周四", id: "3", oName: "星期四" },
+  { name: "周五", id: "4", oName: "星期五" },
+  { name: "周六", id: "5", oName: "星期六" },
+  { name: "周日", id: "6", oName: "星期日" }
 ]);
 
 // 节日选项列表
@@ -800,13 +805,43 @@ watch(
 onMounted(async () => {
   id.value = (route.query.id as string) || "";
   type.value = (route.query.type as string) || "";
+  let param = {
+    // phone: localGet("iphone")
+    phone: "18641153170"
+  };
+  const resP: any = await getUserByPhone(param);
+  if (resP.data && resP.data.storeId) {
+    localSet("createdId", resP.data.storeId);
+    const resD: any = await getDetail({
+      id: localGet("createdId")
+    });
+    if (resD.data && resD.data.commissionRate) {
+      localSet("commissionRate", resD.data.commissionRate);
+    }
+    if (resD.data && resD.data.businessSection) {
+      localSet("businessSection", resD.data.businessSection);
+    }
+  } else {
+    ElMessage.warning("请完成商家入驻后再进行新建团购");
+  }
+  let params = {
+    year: new Date().getFullYear(),
+    page: 1,
+    size: 500,
+    openFlag: 1,
+    holidayName: ""
+  };
+  let res = await getHolidayList(params);
+  if (res && res.code == 200) {
+    holidayList.value = res.data.records;
+  }
   if (type.value != "add") {
     let res: any = await getStoreDetail({ id: id.value } as any);
     storeInfoModel.value = res.data as any;
     videoUrlList.value = (res.data as any).businessLicenseAddress || [];
-    let fileList: any[] = [];
-    handleImageParam((res.data as any).businessLicenseAddress || [], fileList);
-    storeInfoModel.value.fileList = fileList;
+    let imageList: any[] = [];
+    handleImageParam((res.data as any).businessLicenseAddress || [], imageList);
+    storeInfoModel.value.imageList = imageList;
     // 确保星期和节日字段存在
     if (!storeInfoModel.value.unavailableWeekdays) {
       storeInfoModel.value.unavailableWeekdays = [];
@@ -908,7 +943,7 @@ const handleRemove: UploadProps["onRemove"] = (uploadFile, uploadFiles) => {
  */
 const handleSuccess = (response: any) => {
   ElMessage.success("图片上传成功");
-  // 上传成功后,fileList 会自动更新,response.data 包含图片URL
+  // 上传成功后,imageList 会自动更新,response.data 包含图片URL
 };
 
 /**
@@ -943,7 +978,7 @@ const removeDate = (index: number) => {
  * 切换星期选择
  * @param value 星期值
  */
-const toggleWeekday = (value: number) => {
+const toggleWeekday = value => {
   if (!storeInfoModel.value.unavailableWeekdays) {
     storeInfoModel.value.unavailableWeekdays = [];
   }
@@ -953,6 +988,7 @@ const toggleWeekday = (value: number) => {
   } else {
     storeInfoModel.value.unavailableWeekdays.push(value);
   }
+  console.log(storeInfoModel.value.unavailableWeekdays);
   // 触发表单验证
   nextTick(() => {
     ruleFormRef.value?.validateField("unavailableWeekdays");
@@ -963,7 +999,7 @@ const toggleWeekday = (value: number) => {
  * 切换节日选择
  * @param value 节日值
  */
-const toggleHoliday = (value: number) => {
+const toggleHoliday = value => {
   if (!storeInfoModel.value.unavailableHolidays) {
     storeInfoModel.value.unavailableHolidays = [];
   }
@@ -973,6 +1009,7 @@ const toggleHoliday = (value: number) => {
   } else {
     storeInfoModel.value.unavailableHolidays.push(value);
   }
+  console.log(storeInfoModel.value.unavailableHolidays);
   // 触发表单验证
   nextTick(() => {
     ruleFormRef.value?.validateField("unavailableHolidays");
@@ -1123,40 +1160,30 @@ const ruleFormRef = ref<FormInstance>(); // 表单引用
  * 提交数据(新增/编辑)
  * 验证表单,通过后调用相应的API接口
  */
-const handleSubmit = () => {
+const handleSubmit = type => {
+  let params: any = { ...storeInfoModel.value };
+  if (params.effectiveDateType == 0) {
+    params.couponCompDate = `用户购买${params.expirationDate}天内有效`;
+  } else {
+    params.effectiveDateValue = params.effectiveDateValue.join(",");
+  }
+  if (params.disableDateType == 1) {
+    params.disableDateValue = params.unavailableWeekdays.join(",") + ";" + params.unavailableHolidays.join(",");
+    delete params.unavailableWeekdays;
+    delete params.unavailableHolidays;
+  } else if (params.disableDateType == 2) {
+    params.disableDateValue = dates.value.map(subArray => subArray.join(",")).join(";");
+  }
+  params.invoiceType = params.invoiceInformation.join(",");
+  console.log(params);
+  if (type) {
+    return;
+  }
   // 验证表单
   ruleFormRef.value!.validate(async valid => {
     if (!valid) return;
-
     // 组装提交参数
-    let param: any = { ...storeInfoModel.value };
-    // 处理图片列表:将上传组件格式转换为URL数组
-    param.businessLicenseAddress = handleImageResult(storeInfoModel.value.fileList || []);
-    // 清空时间戳字段
-    param.createTime = null;
-    param.updatedTime = null;
-
-    // 根据页面类型调用不同的API
-    if (type.value == "add") {
-      // 新增团购包
-      let res = await saveStoreInfo(param);
-      if (res.code == "200") {
-        ElMessage.success("新增成功");
-        router.go(-1);
-      } else {
-        ElMessage.error("新增失败");
-      }
-    } else if (type.value == "edit") {
-      // 编辑团购包
-      param.id = id.value; // 编辑时需要传递ID
-      let res = await editStoreInfo(param);
-      if (res.code == "200") {
-        ElMessage.success("编辑成功");
-        router.go(-1);
-      } else {
-        ElMessage.error("编辑失败");
-      }
-    }
+    let params: any = { ...storeInfoModel.value };
   });
 };
 

+ 2 - 2
src/views/home/toDoItem/index.vue

@@ -100,11 +100,11 @@ import { useRoute, useRouter } from "vue-router";
 import { Audit } from "@/api/interface";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { getAuditList, getAuditSum } from "@/api/modules/audit";
-import { approveStoreInfo } from "@/api/modules/storeUser";
+import { approveStoreInfo } from "@/api/modules/groupPackageManagement";
 import { consentComplaintFun, rejectClaimFun } from "@/api/modules/storeCommentAppeal";
 import { updateStatus } from "@/api/modules/groupPackage";
 import { changeStatus } from "@/api/modules/groupPackage";
-import { updatefoodLicenceImageStatus } from "@/api/modules/storeUser";
+import { updatefoodLicenceImageStatus } from "@/api/modules/groupPackageManagement";
 
 const dialogFormVisible = ref(false);
 const router = useRouter();