瀏覽代碼

feat(service-order): 添加订单核销功能

- 在服务订单API中新增verifyOrder方法用于订单核销
- 更新服务订单列表页面的导入模块引入新的核销API
- 将订单核销操作从updateServiceOrder改为verifyOrder
- 修改表格列标题"过期时间"为"截止核销时间"
- 修复门店宣传图字段名和验证规则问题
- 添加门店宣传图必填验证和地图选择后的表单验证清除功能
fugui001 4 小時之前
父節點
當前提交
2d62871d1d

+ 11 - 0
src/api/system/physical/serviceOrder/index.ts

@@ -61,3 +61,14 @@ export const delServiceOrder = (id: string | number | Array<string | number>) =>
     method: 'delete'
   });
 };
+/**
+ * 核销订单
+ * @param data
+ */
+export const verifyOrder = (data: ServiceOrderForm) => {
+  return request({
+    url: '/physical/serviceOrder/verifyOrder',
+    method: 'put',
+    data: data
+  });
+};

+ 11 - 4
src/views/system/physical/serviceOrder/index.vue

@@ -75,7 +75,7 @@
         <el-table-column label="编号" align="center" prop="id" v-if="true" />
         <el-table-column label="用户昵称" align="center" prop="userNickname" />
         <el-table-column label="用户姓名" align="center" prop="userRealName" />
-        <el-table-column label="用户身份证" align="center" prop="userIdCard" width="110"/>
+        <el-table-column label="用户身份证" align="center" prop="userIdCard" width="110" />
         <el-table-column label="账号ID" align="center" prop="userId" />
         <el-table-column label="服务类型" align="center" prop="serviceName" />
         <el-table-column label="服务门店" align="center" prop="storeName" />
@@ -101,7 +101,7 @@
             <span v-else>-</span>
           </template>
         </el-table-column>
-        <el-table-column label="过期时间" align="center" prop="expireTime" width="180">
+        <el-table-column label="截止核销时间" align="center" prop="expireTime" width="180">
           <template #default="scope">
             <span>{{ parseTime(scope.row.expireTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
           </template>
@@ -182,7 +182,14 @@
 </template>
 
 <script setup name="ServiceOrder" lang="ts">
-import { listServiceOrder, getServiceOrder, delServiceOrder, addServiceOrder, updateServiceOrder } from '@/api/system/physical/serviceOrder';
+import {
+  listServiceOrder,
+  getServiceOrder,
+  delServiceOrder,
+  addServiceOrder,
+  updateServiceOrder,
+  verifyOrder
+} from '@/api/system/physical/serviceOrder';
 import { ServiceOrderVO, ServiceOrderQuery, ServiceOrderForm } from '@/api/system/physical/serviceOrder/types';
 import { parseTime } from '@/utils/dateUtils';
 import { ElSelect } from 'element-plus';
@@ -397,7 +404,7 @@ const handleVerify = async (row: ServiceOrderVO) => {
     verifyTime: new Date().toISOString()
   };
 
-  await updateServiceOrder(updateData);
+  await verifyOrder(updateData);
   proxy?.$modal.msgSuccess('核销成功');
   await getList();
 };

+ 17 - 1
src/views/system/physical/store/index.vue

@@ -170,7 +170,7 @@
             </div>
           </div>
         </el-form-item>
-        <el-form-item label="门店宣传图" prop="storePromotionImage">
+        <el-form-item label="门店宣传图" prop="storePromotionImageOsId">
           <imageUpload v-model="form.storePromotionImageOsId" :limit="5" />
         </el-form-item>
         <el-form-item label="开始兑换时间" prop="businessStartTime">
@@ -357,6 +357,18 @@ const data = reactive<PageData<StoreForm, StoreQuery>>({
         trigger: 'change'
       }
     ],
+    storePromotionImageOsId: [
+      {
+        validator: (rule, value, callback) => {
+          if (!value || value.length === 0) {
+            callback(new Error('请至少上传一张门店宣传图'));
+          } else {
+            callback();
+          }
+        },
+        trigger: 'change'
+      }
+    ]
   }
 });
 
@@ -818,6 +830,10 @@ const confirmMapSelection = () => {
     form.value.address = selectedAddress.value;
     form.value.latitude = selectedLocation.value.lat;
     form.value.longitude = selectedLocation.value.lng;
+    // 清除校验状态
+    nextTick(() => {
+      storeFormRef.value?.clearValidate('address');
+    });
   }
   mapDialogVisible.value = false;
 };