1
0

6 Commits 999cdb3d87 ... b0b341149b

Autor SHA1 Mensagem Data
  nahida b0b341149b Merge remote-tracking branch 'origin/master' há 4 dias atrás
  nahida 70fd66ca04 refactor(manholeCover): 统一设备编号字段并优化界面显示 há 4 dias atrás
  nahida 908536e529 feat(manholeCover): 添加井盖案件接单功能 há 4 dias atrás
  nahida e1eed16061 fix(manholeCover): 修复井盖工单处理页面数据筛选和状态显示问题 há 4 dias atrás
  nahida 8577da4732 feat(manholeCover): 优化井盖案件结案工单页面搜索功能 há 4 dias atrás
  nahida 31c94061d0 feat(manholeCover): 更新案件列表搜索功能 há 4 dias atrás

+ 3 - 3
src/views/subSystem/manholeCover/alarm/alarmList.vue

@@ -87,7 +87,7 @@
                 {{ selectedAlert.level === 'critical' ? '严重报警' : '一般报警' }}
               </el-tag>
             </el-descriptions-item>
-            <el-descriptions-item label="设备编号">{{ selectedAlert.deviceId }}</el-descriptions-item>
+            <el-descriptions-item label="设备编号">{{ selectedAlert.deviceCode || '—' }}</el-descriptions-item>
             <el-descriptions-item label="设备类型">{{ selectedAlert.deviceType }}</el-descriptions-item>
             <el-descriptions-item label="报警类型">{{ selectedAlert.alertType }}</el-descriptions-item>
             <el-descriptions-item label="报警时间">{{ selectedAlert.time }}</el-descriptions-item>
@@ -261,7 +261,7 @@ function normalizeAlert(raw, baseAlert = null) {
   return {
     id: raw?.equipmentId || raw?.equipmentCode,
     equipmentId: raw?.equipmentId || '',
-    deviceId: raw?.equipmentCode || raw?.equipmentId || '—',
+    deviceCode: raw?.equipmentCode || '',
     deviceName: raw?.equipmentName || raw?.equipmentCode || '未命名设备',
     deviceType: raw?.equipmentTypeName || '井盖监测设备',
     location: raw?.equipmentLocation || '暂无位置信息',
@@ -344,7 +344,7 @@ const filteredAlerts = computed(() => {
     const kw = searchText.value.toLowerCase()
     list = list.filter(a =>
       `${a.location || ''}`.toLowerCase().includes(kw) ||
-      `${a.deviceId || ''}`.toLowerCase().includes(kw) ||
+      `${a.deviceCode || ''}`.toLowerCase().includes(kw) ||
       `${a.deviceName || ''}`.toLowerCase().includes(kw)
     )
   }

+ 2 - 1
src/views/subSystem/manholeCover/alarm/alarmSanalysis.vue

@@ -106,7 +106,7 @@
         <el-drawer v-model="drawerVisible" :title="selectedDevice?.name + ' - 监测报警详情'" direction="rtl" size="420px">
           <div v-if="selectedDevice" v-loading="detailLoading">
             <el-descriptions :column="1" border>
-              <el-descriptions-item label="设备编号">{{ selectedDevice.id }}</el-descriptions-item>
+              <el-descriptions-item label="设备编号">{{ selectedDevice.deviceCode || '—' }}</el-descriptions-item>
               <el-descriptions-item label="地理位置">{{ selectedDevice.address }}</el-descriptions-item>
               <el-descriptions-item label="当前状态">
                 <el-tag :type="getStatusTag(selectedDevice.status)">{{ selectedDevice.statusText }}</el-tag>
@@ -358,6 +358,7 @@ function normalizeDevice(raw, _index = 0, baseDevice = {}) {
   return {
     equipmentId: raw?.equipmentId || baseDevice.equipmentId || '',
     id: raw?.equipmentCode || baseDevice.id || raw?.equipmentId || '',
+    deviceCode: raw?.equipmentCode || baseDevice.deviceCode || '',
     name: raw?.equipmentName || baseDevice.name || raw?.equipmentCode || '未命名设备',
     lng,
     lat,

+ 1 - 2
src/views/subSystem/manholeCover/alarm/index.vue

@@ -162,8 +162,7 @@
                   placeholder="请输入备注"
                 />
                 <div class="saved-hint">
-                  预警编码:{{ item.warningCode }}
-                  <span v-if="thresholds[item.key].id">,当前记录ID:{{ thresholds[item.key].id }}</span>
+                  当前阈值配置将保存到后端预警规则
                 </div>
               </div>
             </el-tab-pane>

+ 27 - 13
src/views/subSystem/manholeCover/caseHandling/circulation.vue

@@ -24,9 +24,28 @@
 
     <div class="flex gap-5">
       <div class="w-[380px] flex flex-col overflow-hidden rounded-[20px] bg-white" v-loading="loading">
-        <div class="flex justify-between border-b border-[#e9ecef] px-4 py-4 font-600">
+        <div class="flex items-center justify-between gap-3 border-b border-[#e9ecef] px-4 py-4 font-600">
           <span>案件列表</span>
-          <el-input v-model="searchKeyword" placeholder="搜索案件编号/设备位置" :prefix-icon="Search" clearable size="small" class="w-[180px]" @keyup.enter="loadCases" />
+          <div class="flex items-center gap-2">
+            <el-input
+              v-model="searchCaseNo"
+              placeholder="案件编号"
+              :prefix-icon="Search"
+              clearable
+              size="small"
+              class="w-[140px]"
+              @keyup.enter="loadCases"
+            />
+            <el-input
+              v-model="searchEquipmentLocation"
+              placeholder="设备位置描述"
+              :prefix-icon="Location"
+              clearable
+              size="small"
+              class="w-[140px]"
+              @keyup.enter="loadCases"
+            />
+          </div>
         </div>
         <div class="flex-1 overflow-y-auto p-3">
           <div
@@ -62,34 +81,27 @@
               <span><el-icon><InfoFilled /></el-icon> 案件信息</span>
             </div>
             <el-descriptions :column="1" border>
-              <el-descriptions-item label="案件ID">{{ selectedCase.caseId || '—' }}</el-descriptions-item>
               <el-descriptions-item label="案件编号">{{ selectedCase.caseNo }}</el-descriptions-item>
-              <el-descriptions-item label="报警ID">{{ selectedCase.alarmId || '—' }}</el-descriptions-item>
               <el-descriptions-item label="案件等级">
                 <el-tag :type="selectedCase.levelTag">{{ selectedCase.levelText }}</el-tag>
               </el-descriptions-item>
               <el-descriptions-item label="案件来源">{{ selectedCase.sourceText }}</el-descriptions-item>
               <el-descriptions-item label="案件描述">{{ selectedCase.caseDesc || '—' }}</el-descriptions-item>
               <el-descriptions-item label="案件状态">{{ selectedCase.statusText }}</el-descriptions-item>
-              <el-descriptions-item label="立案人ID">{{ selectedCase.fileUser || '—' }}</el-descriptions-item>
               <el-descriptions-item label="立案时间">{{ selectedCase.createTimeText }}</el-descriptions-item>
-              <el-descriptions-item label="核查人ID">{{ selectedCase.verifyUser || '—' }}</el-descriptions-item>
               <el-descriptions-item label="核查时间">{{ selectedCase.verifyTimeText }}</el-descriptions-item>
               <el-descriptions-item label="办结时间">{{ selectedCase.finishTimeText }}</el-descriptions-item>
               <el-descriptions-item label="处置结果">{{ selectedCase.handleResult || '—' }}</el-descriptions-item>
-              <el-descriptions-item label="更新时间">{{ selectedCase.updateTimeText }}</el-descriptions-item>
             </el-descriptions>
           </div>
           <div class="flex-1">
             <div class="mb-[14px] flex items-center gap-2 text-[16px] font-600"><el-icon><Monitor /></el-icon> 设备信息</div>
             <el-descriptions :column="1" border>
-              <el-descriptions-item label="设备ID">{{ selectedCase.deviceId || '—' }}</el-descriptions-item>
               <el-descriptions-item label="设备编号">{{ selectedCase.deviceCode || '—' }}</el-descriptions-item>
               <el-descriptions-item label="设备类别">{{ selectedCase.equipmentTypeName || '—' }}</el-descriptions-item>
               <el-descriptions-item label="运维状态">{{ selectedCase.currentStatusText }}</el-descriptions-item>
               <el-descriptions-item label="在线状态">{{ selectedCase.onlineStatusText }}</el-descriptions-item>
               <el-descriptions-item label="报警状态">{{ selectedCase.alarmStatusText }}</el-descriptions-item>
-              <el-descriptions-item label="状态更新时间">{{ selectedCase.statusUpdateTimeText }}</el-descriptions-item>
             </el-descriptions>
           </div>
         </div>
@@ -126,7 +138,8 @@ import {getManholeCaseDetail, getManholeCasePage} from '@/api/pipeNetwork/basic'
 const cases = ref([])
 const loading = ref(false)
 const detailLoading = ref(false)
-const searchKeyword = ref('')
+const searchCaseNo = ref('')
+const searchEquipmentLocation = ref('')
 const statusFilter = ref('')
 const currentPage = ref(1)
 const pageSize = 5
@@ -242,12 +255,13 @@ const completedCount = computed(() => cases.value.filter(item => item.statusKey
 async function loadCases() {
   loading.value = true
   try {
-    const keyword = searchKeyword.value.trim()
+    const caseNo = searchCaseNo.value.trim()
+    const equipmentLocation = searchEquipmentLocation.value.trim()
     const res = await getManholeCasePage({
       pageNum: 1,
       pageSize: 200,
-      caseNo: keyword || undefined,
-      equipmentLocation: keyword || undefined
+      caseNo: caseNo || undefined,
+      equipmentLocation: equipmentLocation || undefined
     })
     const records = Array.isArray(res?.data?.records) ? res.data.records : []
     cases.value = records.map(item => normalizeCase(item))

+ 22 - 20
src/views/subSystem/manholeCover/caseHandling/closeWorkOrder.vue

@@ -9,11 +9,19 @@
       </div>
       <div class="flex flex-wrap items-center gap-3">
         <el-input
-          v-model="searchKeyword"
-          placeholder="搜索工单编号/案件编号"
+          v-model="searchOrderNo"
+          placeholder="工单编号"
           clearable
           :prefix-icon="Search"
-          class="w-[260px]"
+          class="w-[140px]"
+          @keyup.enter="loadOrders"
+        />
+        <el-input
+          v-model="searchCaseNo"
+          placeholder="案件编号"
+          clearable
+          :prefix-icon="Search"
+          class="w-[140px]"
           @keyup.enter="loadOrders"
         />
         <el-select v-model="orderLevelFilter" placeholder="优先级" clearable class="w-[120px]">
@@ -97,12 +105,8 @@
     <el-drawer v-model="detailDrawerVisible" :title="`工单详情 - ${currentOrder?.orderNo || ''}`" size="560px" direction="rtl">
       <div v-if="currentOrder" class="p-2" v-loading="detailLoading">
         <el-descriptions :column="1" border>
-          <el-descriptions-item label="工单ID">{{ currentOrder.orderId || '—' }}</el-descriptions-item>
           <el-descriptions-item label="工单编号">{{ currentOrder.orderNo }}</el-descriptions-item>
-          <el-descriptions-item label="报警ID">{{ currentOrder.alarmId || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="案件ID">{{ currentOrder.caseId || '—' }}</el-descriptions-item>
           <el-descriptions-item label="关联案件编号">{{ currentOrder.caseNo || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="设备ID">{{ currentOrder.deviceId || '—' }}</el-descriptions-item>
           <el-descriptions-item label="设备编号">{{ currentOrder.deviceCode || '—' }}</el-descriptions-item>
           <el-descriptions-item label="工单状态">
             <el-tag :type="currentOrder.orderStatusTag">{{ currentOrder.orderStatusText }}</el-tag>
@@ -112,11 +116,7 @@
           </el-descriptions-item>
           <el-descriptions-item label="工单类型">{{ currentOrder.orderTypeText }}</el-descriptions-item>
           <el-descriptions-item label="问题描述">{{ currentOrder.orderDesc || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="负责部门ID">{{ currentOrder.deptId || '—' }}</el-descriptions-item>
           <el-descriptions-item label="设备类别">{{ currentOrder.equipmentTypeName || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="接单人ID">{{ currentOrder.receiveUser || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="派单人ID">{{ currentOrder.dispatchUser || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="验收人ID">{{ currentOrder.verifyUser || '—' }}</el-descriptions-item>
           <el-descriptions-item label="派单时间">{{ currentOrder.dispatchTimeText }}</el-descriptions-item>
           <el-descriptions-item label="创建时间">{{ currentOrder.createTimeText }}</el-descriptions-item>
           <el-descriptions-item label="计划完成时间">{{ currentOrder.planFinishTimeText }}</el-descriptions-item>
@@ -128,8 +128,6 @@
           <el-descriptions-item label="设备运维状态">{{ currentOrder.currentStatusText }}</el-descriptions-item>
           <el-descriptions-item label="设备在线状态">{{ currentOrder.onlineStatusText }}</el-descriptions-item>
           <el-descriptions-item label="设备报警状态">{{ currentOrder.alarmStatusText }}</el-descriptions-item>
-          <el-descriptions-item label="状态更新时间">{{ currentOrder.statusUpdateTimeText }}</el-descriptions-item>
-          <el-descriptions-item label="更新时间">{{ currentOrder.updateTimeText }}</el-descriptions-item>
         </el-descriptions>
 
         <div class="mt-4">
@@ -161,7 +159,8 @@ import {getManholeWorkOrderDetail, getManholeWorkOrderFinishedPage} from '@/api/
 const orders = ref([])
 const loading = ref(false)
 const detailLoading = ref(false)
-const searchKeyword = ref('')
+const searchOrderNo = ref('')
+const searchCaseNo = ref('')
 const orderLevelFilter = ref('')
 const dateRange = ref([])
 const timeFilter = ref('all')
@@ -197,7 +196,7 @@ function getOrderStatusMeta(status) {
   const map = {
     6: { text: '已结案', tag: 'success' },
     7: { text: '已驳回', tag: 'danger' },
-    9: { text: '延期', tag: 'warning' }
+    9: { text: '延期待接单', tag: 'warning' }
   }
   return map[Number(status)] || { text: '—', tag: 'info' }
 }
@@ -282,19 +281,22 @@ const monthlyCompleted = computed(() => orders.value.filter(item => isWithinRece
 async function loadOrders() {
   loading.value = true
   try {
-    const keyword = searchKeyword.value.trim()
+    const orderNo = searchOrderNo.value.trim()
+    const caseNo = searchCaseNo.value.trim()
     const payload = {
       pageNum: 1,
       pageSize: 200,
       orderLevel: orderLevelFilter.value || undefined,
-      orderNo: keyword || undefined,
-      caseNo: keyword || undefined,
+      orderNo: orderNo || undefined,
+      caseNo: caseNo || undefined,
       startTime: dateRange.value?.[0] ? `${dateRange.value[0]} 00:00:00` : undefined,
       endTime: dateRange.value?.[1] ? `${dateRange.value[1]} 23:59:59` : undefined
     }
     const res = await getManholeWorkOrderFinishedPage(payload)
     const records = Array.isArray(res?.data?.records) ? res.data.records : []
-    orders.value = records.map(normalizeOrder)
+    orders.value = records
+      .filter(item => [6, 7].includes(Number(item.orderStatus)))
+      .map(normalizeOrder)
     currentPage.value = 1
     if (currentOrder.value) {
       const matched = orders.value.find(item => item.orderId === currentOrder.value.orderId)
@@ -346,7 +348,7 @@ function getLogType(operType) {
     6: 'success',
     7: 'danger',
     8: 'warning',
-    9: 'success'
+    9: 'warning'
   }
   return map[Number(operType)] || 'info'
 }

+ 8 - 20
src/views/subSystem/manholeCover/caseHandling/handlingWorkO.vue

@@ -105,12 +105,8 @@
     <el-drawer v-model="detailDrawerVisible" :title="`工单详情 - ${currentOrder?.orderNo || ''}`" size="540px" direction="rtl">
       <div v-if="currentOrder" class="p-2" v-loading="detailLoading">
         <el-descriptions :column="1" border>
-          <el-descriptions-item label="工单ID">{{ currentOrder.orderId || '—' }}</el-descriptions-item>
           <el-descriptions-item label="工单编号">{{ currentOrder.orderNo }}</el-descriptions-item>
-          <el-descriptions-item label="报警ID">{{ currentOrder.alarmId || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="案件ID">{{ currentOrder.caseId || '—' }}</el-descriptions-item>
           <el-descriptions-item label="关联案件编号">{{ currentOrder.caseNo || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="设备ID">{{ currentOrder.deviceId || '—' }}</el-descriptions-item>
           <el-descriptions-item label="设备编号">{{ currentOrder.deviceCode || '—' }}</el-descriptions-item>
           <el-descriptions-item label="工单状态">
             <el-tag :type="currentOrder.orderStatusTag">{{ currentOrder.orderStatusText }}</el-tag>
@@ -120,24 +116,18 @@
           </el-descriptions-item>
           <el-descriptions-item label="工单类型">{{ currentOrder.orderTypeText }}</el-descriptions-item>
           <el-descriptions-item label="问题描述">{{ currentOrder.orderDesc || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="负责部门ID">{{ currentOrder.deptId || '—' }}</el-descriptions-item>
           <el-descriptions-item label="设备类别">{{ currentOrder.equipmentTypeName || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="接单人ID">{{ currentOrder.receiveUser || '—' }}</el-descriptions-item>
-          <el-descriptions-item label="派单人ID">{{ currentOrder.dispatchUser || '—' }}</el-descriptions-item>
           <el-descriptions-item label="派单时间">{{ currentOrder.dispatchTimeText }}</el-descriptions-item>
           <el-descriptions-item label="创建时间">{{ currentOrder.createTimeText }}</el-descriptions-item>
           <el-descriptions-item label="计划完成时间">{{ currentOrder.planFinishTimeText }}</el-descriptions-item>
           <el-descriptions-item label="延期原因">{{ currentOrder.delayedReason || '—' }}</el-descriptions-item>
           <el-descriptions-item label="延期截止时间">{{ currentOrder.delayedDeadlineText }}</el-descriptions-item>
-          <el-descriptions-item label="验收人ID">{{ currentOrder.verifyUser || '—' }}</el-descriptions-item>
           <el-descriptions-item label="验收时间">{{ currentOrder.verifyTimeText }}</el-descriptions-item>
           <el-descriptions-item label="实际完成时间">{{ currentOrder.realFinishTimeText }}</el-descriptions-item>
           <el-descriptions-item label="维修处置结果">{{ currentOrder.repairResult || '—' }}</el-descriptions-item>
           <el-descriptions-item label="设备运维状态">{{ currentOrder.currentStatusText }}</el-descriptions-item>
           <el-descriptions-item label="设备在线状态">{{ currentOrder.onlineStatusText }}</el-descriptions-item>
           <el-descriptions-item label="设备报警状态">{{ currentOrder.alarmStatusText }}</el-descriptions-item>
-          <el-descriptions-item label="状态更新时间">{{ currentOrder.statusUpdateTimeText }}</el-descriptions-item>
-          <el-descriptions-item label="更新时间">{{ currentOrder.updateTimeText }}</el-descriptions-item>
         </el-descriptions>
 
         <div class="mt-4">
@@ -207,11 +197,7 @@
 import {computed, onMounted, ref} from 'vue'
 import {List, Refresh, Search} from '@element-plus/icons-vue'
 import {ElMessage} from 'element-plus'
-import {
-  getManholeWorkOrderDetail,
-  getManholeWorkOrderProcessingPage,
-  operManholeWorkOrder
-} from '@/api/pipeNetwork/basic'
+import {getManholeWorkOrderDetail, getManholeWorkOrderPage, operManholeWorkOrder} from '@/api/pipeNetwork/basic'
 
 const DEFAULT_OPER_USER_ID = 1
 
@@ -262,7 +248,7 @@ function getOrderStatusMeta(status) {
     6: { key: 'completed', text: '已结案', tag: 'success' },
     7: { key: 'completed', text: '已驳回', tag: 'danger' },
     8: { key: 'verify', text: '延期审核', tag: 'warning' },
-    9: { key: 'completed', text: '已延期', tag: 'danger' }
+    9: { key: 'pending', text: '延期待接单', tag: 'warning' }
   }
   return map[Number(status)] || { key: '', text: '—', tag: 'info' }
 }
@@ -357,9 +343,11 @@ async function loadOrders() {
       orderNo: keyword || undefined,
       caseNo: keyword || undefined
     }
-    const res = await getManholeWorkOrderProcessingPage(payload)
+    const res = await getManholeWorkOrderPage(payload)
     const records = Array.isArray(res?.data?.records) ? res.data.records : []
-    orders.value = records.map(normalizeOrder)
+    orders.value = records
+      .filter(item => [2, 3, 4, 5, 8, 9].includes(Number(item.orderStatus)))
+      .map(normalizeOrder)
     currentPage.value = 1
     if (currentOrder.value) {
       const matched = orders.value.find(item => item.orderId === currentOrder.value.orderId)
@@ -416,7 +404,7 @@ function canStartRepair(order) {
 }
 
 function canAcceptOrder(order) {
-  return Number(order.orderStatus) === 2
+  return [2, 9].includes(Number(order.orderStatus))
 }
 
 function canSubmitVerify(order) {
@@ -514,7 +502,7 @@ function getLogType(operType) {
     6: 'success',
     7: 'danger',
     8: 'warning',
-    9: 'success'
+    9: 'warning'
   }
   return map[Number(operType)] || 'info'
 }

+ 24 - 19
src/views/subSystem/manholeCover/caseHandling/orderDisposal.vue

@@ -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'
 }