2 Commits f0d51b85e7 ... 2d62871d1d

Tác giả SHA1 Thông báo Ngày
  fugui001 2d62871d1d feat(service-order): 添加订单核销功能 1 tháng trước cách đây
  fugui001 33402bb116 feat(store): 更新门店管理中的字段标签和服务订单验证时间 1 tháng trước cách đây

+ 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
+  });
+};

+ 13 - 5
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';
@@ -393,10 +400,11 @@ const handleVerify = async (row: ServiceOrderVO) => {
 
   const updateData: ServiceOrderForm = {
     ...row,
-    isVerified: true
+    isVerified: true,
+    verifyTime: new Date().toISOString()
   };
 
-  await updateServiceOrder(updateData);
+  await verifyOrder(updateData);
   proxy?.$modal.msgSuccess('核销成功');
   await getList();
 };

+ 21 - 5
src/views/system/physical/store/index.vue

@@ -48,8 +48,8 @@
             <span v-else>无</span>
           </template>
         </el-table-column>
-        <el-table-column label="门店名称" align="center" prop="name" />
-        <el-table-column label="门店类型" align="center" prop="storeTypeName" />
+        <el-table-column label="称" align="center" prop="name" />
+        <el-table-column label="服务类型" align="center" prop="storeTypeName" />
         <el-table-column label="详细地址" align="center" prop="address" />
         <el-table-column label="是否授权" align="center" prop="isAuthorization">
           <template #default="scope">
@@ -104,8 +104,8 @@
     <!-- 添加或修改门店信息对话框 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="600px" append-to-body>
       <el-form ref="storeFormRef" :model="form" :rules="rules" label-width="120px">
-        <el-form-item label="门店名称" prop="name">
-          <el-input v-model="form.name" placeholder="请输入门店名称,最多 20 字" />
+        <el-form-item label="称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入昵称" />
         </el-form-item>
         <el-form-item label="详细地址" prop="address">
           <el-input v-model="form.address" type="textarea" placeholder="请输入内容" />
@@ -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;
 };