xiangpei
2024-09-17 b32150d1fd576fa3b89e85e2f99be2edc67b9293
src/views/system/work-order/index.vue
@@ -1,17 +1,17 @@
<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
      <el-form-item label="工单号" prop="workOrderNo">
      <el-form-item label="关键词" prop="keyword">
        <el-input
          v-model="queryParams.workOrderNo"
          placeholder="请输入工单号"
          v-model="queryParams.keyword"
          placeholder="工单号/点位名称搜索"
          clearable
          @clear="handleQuery"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="故障类型" prop="errorTypeList">
        <el-select v-model="queryParams.errorTypeList" multiple placeholder="故障类型" clearable @clear="handleQuery">
        <el-select v-model="queryParams.errorTypeList" multiple @change="handleQuery" placeholder="故障类型" clearable @clear="handleQuery">
          <el-option v-for="dict in dict.type.error_type" :value="dict.value" :key="dict.value" :label="dict.label" />
        </el-select>
      </el-form-item>
@@ -88,7 +88,7 @@
                    <el-col :span="24" class="time">故障时间:{{ item.createTime }}</el-col>
                  </el-row>
                  <el-row class="work-order-item">
                    <el-col class="time" :span="24" style="display: flex;flex-direction: row"><div style="min-width: 66px">故障点位:</div><div style="word-break: break-word">{{ item.source }}</div></el-col>
                    <el-col class="time" :span="24"><div>故障点位:</div><div>{{ item.source }}</div></el-col>
                  </el-row>
                  <el-row style="position: absolute;bottom: 10px">
                    <el-button
@@ -107,7 +107,7 @@
                      v-hasPermi="['work:order:condition:add']"
                      v-show="item.status !== 'AUDITING_SUCCESS'"
                      @click="handleYwCondition(item)"
                    >运维情况
                    >处理上报
                    </el-button>
                    <el-button
                      class="my-button"
@@ -124,6 +124,14 @@
                      v-hasPermi="['system:report:add']"
                      v-show="item.status !== 'AUDITING_SUCCESS'"
                    >事后报备
                    </el-button>
                    <el-button
                      class="my-button"
                      size="mini"
                      type="text"
                      @click="handleDetail(item)"
                      v-hasPermi="['system:workorder:detail']"
                    >详情
                    </el-button>
                  </el-row>
                </div>
@@ -162,69 +170,73 @@
        <el-form-item label="报备类型">
          <el-input v-model="reportForm.reportType" disabled/>
        </el-form-item>
        <el-form-item label="故障类型" prop="errorType">
          <el-select v-model="reportForm.errorType">
            <el-option label="市政施工" value="市政施工"/>
            <el-option label="设备故障" value="设备故障"/>
            <el-option label="设备遗失" value="设备遗失"/>
        <el-form-item label="故障类型" prop="errorTypeList">
          <el-select v-model="reportForm.errorTypeList" multiple>
            <el-option v-for="dict in dict.type.report_error_type" :value="dict.value" :key="dict.value" :label="dict.label" />
          </el-select>
        </el-form-item>
        <el-form-item label="报备时间" prop="daterangeCreateTime">
          <el-date-picker v-model="reportForm.daterangeCreateTime" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"
                          range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="报备内容" prop="reportContent">
          <editor v-model="reportForm.reportContent" :min-height="192"/>
        </el-form-item>
        <el-form-item label="上报材料" prop="reportMaterials">
        <el-form-item label="报备材料" prop="reportMaterials">
          <file-upload v-model="reportForm.reportMaterials"/>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="reportOpen = false">取 消</el-button>
        <el-button type="primary" @click="submitReportForm">提 交</el-button>
        <el-button type="primary" @click="submitReportForm">提交审核</el-button>
      </div>
    </el-dialog>
    <el-dialog title="工单审核" :visible.sync="auditingOpen" width="1000px" append-to-body>
      <el-row :gutter="20">
        <el-col :span="10">
          <el-form ref="auditingForm" :model="auditingForm" :rules="auditingRules" label-width="80px">
            <el-form-item label="工单号" prop="workOrderNo">
              <el-input v-model="auditingForm.workOrderNo" disabled/>
            </el-form-item>
            <el-form-item label="运维单位" prop="unitName">
              <el-input v-model="auditingForm.unitName" disabled/>
            </el-form-item>
            <el-form-item label="审核结果" prop="auditingResult">
              <el-radio v-model="auditingForm.auditingResult" label="AUDITING_SUCCESS">通过</el-radio>
              <el-radio v-model="auditingForm.auditingResult" label="AUDITING_FAIL">驳回</el-radio>
            </el-form-item>
            <el-form-item label="审核备注" prop="auditingRemark">
              <el-input v-model="auditingForm.auditingRemark" type="textarea" maxlength="30" show-word-limit/>
            </el-form-item>
          </el-form>
        </el-col>
        <el-col :span="14" style="max-height: 500px; overflow-y: auto">
          <el-timeline v-if="ywConditions && ywConditions.length > 0">
            <el-timeline-item v-for="(condition, index) in ywConditions" :key="index"
                              :timestamp="condition.commitUserName + '___' + condition.createTime" placement="top"
            >
              <el-card>
                <div v-html="condition.ywCondition"></div>
                <el-link type="primary"
                         v-for="item in condition.ywProofMaterials != null ? condition.ywProofMaterials.split(',') : condition.ywProofMaterials"
                         :underline="false" :key="item.id" @click="handleDownload(item)"
                >{{ item.substring(item.lastIndexOf('/') + 1) }}
                </el-link>
              </el-card>
            </el-timeline-item>
          </el-timeline>
          <el-empty v-else description="没有处理记录"></el-empty>
        </el-col>
      </el-row>
    <WorkOrderAuditing :auditingOpen="auditingOpen" :dataForm="auditingForm" :ywConditions="ywConditions" @close="closeAuditing"/>
<!--    <el-dialog title="工单审核" :visible.sync="auditingOpen" width="1000px" append-to-body>-->
<!--      <el-row :gutter="20">-->
<!--        <el-col :span="10">-->
<!--          <el-form ref="auditingForm" :model="auditingForm" :rules="auditingRules" label-width="80px">-->
<!--            <el-form-item label="工单号" prop="workOrderNo">-->
<!--              <el-input v-model="auditingForm.workOrderNo" disabled/>-->
<!--            </el-form-item>-->
<!--            <el-form-item label="运维单位" prop="unitName">-->
<!--              <el-input v-model="auditingForm.unitName" disabled/>-->
<!--            </el-form-item>-->
<!--            <el-form-item label="审核结果" prop="auditingResult">-->
<!--              <el-radio v-model="auditingForm.auditingResult" label="AUDITING_SUCCESS">通过</el-radio>-->
<!--              <el-radio v-model="auditingForm.auditingResult" label="AUDITING_FAIL">驳回</el-radio>-->
<!--            </el-form-item>-->
<!--            <el-form-item label="审核备注" prop="auditingRemark">-->
<!--              <el-input v-model="auditingForm.auditingRemark" type="textarea" maxlength="30" show-word-limit/>-->
<!--            </el-form-item>-->
<!--          </el-form>-->
<!--        </el-col>-->
<!--        <el-col :span="14" style="max-height: 500px; overflow-y: auto">-->
<!--          <el-timeline v-if="ywConditions && ywConditions.length > 0">-->
<!--            <el-timeline-item v-for="(condition, index) in ywConditions" :key="index"-->
<!--                              :timestamp="condition.commitUserName + '___' + condition.createTime" placement="top"-->
<!--            >-->
<!--              <el-card>-->
<!--                <div v-html="condition.ywCondition"></div>-->
<!--                <el-link type="primary"-->
<!--                         v-for="item in condition.ywProofMaterials != null ? condition.ywProofMaterials.split(',') : condition.ywProofMaterials"-->
<!--                         :underline="false" :key="item.id" @click="handleDownload(item)"-->
<!--                >{{ item.substring(item.lastIndexOf('/') + 1) }}-->
<!--                </el-link>-->
<!--              </el-card>-->
<!--            </el-timeline-item>-->
<!--          </el-timeline>-->
<!--          <el-empty v-else description="没有处理记录"></el-empty>-->
<!--        </el-col>-->
<!--      </el-row>-->
      <div slot="footer" class="dialog-footer">
        <el-button @click="cancelAuditing">取 消</el-button>
        <el-button type="primary" @click="submitAuditing">审 核</el-button>
      </div>
    </el-dialog>
<!--      <div slot="footer" class="dialog-footer">-->
<!--        <el-button @click="cancelAuditing">取 消</el-button>-->
<!--        <el-button type="primary" @click="submitAuditing">审 核</el-button>-->
<!--      </div>-->
<!--    </el-dialog>-->
    <el-dialog title="运维情况记录" :visible.sync="ywConditionOpen" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="ywConditionRules" label-width="80px">
@@ -247,7 +259,7 @@
      </div>
    </el-dialog>
    <el-dialog title="运维批量审核" :visible.sync="batchAuditingVisible" width="500px" append-to-body>
    <el-dialog title="工单批量审核" :visible.sync="batchAuditingVisible" width="500px" append-to-body>
      <el-form ref="batchAuditingWorkOrder" :model="batchAuditingWorkOrder" label-width="80px"
               :rules="batchAuditingRules"
      >
@@ -271,7 +283,7 @@
    <el-dialog title="过程图" :visible.sync="flowOpen" width="1200px" append-to-body>
      <div>
        <el-steps :active="ywAuditingList.length != 0 ? 3 : ywHandleList.length != 0 ? 2 : 1" :space="500">
          <el-step title="产生工单">
          <el-step :title="getTitle1()">
            <template slot="description">
              <div>
                <div class="row flow-item-x">
@@ -297,7 +309,7 @@
              </div>
            </template>
          </el-step>
          <el-step title="运维处理">
          <el-step :title="getTitle2()">
            <template slot="description">
              <div style="max-height: 450px;overflow-y: scroll">
                <div v-for="(item, index) in ywHandleList" :key="index">
@@ -441,11 +453,12 @@
  process
} from '@/api/platform/work-order'
import { addReport } from '@/api/platform/report'
import WorkOrderAuditing from "@/components/WorkOrder/WorkOrderAuditing";
export default {
  name: 'Work-order',
  dicts: ['error_type'],
  components: {},
  dicts: ['error_type', 'report_error_type'],
  components: {WorkOrderAuditing},
  data() {
    return {
      drawer: false,
@@ -460,21 +473,32 @@
      },
      ywHandleList: [],
      ywAuditingList: [],
      beforeReportMsg: '',
      afterReportMsg: '',
      reportFormRules: {
        reportContent: [
          { required: true, message: '报备内容不能为空', trigger: 'blur' }
        ],
        reportMaterials: [
          { required: true, message: '上报材料不能为空', trigger: 'blur' }
        ]
          { required: true, message: '报备材料不能为空', trigger: 'blur' }
        ],
        errorTypeList: [
          { required: true, message: '请选择故障类型', trigger: 'change' }
        ],
        daterangeCreateTime: [
          { required: true, message: '请选择报备时间', trigger: 'change' }
        ],
      },
      reportOpen: false,
      reportForm: {
        reportType: '事后报备',
        pointId: '',
        errorType: '',
        errorTypeList: [],
        reportContent: '',
        reportMaterials: ''
        reportMaterials: '',
        daterangeCreateTime: [],
        beginCreateTime: null,
        endCreateTime: null
      },
      // 过程图
      flowOpen: false,
@@ -565,6 +589,15 @@
    this.getList()
  },
  methods: {
    closeAuditing() {
      this.auditingOpen = false
    },
    getTitle1() {
      return '产生工单' + (this.beforeReportMsg ? '(' + this.beforeReportMsg + ')' : '')
    },
    getTitle2() {
      return '运维处理' + (this.afterReportMsg ? '(' + this.afterReportMsg + ')' : '')
    },
    openDrawer(item) {
      this.ywData = {
        content: '',
@@ -596,6 +629,10 @@
    submitReportForm() {
      this.$refs['reportForm'].validate(valid => {
        if (valid) {
          if (this.reportForm.daterangeCreateTime && this.reportForm.daterangeCreateTime.length > 0) {
            this.reportForm.beginCreateTime = this.reportForm.daterangeCreateTime[0]
            this.reportForm.endCreateTime = this.reportForm.daterangeCreateTime[1]
          }
          addReport(this.reportForm).then(response => {
            this.$modal.msgSuccess('成功提交报备')
            this.reportOpen = false
@@ -604,9 +641,13 @@
        }
      })
    },
    // 详情
    handleDetail(item) {
      this.$router.push({name: '/work-order-center/maintenance/detail', query: {workOrderNo: item.workOrderNo}})
    },
    // 事后报备按钮
    handleReport(row) {
      this.reportForm.pointId = row.pointId
      this.reportForm.pointId = row.serialNumber
      this.reportForm.source = row.source
      this.reportOpen = true
    },
@@ -642,6 +683,8 @@
        if (response.data) {
          this.ywAuditingList = response.data.auditingList
          this.ywHandleList = response.data.ywList
          this.afterReportMsg = response.data.afterReportMsg
          this.beforeReportMsg = response.data.beforeReportMsg
          this.flowOpen = true
        }
      })
@@ -889,6 +932,9 @@
}
.work-order-item {
  margin-bottom: 5px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.time {