<template>
|
<el-dialog title="修改故障" :visible.sync="localVisible" width="960px" append-to-body @closed="clearValidate">
|
<el-form ref="form" :model="form" :rules="rules" label-width="105px">
|
<el-row :gutter="16">
|
<el-col :span="8"><el-form-item label="故障编号"><el-input v-model="form.faultCode" readonly placeholder="保存后自动生成"></el-input></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="上报单位"><el-input v-model="form.reportUnit"></el-input></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="上报日期"><el-date-picker v-model="form.reportDate" type="date" value-format="yyyy-MM-dd" style="width:100%"></el-date-picker></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="X号"><el-select v-model="form.xNo" filterable placeholder="请选择X号" style="width:100%"><el-option v-for="item in xNumbers" :key="item" :label="item" :value="item"></el-option></el-select></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="负责人"><el-input v-model="form.owner"></el-input></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="T队专业"><el-select v-model="form.teamMajor" style="width:100%"><el-option v-for="item in teamMajors" :key="item.id" :label="item.name" :value="item.name"></el-option></el-select></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="工程专业"><el-select v-model="form.engineeringMajor" style="width:100%"><el-option v-for="item in engineeringMajors" :key="item.id" :label="item.name" :value="item.name"></el-option></el-select></el-form-item></el-col>
|
<el-col :span="16">
|
<el-form-item label="装备名称" prop="equipmentName">
|
<el-input v-model="form.equipmentName" readonly :title="form.equipmentName" placeholder="点击右侧按钮从产品结构树选设备,可多选">
|
<el-button slot="append" icon="el-icon-s-grid" @click="pickerVisible = true">选择装备</el-button>
|
</el-input>
|
<div v-if="selectedEquipmentIds.length" class="field-tip">已选 {{ selectedEquipmentIds.length }} 台设备</div>
|
</el-form-item>
|
</el-col>
|
<el-col :span="16"><el-form-item label="所属上级系统"><el-input v-model="form.parentSystem" readonly :title="form.parentSystem"></el-input></el-form-item></el-col>
|
<el-col :span="24"><el-form-item label="工程名称及损坏情况" prop="engineeringNameDesc"><el-input v-model="form.engineeringNameDesc" type="textarea" :rows="2"></el-input></el-form-item></el-col>
|
<el-col :span="24"><el-form-item label="修理技术要求"><el-input v-model="form.repairRequirement" type="textarea" :rows="2"></el-input></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="故障影响"><el-select v-model="form.faultImpact" style="width:100%"><el-option v-for="item in impacts" :key="item" :label="item" :value="item"></el-option></el-select></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="故障性质"><el-select v-model="form.faultNature" style="width:100%"><el-option v-for="item in natures" :key="item" :label="item" :value="item"></el-option></el-select></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="是否自修"><el-switch v-model="form.isSelfRepair" :active-value="1" :inactive-value="0"></el-switch></el-form-item></el-col>
|
</el-row>
|
<el-row :gutter="16">
|
<el-col :span="8"><el-form-item label="是否涉H"><el-switch v-model="form.isHRelated" :active-value="1" :inactive-value="0"></el-switch></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="是否监测项目"><el-switch v-model="form.isMonitorItem" :active-value="1" :inactive-value="0"></el-switch></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="监测数值"><el-input v-model="form.monitorValue" :disabled="form.isMonitorItem !== 1"></el-input></el-form-item></el-col>
|
<el-col :span="24"><el-form-item label="重大故障描述"><el-input v-model="form.majorFaultDesc" type="textarea" :rows="2"></el-input></el-form-item></el-col>
|
<el-col :span="12"><el-form-item label="要求完工日期"><el-date-picker v-model="form.requestedFinishDate" type="date" value-format="yyyy-MM-dd" style="width:100%"></el-date-picker></el-form-item></el-col>
|
<el-col :span="12"><el-form-item label="备注"><el-input v-model="form.remark"></el-input></el-form-item></el-col>
|
</el-row>
|
</el-form>
|
<template slot="footer">
|
<el-button @click="localVisible = false">取消</el-button>
|
<el-button type="primary" :loading="saving" @click="save">保存</el-button>
|
</template>
|
<product-tree-picker :visible.sync="pickerVisible" :x-no="form.xNo" :selected-ids="selectedEquipmentIds" @select="onEquipmentSelected"></product-tree-picker>
|
</el-dialog>
|
</template>
|
<script>
|
import api from '@/api'
|
import ProductTreePicker from '@/components/ProductTreePicker.vue'
|
|
export default {
|
name: 'FaultEditDialog',
|
components: { ProductTreePicker },
|
props: {
|
visible: { type: Boolean, default: false },
|
fault: { type: Object, default: () => ({}) }
|
},
|
data() {
|
return {
|
localVisible: false,
|
pickerVisible: false,
|
saving: false,
|
xNumbers: [],
|
teamMajors: [],
|
engineeringMajors: [],
|
impacts: ['供气', '供电', '运行', '安全'],
|
natures: ['一般', '重大'],
|
form: {},
|
rules: {
|
equipmentName: [{ required: true, message: '请选择装备名称', trigger: 'change' }],
|
engineeringNameDesc: [{ required: true, message: '请填写工程名称及损坏情况', trigger: 'blur' }]
|
}
|
}
|
},
|
computed: {
|
selectedEquipmentIds() {
|
const text = this.form && this.form.equipmentIds
|
if (text) return String(text).split(',').map(item => item.trim()).filter(Boolean)
|
return this.form && this.form.equipmentId ? [String(this.form.equipmentId)] : []
|
}
|
},
|
watch: {
|
visible(value) {
|
this.localVisible = value
|
if (value) this.initForm()
|
},
|
localVisible(value) { this.$emit('update:visible', value) }
|
},
|
created() {
|
this.loadXNumbers()
|
this.loadMajors()
|
},
|
methods: {
|
initForm() {
|
this.form = JSON.parse(JSON.stringify(this.fault || {}))
|
if (!this.form.equipmentIds && this.form.equipmentId) {
|
this.form.equipmentIds = String(this.form.equipmentId)
|
}
|
},
|
loadMajors() {
|
api.get('/system/team-majors').then(res => { this.teamMajors = res.data || [] })
|
api.get('/system/engineering-majors').then(res => { this.engineeringMajors = res.data || [] })
|
},
|
loadXNumbers() {
|
api.get('/system/tree', { params: { type: 'product' } }).then(res => {
|
const values = []
|
const walk = nodes => {
|
if (!nodes) return
|
nodes.forEach(node => {
|
if (node.nodeType === 'X_NO' || node.nodeLevel === 2) values.push(node.name)
|
walk(node.children)
|
})
|
}
|
walk(res.data)
|
this.xNumbers = Array.from(new Set(values.filter(Boolean))).sort((a, b) => a.localeCompare(b, 'zh-CN'))
|
})
|
},
|
onEquipmentSelected(nodes) {
|
const selected = Array.isArray(nodes) ? nodes : [nodes]
|
this.form.equipmentIds = selected.map(node => node.id).join(',')
|
this.form.equipmentId = selected.length ? selected[0].id : null
|
this.form.equipmentName = selected.map(node => node.name).join('、')
|
this.form.xNo = selected.length && selected[0].xNo ? selected[0].xNo : this.form.xNo
|
const parentSystems = []
|
selected.forEach(node => {
|
const parent = (node.parentPathNames || []).join(' / ')
|
if (parent && !parentSystems.includes(parent)) parentSystems.push(parent)
|
})
|
this.form.parentSystem = parentSystems.length ? parentSystems.join('、') : '未指定'
|
},
|
clearValidate() {
|
if (this.$refs.form) this.$refs.form.clearValidate()
|
},
|
save() {
|
this.$refs.form.validate(valid => {
|
if (!valid) return
|
this.saving = true
|
api.put('/faults/' + this.form.id, this.form).then(res => {
|
this.$message.success('保存成功')
|
this.localVisible = false
|
this.$emit('saved', res.data)
|
}).finally(() => { this.saving = false })
|
})
|
}
|
}
|
}
|
</script>
|
<style scoped>
|
.field-tip { margin-top: 4px; color: #7b8a99; font-size: 12px; line-height: 18px; }
|
</style>
|