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-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="设备编号" prop="deviceCode"> <el-form-item label="设备" prop="deviceId">
<el-input v-model="form.deviceCode" placeholder="请输入设备编号" /> <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-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="设备名称" prop="deviceName"> <el-form-item label="设备名称">
<el-input v-model="form.deviceName" placeholder="请输入设备名称" /> <el-input v-model="form.deviceName" placeholder="自动填充" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -171,6 +186,7 @@
<script> <script>
import { getDispatchPlan, addDispatchPlan, updateDispatchPlan } from '@/api/dms/dispatchPlan' import { getDispatchPlan, addDispatchPlan, updateDispatchPlan } from '@/api/dms/dispatchPlan'
import { selectUserList } from '@/api/system/user' import { selectUserList } from '@/api/system/user'
import { getDeviceLedgerList } from '@/api/base/deviceLedger'
export default { export default {
name: 'DispatchPlanDetail', name: 'DispatchPlanDetail',
@ -197,6 +213,7 @@ export default {
dispatchMembers: [] dispatchMembers: []
}, },
userList: [], userList: [],
deviceList: [],
rules: { rules: {
dispatchType: [{ required: true, message: '请选择派工类型', trigger: 'change' }], dispatchType: [{ required: true, message: '请选择派工类型', trigger: 'change' }],
executorId: [{ required: true, message: '请选择执行人', trigger: 'change' }], executorId: [{ required: true, message: '请选择执行人', trigger: 'change' }],
@ -207,6 +224,7 @@ export default {
}, },
created() { created() {
this.loadUserList() this.loadUserList()
this.loadDeviceList()
const planId = this.$route.params && this.$route.params.planId const planId = this.$route.params && this.$route.params.planId
if (planId && planId !== 'new') { if (planId && planId !== 'new') {
this.loadData(planId) this.loadData(planId)
@ -230,9 +248,21 @@ export default {
}, },
loadUserList() { loadUserList() {
selectUserList({}).then(response => { 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) { handleDispatchTypeChange(val) {
if (val === '1') { if (val === '1') {
// //

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

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

@ -14,8 +14,8 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="关联故障报修"> <el-form-item label="关联故障报修">
<el-input v-model="form.faultInstanceId" placeholder="选择故障报修单" readonly @click.native="selectFaultInstance"> <el-input v-model="faultInstanceDisplay" placeholder="选择故障报修单" readonly :disabled="isView" @click.native="selectFaultInstance">
<el-button slot="append" icon="el-icon-search" @click="selectFaultInstance"></el-button> <el-button slot="append" icon="el-icon-search" @click="selectFaultInstance" :disabled="isView"></el-button>
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -272,12 +272,62 @@
<el-button @click="goBack"> </el-button> <el-button @click="goBack"> </el-button>
<el-button type="primary" @click="handleSubmit" v-if="!isView"> </el-button> <el-button type="primary" @click="handleSubmit" v-if="!isView"> </el-button>
</div> </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> </div>
</template> </template>
<script> <script>
import { getRepairWorkOrder, addRepairWorkOrder, updateRepairWorkOrder } from '@/api/dms/repairWorkOrder' import { getRepairWorkOrder, addRepairWorkOrder, updateRepairWorkOrder } from '@/api/dms/repairWorkOrder'
import { getDeviceLedgerList } from '@/api/base/deviceLedger' import { getDeviceLedgerList } from '@/api/base/deviceLedger'
import { listDmsBillsFaultInstance } from '@/api/dms/dmsBillsFaultInstance'
export default { export default {
name: 'RepairWorkOrderDetail', name: 'RepairWorkOrderDetail',
@ -307,6 +357,19 @@ export default {
repairProjects: [], repairProjects: [],
repairMaterials: [] repairMaterials: []
}, },
//
faultInstanceDialogVisible: false,
faultInstanceList: [],
faultInstanceTotal: 0,
faultInstanceQuery: {
pageNum: 1,
pageSize: 10,
billsFaultCode: null,
deviceCode: null
// billsStatus
},
selectedFaultInstance: null,
faultInstanceDisplay: null,
rules: { rules: {
deviceId: [ deviceId: [
{ required: true, message: '请选择设备', trigger: 'change' } { required: true, message: '请选择设备', trigger: 'change' }
@ -345,6 +408,10 @@ export default {
Object.assign(this.form, response.data) Object.assign(this.form, response.data)
if (!this.form.repairProjects) this.form.repairProjects = [] if (!this.form.repairProjects) this.form.repairProjects = []
if (!this.form.repairMaterials) this.form.repairMaterials = [] if (!this.form.repairMaterials) this.form.repairMaterials = []
//
if (response.data.billsFaultCode) {
this.faultInstanceDisplay = response.data.billsFaultCode
}
}) })
}, },
/** 设备改变 */ /** 设备改变 */
@ -359,7 +426,52 @@ export default {
/** 选择故障报修 */ /** 选择故障报修 */
selectFaultInstance() { selectFaultInstance() {
if (this.isView) return 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() { handleAddProject() {

Loading…
Cancel
Save