xiangpei
2024-04-02 2b4676a151c6872025619422fc72dd4b8a58a83c
src/views/system/work-order/index.vue
@@ -1,19 +1,22 @@
<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
      <el-form-item label="工单号" prop="workOrderNo">
        <el-input
          v-model="queryParams.workOrderNo"
          placeholder="请输入工单号"
          clearable
          @clear="handleQuery"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="运维处理时间">
        <el-date-picker
          clearable
          @clear="handleQuery"
          v-model="daterangeYwHandleTime"
          style="width: 240px"
          value-format="yyyy-MM-dd"
          value-format="yyyy-MM-dd HH:mm:ss"
          type="daterange"
          range-separator="-"
          start-placeholder="开始日期"
@@ -26,89 +29,61 @@
      </el-form-item>
    </el-form>
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['x:work-order:add']"
        >新增</el-button>
    <el-row>
      <el-col :span="8" v-for="item in workOrderList" :key="item" style="width: 390px;margin-left: 40px;margin-top:20px;">
        <el-card :body-style="{ padding: '0px' }">
          <el-image :preview-src-list="['https://img2.baidu.com/it/u=68398439,1553004927&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=357']" fit="cover" src="https://img2.baidu.com/it/u=68398439,1553004927&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=357" class="image"/>
          <div style="padding-right: 10px;padding-top: 10px;float: right;">
            <el-row>
              <el-col class="time" :span="24">运维人员:{{ item.ywPeopleName }}</el-col>
            </el-row>
            <el-row style="margin-top: 5px">
              <el-col class="time" :span="24">运维单位:{{ item.unitName }}</el-col>
            </el-row>
            <el-row style="margin-top: 5px">
              <el-col :span="24" class="time">工单编号:{{ item.workOrderNo }}</el-col>
            </el-row>
            <el-row style="margin-top: 5px">
              <el-col :span="24" class="time">处理时间:{{ item.ywHandleTime }}</el-col>
            </el-row>
            <el-row>
              <el-button
                size="mini"
                type="text"
                @click="handleAuditing(item)"
                v-hasPermi="['work:order:audit']"
              >审核</el-button>
              <el-button
                size="mini"
                type="text"
                @click="handleYwCondition(item)"
              >运维情况</el-button>
              <!--          <el-button-->
              <!--            size="mini"-->
              <!--            type="text"-->
              <!--            @click="handleYwResult(scope.row)"-->
              <!--          >运维结果</el-button>-->
<!--              <el-button-->
<!--                size="mini"-->
<!--                type="text"-->
<!--                @click="handleCheckResult(item)"-->
<!--                v-hasPermi="['work:order:result']"-->
<!--              >检测结果</el-button>-->
              <el-button
                size="mini"
                type="text"
                @click="handleFlow(item)"
              >过程图</el-button>
              <el-button
                size="mini"
                type="text"
                @click="handleReport(item)"
              >事后报备</el-button>
            </el-row>
          </div>
        </el-card>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="success"
          plain
          icon="el-icon-edit"
          size="mini"
          :disabled="single"
          @click="handleUpdate"
          v-hasPermi="['x:work-order:edit']"
        >修改</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['x:work-order:remove']"
        >删除</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          v-hasPermi="['x:work-order:export']"
        >导出</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
    <el-table v-loading="loading" :data="workOrderList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="工单号" align="center" prop="workOrderNo" />
      <el-table-column label="运维单位" align="center" prop="unitId" />
      <el-table-column label="运维人员" align="center" prop="ywPeopleId" />
      <el-table-column label="运维处理时间" align="center" prop="ywHandleTime" width="180">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.ywHandleTime, '{y}-{m}-{d}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="运维结果" align="center" prop="ywResult" />
      <el-table-column label="运维情况" align="center" prop="ywCondition" />
      <el-table-column label="运维检测结果" align="center" prop="ywCheckResult" />
      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-hasPermi="['x:work-order:edit']"
          >修改</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['x:work-order:remove']"
          >删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <pagination
      v-show="total>0"
@@ -118,8 +93,154 @@
      @pagination="getList"
    />
    <!-- 事后报备 -->
    <el-dialog title="事后报备" :visible.sync="reportOpen" width="600px" append-to-body>
      <el-form ref="reportForm" :model="reportForm" :rules="reportFormRules" label-width="80px">
        <el-form-item label="点位" prop="pointId">
          <el-input v-model="reportForm.pointId" disabled />
        </el-form-item>
        <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-select>
        </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">
          <file-upload v-model="reportForm.reportMaterials"/>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitReportForm">提 交</el-button>
        <el-button @click="reportOpen = false">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog title="工单审核" :visible.sync="auditingOpen" width="500px" append-to-body>
      <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="ywPeopleName">
          <el-input v-model="auditingForm.ywPeopleName" disabled />
        </el-form-item>
        <el-form-item label="审核结果" prop="auditingResult">
          <el-radio v-model="auditingForm.auditingResult" label="pass">通过</el-radio>
          <el-radio v-model="auditingForm.auditingResult" label="return">驳回</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>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitAuditing">确 定</el-button>
        <el-button @click="cancelAuditing">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog title="运维情况记录" :visible.sync="ywConditionOpen" width="500px" append-to-body>
      <el-form ref="ywConditionForm" :model="ywConditionForm" :rules="ywConditionRules" label-width="80px">
        <el-form-item label="工单号" prop="workOrderNo">
          <el-input v-model="ywConditionForm.workOrderNo" disabled  />
        </el-form-item>
        <el-form-item label="运维单位" prop="unitName">
          <el-input v-model="ywConditionForm.unitName" disabled  />
        </el-form-item>
        <el-form-item label="运维人员" prop="ywPeopleName">
          <el-input v-model="ywConditionForm.ywPeopleName" disabled />
        </el-form-item>
        <el-form-item label="现场图片" prop="picture">
          <el-upload
            class="avatar-uploader"
            action="/dev-api/common/upload"
            name="file"
            :headers="{'Authorization': 'Bearer ' + getToken()}"
            :on-success="pictureUploadSuccess"
            :on-remove="pictureRemove"
            :file-list="pictureList"
            list-type="picture">
            <el-button size="small" type="primary">点击上传</el-button>
            <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
          </el-upload>
        </el-form-item>
        <el-form-item label="佐证材料" prop="certificates">
          <el-upload
            class="avatar-uploader"
            action="/dev-api/common/upload"
            name="file"
            :headers="{'Authorization': 'Bearer ' + getToken()}"
            :on-success="certificateUploadSuccess"
            :on-remove="certificateRemove"
            :file-list="certificateList"
            list-type="picture">
            <el-button size="small" type="primary">点击上传</el-button>
            <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
          </el-upload>
        </el-form-item>
        <el-form-item label="运维情况" prop="ywCondition">
          <el-input v-model="ywConditionForm.ywCondition" type="textarea" maxlength="150" show-word-limit/>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitYwCondition">确 定</el-button>
        <el-button @click="cancelYwCondition">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog title="运维结果记录" :visible.sync="ywResultOpen" width="500px" append-to-body>
      <el-form ref="ywResultForm" :model="ywResultForm" :rules="ywResultRules" label-width="80px">
        <el-form-item label="工单号" prop="workOrderNo">
          <el-input v-model="ywResultForm.workOrderNo" disabled  />
        </el-form-item>
        <el-form-item label="运维单位" prop="unitName">
          <el-input v-model="ywResultForm.unitName" disabled  />
        </el-form-item>
        <el-form-item label="运维人员" prop="ywPeopleName">
          <el-input v-model="ywResultForm.ywPeopleName" disabled />
        </el-form-item>
        <el-form-item label="运维结果" prop="ywResult">
          <el-input v-model="ywResultForm.ywResult" type="textarea" maxlength="150" show-word-limit/>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitYwResult">确 定</el-button>
        <el-button @click="cancelYwResult">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog title="运维检测结果" :visible.sync="checkResultOpen" width="550px" append-to-body>
      <el-form ref="ywResultForm" :model="checkResultForm" :rules="checkResultRules" label-width="120px">
        <el-form-item label="工单号" prop="workOrderNo">
          <el-input v-model="checkResultForm.workOrderNo" disabled  />
        </el-form-item>
        <el-form-item label="运维单位" prop="unitName">
          <el-input v-model="checkResultForm.unitName" disabled  />
        </el-form-item>
        <el-form-item label="运维人员" prop="ywPeopleName">
          <el-input v-model="checkResultForm.ywPeopleName" disabled />
        </el-form-item>
        <el-form-item label="运维检测结果" prop="ywCheckResult">
          <file-upload v-model="checkResultForm.ywCheckResult"/>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitYwResult">确 定</el-button>
        <el-button @click="cancelCheckResult">取 消</el-button>
      </div>
    </el-dialog>
    <!-- 添加或修改运维工单对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
    <el-dialog :title="title" :visible.sync="open" width="550px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="工单号" prop="workOrderNo">
          <el-input v-model="form.workOrderNo" placeholder="请输入工单号" />
@@ -144,16 +265,168 @@
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
    <!-- 过程图 -->
    <el-dialog title="过程图" :visible.sync="flowOpen" width="1200px" :close-on-click-modal="false" append-to-body>
      <div>
        <el-steps :active="2" :space="500">
          <el-step title="产生工单">
            <template slot="description">
              <div>
                <div class="flow-item-x">
                  工单来源:<el-tag type="danger" size="small">{{flowForm.source}}</el-tag>
                </div>
                <div class="flow-item-x">
                  故障类型:{{flowForm.errorType}}
                </div>
                <div class="flow-item-x">
                  运维单位:{{flowForm.unitName}}
                </div>
                <div class="flow-item-x">
                  创建时间:{{flowForm.createTime}}
                </div>
                <div class="flow-item-x">
                  处理期限:<el-tag type="danger" size="small">12小时</el-tag>
                </div>
              </div>
            </template>
          </el-step>
          <el-step title="运维处理">
            <template slot="description">
              <div class="y-item">
                <div class="y-item-1">
                  <div class="flow-item-x">
                    运维状态:<el-tag type="danger" size="small">结果上报</el-tag>
                  </div>
                  <div class="flow-item-x">
                    运维人员:<el-tag type="danger" size="small">{{flowForm.ywPeopleName}}</el-tag>
                  </div>
                </div>
                <div class="y-item-2">
                  <div >
                    {{flowForm.ywHandleTime}}
                  </div>
                  <div >
                    第几次:1
                  </div>
                </div>
              </div>
              <div class="y-item">
                <div class="y-item-1">
                  <div class="flow-item-x">
                    运维状态:<el-tag type="danger" size="small">结果上报</el-tag>
                  </div>
                  <div class="flow-item-x">
                    运维人员:<el-tag type="danger" size="small">{{flowForm.ywPeopleName}}</el-tag>
                  </div>
                </div>
                <div class="y-item-2">
                  <div >
                    {{flowForm.ywHandleTime}}
                  </div>
                  <div >
                    第几次:2
                  </div>
                </div>
              </div>
            </template>
          </el-step>
          <el-step title="结果审核">
            <template slot="description">
              <div class="y-item">
                <div class="y-item-1">
                  <div class="flow-item-x">
                    审核结果:<el-tag type="danger" size="small">驳回</el-tag>
                  </div>
                  <div class="flow-item-x">
                    审核说明:<el-tag type="danger" size="small">未成功处理</el-tag>
                  </div>
                </div>
                <div class="y-item-2">
                  <div >
                    {{flowForm.ywHandleTime}}
                  </div>
                  <div >
                    第几次:1
                  </div>
                </div>
              </div>
              <div class="y-item">
                <div class="y-item-1">
                  <div class="flow-item-x">
                    审核状态:<el-tag type="info" size="small">审核中</el-tag>
                  </div>
                  <div class="flow-item-x">
                    审核说明:
                  </div>
                </div>
                <div class="y-item-2">
                  <div >
                    {{flowForm.ywHandleTime}}
                  </div>
                  <div >
                    第几次:2
                  </div>
                </div>
              </div>
            </template>
          </el-step>
        </el-steps>
      </div>
    </el-dialog>
  </div>
</template>
<style scoped>
.flow-item-x {
  margin: 5px 0;
}
.y-item {
  margin-bottom: 8px;
  padding: 0 3px;
  background-color: #d9d9d9;
  display: flex;
  flex-direction: row;
  align-items: center
}
.y-item-2 {
  flex: 1;
}
.y-item-1 {
  flex: 2;
}
</style>
<script>
import { listWorkOrder, getWorkOrder, delWorkOrder, addWorkOrder, updateWorkOrder } from "@/api/platform/work-order";
import { listWorkOrder, getWorkOrder, delWorkOrder, addWorkOrder, updateWorkOrder,auditing, ywCondition } from "@/api/platform/work-order";
export default {
  name: "Work-order",
  components: {
  },
  data() {
    return {
      reportFormRules: {
        reportContent: [
          { required: true, message: "报备内容不能为空", trigger: "blur" }
        ],
        reportMaterials: [
          { required: true, message: "上报材料不能为空", trigger: "blur" }
        ],
      },
      reportOpen: false,
      reportForm: {
        reportType: "事后报备",
        pointId: "琼于镇3街1号摄像头",
        errorType: "",
        reportContent: "",
        reportMaterials: ""
      },
      // 过程图
      flowOpen: false,
      flowForm: {},
      certificateList:[],
      pictureList: [],
      // 遮罩层
      loading: true,
      // 选中数组
@@ -187,31 +460,177 @@
      },
      // 表单参数
      form: {},
      // 表单校验
      rules: {
        workOrderNo: [
          { required: true, message: "工单号不能为空", trigger: "blur" }
      // 审核表单
      auditingForm: {},
      auditingOpen: false,
      // 运维情况表单
      ywConditionForm: {},
      ywConditionOpen: false,
      // 运维结果表单
      ywResultForm: {
      },
      ywResultOpen: false,
      // 运维检测结果
      checkResultForm: {
      },
      checkResultOpen: false,
      // 审核表单校验
      auditingRules: {
        auditingResult: [
          { required: true, message: "审核结果不能为空", trigger: "blur" }
        ],
        unitId: [
          { required: true, message: "运维单位不能为空", trigger: "change" }
      },
      // 运维情况校验
      ywConditionRules: {
        ywCondition: [
          { required: true, message: "运维情况不能为空", trigger: "blur" }
        ],
      }
      },
      // 运维结果校验
      ywResultRules: {
        ywResult: [
          { required: true, message: "运维结果不能为空", trigger: "blur" }
        ],
      },
      // 运维检测结果校验
      checkResultRules: {
        ywCheckResult: [
          { required: true, message: "运维检测结果不能为空", trigger: "blur" }
        ],
      },
    };
  },
  created() {
    this.getList();
  },
  methods: {
    // 报备
    submitReportForm() {
      this.$refs["reportForm"].validate(valid => {
        if (valid) {
          addReport(this.form).then(response => {
            this.$modal.msgSuccess("成功提交报备");
            this.open = false;
            this.getList();
          });
        }
      });
    },
    // 事后报备按钮
    handleReport(row) {
      this.reportForm.pointId = row.source;
      this.reportOpen = true;
    },
    // 审核按钮
    handleAuditing(row) {
      this.auditingForm = row;
      this.auditingOpen = true;
    },
    // 运维情况按钮
    handleYwCondition(row) {
      this.ywConditionForm = row;
      this.ywConditionOpen = true;
    },
    // 运维结果按钮
    handleYwResult(row) {
      this.ywResultForm = row;
      this.ywResultOpen = true;
    },
    // 运维检测结果按钮
    handleCheckResult(row) {
      this.checkResultForm = row;
      this.checkResultOpen = true;
    },
    // 过程图查看
    handleFlow(row) {
      this.flowOpen = true;
      this.flowForm = row;
    },
    // 提交审核
    submitAuditing() {
      this.$refs["auditingForm"].validate(valid => {
        if (valid) {
          auditing(this.auditingForm).then(res => {
            this.auditingOpen = false;
            this.$modal.msgSuccess("操作成功");
          })
        }
      })
    },
    // 取消审核
    cancelAuditing() {
      this.auditingForm = {};
      this.auditingOpen = false;
    },
    pictureRemove(file, fileList) {
      this.form.picture = null,
        this.pictureList = this.pictureList.filter(item => item.name !== file.name)
    },
    certificateRemove(file, fileList) {
      this.form.certificate = null,
        this.certificateList = this.certificateList.filter(item => item.name !== file.name)
    },
    pictureUploadSuccess(response, file, fileList) {
      this.form.picture = response.fileName,
        this.pictureList.push({
          name: response.originalFilename,
          url: response.url,
          fileName: response.fileName
        })
    },
    certificateUploadSuccess(response, file, fileList) {
      this.form.certificate = response.fileName,
        this.certificateList.push({
          name: response.originalFilename,
          url: response.url,
          fileName: response.fileName
        })
    },
    // 提交运维情况
    submitYwCondition() {
      this.$refs["ywConditionForm"].validate(valid => {
        if (valid) {
          ywCondition(this.ywConditionForm).then(res => {
            this.ywConditionOpen = false;
            this.$modal.msgSuccess("操作成功");
          })
        }
      })
    },
    cancelYwCondition() {
      this.ywConditionForm = {};
      this.ywConditionOpen = false;
    },
    // 提交运维结果
    submitYwResult() {
      // todo
    },
    cancelYwResult() {
      this.ywResultForm = {};
      this.ywResultOpen = false;
    },
    // 提交检测结果
    submitCheckResult() {
      // todo
    },
    cancelCheckResult() {
      this.checkResultForm = {};
      this.checkResultOpen = false;
    },
    /** 查询运维工单列表 */
    getList() {
      this.loading = true;
      this.queryParams.params = {};
      if (null != this.daterangeYwHandleTime && '' != this.daterangeYwHandleTime) {
        this.queryParams.params["beginYwHandleTime"] = this.daterangeYwHandleTime[0];
        this.queryParams.params["endYwHandleTime"] = this.daterangeYwHandleTime[1];
        this.queryParams["start"] = this.daterangeYwHandleTime[0];
        this.queryParams["end"] = this.daterangeYwHandleTime[1];
      }
      listWorkOrder(this.queryParams).then(response => {
        this.workOrderList = response.rows;
        this.workOrderList = response.data;
        this.total = response.total;
        this.loading = false;
      });
@@ -269,6 +688,20 @@
        this.form = response.data;
        this.open = true;
        this.title = "修改运维工单";
        this.pictureList = JSON.parse(response.data.picture).map(item => {
          return {
            name: item,
            url: process.env.VUE_APP_FILE_API + '/' + item,
            fileName: item
          }
        })
        this.certificateList = JSON.parse(row.certificate).map(item => {
          return {
            name: item,
            url: process.env.VUE_APP_FILE_API + '/' + item,
            fileName: item
          }
        })
      });
    },
    /** 提交按钮 */
@@ -310,3 +743,17 @@
  }
};
</script>
<style scoped>
.time {
  font-size: 13px;
  color: #999;
}
.image {
  width: 125px;
  height: 125px;
  padding: 10px;
}
</style>