|
@@ -15,11 +15,11 @@
|
|
|
<div class="right-head">
|
|
<div class="right-head">
|
|
|
<!-- Action Buttons Group -->
|
|
<!-- Action Buttons Group -->
|
|
|
<div class="detail-actions">
|
|
<div class="detail-actions">
|
|
|
-<!-- <template v-if="[0, 1, 2].includes(order.status)">-->
|
|
|
|
|
-<!-- <el-button type="success" icon="Bicycle" @click="emit('dispatch', order)">-->
|
|
|
|
|
-<!-- {{ order.fulfiller || order.fulfillerName ? '重新派单' : '立即派单' }}-->
|
|
|
|
|
-<!-- </el-button>-->
|
|
|
|
|
-<!-- </template>-->
|
|
|
|
|
|
|
+ <!-- <template v-if="[0, 1, 2].includes(order.status)">-->
|
|
|
|
|
+ <!-- <el-button type="success" icon="Bicycle" @click="emit('dispatch', order)">-->
|
|
|
|
|
+ <!-- {{ order.fulfiller || order.fulfillerName ? '重新派单' : '立即派单' }}-->
|
|
|
|
|
+ <!-- </el-button>-->
|
|
|
|
|
+ <!-- </template>-->
|
|
|
|
|
|
|
|
<template v-if="order.status === 0">
|
|
<template v-if="order.status === 0">
|
|
|
<el-button v-hasPermi="['order:management:cancel']" type="danger" plain icon="CircleClose"
|
|
<el-button v-hasPermi="['order:management:cancel']" type="danger" plain icon="CircleClose"
|
|
@@ -32,7 +32,8 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<template v-if="[3, 4].includes(order.status)">
|
|
<template v-if="[3, 4].includes(order.status)">
|
|
|
- <el-button v-hasPermi="['order:management:nursingSummary']" icon="Notebook" @click="emit('care-summary', order)">护理小结</el-button>
|
|
|
|
|
|
|
+ <el-button v-hasPermi="['order:management:nursingSummary']" icon="Notebook"
|
|
|
|
|
+ @click="emit('care-summary', order)">护理小结</el-button>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<el-dropdown trigger="click" @command="(cmd) => emit('command', cmd, order)"
|
|
<el-dropdown trigger="click" @command="(cmd) => emit('command', cmd, order)"
|
|
@@ -40,8 +41,10 @@
|
|
|
<el-button icon="More">更多操作</el-button>
|
|
<el-button icon="More">更多操作</el-button>
|
|
|
<template #dropdown>
|
|
<template #dropdown>
|
|
|
<el-dropdown-menu>
|
|
<el-dropdown-menu>
|
|
|
- <el-dropdown-item v-hasPermi="['order:management:reward']" command="reward" icon="Trophy">奖惩操作</el-dropdown-item>
|
|
|
|
|
- <el-dropdown-item v-hasPermi="['order:management:remark']" command="remark" icon="EditPen">订单备注</el-dropdown-item>
|
|
|
|
|
|
|
+ <el-dropdown-item v-hasPermi="['order:management:reward']" command="reward"
|
|
|
|
|
+ icon="Trophy">奖惩操作</el-dropdown-item>
|
|
|
|
|
+ <el-dropdown-item v-hasPermi="['order:management:remark']" command="remark"
|
|
|
|
|
+ icon="EditPen">订单备注</el-dropdown-item>
|
|
|
<el-dropdown-item command="delete" v-if="[5, 4].includes(order.status)" divided
|
|
<el-dropdown-item command="delete" v-if="[5, 4].includes(order.status)" divided
|
|
|
icon="Delete" style="color: #f56c6c;">删除订单</el-dropdown-item>
|
|
icon="Delete" style="color: #f56c6c;">删除订单</el-dropdown-item>
|
|
|
</el-dropdown-menu>
|
|
</el-dropdown-menu>
|
|
@@ -90,7 +93,7 @@
|
|
|
<el-descriptions :column="2" size="small" class="pet-desc" border>
|
|
<el-descriptions :column="2" size="small" class="pet-desc" border>
|
|
|
<el-descriptions-item label="品种">{{ order.petBreed || '未知' }}</el-descriptions-item>
|
|
<el-descriptions-item label="品种">{{ order.petBreed || '未知' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="疫苗状态"><span style="color:#67c23a">{{ order.petVaccine || '未知'
|
|
<el-descriptions-item label="疫苗状态"><span style="color:#67c23a">{{ order.petVaccine || '未知'
|
|
|
- }}</span></el-descriptions-item>
|
|
|
|
|
|
|
+ }}</span></el-descriptions-item>
|
|
|
<el-descriptions-item label="性格特点">{{ order.petCharacter || '温顺' }}</el-descriptions-item>
|
|
<el-descriptions-item label="性格特点">{{ order.petCharacter || '温顺' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="健康状况">{{ order.petHealth || '健康' }}</el-descriptions-item>
|
|
<el-descriptions-item label="健康状况">{{ order.petHealth || '健康' }}</el-descriptions-item>
|
|
|
</el-descriptions>
|
|
</el-descriptions>
|
|
@@ -104,7 +107,7 @@
|
|
|
<div class="user-content">
|
|
<div class="user-content">
|
|
|
<div class="u-row">
|
|
<div class="u-row">
|
|
|
<el-avatar :size="40" :src="order.userAvatar">{{ (order.userName || '').charAt(0)
|
|
<el-avatar :size="40" :src="order.userAvatar">{{ (order.userName || '').charAt(0)
|
|
|
- }}</el-avatar>
|
|
|
|
|
|
|
+ }}</el-avatar>
|
|
|
<div class="u-info">
|
|
<div class="u-info">
|
|
|
<div class="nm">{{ order.userName }}</div>
|
|
<div class="nm">{{ order.userName }}</div>
|
|
|
<div class="ph">{{ order.contactPhone }}</div>
|
|
<div class="ph">{{ order.contactPhone }}</div>
|
|
@@ -137,15 +140,15 @@
|
|
|
<el-descriptions-item label="归属门店">{{ order.merchantName }}
|
|
<el-descriptions-item label="归属门店">{{ order.merchantName }}
|
|
|
({{ Number(order.platformId) === 1 ? '门店下单' : '平台代下单' }})</el-descriptions-item>
|
|
({{ Number(order.platformId) === 1 ? '门店下单' : '平台代下单' }})</el-descriptions-item>
|
|
|
<el-descriptions-item label="宠主信息">{{ order.userName }} / {{ order.contactPhone
|
|
<el-descriptions-item label="宠主信息">{{ order.userName }} / {{ order.contactPhone
|
|
|
- }}</el-descriptions-item>
|
|
|
|
|
|
|
+ }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="服务费用" label-class-name="money-label">
|
|
<el-descriptions-item label="服务费用" label-class-name="money-label">
|
|
|
<span style="color:#f56c6c; font-weight:bold;">¥ {{ order.fulfillerFee }}</span>
|
|
<span style="color:#f56c6c; font-weight:bold;">¥ {{ order.fulfillerFee }}</span>
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
|
|
|
|
|
<el-descriptions-item label="预约时间">{{ getServiceTimeRange(order.serviceTime)
|
|
<el-descriptions-item label="预约时间">{{ getServiceTimeRange(order.serviceTime)
|
|
|
- }}</el-descriptions-item>
|
|
|
|
|
|
|
+ }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="团购套餐">{{ order.groupBuyPackage || '未使用团购套餐'
|
|
<el-descriptions-item label="团购套餐">{{ order.groupBuyPackage || '未使用团购套餐'
|
|
|
- }}</el-descriptions-item>
|
|
|
|
|
|
|
+ }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="创建时间">{{ order.createTime }}</el-descriptions-item>
|
|
<el-descriptions-item label="创建时间">{{ order.createTime }}</el-descriptions-item>
|
|
|
|
|
|
|
|
<el-descriptions-item label="订单备注" :span="3">
|
|
<el-descriptions-item label="订单备注" :span="3">
|
|
@@ -165,7 +168,7 @@
|
|
|
<div class="t-row">
|
|
<div class="t-row">
|
|
|
<span class="t-k">起点</span>
|
|
<span class="t-k">起点</span>
|
|
|
<span class="t-v">{{ order.detail?.fromAddress || order.detail?.pickAddr || '--'
|
|
<span class="t-v">{{ order.detail?.fromAddress || order.detail?.pickAddr || '--'
|
|
|
- }}</span>
|
|
|
|
|
|
|
+ }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="t-row">
|
|
<div class="t-row">
|
|
|
<span class="t-k">终点</span>
|
|
<span class="t-k">终点</span>
|
|
@@ -185,7 +188,7 @@
|
|
|
<div class="sec-title-bar">服务执行要求</div>
|
|
<div class="sec-title-bar">服务执行要求</div>
|
|
|
<el-descriptions :column="2" border size="default" class="custom-desc">
|
|
<el-descriptions :column="2" border size="default" class="custom-desc">
|
|
|
<el-descriptions-item label="服务地址" :span="2">{{ order.detail?.area || order.address
|
|
<el-descriptions-item label="服务地址" :span="2">{{ order.detail?.area || order.address
|
|
|
- }}</el-descriptions-item>
|
|
|
|
|
|
|
+ }}</el-descriptions-item>
|
|
|
</el-descriptions>
|
|
</el-descriptions>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -197,7 +200,7 @@
|
|
|
<div v-if="order.fulfillerName" class="fulfiller-card">
|
|
<div v-if="order.fulfillerName" class="fulfiller-card">
|
|
|
<div class="f-left">
|
|
<div class="f-left">
|
|
|
<el-avatar :size="60" :src="order.fulfillerAvatar">{{ order.fulfillerName.charAt(0)
|
|
<el-avatar :size="60" :src="order.fulfillerAvatar">{{ order.fulfillerName.charAt(0)
|
|
|
- }}</el-avatar>
|
|
|
|
|
|
|
+ }}</el-avatar>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="f-right">
|
|
<div class="f-right">
|
|
|
<div class="f-row1">
|
|
<div class="f-row1">
|
|
@@ -239,24 +242,25 @@
|
|
|
<h4 class="p-title">{{ step.title }}</h4>
|
|
<h4 class="p-title">{{ step.title }}</h4>
|
|
|
<p class="p-desc">{{ step.desc }}</p>
|
|
<p class="p-desc">{{ step.desc }}</p>
|
|
|
<div class="p-media" v-if="step.media && step.media.length">
|
|
<div class="p-media" v-if="step.media && step.media.length">
|
|
|
- <div v-for="(item, i) in step.media" :key="i" class="media-item">
|
|
|
|
|
- <!-- 图片类型 -->
|
|
|
|
|
- <el-image v-if="item.type === 'image'" :src="item.url"
|
|
|
|
|
- :preview-src-list="step.media.filter(m => m.type === 'image').map(m => m.url)"
|
|
|
|
|
- fit="cover" class="p-img" :preview-teleported="true" />
|
|
|
|
|
-
|
|
|
|
|
- <!-- 视频类型 -->
|
|
|
|
|
- <div v-else-if="item.type === 'video'" class="p-video-box"
|
|
|
|
|
- @click="openVideoPreview(item.url)">
|
|
|
|
|
- <video :src="item.url" preload="metadata" class="p-img p-video"></video>
|
|
|
|
|
- <div class="play-icon-overlay">
|
|
|
|
|
- <el-icon>
|
|
|
|
|
- <VideoPlay />
|
|
|
|
|
- </el-icon>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <div v-for="(item, i) in step.media" :key="i" class="media-item">
|
|
|
|
|
+ <!-- 图片类型 -->
|
|
|
|
|
+ <el-image v-if="item.type === 'image'" :src="item.url"
|
|
|
|
|
+ :preview-src-list="step.media.filter(m => m.type === 'image').map(m => m.url)"
|
|
|
|
|
+ fit="cover" class="p-img" :preview-teleported="true" />
|
|
|
|
|
+
|
|
|
|
|
+ <!-- 视频类型 -->
|
|
|
|
|
+ <div v-else-if="item.type === 'video'" class="p-video-box"
|
|
|
|
|
+ @click="openVideoPreview(item.url)">
|
|
|
|
|
+ <video :src="item.url" preload="metadata"
|
|
|
|
|
+ class="p-img p-video"></video>
|
|
|
|
|
+ <div class="play-icon-overlay">
|
|
|
|
|
+ <el-icon>
|
|
|
|
|
+ <VideoPlay />
|
|
|
|
|
+ </el-icon>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-timeline-item>
|
|
</el-timeline-item>
|
|
|
</el-timeline>
|
|
</el-timeline>
|
|
@@ -268,6 +272,7 @@
|
|
|
<div class="tab-pane-content">
|
|
<div class="tab-pane-content">
|
|
|
<div style="display: flex; justify-content: flex-end; margin-bottom: 15px;">
|
|
<div style="display: flex; justify-content: flex-end; margin-bottom: 15px;">
|
|
|
<el-button type="primary" size="small" icon="Download"
|
|
<el-button type="primary" size="small" icon="Download"
|
|
|
|
|
+ v-hasPermi="['order:management:queryExportExcel']"
|
|
|
@click="handleExportLogs">导出日志Excel</el-button>
|
|
@click="handleExportLogs">导出日志Excel</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
<el-timeline>
|
|
<el-timeline>
|
|
@@ -383,7 +388,7 @@ const loadOrderLogs = async (order) => {
|
|
|
orderLogs.value = []
|
|
orderLogs.value = []
|
|
|
fulfillerLogs.value = []
|
|
fulfillerLogs.value = []
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
try {
|
|
try {
|
|
|
const complaintRes = await listComplaintByOrder(id)
|
|
const complaintRes = await listComplaintByOrder(id)
|
|
|
complaintList.value = complaintRes?.data || []
|
|
complaintList.value = complaintRes?.data || []
|