zzw
1 天以前 1332cc511936d7dbe804921bc733c83d5e4d1400
emergency-repair-web/src/views/fault/FaultReport.vue
@@ -3,17 +3,17 @@
    <div class="page-title">
      <div>
        <h2>故障上报</h2>
        <p>T员录入装备信息和修理要求,故障编号保存后按规则自动生成</p>
        <p>rk_T员录入设备信息和修理要求,故障编号保存后按规则自动生成</p>
      </div>
      <el-button icon="el-icon-plus" type="primary" @click="openCreate">新增故障</el-button>
    </div>
    <div class="toolbar query-toolbar">
      <span class="filter-label">X号</span>
      <span class="filter-label">rk_X号</span>
      <el-select v-model="query.xNo" placeholder="全部" clearable style="width:100px">
        <el-option v-for="item in xNumbers" :key="item" :label="item" :value="item"></el-option>
      </el-select>
      <span class="filter-label">T队专业</span>
      <span class="filter-label">rk_T队专业</span>
      <el-select v-model="query.teamMajor" placeholder="全部" clearable style="width:130px">
        <el-option v-for="item in teamMajors" :key="item.id" :label="item.name" :value="item.name"></el-option>
      </el-select>
@@ -40,7 +40,7 @@
      <el-select v-model="query.status" placeholder="全部" clearable style="width:160px">
        <el-option v-for="(meta, key) in taskStatuses" :key="key" :label="meta.text" :value="key"></el-option>
      </el-select>
      <el-input v-model="query.keyword" placeholder="故障编号/装备名称/工程名称及损坏情况" clearable style="width:320px" @keyup.enter.native="search"></el-input>
      <el-input v-model="query.keyword" placeholder="故障编号/设备名称/工程名称及损坏情况" clearable style="width:320px" @keyup.enter.native="search"></el-input>
      <el-button type="primary" icon="el-icon-search" @click="search">查询</el-button>
      <el-button icon="el-icon-refresh-left" @click="resetQuery">重置</el-button>
      <el-button icon="el-icon-refresh" @click="load">刷新</el-button>
@@ -56,19 +56,19 @@
    </div>
    <div class="table-panel">
      <el-table :data="rows" border stripe height="calc(100vh - 355px)" :header-cell-style="{ textAlign: 'center' }" @selection-change="selection = $event">
      <el-table :data="rows" border stripe height="calc(100vh - 395px)" :header-cell-style="{ textAlign: 'center' }" @selection-change="selection = $event">
        <el-table-column type="selection" width="46" :selectable="row => canEdit(row)"></el-table-column>
        <el-table-column prop="taskStatus" label="任务状态" width="145" fixed>
          <template slot-scope="{ row }"><el-tag size="mini" :type="taskMeta(row.taskStatus).type">{{ taskMeta(row.taskStatus).text }}</el-tag></template>
        </el-table-column>
        <el-table-column prop="faultCode" label="故障编号" width="180" fixed></el-table-column>
        <el-table-column prop="xNo" label="X号" width="64"></el-table-column>
        <el-table-column prop="equipmentName" label="装备名称" min-width="210" show-overflow-tooltip></el-table-column>
        <el-table-column prop="xNo" label="rk_X号" width="64"></el-table-column>
        <el-table-column prop="equipmentName" label="设备名称" min-width="210" show-overflow-tooltip></el-table-column>
        <el-table-column prop="parentSystem" label="所属上级系统" min-width="120"></el-table-column>
        <el-table-column prop="engineeringNameDesc" label="工程名称及损坏情况" min-width="210" show-overflow-tooltip></el-table-column>
        <el-table-column prop="repairRequirement" label="修理技术要求" min-width="200" show-overflow-tooltip></el-table-column>
        <el-table-column prop="engineeringMajor" label="工程专业" width="100"></el-table-column>
        <el-table-column prop="teamMajor" label="T队专业" width="100"></el-table-column>
        <el-table-column prop="teamMajor" label="rk_T队专业" width="100"></el-table-column>
        <el-table-column prop="owner" label="负责人" width="90"></el-table-column>
        <el-table-column prop="reportUnit" label="上报单位" min-width="130"></el-table-column>
        <el-table-column prop="reportDate" label="上报日期" width="110" align="center"></el-table-column>
@@ -78,7 +78,7 @@
        <el-table-column label="是否自修" width="90" align="center">
          <template slot-scope="{ row }">{{ yesNo(row.isSelfRepair) }}</template>
        </el-table-column>
        <el-table-column label="是否涉H" width="90" align="center">
        <el-table-column label="是否涉rk_H" width="90" align="center">
          <template slot-scope="{ row }">{{ yesNo(row.isHRelated) }}</template>
        </el-table-column>
        <el-table-column label="监测项目" width="90" align="center">
@@ -109,14 +109,14 @@
          <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="rk_X号"><el-select v-model="form.xNo" filterable placeholder="请选择rk_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="rk_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-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-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>
@@ -129,7 +129,7 @@
          <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="是否涉rk_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>
@@ -171,7 +171,7 @@
      natures: ['一般', '重大'],
      form: {},
      rules: {
        equipmentName: [{ required: true, message: '请选择装备名称', trigger: 'change' }],
        equipmentName: [{ required: true, message: '请选择设备名称', trigger: 'change' }],
        engineeringNameDesc: [{ required: true, message: '请填写工程名称及损坏情况', trigger: 'blur' }]
      }
    }
@@ -212,18 +212,7 @@
      })
    },
    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'))
      })
      api.get('/system/tree/product/x-numbers').then(res => { this.xNumbers = res.data || [] })
    },
    queryParams() {
      const range = this.query.reportDateRange || []
@@ -282,7 +271,7 @@
        reportUnit: sessionStorage.getItem('deptName') || '',
        reportDate: today,
        xNo: '',
        owner: sessionStorage.getItem('realName') || 'T员',
        owner: sessionStorage.getItem('realName') || 'rk_T员',
        teamMajor: (this.teamMajors[0] || {}).name || '',
        engineeringMajor: (this.engineeringMajors[0] || {}).name || '',
        equipmentIds: '',
@@ -361,7 +350,7 @@
    exportCsv() {
      api.get('/faults', { params: this.queryParams() }).then(res => {
        const rows = res.data || []
        const headers = ['故障编号', 'X号', '装备名称', '任务状态', '工程名称及损坏情况', '上报单位', '上报日期']
        const headers = ['故障编号', 'rk_X号', '设备名称', '任务状态', '工程名称及损坏情况', '上报单位', '上报日期']
        const lines = [headers.join(',')].concat(rows.map(row => [
          row.faultCode, row.xNo, row.equipmentName, this.taskMeta(row.taskStatus).text,
          row.engineeringNameDesc, row.reportUnit, row.reportDate