张田田 1 месяц назад
Родитель
Сommit
7eea000a5a
4 измененных файлов с 97 добавлено и 32 удалено
  1. 16 0
      src/model/order.model.ts
  2. 7 2
      src/order/DispatchOrderPanel.vue
  3. 15 2
      src/request/api/order.api.ts
  4. 59 28
      src/service/SingleItemDetail.vue

+ 16 - 0
src/model/order.model.ts

@@ -161,4 +161,20 @@ export interface EvaluateDetailModel {
   depict: string;//	评价描述
   depict: string;//	评价描述
   imageVideos: string[];//图片视频
   imageVideos: string[];//图片视频
   createTime: string;//创建时间
   createTime: string;//创建时间
+}
+
+export interface ApplyRecordModel{
+  id: number; // 主键ID
+  arrangeTime: string; // 预定时间
+  arrangeDuration: number; // 预定时长
+  arrangePeriod: string; // 服务时间段
+  applyTime: string; // 预约时间
+  updateTime: string; // 更新预约时间
+  cancelTime: string; // 取消预约时间
+  conditioningProgramSupplierId: number; // 供应商ID
+  conditioningProgramSupplierName: string; // 供应商名称
+  pieBy: string; // 派单人
+  pieTime: string; // 派单时间
+  operateTime: string; // 操作时间
+  status: string; // 服务状态
 }
 }

+ 7 - 2
src/order/DispatchOrderPanel.vue

@@ -133,7 +133,10 @@ function calculateEndTime(order: OrderModel): string | null {
 function isOrderVerified(order: OrderModel): boolean {
 function isOrderVerified(order: OrderModel): boolean {
   return props.orderType === 'offline' && order.type === 3;
   return props.orderType === 'offline' && order.type === 3;
 }
 }
-
+// 判断订单是否取消预约派单(线下服务)
+function isOrderCancelPie(order: OrderModel): boolean {
+  return props.orderType === 'offline' && order.type === 4;
+}
 // 判断订单是否已发货(实体商品)
 // 判断订单是否已发货(实体商品)
 function isOrderShipped(order: OrderModel): boolean {
 function isOrderShipped(order: OrderModel): boolean {
   return props.orderType === 'physical' && order.type === 3;
   return props.orderType === 'physical' && order.type === 3;
@@ -1101,9 +1104,11 @@ defineExpose({
                 <!-- 已核销/已发货印章 -->
                 <!-- 已核销/已发货印章 -->
                 <!-- 线下服务:已核销状态显示已核销图标 -->
                 <!-- 线下服务:已核销状态显示已核销图标 -->
                 <!-- 实体商品:已发货状态显示已发货图标 -->
                 <!-- 实体商品:已发货状态显示已发货图标 -->
-                <div v-if="isOrderVerified(order) || isOrderShipped(order)" class="verified-badge">
+                <div v-if="isOrderVerified(order) || isOrderShipped(order) || isOrderCancelPie(order)" class="verified-badge">
                   <img v-if="isOrderVerified(order)" src="@/assets/images/verify.png" alt="已核销"
                   <img v-if="isOrderVerified(order)" src="@/assets/images/verify.png" alt="已核销"
                     style="width: 100px; height: 100px;" />
                     style="width: 100px; height: 100px;" />
+                  <img v-else-if="isOrderCancelPie(order)" src="@/assets/images/cancel.png" alt="已取消派单"
+                    style="width: 100px; height: 100px;" />
                   <img v-else-if="isOrderShipped(order)" src="@/assets/images/shipment.png" alt="已发货"
                   <img v-else-if="isOrderShipped(order)" src="@/assets/images/shipment.png" alt="已发货"
                     style="width: 100px; height: 100px;" />
                     style="width: 100px; height: 100px;" />
                 </div>
                 </div>

+ 15 - 2
src/request/api/order.api.ts

@@ -1,7 +1,9 @@
 import type { List, Tree } from '@/model';
 import type { List, Tree } from '@/model';
 import type {
 import type {
   OrderQuery,
   OrderQuery,
-  OrderModel, OrderLiaisonListModel, ShipmentModel, ShipmentQuery, PieOrderCountModel, RevenueSharingDetailModel, RevenueSharingDetailQuery, EvaluateDetailModel
+  OrderModel, OrderLiaisonListModel, ShipmentModel, ShipmentQuery, 
+  PieOrderCountModel, RevenueSharingDetailModel, RevenueSharingDetailQuery,
+   EvaluateDetailModel, ApplyRecordModel
 } from '@/model/order.model';
 } from '@/model/order.model';
 import request from '@/request/alova';
 import request from '@/request/alova';
 
 
@@ -178,4 +180,15 @@ export function getEvaluateDetailMethod(type: string, id: string) {
       hitSource: /order$/, // 匹配失效源
       hitSource: /order$/, // 匹配失效源
     }
     }
   );
   );
-} 
+}
+
+// 获取线下服务的预约派单记录 	线下服务id
+export function getApplyRecordMethod(id: string) {
+  return request.Post<ApplyRecordModel[]>(
+    `/fdhb-pc/patientCrManage/getApplyRecord/${id}`,
+    {},
+    {
+      hitSource: /order$/, // 匹配失效源
+    }
+  );
+} 

+ 59 - 28
src/service/SingleItemDetail.vue

@@ -1,5 +1,6 @@
 <script setup lang="ts">
 <script setup lang="ts">
 import type { SystemCwModel } from '@/model/care.model';
 import type { SystemCwModel } from '@/model/care.model';
+import type { ApplyRecordModel } from '@/model/order.model';
 import { PlayCircleOutlined } from '@ant-design/icons-vue';
 import { PlayCircleOutlined } from '@ant-design/icons-vue';
 import { computed, h, onMounted, ref } from 'vue';
 import { computed, h, onMounted, ref } from 'vue';
 import { notification } from 'ant-design-vue';
 import { notification } from 'ant-design-vue';
@@ -7,28 +8,27 @@ import VxeUI from 'vxe-table';
 import ReviewMediaPreview from '@/service/ReviewMediaPreview.vue';
 import ReviewMediaPreview from '@/service/ReviewMediaPreview.vue';
 import type { MediaItem } from '@/service/ReviewMediaPreview.vue';
 import type { MediaItem } from '@/service/ReviewMediaPreview.vue';
 import seeEvaluate from '@/service/seeEvaluate.vue';
 import seeEvaluate from '@/service/seeEvaluate.vue';
-import { getEvaluateDetailMethod } from '@/request/api/order.api';
-
+import { getEvaluateDetailMethod, getApplyRecordMethod } from '@/request/api/order.api';
 
 
 const props = defineProps<{
 const props = defineProps<{
   data: SystemCwModel['items'][number];
   data: SystemCwModel['items'][number];
 }>();
 }>();
 // 服务记录--查看评价
 // 服务记录--查看评价
 function openSeeEvaluate(row: any) {
 function openSeeEvaluate(row: any) {
-    VxeUI.modal.open({
-      title: '用户评价',
-      width: 900,
-      height: 600,
-      escClosable: true,
-      destroyOnClose: true,
-      slots: {
-        default() {
-          return h(seeEvaluate, {
-            data: row,
-          });
-        },
+  VxeUI.modal.open({
+    title: '用户评价',
+    width: 900,
+    height: 600,
+    escClosable: true,
+    destroyOnClose: true,
+    slots: {
+      default() {
+        return h(seeEvaluate, {
+          data: row,
+        });
       },
       },
-    });
+    },
+  });
 }
 }
 // 复制物流信息
 // 复制物流信息
 function handleCopyTracking() {
 function handleCopyTracking() {
@@ -145,7 +145,17 @@ async function getEvaluateDetail() {
   evaluateDetail.value.depict = res.depict ?? '';
   evaluateDetail.value.depict = res.depict ?? '';
   evaluateDetail.value.mediaList = normalizeMediaList(res.imageVideos);
   evaluateDetail.value.mediaList = normalizeMediaList(res.imageVideos);
 }
 }
-
+const applyRecordList = ref<ApplyRecordModel[]>([]);
+// 获取预约
+async function getApplyRecord() {
+  const id = (props.data as any)?.id;
+  if (!id) return;
+  const res = await getApplyRecordMethod(id);
+  if (!res) return;
+  console.log(res, "获取预约");
+  applyRecordList.value = res ?? [];
+  console.log(applyRecordList.value, "applyRecordList");
+}
 const REVIEW_PREVIEW_MODAL_ID = 'review-media-preview-modal';
 const REVIEW_PREVIEW_MODAL_ID = 'review-media-preview-modal';
 //预览图片/视频
 //预览图片/视频
 function openPreview(list: MediaItem[], index: number) {
 function openPreview(list: MediaItem[], index: number) {
@@ -167,8 +177,9 @@ function openPreview(list: MediaItem[], index: number) {
   });
   });
 }
 }
 
 
-onMounted(() => {
-  getEvaluateDetail();
+onMounted(async () => {
+  await getEvaluateDetail();
+  await getApplyRecord();
 });
 });
 </script>
 </script>
 
 
@@ -236,16 +247,13 @@ onMounted(() => {
     <!-- 分账信息 -->
     <!-- 分账信息 -->
     <div class="info-section">
     <div class="info-section">
       <h3 class="info-title">分账信息</h3>
       <h3 class="info-title">分账信息</h3>
-      <vxe-table
-        class="split-account-table"
-        :data="mockSplitAccountList"
-        border
-      >
+      <vxe-table class="split-account-table" :data="mockSplitAccountList" border>
         <vxe-column field="profitSharingTime" title="分账时间" align="center" />
         <vxe-column field="profitSharingTime" title="分账时间" align="center" />
         <vxe-column field="conditioningProgramSupplierName" title="供应商" align="center" />
         <vxe-column field="conditioningProgramSupplierName" title="供应商" align="center" />
-        <vxe-column field="profitSharingStatus" title="分账状态" align="center" >
+        <vxe-column field="profitSharingStatus" title="分账状态" align="center">
           <template #default="{ row }">
           <template #default="{ row }">
-            {{ row.profitSharingStatus === '1' ? '未分账' : row.profitSharingStatus === '2' ? '已分账' : row.profitSharingStatus === '3' ? '分账异常' : '' }}
+            {{ row.profitSharingStatus === '1' ? '未分账' : row.profitSharingStatus === '2' ? '已分账' :
+              row.profitSharingStatus === '3' ? '分账异常' : '' }}
           </template>
           </template>
         </vxe-column>
         </vxe-column>
         <vxe-column field="profitSharing" title="分账比例" align="center">
         <vxe-column field="profitSharing" title="分账比例" align="center">
@@ -253,7 +261,7 @@ onMounted(() => {
             {{ row.profitSharing || '-' }}%
             {{ row.profitSharing || '-' }}%
           </template>
           </template>
         </vxe-column>
         </vxe-column>
-        <vxe-column field="profitSharingAmount" title="预计分账金额" align="center" >
+        <vxe-column field="profitSharingAmount" title="预计分账金额" align="center">
           <template #default="{ row }">
           <template #default="{ row }">
             {{ row.profitSharingAmount ? row.profitSharingAmount + '元' : '' }}
             {{ row.profitSharingAmount ? row.profitSharingAmount + '元' : '' }}
           </template>
           </template>
@@ -327,13 +335,35 @@ onMounted(() => {
         暂无
         暂无
       </div>
       </div>
     </div>
     </div>
-
+    <!-- 预约派单记录 线下服务才显示  1-实体商品 2-线下服务 3-线上权益-->
+    <div class="info-section" v-if="data?.sellType === '2'">
+      <h3 class="info-title">
+        预约派单记录
+      </h3>
+      <vxe-table :data="applyRecordList" border>
+        <vxe-column type="seq" title="序号" width="60" align="center" />
+        <vxe-column field="applyTime" title="预约时间" align="center" />
+        <vxe-column field="updateTime" title="最新修改预约时间" align="center" />
+        <vxe-column field="cancelTime" title="取消预约时间" align="center" />
+        <vxe-column field="arrangeTime" title="预约服务日期" align="center" />
+        <vxe-column field="arrangePeriod" title="预约服务时间段" align="center" />
+        <vxe-column field="pieTime" title="是否派单" align="center">
+          <template #default="{ row }">
+            {{ row.pieTime ? '是' : '否' }}
+          </template>
+        </vxe-column>
+        <vxe-column field="pieBy" title="派单员" align="center" />
+        <vxe-column field="pieTime" title="派单时间" align="center" />
+        <vxe-column field="conditioningProgramSupplierName" title="服务机构" align="center" />
+        <vxe-column field="status" title="服务状态" align="center" />
+      </vxe-table>
+    </div>
     <!-- 服务记录 线下服务才显示  1-实体商品 2-线下服务 3-线上权益-->
     <!-- 服务记录 线下服务才显示  1-实体商品 2-线下服务 3-线上权益-->
     <div class="info-section" v-if="data?.sellType === '2'">
     <div class="info-section" v-if="data?.sellType === '2'">
       <h3 class="info-title">
       <h3 class="info-title">
         服务记录
         服务记录
         <span class="title-count">({{ data?.patientConditioningOfflines?.length || 0 }}/{{ data?.totalMeasure || 0
         <span class="title-count">({{ data?.patientConditioningOfflines?.length || 0 }}/{{ data?.totalMeasure || 0
-        }})</span>
+          }})</span>
       </h3>
       </h3>
       <vxe-table :data="data?.patientConditioningOfflines" border>
       <vxe-table :data="data?.patientConditioningOfflines" border>
         <vxe-column type="seq" title="序号" width="60" align="center" />
         <vxe-column type="seq" title="序号" width="60" align="center" />
@@ -626,6 +656,7 @@ onMounted(() => {
 
 
   /* 分账表格仅按内容自适应高度,避免一行数据时出现多余空白 */
   /* 分账表格仅按内容自适应高度,避免一行数据时出现多余空白 */
   .split-account-table {
   .split-account-table {
+
     :deep(.vxe-table--wrapper),
     :deep(.vxe-table--wrapper),
     :deep(.vxe-table) {
     :deep(.vxe-table) {
       height: auto !important;
       height: auto !important;