|
@@ -17,9 +17,9 @@
|
|
|
<div class="qf">
|
|
<div class="qf">
|
|
|
<label>优先级</label>
|
|
<label>优先级</label>
|
|
|
<el-select v-model="queryParams.orderLevel" placeholder="全部" clearable style="width: 120px">
|
|
<el-select v-model="queryParams.orderLevel" placeholder="全部" clearable style="width: 120px">
|
|
|
- <el-option label="紧急" :value="0" />
|
|
|
|
|
- <el-option label="一般" :value="1" />
|
|
|
|
|
- <el-option label="低" :value="2" />
|
|
|
|
|
|
|
+ <el-option label="紧急" :value="WO_LEVEL.EMERGENCY" />
|
|
|
|
|
+ <el-option label="一般" :value="WO_LEVEL.NORMAL" />
|
|
|
|
|
+ <el-option label="低" :value="WO_LEVEL.LOW" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="qf">
|
|
<div class="qf">
|
|
@@ -43,8 +43,8 @@
|
|
|
|
|
|
|
|
<!-- 状态筛选条 -->
|
|
<!-- 状态筛选条 -->
|
|
|
<div class="strips">
|
|
<div class="strips">
|
|
|
- <button class="chip" :class="{ on: !queryParams.orderStatus && queryParams.orderStatus !== 0 }" @click="pickStatus(undefined)">
|
|
|
|
|
- <b>全部</b><span class="cnt">{{ total }}</span>
|
|
|
|
|
|
|
+ <button class="chip" :class="{ on: queryParams.orderStatus === undefined }" @click="pickStatus(undefined)">
|
|
|
|
|
+ <b>全部</b><span class="cnt">{{ statusTotal }}</span>
|
|
|
</button>
|
|
</button>
|
|
|
<button
|
|
<button
|
|
|
v-for="s in STATUS_ORDER"
|
|
v-for="s in STATUS_ORDER"
|
|
@@ -179,7 +179,7 @@
|
|
|
|
|
|
|
|
<div class="sect nod">
|
|
<div class="sect nod">
|
|
|
<div class="sect-t">延期申请</div>
|
|
<div class="sect-t">延期申请</div>
|
|
|
- <div v-if="Number(selectedOrder.delayApplyStatus) > 0" class="delaybox">
|
|
|
|
|
|
|
+ <div v-if="Number(selectedOrder.delayApplyStatus) > DELAY_APPLY_STATUS.NONE" class="delaybox">
|
|
|
<span class="dchip">{{ delayApplyStatusText(selectedOrder.delayApplyStatus) }}</span>
|
|
<span class="dchip">{{ delayApplyStatusText(selectedOrder.delayApplyStatus) }}</span>
|
|
|
<div class="di">
|
|
<div class="di">
|
|
|
<b>{{ selectedOrder.delayedReason || '-' }}</b>
|
|
<b>{{ selectedOrder.delayedReason || '-' }}</b>
|
|
@@ -228,56 +228,56 @@
|
|
|
<div class="abar">
|
|
<div class="abar">
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="canOperate.delay(selectedOrder)"
|
|
v-if="canOperate.delay(selectedOrder)"
|
|
|
- v-hasPermi="['ops:pworkOrder:delay']"
|
|
|
|
|
|
|
+ v-hasPermi="['ops:workOrder:delay']"
|
|
|
@click="openDelay(selectedOrder)"
|
|
@click="openDelay(selectedOrder)"
|
|
|
>申请延期</el-button>
|
|
>申请延期</el-button>
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="canOperate.delayAudit(selectedOrder)"
|
|
v-if="canOperate.delayAudit(selectedOrder)"
|
|
|
- v-hasPermi="['ops:pworkOrder:delayAudit']"
|
|
|
|
|
|
|
+ v-hasPermi="['ops:workOrder:delayAudit']"
|
|
|
@click="openDelayAudit(selectedOrder)"
|
|
@click="openDelayAudit(selectedOrder)"
|
|
|
>延期审核</el-button>
|
|
>延期审核</el-button>
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="canOperate.cancel(selectedOrder)"
|
|
v-if="canOperate.cancel(selectedOrder)"
|
|
|
- v-hasPermi="['ops:pworkOrder:cancel']"
|
|
|
|
|
|
|
+ v-hasPermi="['ops:workOrder:cancel']"
|
|
|
type="danger" plain
|
|
type="danger" plain
|
|
|
@click="openAction(selectedOrder, 'cancel')"
|
|
@click="openAction(selectedOrder, 'cancel')"
|
|
|
>取消</el-button>
|
|
>取消</el-button>
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="canOperate.remove(selectedOrder)"
|
|
v-if="canOperate.remove(selectedOrder)"
|
|
|
- v-hasPermi="['ops:pworkOrder:remove']"
|
|
|
|
|
|
|
+ v-hasPermi="['ops:workOrder:remove']"
|
|
|
type="danger" plain
|
|
type="danger" plain
|
|
|
@click="handleDelete(selectedOrder)"
|
|
@click="handleDelete(selectedOrder)"
|
|
|
>删除工单</el-button>
|
|
>删除工单</el-button>
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="canOperate.dispatch(selectedOrder)"
|
|
v-if="canOperate.dispatch(selectedOrder)"
|
|
|
- v-hasPermi="['ops:pworkOrder:dispatch']"
|
|
|
|
|
|
|
+ v-hasPermi="['ops:workOrder:dispatch']"
|
|
|
type="primary"
|
|
type="primary"
|
|
|
@click="openDispatch(selectedOrder)"
|
|
@click="openDispatch(selectedOrder)"
|
|
|
>派单</el-button>
|
|
>派单</el-button>
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="canOperate.accept(selectedOrder)"
|
|
v-if="canOperate.accept(selectedOrder)"
|
|
|
- v-hasPermi="['ops:pworkOrder:accept']"
|
|
|
|
|
|
|
+ v-hasPermi="['ops:workOrder:accept']"
|
|
|
type="primary"
|
|
type="primary"
|
|
|
@click="openAction(selectedOrder, 'accept')"
|
|
@click="openAction(selectedOrder, 'accept')"
|
|
|
>核查接单</el-button>
|
|
>核查接单</el-button>
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="canOperate.process(selectedOrder)"
|
|
v-if="canOperate.process(selectedOrder)"
|
|
|
- v-hasPermi="['ops:pworkOrder:process']"
|
|
|
|
|
|
|
+ v-hasPermi="['ops:workOrder:process']"
|
|
|
type="primary"
|
|
type="primary"
|
|
|
@click="openAction(selectedOrder, 'process')"
|
|
@click="openAction(selectedOrder, 'process')"
|
|
|
>开始处理</el-button>
|
|
>开始处理</el-button>
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="canOperate.submitVerify(selectedOrder)"
|
|
v-if="canOperate.submitVerify(selectedOrder)"
|
|
|
- v-hasPermi="['ops:pworkOrder:submitVerify']"
|
|
|
|
|
|
|
+ v-hasPermi="['ops:workOrder:submitVerify']"
|
|
|
type="primary"
|
|
type="primary"
|
|
|
@click="openAction(selectedOrder, 'submitVerify')"
|
|
@click="openAction(selectedOrder, 'submitVerify')"
|
|
|
>提交验收</el-button>
|
|
>提交验收</el-button>
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="canOperate.verify(selectedOrder)"
|
|
v-if="canOperate.verify(selectedOrder)"
|
|
|
- v-hasPermi="['ops:pworkOrder:verify']"
|
|
|
|
|
|
|
+ v-hasPermi="['ops:workOrder:verify']"
|
|
|
type="primary"
|
|
type="primary"
|
|
|
@click="openVerify(selectedOrder)"
|
|
@click="openVerify(selectedOrder)"
|
|
|
- >验收通过</el-button>
|
|
|
|
|
|
|
+ >验收审核</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
@@ -425,29 +425,33 @@
|
|
|
<script setup>
|
|
<script setup>
|
|
|
import { ref, reactive, computed, getCurrentInstance, onMounted, watch } from 'vue'
|
|
import { ref, reactive, computed, getCurrentInstance, onMounted, watch } from 'vue'
|
|
|
import {
|
|
import {
|
|
|
- listPworkOrder,
|
|
|
|
|
- getPworkOrder,
|
|
|
|
|
- dispatchPworkOrder,
|
|
|
|
|
- acceptPworkOrder,
|
|
|
|
|
- processPworkOrder,
|
|
|
|
|
- submitVerifyPworkOrder,
|
|
|
|
|
- verifyPworkOrder,
|
|
|
|
|
- cancelPworkOrder,
|
|
|
|
|
- applyDelayPworkOrder,
|
|
|
|
|
- auditDelayPworkOrder,
|
|
|
|
|
- delPworkOrder,
|
|
|
|
|
- pworkOrderDeptTree,
|
|
|
|
|
- pworkOrderUsers
|
|
|
|
|
-} from '@/api/pipeNetwork/ops/pworkOrder.js'
|
|
|
|
|
|
|
+ listWorkOrder,
|
|
|
|
|
+ workOrderStatusCount,
|
|
|
|
|
+ getWorkOrder,
|
|
|
|
|
+ dispatchWorkOrder,
|
|
|
|
|
+ acceptWorkOrder,
|
|
|
|
|
+ processWorkOrder,
|
|
|
|
|
+ submitVerifyWorkOrder,
|
|
|
|
|
+ verifyWorkOrder,
|
|
|
|
|
+ cancelWorkOrder,
|
|
|
|
|
+ applyDelayWorkOrder,
|
|
|
|
|
+ auditDelayWorkOrder,
|
|
|
|
|
+ delWorkOrder,
|
|
|
|
|
+ workOrderDeptTree,
|
|
|
|
|
+ workOrderUsers
|
|
|
|
|
+} from '@/api/pipeNetwork/ops/workOrder.js'
|
|
|
import {
|
|
import {
|
|
|
canOperate,
|
|
canOperate,
|
|
|
orderLevelText,
|
|
orderLevelText,
|
|
|
- ORDER_STATUS_MAP,
|
|
|
|
|
orderStatusText,
|
|
orderStatusText,
|
|
|
delayApplyStatusText,
|
|
delayApplyStatusText,
|
|
|
orderLogText,
|
|
orderLogText,
|
|
|
timeText,
|
|
timeText,
|
|
|
- splitAttach
|
|
|
|
|
|
|
+ splitAttach,
|
|
|
|
|
+ WO_STATUS,
|
|
|
|
|
+ WO_LOG_TYPE,
|
|
|
|
|
+ DELAY_APPLY_STATUS,
|
|
|
|
|
+ WO_LEVEL
|
|
|
} from './workOrderDict.js'
|
|
} from './workOrderDict.js'
|
|
|
import ImageUpload from '@/components/ImageUpload/index.vue'
|
|
import ImageUpload from '@/components/ImageUpload/index.vue'
|
|
|
import { useRoute } from 'vue-router'
|
|
import { useRoute } from 'vue-router'
|
|
@@ -489,12 +493,36 @@ function buildQueryParams() {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const STATUS_ORDER = [0, 1, 2, 3, 4, 5, 6, 7]
|
|
|
|
|
|
|
+/** 状态统计入参:与列表同条件,但去掉状态筛选,保证各状态计数同时可见 */
|
|
|
|
|
+function buildStatQueryParams() {
|
|
|
|
|
+ const params = buildQueryParams()
|
|
|
|
|
+ delete params.orderStatus
|
|
|
|
|
+ return params
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 状态筛选条顺序(与 WorkOrderStatusEnum 声明顺序一致:0~7) */
|
|
|
|
|
+const STATUS_ORDER = Object.values(WO_STATUS)
|
|
|
const STEP_NODES = ['创建', '派单', '接单', '处置', '验收', '完成']
|
|
const STEP_NODES = ['创建', '派单', '接单', '处置', '验收', '完成']
|
|
|
-const STEP_INDEX = { 0: 1, 1: 2, 2: 3, 3: 3, 4: 4, 5: 5, 6: 3 }
|
|
|
|
|
|
|
+/** 各状态对应的步骤条进度下标(已取消由 isCancelled 单独分支处理,故不在此表) */
|
|
|
|
|
+const STEP_INDEX = {
|
|
|
|
|
+ [WO_STATUS.PENDING_DISPATCH]: 1,
|
|
|
|
|
+ [WO_STATUS.PENDING_ACCEPT]: 2,
|
|
|
|
|
+ [WO_STATUS.ACCEPTED]: 3,
|
|
|
|
|
+ [WO_STATUS.PROCESSING]: 3,
|
|
|
|
|
+ [WO_STATUS.PENDING_VERIFY]: 4,
|
|
|
|
|
+ [WO_STATUS.CLOSED]: 5,
|
|
|
|
|
+ [WO_STATUS.DELAYING]: 3
|
|
|
|
|
+}
|
|
|
|
|
+/** 各状态的徽标配色(key 为 WorkOrderStatusEnum code) */
|
|
|
const BADGE = {
|
|
const BADGE = {
|
|
|
- 0: ['#FAEEDA', '#854F0B'], 1: ['#E6F1FB', '#185FA5'], 2: ['#E1F5EE', '#0F6E56'], 3: ['#ECEEF9', '#3F51B5'],
|
|
|
|
|
- 4: ['#FAECE7', '#993C1D'], 5: ['#EAF3DE', '#3B6D11'], 6: ['#FBEAF0', '#993556'], 7: ['#F1EFE8', '#5F5E5A']
|
|
|
|
|
|
|
+ [WO_STATUS.PENDING_DISPATCH]: ['#FAEEDA', '#854F0B'],
|
|
|
|
|
+ [WO_STATUS.PENDING_ACCEPT]: ['#E6F1FB', '#185FA5'],
|
|
|
|
|
+ [WO_STATUS.ACCEPTED]: ['#E1F5EE', '#0F6E56'],
|
|
|
|
|
+ [WO_STATUS.PROCESSING]: ['#ECEEF9', '#3F51B5'],
|
|
|
|
|
+ [WO_STATUS.PENDING_VERIFY]: ['#FAECE7', '#993C1D'],
|
|
|
|
|
+ [WO_STATUS.CLOSED]: ['#EAF3DE', '#3B6D11'],
|
|
|
|
|
+ [WO_STATUS.DELAYING]: ['#FBEAF0', '#993556'],
|
|
|
|
|
+ [WO_STATUS.CANCELLED]: ['#F1EFE8', '#5F5E5A']
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const listLoading = ref(false)
|
|
const listLoading = ref(false)
|
|
@@ -520,10 +548,10 @@ const currentOrderLogs = ref([])
|
|
|
const activeTab = ref('info')
|
|
const activeTab = ref('info')
|
|
|
|
|
|
|
|
const ACTION_CONFIG = {
|
|
const ACTION_CONFIG = {
|
|
|
- accept: { title: '核查接单', label: '核查结论', placeholder: '请如实填写现场核查结论,注明故障是否属实、现场现状等内容', attachLabel: '上传现场情况', attachRequired: true, api: acceptPworkOrder },
|
|
|
|
|
- process: { title: '工单处置', label: '处置内容', placeholder: '请记录故障原因、处置方案、实施措施及处理结果,支持多次处置填报', attachLabel: '上传附件(可选)', attachRequired: false, api: processPworkOrder },
|
|
|
|
|
- submitVerify: { title: '提交验收', label: '验收说明', placeholder: '请填报维修处置完成情况,同步上传维修完成后的佐证材料', attachLabel: '上传维修后的情况', attachRequired: true, api: submitVerifyPworkOrder },
|
|
|
|
|
- cancel: { title: '取消工单', label: '取消原因', placeholder: '请详细说明工单取消事由', attachLabel: '上传附件(可选)', attachRequired: false, api: cancelPworkOrder }
|
|
|
|
|
|
|
+ accept: { title: '核查接单', label: '核查结论', placeholder: '请如实填写现场核查结论,注明故障是否属实、现场现状等内容', attachLabel: '上传现场情况', attachRequired: true, api: acceptWorkOrder },
|
|
|
|
|
+ process: { title: '工单处置', label: '处置内容', placeholder: '请记录故障原因、处置方案、实施措施及处理结果,支持多次处置填报', attachLabel: '上传附件(可选)', attachRequired: false, api: processWorkOrder },
|
|
|
|
|
+ submitVerify: { title: '提交验收', label: '验收说明', placeholder: '请填报维修处置完成情况,同步上传维修完成后的佐证材料', attachLabel: '上传维修后的情况', attachRequired: true, api: submitVerifyWorkOrder },
|
|
|
|
|
+ cancel: { title: '取消工单', label: '取消原因', placeholder: '请详细说明工单取消事由', attachLabel: '上传附件(可选)', attachRequired: false, api: cancelWorkOrder }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* ============ 展示辅助 ============ */
|
|
/* ============ 展示辅助 ============ */
|
|
@@ -533,7 +561,7 @@ function badgeStyle(status) {
|
|
|
}
|
|
}
|
|
|
function priClass(level) {
|
|
function priClass(level) {
|
|
|
const n = Number(level)
|
|
const n = Number(level)
|
|
|
- return n === 0 ? 'h' : (n === 2 ? 'l' : 'm')
|
|
|
|
|
|
|
+ return n === WO_LEVEL.EMERGENCY ? 'h' : (n === WO_LEVEL.LOW ? 'l' : 'm')
|
|
|
}
|
|
}
|
|
|
function fileName(url) {
|
|
function fileName(url) {
|
|
|
if (!url) return '-'
|
|
if (!url) return '-'
|
|
@@ -567,8 +595,8 @@ function dayLabel(d) {
|
|
|
|
|
|
|
|
const beforeAttach = computed(() => splitAttach(selectedOrder.value?.maintenanceBeforeImg))
|
|
const beforeAttach = computed(() => splitAttach(selectedOrder.value?.maintenanceBeforeImg))
|
|
|
const afterAttach = computed(() => splitAttach(selectedOrder.value?.maintenanceAfterImg))
|
|
const afterAttach = computed(() => splitAttach(selectedOrder.value?.maintenanceAfterImg))
|
|
|
-const locked = computed(() => Number(selectedOrder.value?.orderStatus) === 5)
|
|
|
|
|
-const isCancelled = computed(() => Number(selectedOrder.value?.orderStatus) === 7)
|
|
|
|
|
|
|
+const locked = computed(() => Number(selectedOrder.value?.orderStatus) === WO_STATUS.CLOSED)
|
|
|
|
|
+const isCancelled = computed(() => Number(selectedOrder.value?.orderStatus) === WO_STATUS.CANCELLED)
|
|
|
const stepIdxVal = computed(() => STEP_INDEX[Number(selectedOrder.value?.orderStatus)] ?? -1)
|
|
const stepIdxVal = computed(() => STEP_INDEX[Number(selectedOrder.value?.orderStatus)] ?? -1)
|
|
|
|
|
|
|
|
const stepNodes = computed(() => {
|
|
const stepNodes = computed(() => {
|
|
@@ -576,8 +604,8 @@ const stepNodes = computed(() => {
|
|
|
if (isCancelled.value) {
|
|
if (isCancelled.value) {
|
|
|
let prog = 1
|
|
let prog = 1
|
|
|
const logs = currentOrderLogs.value || []
|
|
const logs = currentOrderLogs.value || []
|
|
|
- if (logs.some((l) => Number(l.operType) === 1)) prog = 2
|
|
|
|
|
- if (logs.some((l) => Number(l.operType) === 2)) prog = 3
|
|
|
|
|
|
|
+ if (logs.some((l) => Number(l.operType) === WO_LOG_TYPE.DISPATCH)) prog = 2
|
|
|
|
|
+ if (logs.some((l) => Number(l.operType) === WO_LOG_TYPE.ACCEPT)) prog = 3
|
|
|
return STEP_NODES.map((n, i) => {
|
|
return STEP_NODES.map((n, i) => {
|
|
|
if (i < prog) return { label: n, cls: 'stp donegray', icon: '✓' }
|
|
if (i < prog) return { label: n, cls: 'stp donegray', icon: '✓' }
|
|
|
if (i === prog) return { label: '已终止', cls: 'stp offx', icon: '✕' }
|
|
if (i === prog) return { label: '已终止', cls: 'stp offx', icon: '✕' }
|
|
@@ -604,8 +632,47 @@ const logGroups = computed(() => {
|
|
|
.map((d) => ({ day: d, items: days[d].slice().sort((a, b) => logTime(b.operTime).localeCompare(logTime(a.operTime))) }))
|
|
.map((d) => ({ day: d, items: days[d].slice().sort((a, b) => logTime(b.operTime).localeCompare(logTime(a.operTime))) }))
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
+/** 状态筛选条:全部状态合计(由后端聚合,随当前筛选条件联动) */
|
|
|
|
|
+const statusTotal = ref(0)
|
|
|
|
|
+/** 状态筛选条:状态码 → 数量 */
|
|
|
|
|
+const statusCounts = ref({})
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 拉取各状态工单数量。
|
|
|
|
|
+ *
|
|
|
|
|
+ * 必须走后端聚合:只用当前页数据统计会在分页时失真,
|
|
|
|
|
+ * 且选中某个状态后列表被过滤,其它状态的计数会全部变成 0。
|
|
|
|
|
+ * 接口异常时返回 false,由调用方降级,不影响列表展示。
|
|
|
|
|
+ */
|
|
|
|
|
+async function loadStatusStat() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await workOrderStatusCount(buildStatQueryParams())
|
|
|
|
|
+ const data = res.data || {}
|
|
|
|
|
+ const map = {}
|
|
|
|
|
+ ;(data.counts || []).forEach((item) => {
|
|
|
|
|
+ map[Number(item.status)] = Number(item.count) || 0
|
|
|
|
|
+ })
|
|
|
|
|
+ statusCounts.value = map
|
|
|
|
|
+ statusTotal.value = Number(data.total) || 0
|
|
|
|
|
+ return true
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 统计接口不可用时的降级:按当前页数据估算,保证筛选条不空白 */
|
|
|
|
|
+function fallbackStatusStat() {
|
|
|
|
|
+ const map = {}
|
|
|
|
|
+ list.value.forEach((o) => {
|
|
|
|
|
+ const s = Number(o.orderStatus)
|
|
|
|
|
+ map[s] = (map[s] || 0) + 1
|
|
|
|
|
+ })
|
|
|
|
|
+ statusCounts.value = map
|
|
|
|
|
+ statusTotal.value = total.value
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
function statusCount(s) {
|
|
function statusCount(s) {
|
|
|
- return list.value.filter((o) => Number(o.orderStatus) === s).length
|
|
|
|
|
|
|
+ return statusCounts.value[s] || 0
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* ============ 附件预览 ============ */
|
|
/* ============ 附件预览 ============ */
|
|
@@ -623,10 +690,12 @@ function preview(url, arr) {
|
|
|
async function handleSearch() {
|
|
async function handleSearch() {
|
|
|
listLoading.value = true
|
|
listLoading.value = true
|
|
|
try {
|
|
try {
|
|
|
- const res = await listPworkOrder(buildQueryParams())
|
|
|
|
|
|
|
+ // 列表与状态统计并行请求:统计失败只降级,不阻断列表
|
|
|
|
|
+ const [res, statLoaded] = await Promise.all([listWorkOrder(buildQueryParams()), loadStatusStat()])
|
|
|
const data = res.data || {}
|
|
const data = res.data || {}
|
|
|
list.value = data.records || []
|
|
list.value = data.records || []
|
|
|
total.value = data.total || 0
|
|
total.value = data.total || 0
|
|
|
|
|
+ if (!statLoaded) fallbackStatusStat()
|
|
|
} finally {
|
|
} finally {
|
|
|
listLoading.value = false
|
|
listLoading.value = false
|
|
|
}
|
|
}
|
|
@@ -683,7 +752,7 @@ async function handleSelectOrder(o) {
|
|
|
currentOrderLogs.value = []
|
|
currentOrderLogs.value = []
|
|
|
detailLoading.value = true
|
|
detailLoading.value = true
|
|
|
try {
|
|
try {
|
|
|
- const res = await getPworkOrder(o.orderId)
|
|
|
|
|
|
|
+ const res = await getWorkOrder(o.orderId)
|
|
|
const data = res.data || {}
|
|
const data = res.data || {}
|
|
|
selectedOrder.value = { ...selectedOrder.value, ...(data.order || o) }
|
|
selectedOrder.value = { ...selectedOrder.value, ...(data.order || o) }
|
|
|
currentOrderLogs.value = data.logs || []
|
|
currentOrderLogs.value = data.logs || []
|
|
@@ -720,7 +789,7 @@ async function submitDispatch() {
|
|
|
}
|
|
}
|
|
|
submitting.value = true
|
|
submitting.value = true
|
|
|
try {
|
|
try {
|
|
|
- await dispatchPworkOrder({ orderId: dispatchForm.orderId, handlerId: dispatchForm.handlerId, remarks: dispatchForm.remarks })
|
|
|
|
|
|
|
+ await dispatchWorkOrder({ orderId: dispatchForm.orderId, handlerId: dispatchForm.handlerId, remarks: dispatchForm.remarks })
|
|
|
proxy.$modal.msgSuccess('派单成功,工单状态变更为待接单')
|
|
proxy.$modal.msgSuccess('派单成功,工单状态变更为待接单')
|
|
|
dispatchVisible.value = false
|
|
dispatchVisible.value = false
|
|
|
await refresh(dispatchForm.orderId)
|
|
await refresh(dispatchForm.orderId)
|
|
@@ -737,10 +806,10 @@ const selectedUserId = ref(null)
|
|
|
const selectedUser = ref(null)
|
|
const selectedUser = ref(null)
|
|
|
|
|
|
|
|
function loadDeptTree() {
|
|
function loadDeptTree() {
|
|
|
- pworkOrderDeptTree().then((res) => { deptTree.value = res.data || [] })
|
|
|
|
|
|
|
+ workOrderDeptTree().then((res) => { deptTree.value = res.data || [] })
|
|
|
}
|
|
}
|
|
|
function loadDeptUsers(deptId) {
|
|
function loadDeptUsers(deptId) {
|
|
|
- pworkOrderUsers(deptId).then((res) => { deptUserList.value = res.data || [] })
|
|
|
|
|
|
|
+ workOrderUsers(deptId).then((res) => { deptUserList.value = res.data || [] })
|
|
|
}
|
|
}
|
|
|
function handleDeptNodeClick(node) { loadDeptUsers(node.id) }
|
|
function handleDeptNodeClick(node) { loadDeptUsers(node.id) }
|
|
|
function handleUserCurrentChange(row) {
|
|
function handleUserCurrentChange(row) {
|
|
@@ -820,7 +889,7 @@ function openVerify(o) {
|
|
|
async function submitVerify() {
|
|
async function submitVerify() {
|
|
|
submitting.value = true
|
|
submitting.value = true
|
|
|
try {
|
|
try {
|
|
|
- await verifyPworkOrder({ orderId: verifyForm.orderId, passed: verifyForm.passed, content: verifyForm.content, attachUrl: verifyForm.attachUrl || '' })
|
|
|
|
|
|
|
+ await verifyWorkOrder({ orderId: verifyForm.orderId, passed: verifyForm.passed, content: verifyForm.content, attachUrl: verifyForm.attachUrl || '' })
|
|
|
proxy.$modal.msgSuccess(verifyForm.passed ? '验收通过,工单已结案' : '验收驳回,工单退回处理中')
|
|
proxy.$modal.msgSuccess(verifyForm.passed ? '验收通过,工单已结案' : '验收驳回,工单退回处理中')
|
|
|
verifyVisible.value = false
|
|
verifyVisible.value = false
|
|
|
await refresh(verifyForm.orderId)
|
|
await refresh(verifyForm.orderId)
|
|
@@ -845,7 +914,7 @@ async function submitDelay() {
|
|
|
if (!delayForm.delayedReason || !delayForm.delayedReason.trim()) { proxy.$modal.msgWarning('请填写延期原因'); return }
|
|
if (!delayForm.delayedReason || !delayForm.delayedReason.trim()) { proxy.$modal.msgWarning('请填写延期原因'); return }
|
|
|
submitting.value = true
|
|
submitting.value = true
|
|
|
try {
|
|
try {
|
|
|
- await applyDelayPworkOrder({
|
|
|
|
|
|
|
+ await applyDelayWorkOrder({
|
|
|
orderId: delayForm.orderId,
|
|
orderId: delayForm.orderId,
|
|
|
delayedDeadline: delayForm.delayedDeadline,
|
|
delayedDeadline: delayForm.delayedDeadline,
|
|
|
delayedReason: delayForm.delayedReason.trim(),
|
|
delayedReason: delayForm.delayedReason.trim(),
|
|
@@ -872,7 +941,7 @@ function openDelayAudit(o) {
|
|
|
async function submitDelayAudit() {
|
|
async function submitDelayAudit() {
|
|
|
submitting.value = true
|
|
submitting.value = true
|
|
|
try {
|
|
try {
|
|
|
- await auditDelayPworkOrder({ orderId: delayAuditForm.orderId, approved: delayAuditForm.approved, auditOpinion: delayAuditForm.auditOpinion })
|
|
|
|
|
|
|
+ await auditDelayWorkOrder({ orderId: delayAuditForm.orderId, approved: delayAuditForm.approved, auditOpinion: delayAuditForm.auditOpinion })
|
|
|
proxy.$modal.msgSuccess(delayAuditForm.approved ? '延期审核通过' : '延期审核驳回')
|
|
proxy.$modal.msgSuccess(delayAuditForm.approved ? '延期审核通过' : '延期审核驳回')
|
|
|
delayAuditVisible.value = false
|
|
delayAuditVisible.value = false
|
|
|
await refresh(delayAuditForm.orderId)
|
|
await refresh(delayAuditForm.orderId)
|
|
@@ -885,7 +954,7 @@ async function submitDelayAudit() {
|
|
|
function handleDelete(o) {
|
|
function handleDelete(o) {
|
|
|
proxy.$modal
|
|
proxy.$modal
|
|
|
.confirm('确认删除该已取消工单吗?')
|
|
.confirm('确认删除该已取消工单吗?')
|
|
|
- .then(() => delPworkOrder(o.orderId))
|
|
|
|
|
|
|
+ .then(() => delWorkOrder(o.orderId))
|
|
|
.then(() => {
|
|
.then(() => {
|
|
|
proxy.$modal.msgSuccess('删除成功')
|
|
proxy.$modal.msgSuccess('删除成功')
|
|
|
clearSelection()
|
|
clearSelection()
|