408249787 2 years ago
parent
commit
437a264eb5

+ 32 - 0
src/api/hidden/hidden-danger.js

@@ -125,3 +125,35 @@ export function exportHiddenDanger (parameter) {
     responseType: 'blob'
   })
 }
+/**
+ * export file
+ * parameter: { }
+ * @param parameter :
+  * @returns {*}
+ */
+export function getDangersUser (parameter) {
+  return axios({
+    url: '/hidden/dangers/users/' + parameter,
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+/**
+ * add func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function transferRepair (parameter) {
+  return axios({
+    url: '/hidden/dangers/transfer/repair	',
+    method: 'POST',
+    headers: {
+      'Accept': 'application/json',
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    data: parameter
+  })
+}

+ 16 - 2
src/views/hidden/hidden/HiddenDanger.vue

@@ -67,6 +67,10 @@
         <span slot="action" slot-scope="record">
           <template>
             <a @click="handleView(record)">查看</a>
+            <operation-button
+              v-if="$auth('hidden-hiddens-edit')"
+              @click="handleRepair(record)"
+            >转维修</operation-button>
             <operation-button
               v-if="$auth('hidden-hiddens-edit')"
               @click="handleEdit(record)"
@@ -82,6 +86,7 @@
     </div>
     <base-form ref="baseModal" @ok="handleOk" />
     <detail ref="detailModal" @ok="handleOk" />
+    <RepairBaseForm ref="repairBaseForm" @ok="handleOk" />
   </a-card>
 </template>
 
@@ -89,7 +94,9 @@
 import { STable, Ellipsis } from '@/components'
 import BaseForm from './modules/BaseForm'
 import Detail from './modules/Detail'
-import { getHiddenDangerPage, deleteHiddenDangers, fetchHiddenDanger, exportHiddenDanger } from '@/api/hidden/hidden-danger'
+import RepairBaseForm from './modules/RepairBaseForm'
+
+import { getHiddenDangerPage, deleteHiddenDangers, fetchHiddenDanger, exportHiddenDanger, transferRepair } from '@/api/hidden/hidden-danger'
 
 export default {
   name: 'HiddenDanger',
@@ -97,7 +104,8 @@ export default {
     STable,
     Ellipsis,
     BaseForm,
-    Detail
+    Detail,
+    RepairBaseForm
   },
   data () {
     return {
@@ -296,6 +304,12 @@ export default {
         modal.base(res.data)
       })
     },
+    handleRepair (record) {
+      fetchHiddenDanger({ id: record.id }).then(res => {
+        const modal = this.$refs.repairBaseForm
+        modal.base(res.data)
+      })
+    },
     handleView (record) {
       this.visible = false
       fetchHiddenDanger({ id: record.id }).then(res => {

+ 26 - 5
src/views/hidden/hidden/modules/BaseForm.vue

@@ -64,8 +64,14 @@
             :labelCol="BaseTool.Constant.labelCol"
             :wrapperCol="BaseTool.Constant.wrapperCol"
           >
-            <a-input
-              v-decorator="['dutyUser', {rules: [{required: true, message: '整改责任人不能为空'}]}]" />
+            <a-select v-decorator="['dutyUser', {rules: [{required: true, message: '整改责任人不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="{userId,realName} in dutyUsers"
+                :key="userId"
+                :label="realName"
+                :value="userId">{{ realName }}
+              </a-select-option>
+            </a-select>
           </a-form-item>
         </row-item>
         <row-item>
@@ -75,8 +81,14 @@
             :labelCol="BaseTool.Constant.labelCol"
             :wrapperCol="BaseTool.Constant.wrapperCol"
           >
-            <a-input
-              v-decorator="['areaUser', {rules: [{required: true, message: '属地负责人不能为空'}]}]" />
+            <a-select v-decorator="['areaUser', {rules: [{required: true, message: '属地负责人不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="{userId,realName} in areaUsers"
+                :key="userId"
+                :label="realName"
+                :value="userId">{{ realName }}
+              </a-select-option>
+            </a-select>
           </a-form-item>
         </row-item>
         <row-item>
@@ -227,7 +239,7 @@
 
 <script>
 import pick from 'lodash.pick'
-import { addHiddenDanger, updateHiddenDanger } from '@/api/hidden/hidden-danger'
+import { addHiddenDanger, updateHiddenDanger, getDangersUser } from '@/api/hidden/hidden-danger'
 import { getSbPositions } from '@/api/repair/application-form'
 import SbInfoSelectModal from '@/views/sb/info/modules/SbInfoSelectModal'
 import { uploadUrl } from '@/api/upms/file'
@@ -248,6 +260,8 @@ export default {
       // 下拉框map
       professorTypeMap: {},
       checkLevelMap: {},
+      dutyUsers: [],
+      areaUsers: [],
       headers: {
         Authorization: 'Bearer ' + Vue.ls.get(ACCESS_TOKEN)
       },
@@ -343,6 +357,13 @@ export default {
           return item
         })
       })
+      getDangersUser('HIDDEN_DANGER_AREA_USER').then(res => {
+        this.areaUsers = res.data
+        console.log(res)
+      })
+      getDangersUser('HIDDEN_DANGER_DUTY_USER').then(res => {
+        this.dutyUsers = res.data
+      })
     },
     loadData (selectedOptions) {
       console.log(selectedOptions)

+ 754 - 0
src/views/hidden/hidden/modules/RepairBaseForm.vue

@@ -0,0 +1,754 @@
+<template>
+  <a-modal
+    :title="modalTitle"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    class="ant-modal2"
+    @cancel="handleCancel"
+  >
+    <a-form :form="form">
+
+      <a-form-item v-show="false" >
+        <a-input v-decorator="['id']" type="hidden"/>
+        <a-input v-decorator="['sbId']" type="hidden"/>
+        <a-input v-decorator="['partId']" type="hidden"/>
+      </a-form-item>
+
+      <row-list :col="2">
+        <row-item>
+          <a-form-item
+            label="设备名称"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              style="width: 70%"
+              disabled
+              v-decorator="['sbName', {rules: [{required: true, message: '设备名称不能为空'}]}]" />
+            <a-button style="width: 30%" type="primary" @click="handleSbSelect">选择</a-button>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="机电仪位号"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input v-decorator="['parentSbNo']" />
+          </a-form-item>
+        </row-item>
+        <!--        <row-item>
+          <a-form-item
+            label="设备部位"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              style="width: 70%"
+              disabled
+              v-decorator="['partName']" />
+            <a-button style="width: 30%" type="primary" @click="handlePartSelect">选择</a-button>
+          </a-form-item>
+        </row-item>-->
+        <!-- <row-item>
+          <a-form-item
+            label="委托单位"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select v-decorator="['trustDept', {rules: [{required: true, message: '委托单位不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in trustMap"
+                :key="value"
+                :label="label"
+                :value="value">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item> -->
+        <row-item>
+          <a-form-item
+            label="维修部门"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select v-decorator="['repairDeptId', {rules: [{required: true, message: '维修部门不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in repairDeptMap"
+                :key="value"
+                :label="label"
+                :value="value">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="维修专业"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-tree-select
+              tree-checkable
+              :show-checked-strategy="SHOW_PARENT"
+              v-decorator="['repairProfessor', {initialValue: [1], rules: [{required: true, message: '检修专业不能为空'}]}]"
+              placeholder="请选择">
+              <a-tree-select-node
+                v-for="(label,value) in professorMap"
+                :key="value"
+                :title="label"
+                :value="parseInt(value)">{{ label }}
+              </a-tree-select-node>
+            </a-tree-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="生产装置"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-cascader
+              :options="sbPositionList"
+              :load-data="loadData"
+              placeholder="请选择"
+              change-on-select
+              v-decorator="['sbPosition', {rules: [{required: true, message: '生产装置不能为空'}]}]"
+            />
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="特殊作业类型"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-tree-select
+              tree-checkable
+              :show-checked-strategy="SHOW_PARENT"
+              v-decorator="['repairType', {rules: [{required: true, message: '工作类型不能为空'}]}]"
+              placeholder="请选择">
+              <a-tree-select-node
+                v-for="(label,value) in repairTypeMap"
+                :key="value"
+                :title="label"
+                :value="parseInt(value)">{{ label }}
+              </a-tree-select-node>
+            </a-tree-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="车间具体位置"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              placeholder="比如:甲七车间北侧"
+              v-decorator="['sbCph']" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="工单类别"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select @change="changePlanFlag" v-decorator="['category', {initialValue: 2, rules: [{required: true, message: '工单类别不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in categoryMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="是否停机"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select v-decorator="['needStop', {rules: [{required: true, message: '是否停机不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in needStopMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <row-item v-if="category === 1">
+          <a-form-item
+            label="计划性维修级别"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select v-decorator="['repairPlanLevel', {rules: [{required: true, message: '计划性维修级别不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="value in ['大','中','小']"
+                :key="value"
+                :label="value"
+                :value="value">{{ value }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <row-item v-if="category === 1">
+          <a-form-item
+            label="审批人"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select v-decorator="['dispatchUserId', {rules: [{required: true, message: '审批人不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="({realName,userId}) in dispatchUserList"
+                :key="userId"
+                :label="realName"
+                :value="userId">{{ realName }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <!-- <row-item v-show="category === 1">
+          <a-form-item
+            label="要求日期"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-date-picker
+              style="width: 100%"
+              :format="BaseTool.Date.PICKER_NORM_DATE_PATTERN"
+              v-decorator="['limitDate']" />
+          </a-form-item>
+        </row-item> -->
+        <!-- <row-item v-show="category === 2">
+          <a-form-item
+            label="要求时间"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              style="width: 100%"
+              suffix="小时"
+              v-decorator="['limitHours', {rules: [{required: true, message: '要求时间不能为空'}]}]" />
+          </a-form-item>
+        </row-item> -->
+        <row-item>
+          <a-form-item
+            label="计划开始时间"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-date-picker
+              style="width: 100%"
+              show-time
+              :format="BaseTool.Date.PICKER_NORM_DATETIME_PATTERN"
+              v-decorator="['planStartTime', {rules: [{required: true, message: '计划开始时间不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="计划结束时间"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-date-picker
+              style="width: 100%"
+              show-time
+              :format="BaseTool.Date.PICKER_NORM_DATETIME_PATTERN"
+              v-decorator="['planEndTime', {rules: [{required: true, message: '计划结束时间不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item v-if="category !== 1">
+          <a-form-item
+            label="工作优选权"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select v-decorator="['level', {initialValue: 1, rules: [{required: true, message: '工作优选权不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in levelMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="报修人"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              disabled="disabled"
+              v-decorator="['actualUser', {initialValue: userInfo.realName, rules: [{required: true, message: '报修人不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+        <!--        <row-item>
+          <a-form-item
+            label="紧急等级"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select v-decorator="['level', {initialValue: 1, rules: [{required: true, message: '紧急等级不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in levelMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="异常类别"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-tree-select
+              style="width: 100%"
+              :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
+              :treeData="treeData"
+              :treeNodeFilterProp="'title'"
+              :showSearch="true"
+              v-decorator="['repairErrorTypeId']"
+              placeholder="请选择"
+            >
+            </a-tree-select>
+          </a-form-item>
+        </row-item>-->
+        <row-item>
+          <a-form-item
+            label="报修图片"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-upload
+              :action="uploadUrl"
+              :multiple="true"
+              list-type="picture"
+              :file-list="this.defaultApplicationFileList"
+              @change="handleApplicationFileChange"
+              accept="image/*"
+              :headers="headers"
+            >
+              <a-button> <a-icon type="upload" /> 上传图片 </a-button>
+            </a-upload>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="资料文件"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-upload
+              :action="uploadUrl"
+              :multiple="true"
+              :file-list="defaultCheckFileList"
+              @change="handleCheckFileChange"
+              :headers="headers"
+            >
+              <a-button> <a-icon type="upload" /> 上传 </a-button>
+            </a-upload>
+          </a-form-item>
+        </row-item>
+        <row-item v-show="refusedFlag">
+          <a-form-item
+            label="驳回原因"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              disabled="disabled"
+              v-decorator="['remark']"/>
+          </a-form-item>
+        </row-item>
+      </row-list>
+
+      <row-list :col="1">
+        <row-item v-if="false">
+          <a-form-item
+            label="报修状态"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select disabled v-decorator="['status', {initialValue: DictCache.VALUE.REPAIR_APPLICATION_FORM_STATUS.NOT_ALLOCATED,rules: [{required: true, message: '报修状态不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in statusMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+
+        <!--        <row-item>
+          <a-form-item
+            label="故障描述"
+            :labelCol="BaseTool.Constant.labelCol2"
+            :wrapperCol="BaseTool.Constant.wrapperCol2"
+          >
+            <a-select v-decorator="['content']" placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in questionMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>-->
+        <row-item>
+          <a-form-item
+            label="委托内容描述"
+            :labelCol="BaseTool.Constant.labelCol2"
+            :wrapperCol="BaseTool.Constant.wrapperCol2"
+          >
+            <a-textarea
+              :rows="4"
+              v-decorator="['content', {rules: [{required: true, message: '委托内容描述不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+      </row-list>
+    </a-form>
+    <template slot="footer">
+      <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
+    </template>
+    <sb-info-select-modal ref="sbInfoSelectModal" @selected="handleSbSelectd"/>
+    <part-info-select-modal ref="partInfoSelectModal" @selected="handlePartSelected"/>
+  </a-modal>
+</template>
+
+<script>
+import pick from 'lodash.pick'
+import BaseTool from '../../../../utils/tool'
+import { addRepairApplicationForm, updateRepairApplicationForm, getSbPositions, getDispatchUser } from '@/api/repair/application-form'
+import PartInfoSelectModal from '@/views/part/info/modules/PartInfoSelectModal'
+import SbInfoSelectModal from '@/views/sb/info/modules/SbInfoSelectModal'
+import { queryUser } from '@/api/upms/user'
+import { uploadUrl } from '@/api/upms/file'
+import Vue from 'vue'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import { fetchErrorTypeTree } from '@/api/repair/errortype'
+import { TreeSelect } from 'ant-design-vue'
+const SHOW_PARENT = TreeSelect.SHOW_PARENT
+export default {
+  name: 'BaseRepairApplicationForm',
+  data () {
+    return {
+      SHOW_PARENT,
+      confirmLoading: false,
+      modalTitle: null,
+      professorMap: {},
+      repairTypeMap: {},
+      sbPositionList: [],
+      form: this.$form.createForm(this),
+      visible: false,
+      sbId: null,
+      // 下拉框map
+      sourceMap: {},
+      levelMap: {},
+      questionMap: {},
+      dispatchUserList: {},
+      treeData: [],
+      needStop: null,
+      needStopMap: {},
+      category: 0,
+      categoryMap: {},
+      trustMap: {},
+      statusMap: {},
+      userInfo: this.$store.getters.userInfo,
+      userList: [],
+      uploadUrl: uploadUrl,
+      defaultRepairFileList: [],
+      defaultApplicationFileList: [],
+      defaultCheckFileList: [],
+      applicationFileList: [], // 报修图片
+      reportFileList: [], // 审核图片
+      repairFileList: [], // 维修图片,
+      repairDeptMap: {},
+      refusedFlag: false,
+      headers: {
+        Authorization: 'Bearer ' + Vue.ls.get(ACCESS_TOKEN)
+      }
+    }
+  },
+  components: {
+    SbInfoSelectModal,
+    PartInfoSelectModal
+  },
+  props: {
+  },
+  created () {
+    // 下拉框map
+    this.sourceMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_FORM_SOURCE)
+    // this.levelMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_FORM_LEVEL)
+    this.statusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_FORM_STATUS)
+    this.questionMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_QUESTION)
+    this.needStopMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.YES_NO)
+    this.levelMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.LEVEL_TYPE)
+    this.categoryMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_FORM_CATEGORY)
+    this.trustMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.TRUST_DEPT_TYPE)
+    console.log(this.categoryMap)
+    this.repairDeptMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_DEPT_CATEGORY)
+    this.repairTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_TYPE)
+    this.professorMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_PROFESSOR)
+    this.getUsers()
+    this.getSbPositions()
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      this.refusedFlag = false
+      fetchErrorTypeTree().then(res => {
+        this.treeData = res.data
+      })
+      // 如果是空标识添加
+      if (this.BaseTool.Object.isBlank(record)) {
+        this.modalTitle = '报修'
+        if (!this.BaseTool.Object.isBlank(record) && !this.BaseTool.Object.isBlank(record.sbId)) {
+          const { form: { setFieldsValue } } = this
+          this.$nextTick(() => {
+            setFieldsValue(Object.assign({
+              'id': record.id,
+              'sbId': record.sbId,
+              'sbName': record.name,
+              'positionNo': record.positionNo
+            }))
+          })
+        }
+        return
+      }
+      if (this.BaseTool.Object.isBlank(record.id)) {
+        this.modalTitle = '报修'
+        if (!this.BaseTool.Object.isBlank(record.sbId)) {
+          const { form: { setFieldsValue } } = this
+          this.$nextTick(() => {
+            setFieldsValue(Object.assign(pick(record, [
+              'sbId',
+              'sbName',
+              'sbCph'
+            ])))
+          })
+        }
+        return
+      }
+      this.modalTitle = '编辑'
+      this.applicationFileList = record.applicationFileList
+      this.repairFileList = record.repairFileList
+      this.reportFileList = record.reportFileList
+      this.defaultApplicationFileList = this.BaseTool.UPLOAD.transImg(this.applicationFileList)
+      this.defaultRepairFileList = this.BaseTool.UPLOAD.transImg(this.repairFileList)
+      this.defaultCheckFileList = this.BaseTool.UPLOAD.transImg(this.reportFileList)
+      if (record.status === this.DictCache.VALUE.REPAIR_APPLICATION_FORM_STATUS.REFUSED_REPAIR) {
+        this.refusedFlag = true
+      }
+      const { form: { setFieldsValue } } = this
+      // 日期处理
+      record.applyTime = this.BaseTool.Moment(record.applyTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
+      if (record.limitDate != null) {
+        record.limitDate = this.BaseTool.Moment(record.limitDate, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
+        this.$nextTick(() => {
+          setFieldsValue(Object.assign(pick(record, [
+            'limitDate'
+          ])))
+        })
+      }
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign(pick(record, [
+          'id',
+          'sbId',
+          'sbCph',
+          'partId',
+          'repairUserId',
+          'no',
+          'category',
+          'limitDate',
+          'limitHours',
+          'source',
+          'level',
+          'content',
+          'status',
+          'sbName',
+          'needStop',
+          'category',
+          'partName',
+          'remark',
+          'repairDeptId'
+        ])))
+      })
+    },
+    getSbPositions (parentId) {
+      getSbPositions({ parentId }).then(res => {
+        console.log(res)
+        this.sbPositionList = res.data.map(item => {
+          item = {
+            label: item.name,
+            value: item.name,
+            id: item.id,
+            isLeaf: false
+          }
+          return item
+        })
+      })
+    },
+    loadData (selectedOptions) {
+      console.log(selectedOptions)
+      const targetOption = selectedOptions[selectedOptions.length - 1]
+      targetOption.loading = true
+      getSbPositions({ parentId: targetOption.id }).then(res => {
+        targetOption.loading = false
+        targetOption.children = res.data.map(item => {
+          item = {
+            label: item.name,
+            value: item.name
+          }
+          return item
+        })
+        this.sbPositionList = [...this.sbPositionList]
+      })
+    },
+    getUsers () {
+      queryUser({ status: 1 }).then(res => {
+        this.userList = res.data
+      })
+      getDispatchUser().then(res => {
+        console.log(res)
+        this.dispatchUserList = res.data
+      })
+    },
+    save () {
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        // 日期处理
+        values.applyTime = this.BaseTool.Date.formatter(values.applyTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
+        values.limitDate = BaseTool.Date.formatter(values.limitDate, BaseTool.Date.PICKER_NORM_DATE_PATTERN)
+        values.planStartTime = BaseTool.Date.formatter(values.planStartTime, BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
+        values.planEndTime = BaseTool.Date.formatter(values.planEndTime, BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
+        // 上传文件
+        values.repairFileList = this.repairFileList
+        values.repairProfessor = values.repairProfessor.join(',')
+        values.repairType = values.repairType.join(',')
+        values.applicationFileList = this.applicationFileList
+        values.reportFileList = this.reportFileList
+        values.sbPosition = values.sbPosition.join('->')
+        console.log(values)
+        if (values.partId === undefined) {
+          values.partId = ''
+        }
+        if (this.BaseTool.String.isBlank(values.id)) {
+          addRepairApplicationForm(values)
+            .then(() => {
+              this.$notification.success({
+                message: '报修成功!',
+                duration: 3
+              })
+              this.handleCancel(values)
+            }).catch(() => {
+              this.confirmLoading = false
+            })
+        } else {
+          updateRepairApplicationForm(values)
+            .then(() => {
+              this.handleCancel(values)
+            }).catch(() => {
+              this.confirmLoading = false
+            })
+        }
+      })
+    },
+    changePlanFlag (value) {
+      this.category = value
+      const { form: { setFieldsValue } } = this
+      if (this.category === 1) {
+        this.$nextTick(() => {
+          setFieldsValue({ needStop: 1 })
+        })
+      } else {
+        this.$nextTick(() => {
+          setFieldsValue({ needStop: 0 })
+        })
+      }
+    },
+    handleCancel (values) {
+      this.visible = false
+      this.confirmLoading = false
+      this.applicationFileList = []
+      this.defaultApplicationFileList = []
+      this.form.resetFields()
+      if (this.BaseTool.Object.isNotBlank(values)) {
+        this.$emit('ok', values)
+      }
+    },
+    handleSbSelect () {
+      this.$refs.sbInfoSelectModal.base({}, {})
+    },
+    handleSbSelectd (keys, rows) {
+      const [ key ] = keys
+      const [ row ] = rows
+      const { form: { setFieldsValue } } = this
+      this.sbId = key
+      // 日期处理
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign({
+          'sbId': key,
+          'sbName': row.name,
+          'sbCph': row.cph,
+          'parentSbNo': row.ppNo
+        }))
+      })
+    },
+    handlePartSelect () {
+      if (this.sbId === null) {
+        return this.$message.error('选择设备部位之前,请选择设备')
+      }
+      this.$refs.partInfoSelectModal.base({ sbId: this.sbId })
+    },
+    handlePartSelected (keys, rows) {
+      const [ key ] = keys
+      const [ row ] = rows
+      const { form: { setFieldsValue } } = this
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign({
+          'partId': key,
+          'partName': row.name
+        }))
+      })
+    },
+    handleCheckFileChange (info) {
+      this.defaultCheckFileList = info.fileList
+      this.reportFileList = this.setFileList(info, 32)
+    },
+    handleApplicationFileChange (info) {
+      this.defaultApplicationFileList = info.fileList
+      this.applicationFileList = this.setFileList(info, 11)
+    },
+    setFileList (info, type) {
+      const file = info.file
+      const fileList = info.fileList
+      if (file.status === 'done') {
+        return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
+      } else if (file.status === 'removed') {
+        return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
+      } else if (file.status === 'error') {
+        this.$message.error('上传失败')
+        return []
+      }
+    }
+  }
+}
+</script>