feat(dms): 更新设备选择和故障报修关联功能

- 将dispatchPlan表单中的设备编号输入框改为设备选择下拉框
- 添加设备列表加载和设备选择变更处理功能
- 在repairWorkOrder中实现故障报修选择对话框
- 添加故障报修列表查询、选择和确认功能
- 新增保养计划明细路由配置
- 修复inspectRouteDetail和maintDetail中的设备ID绑定问题
- 移除部分表单项的必填验证规则
- 优化表单数据处理和类型转换逻辑
master
zangch@mesnac.com 2 months ago
parent 4ab195a58b
commit 65841c227e

@ -507,6 +507,20 @@ export const dynamicRoutes = [
},
],
},
{
path: "/dms/maintDetail",
component: Layout,
hidden: true,
permissions: ["dms:maint:query"],
children: [
{
path: "index/:planMaintId/:planMaintCode",
component: () => import("@/views/dms/maintDetail/index"),
name: "MaintDetail",
meta: {title: "保养计划明细", activeMenu: "/dms/maint"},
},
],
},
]
// 防止连续点击多次路由报错

@ -21,13 +21,28 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="设备编号" prop="deviceCode">
<el-input v-model="form.deviceCode" placeholder="请输入设备编号" />
<el-form-item label="设备" prop="deviceId">
<el-select
v-model="form.deviceId"
placeholder="请选择设备"
filterable
clearable
@change="handleDeviceChange"
style="width: 100%">
<el-option
v-for="item in deviceList"
:key="item.objId"
:label="item.deviceName"
:value="item.objId">
<span style="float: left">{{ item.deviceCode }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.deviceName }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="form.deviceName" placeholder="请输入设备名称" />
<el-form-item label="设备名称">
<el-input v-model="form.deviceName" placeholder="自动填充" disabled />
</el-form-item>
</el-col>
</el-row>
@ -171,6 +186,7 @@
<script>
import { getDispatchPlan, addDispatchPlan, updateDispatchPlan } from '@/api/dms/dispatchPlan'
import { selectUserList } from '@/api/system/user'
import { getDeviceLedgerList } from '@/api/base/deviceLedger'
export default {
name: 'DispatchPlanDetail',
@ -197,6 +213,7 @@ export default {
dispatchMembers: []
},
userList: [],
deviceList: [],
rules: {
dispatchType: [{ required: true, message: '请选择派工类型', trigger: 'change' }],
executorId: [{ required: true, message: '请选择执行人', trigger: 'change' }],
@ -207,6 +224,7 @@ export default {
},
created() {
this.loadUserList()
this.loadDeviceList()
const planId = this.$route.params && this.$route.params.planId
if (planId && planId !== 'new') {
this.loadData(planId)
@ -230,9 +248,21 @@ export default {
},
loadUserList() {
selectUserList({}).then(response => {
this.userList = response.rows
this.userList = (response && response.rows && response.rows.length ? response.rows : response.data) || []
})
},
loadDeviceList() {
getDeviceLedgerList({}).then(response => {
this.deviceList = response.data || []
})
},
handleDeviceChange(deviceId) {
const device = this.deviceList.find(d => d.objId === deviceId)
if (device) {
this.form.deviceCode = device.deviceCode
this.form.deviceName = device.deviceName
}
},
handleDispatchTypeChange(val) {
if (val === '1') {
//

@ -135,8 +135,7 @@
<span
v-for="(item, index) in ledgerList"
:key="index"
:value="item.ledgerList"
v-if="scope.row.deviceId == item.deviceId"
v-if="scope.row.deviceId == item.objId"
>
{{ item.deviceName }}
</span>
@ -206,12 +205,12 @@
<!-- <el-input v-model="form.deviceId" placeholder="请输入巡检设备ID关联dms_base_device_ledger的device_id" />-->
<!-- </el-form-item>-->
<el-form-item label="巡检设备" prop="deviceId" >
<el-select v-model="form.deviceId" placeholder="请输入设备类型">
<el-select v-model="form.deviceId" placeholder="请选择设备" filterable>
<el-option
v-for="item in ledgerList"
:key="item.deviceId"
:key="item.objId"
:label="item.deviceName"
:value="item.deviceId">
:value="item.objId">
</el-option>
</el-select>
</el-form-item>
@ -366,9 +365,9 @@ export default {
routeDetailId: null,
inspectRouteId: this.inspectRouteIdCheck,
lineStep: null,
deviceId: null,
deviceId: '',
machineId: null,
inspectStandard: null,
inspectStandard: '',
isFlag: null,
remark: null
};
@ -401,8 +400,9 @@ export default {
this.reset();
const routeDetailId = row.routeDetailId || this.ids
getDmsInspectRouteDetail(routeDetailId).then(response => {
// 使 Object.assign
Object.assign(this.form, response.data);
const data = response.data;
data.inspectStandard = data.inspectStandard ? data.inspectStandard.toString() : null;
this.form = data;
this.open = true;
this.title = "修改巡检线路明细";
});
@ -411,19 +411,16 @@ export default {
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
// deviceId
if (!this.form.deviceId) {
this.$modal.msgWarning("请选择巡检设备");
return;
}
if (this.form.routeDetailId != null) {
updateDmsInspectRouteDetail(this.form).then(response => {
const formData = { ...this.form };
formData.inspectStandard = formData.inspectStandard ? parseInt(formData.inspectStandard) : null;
if (formData.routeDetailId != null) {
updateDmsInspectRouteDetail(formData).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addDmsInspectRouteDetail(this.form).then(response => {
addDmsInspectRouteDetail(formData).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();

@ -153,8 +153,7 @@
<span
v-for="(item, index) in ledgerList"
:key="index"
:value="item.ledgerList"
v-if="scope.row.deviceId == item.deviceId"
v-if="scope.row.deviceId == item.objId"
>
{{ item.deviceName }}
</span>
@ -276,12 +275,12 @@
<!-- <el-input v-model="form.deviceId" placeholder="请输入设备ID关联dms_base_device_ledger的device_id" />-->
<!-- </el-form-item>-->
<el-form-item label="设备名称" prop="deviceId" >
<el-select v-model="form.deviceId" placeholder="请选择设备">
<el-select v-model="form.deviceId" placeholder="请选择设备" filterable>
<el-option
v-for="item in ledgerList"
:key="item.deviceId"
:key="item.objId"
:label="item.deviceName"
:value="item.deviceId">
:value="item.objId">
</el-option>
</el-select>
</el-form-item>
@ -382,20 +381,14 @@ export default {
planMaintId: [
{ required: true, message: "计划ID关联dms_plan_maint的plan_maint_id不能为空", trigger: "blur" }
],
deviceId: [
{ required: true, message: "设备名称不能为空", trigger: "blur" }
],
maintStationCode: [
{ required: true, message: "保养部位不能为空", trigger: "blur" }
],
maintStandardId: [
{ required: true, message: "保养标准不能为空", trigger: "blur" }
],
// deviceId: [
// { required: true, message: "IDdms_base_device_ledgerdevice_id", trigger: "blur" }
// { required: true, message: "", trigger: "blur" }
// ],
// isFlag: [
// { required: true, message: "1-2-", trigger: "blur" }
// maintStationCode: [
// { required: true, message: "", trigger: "blur" }
// ],
// maintStandardId: [
// { required: true, message: "", trigger: "blur" }
// ],
}
};
@ -467,7 +460,7 @@ export default {
this.form = {
planMaintDetailId: null,
planMaintId: null,
deviceId: null,
deviceId: '',
maintStationId: null,
maintStandardId: null,
operationDescription: null,
@ -508,7 +501,9 @@ export default {
this.reset();
const planMaintDetailId = row.planMaintDetailId || this.ids
getMaintDetail(planMaintDetailId).then(response => {
this.form = response.data;
const data = response.data;
data.maintStationCode = data.maintStationCode ? data.maintStationCode.toString() : null;
this.form = data;
this.open = true;
this.title = "修改保养计划明细信息";
});
@ -528,14 +523,16 @@ export default {
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.planMaintDetailId != null) {
updateMaintDetail(this.form).then(response => {
const formData = { ...this.form };
formData.maintStationCode = formData.maintStationCode ? formData.maintStationCode.toString() : null;
if (formData.planMaintDetailId != null) {
updateMaintDetail(formData).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addMaintDetail(this.form).then(response => {
addMaintDetail(formData).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();

@ -14,8 +14,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="关联故障报修">
<el-input v-model="form.faultInstanceId" placeholder="选择故障报修单" readonly @click.native="selectFaultInstance">
<el-button slot="append" icon="el-icon-search" @click="selectFaultInstance"></el-button>
<el-input v-model="faultInstanceDisplay" placeholder="选择故障报修单" readonly :disabled="isView" @click.native="selectFaultInstance">
<el-button slot="append" icon="el-icon-search" @click="selectFaultInstance" :disabled="isView"></el-button>
</el-input>
</el-form-item>
</el-col>
@ -272,12 +272,62 @@
<el-button @click="goBack"> </el-button>
<el-button type="primary" @click="handleSubmit" v-if="!isView"> </el-button>
</div>
<!-- 故障报修选择对话框 -->
<el-dialog title="选择故障报修单" :visible.sync="faultInstanceDialogVisible" width="900px" append-to-body>
<el-form :model="faultInstanceQuery" ref="faultInstanceQueryForm" :inline="true" size="small">
<el-form-item label="报修单号" prop="billsFaultCode">
<el-input v-model="faultInstanceQuery.billsFaultCode" placeholder="请输入报修单号" clearable @keyup.enter.native="loadFaultInstanceList" />
</el-form-item>
<el-form-item label="设备" prop="deviceCode">
<el-input v-model="faultInstanceQuery.deviceCode" placeholder="请输入设备编号" clearable />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="loadFaultInstanceList"></el-button>
<el-button icon="el-icon-refresh" @click="resetFaultInstanceQuery"></el-button>
</el-form-item>
</el-form>
<el-table
:data="faultInstanceList"
border
highlight-current-row
@current-change="handleFaultInstanceSelect"
style="width: 100%"
max-height="400">
<el-table-column label="报修单号" align="center" prop="billsFaultCode" width="160" />
<el-table-column label="设备编号" align="center" prop="deviceCode" width="120" />
<el-table-column label="设备名称" align="center" prop="deviceName" width="150" show-overflow-tooltip />
<el-table-column label="故障类型" align="center" prop="faultType" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.dms_fault_type" :value="scope.row.faultType"/>
</template>
</el-table-column>
<el-table-column label="故障描述" align="center" prop="faultDescription" show-overflow-tooltip />
<el-table-column label="报修人" align="center" prop="applyUser" width="100" />
<el-table-column label="报修时间" align="center" prop="applyTime" width="160" />
</el-table>
<pagination
v-show="faultInstanceTotal > 0"
:total="faultInstanceTotal"
:page.sync="faultInstanceQuery.pageNum"
:limit.sync="faultInstanceQuery.pageSize"
@pagination="loadFaultInstanceList"
/>
<div slot="footer" class="dialog-footer">
<el-button @click="faultInstanceDialogVisible = false"> </el-button>
<el-button type="primary" @click="confirmFaultInstance"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getRepairWorkOrder, addRepairWorkOrder, updateRepairWorkOrder } from '@/api/dms/repairWorkOrder'
import { getDeviceLedgerList } from '@/api/base/deviceLedger'
import { listDmsBillsFaultInstance } from '@/api/dms/dmsBillsFaultInstance'
export default {
name: 'RepairWorkOrderDetail',
@ -307,6 +357,19 @@ export default {
repairProjects: [],
repairMaterials: []
},
//
faultInstanceDialogVisible: false,
faultInstanceList: [],
faultInstanceTotal: 0,
faultInstanceQuery: {
pageNum: 1,
pageSize: 10,
billsFaultCode: null,
deviceCode: null
// billsStatus
},
selectedFaultInstance: null,
faultInstanceDisplay: null,
rules: {
deviceId: [
{ required: true, message: '请选择设备', trigger: 'change' }
@ -345,6 +408,10 @@ export default {
Object.assign(this.form, response.data)
if (!this.form.repairProjects) this.form.repairProjects = []
if (!this.form.repairMaterials) this.form.repairMaterials = []
//
if (response.data.billsFaultCode) {
this.faultInstanceDisplay = response.data.billsFaultCode
}
})
},
/** 设备改变 */
@ -359,7 +426,52 @@ export default {
/** 选择故障报修 */
selectFaultInstance() {
if (this.isView) return
this.$message.info('功能开发中...')
this.selectedFaultInstance = null
this.faultInstanceDialogVisible = true
this.loadFaultInstanceList()
},
/** 加载故障报修列表 */
loadFaultInstanceList() {
listDmsBillsFaultInstance(this.faultInstanceQuery).then(response => {
this.faultInstanceList = response.rows || []
this.faultInstanceTotal = response.total || 0
})
},
/** 重置故障报修查询 */
resetFaultInstanceQuery() {
this.faultInstanceQuery = {
pageNum: 1,
pageSize: 10,
billsFaultCode: null,
deviceCode: null,
billsStatus: '0'
}
this.loadFaultInstanceList()
},
/** 选择故障报修记录 */
handleFaultInstanceSelect(row) {
this.selectedFaultInstance = row
},
/** 确认选择故障报修 */
confirmFaultInstance() {
if (!this.selectedFaultInstance) {
this.$message.warning('请选择一条故障报修记录')
return
}
const fault = this.selectedFaultInstance
//
this.form.faultInstanceId = fault.repairInstanceId
this.form.deviceId = fault.deviceId
this.form.deviceCode = fault.deviceCode
this.form.deviceName = fault.deviceName
this.form.faultType = fault.faultType
this.form.faultDescription = fault.faultDescription
this.form.planEndTime = fault.requireEndTime
//
this.faultInstanceDisplay = fault.billsFaultCode
//
this.faultInstanceDialogVisible = false
this.$message.success('已关联故障报修单:' + fault.billsFaultCode)
},
/** 添加工程 */
handleAddProject() {

Loading…
Cancel
Save