|
|
@@ -78,39 +78,29 @@
|
|
|
<span><el-icon><Document /></el-icon> 工单基本信息</span>
|
|
|
</div>
|
|
|
<el-descriptions :column="2" border>
|
|
|
- <el-descriptions-item label="工单ID">{{ selectedOrder.orderId || '—' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="工单编号">{{ selectedOrder.orderNo }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="报警ID">{{ selectedOrder.alarmId || '—' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="工单状态">
|
|
|
<el-tag :type="selectedOrder.orderStatusTag">{{ selectedOrder.orderStatusText }}</el-tag>
|
|
|
</el-descriptions-item>
|
|
|
- <el-descriptions-item label="案件ID">{{ selectedOrder.caseId || '—' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="关联案件编号">{{ selectedOrder.caseNo || '—' }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="设备ID">{{ selectedOrder.deviceId || '—' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="设备编号">{{ selectedOrder.deviceCode || '—' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="优先级">
|
|
|
<el-tag :type="selectedOrder.orderLevelTag">{{ selectedOrder.orderLevelText }}</el-tag>
|
|
|
</el-descriptions-item>
|
|
|
<el-descriptions-item label="工单类型">{{ selectedOrder.orderTypeText }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="问题描述" :span="2">{{ selectedOrder.orderDesc || '—' }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="负责部门ID">{{ selectedOrder.deptId || '—' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="设备类别">{{ selectedOrder.equipmentTypeName || '—' }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="接单人ID">{{ selectedOrder.receiveUser || '—' }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="派单人ID">{{ selectedOrder.dispatchUser || '—' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="派单时间">{{ selectedOrder.dispatchTimeText }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="创建时间">{{ selectedOrder.createTimeText }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="计划完成时间">{{ selectedOrder.planFinishTimeText }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="延期原因">{{ selectedOrder.delayedReason || '—' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="延期截止时间">{{ selectedOrder.delayedDeadlineText }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="验收人ID">{{ selectedOrder.verifyUser || '—' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="验收时间">{{ selectedOrder.verifyTimeText }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="实际完成时间">{{ selectedOrder.realFinishTimeText }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="运维状态">{{ selectedOrder.currentStatusText }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="在线状态">{{ selectedOrder.onlineStatusText }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="报警状态">{{ selectedOrder.alarmStatusText }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="状态更新时间">{{ selectedOrder.statusUpdateTimeText }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="处置结果" :span="2">{{ selectedOrder.repairResult || '—' }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="更新时间">{{ selectedOrder.updateTimeText }}</el-descriptions-item>
|
|
|
</el-descriptions>
|
|
|
|
|
|
<div class="mt-5 border-t border-[#e9ecef] pt-3">
|
|
|
@@ -123,6 +113,7 @@
|
|
|
<el-button type="primary" @click="dispatchOrder">下派任务</el-button>
|
|
|
</div>
|
|
|
<div class="flex flex-wrap gap-3">
|
|
|
+ <el-button v-if="canAcceptOrder(selectedOrder)" type="warning" @click="acceptOrder">接单</el-button>
|
|
|
<el-button v-if="canStartRepair(selectedOrder)" type="primary" @click="startRepair">开始维修</el-button>
|
|
|
<el-button v-if="canSubmitVerify(selectedOrder)" type="warning" @click="submitVerify">提交验收</el-button>
|
|
|
<el-button v-if="canApprove(selectedOrder)" type="success" @click="approveOrder(true)">验收通过</el-button>
|
|
|
@@ -211,13 +202,12 @@
|
|
|
@current-change="handleUserCurrentChange"
|
|
|
@row-click="handleUserCurrentChange"
|
|
|
>
|
|
|
- <el-table-column prop="userId" label="ID" width="90" />
|
|
|
<el-table-column prop="userName" label="用户名" min-width="120" />
|
|
|
<el-table-column prop="nickName" label="昵称" min-width="120" />
|
|
|
<el-table-column prop="dept.deptName" label="部门" min-width="140" show-overflow-tooltip />
|
|
|
</el-table>
|
|
|
<div class="mt-3 text-[#606266]">
|
|
|
- 已选人员:{{ dispatchSelectedUser ? `${dispatchSelectedUser.userName} / ID: ${dispatchSelectedUser.userId}` : '未选择' }}
|
|
|
+ 已选人员:{{ dispatchSelectedUser ? `${dispatchSelectedUser.userName}${dispatchSelectedUser.nickName ? ` / ${dispatchSelectedUser.nickName}` : ''}` : '未选择' }}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -294,7 +284,7 @@ function getOrderStatusMeta(status) {
|
|
|
6: { key: 'completed', text: '已结案', tag: 'success' },
|
|
|
7: { key: 'completed', text: '已驳回', tag: 'danger' },
|
|
|
8: { key: 'processing', text: '延期审核', tag: 'warning' },
|
|
|
- 9: { key: 'completed', text: '已延期', tag: 'warning' }
|
|
|
+ 9: { key: 'pending', text: '延期待接单', tag: 'warning' }
|
|
|
}
|
|
|
return map[Number(status)] || { key: '', text: '—', tag: 'info' }
|
|
|
}
|
|
|
@@ -405,12 +395,12 @@ async function loadOrders() {
|
|
|
async function selectOrder(order) {
|
|
|
detailLoading.value = true
|
|
|
receiveUserId.value = order.receiveUser || null
|
|
|
- receiveUserDisplay.value = order.receiveUser ? `用户ID: ${order.receiveUser}` : ''
|
|
|
+ receiveUserDisplay.value = order.receiveUser ? '已选择接单人' : ''
|
|
|
try {
|
|
|
const res = await getManholeWorkOrderDetail(order.orderId)
|
|
|
selectedOrder.value = normalizeOrder(res?.data || order)
|
|
|
receiveUserId.value = selectedOrder.value.receiveUser || null
|
|
|
- receiveUserDisplay.value = selectedOrder.value.receiveUser ? `用户ID: ${selectedOrder.value.receiveUser}` : ''
|
|
|
+ receiveUserDisplay.value = selectedOrder.value.receiveUser ? '已选择接单人' : ''
|
|
|
} catch (error) {
|
|
|
selectedOrder.value = order
|
|
|
ElMessage.error('工单详情加载失败')
|
|
|
@@ -432,8 +422,12 @@ function canDispatch(order) {
|
|
|
return Number(order.orderStatus) === 1
|
|
|
}
|
|
|
|
|
|
+function canAcceptOrder(order) {
|
|
|
+ return [2, 9].includes(Number(order.orderStatus))
|
|
|
+}
|
|
|
+
|
|
|
function canStartRepair(order) {
|
|
|
- return [2, 3].includes(Number(order.orderStatus))
|
|
|
+ return Number(order.orderStatus) === 3
|
|
|
}
|
|
|
|
|
|
function canSubmitVerify(order) {
|
|
|
@@ -460,6 +454,7 @@ function hasOperationButtons(order) {
|
|
|
if (!order) return false
|
|
|
return (
|
|
|
canDispatch(order) ||
|
|
|
+ canAcceptOrder(order) ||
|
|
|
canStartRepair(order) ||
|
|
|
canSubmitVerify(order) ||
|
|
|
canApprove(order) ||
|
|
|
@@ -487,7 +482,8 @@ async function dispatchOrder() {
|
|
|
return
|
|
|
}
|
|
|
try {
|
|
|
- await operateCurrent(2, `下派工单至用户${receiveUserId.value}`, { receiveUser: Number(receiveUserId.value) })
|
|
|
+ const receiveUserName = dispatchSelectedUser.value?.userName || '指定人员'
|
|
|
+ await operateCurrent(2, `下派工单至${receiveUserName}`, { receiveUser: Number(receiveUserId.value) })
|
|
|
ElMessage.success('工单下派成功')
|
|
|
} catch (error) {
|
|
|
ElMessage.error(error?.message || '工单下派失败')
|
|
|
@@ -571,10 +567,19 @@ function confirmDispatchUser() {
|
|
|
return
|
|
|
}
|
|
|
receiveUserId.value = dispatchSelectedUser.value.userId
|
|
|
- receiveUserDisplay.value = `${dispatchSelectedUser.value.userName} / ID: ${dispatchSelectedUser.value.userId}`
|
|
|
+ receiveUserDisplay.value = `${dispatchSelectedUser.value.userName}${dispatchSelectedUser.value.nickName ? ` / ${dispatchSelectedUser.value.nickName}` : ''}`
|
|
|
dispatchDialogVisible.value = false
|
|
|
}
|
|
|
|
|
|
+async function acceptOrder() {
|
|
|
+ try {
|
|
|
+ await operateCurrent(3, '接单')
|
|
|
+ ElMessage.success('已接单')
|
|
|
+ } catch (error) {
|
|
|
+ ElMessage.error(error?.message || '接单失败')
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
async function startRepair() {
|
|
|
try {
|
|
|
await operateCurrent(4, '开始维修')
|
|
|
@@ -656,7 +661,7 @@ function getLogType(operType) {
|
|
|
6: 'success',
|
|
|
7: 'danger',
|
|
|
8: 'warning',
|
|
|
- 9: 'success'
|
|
|
+ 9: 'warning'
|
|
|
}
|
|
|
return map[Number(operType)] || 'info'
|
|
|
}
|