BaseForm.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892
  1. <template>
  2. <a-modal
  3. :title="modalTitle"
  4. :width="900"
  5. :visible="visible"
  6. :confirmLoading="confirmLoading"
  7. class="ant-modal2"
  8. @cancel="handleCancel"
  9. >
  10. <a-form :form="form">
  11. <a-form-item v-show="false" >
  12. <a-input v-decorator="['id']" type="hidden"/>
  13. <a-input v-decorator="['sbId']" type="hidden"/>
  14. <a-input v-decorator="['partId']" type="hidden"/>
  15. </a-form-item>
  16. <row-list :col="2">
  17. <!-- <row-item>
  18. <a-form-item
  19. label="录入方式"
  20. :labelCol="BaseTool.Constant.labelCol"
  21. :wrapperCol="BaseTool.Constant.wrapperCol"
  22. >
  23. <a-radio-group v-decorator="['inputType', {initialValue: 2}]" button-style="solid" @change="inputTypeChange">
  24. <a-radio-button :value="2">
  25. 选择录入
  26. </a-radio-button>
  27. <a-radio-button :value="1">
  28. 手动录入
  29. </a-radio-button>
  30. </a-radio-group>
  31. </a-form-item>
  32. </row-item>-->
  33. <row-item v-if="inputType===2">
  34. <a-form-item
  35. label="设备名称"
  36. :labelCol="BaseTool.Constant.labelCol"
  37. :wrapperCol="BaseTool.Constant.wrapperCol"
  38. >
  39. <a-input
  40. style="width: 70%"
  41. disabled
  42. v-decorator="['sbName', {rules: [{required: true, message: '设备名称不能为空'}]}]" />
  43. <a-button style="width: 30%" type="primary" @click="handleSbSelect">选择</a-button>
  44. </a-form-item>
  45. </row-item>
  46. <row-item v-else>
  47. <a-form-item
  48. label="设备名称"
  49. :labelCol="BaseTool.Constant.labelCol"
  50. :wrapperCol="BaseTool.Constant.wrapperCol"
  51. >
  52. <a-input
  53. v-decorator="['sbName']" />
  54. </a-form-item>
  55. </row-item>
  56. <row-item v-if="inputType===1">
  57. <a-form-item
  58. label="设备位号"
  59. :labelCol="BaseTool.Constant.labelCol"
  60. :wrapperCol="BaseTool.Constant.wrapperCol"
  61. >
  62. <a-input
  63. v-decorator="['positionNo', {rules: [{required: true, message: '设备位号不能为空'}]}]" />
  64. </a-form-item>
  65. </row-item>
  66. <!-- <row-item>
  67. <a-form-item
  68. label="机电仪位号"
  69. :labelCol="BaseTool.Constant.labelCol"
  70. :wrapperCol="BaseTool.Constant.wrapperCol"
  71. >
  72. <a-input v-decorator="['parentSbNo']" />
  73. </a-form-item>
  74. </row-item> -->
  75. <!-- <row-item>
  76. <a-form-item
  77. label="设备部位"
  78. :labelCol="BaseTool.Constant.labelCol"
  79. :wrapperCol="BaseTool.Constant.wrapperCol"
  80. >
  81. <a-input
  82. style="width: 70%"
  83. disabled
  84. v-decorator="['partName']" />
  85. <a-button style="width: 30%" type="primary" @click="handlePartSelect">选择</a-button>
  86. </a-form-item>
  87. </row-item>-->
  88. <!-- <row-item>
  89. <a-form-item
  90. label="委托单位"
  91. :labelCol="BaseTool.Constant.labelCol"
  92. :wrapperCol="BaseTool.Constant.wrapperCol"
  93. >
  94. <a-select v-decorator="['trustDept', {rules: [{required: true, message: '委托单位不能为空'}]}]" placeholder="请选择">
  95. <a-select-option
  96. v-for="(label,value) in trustMap"
  97. :key="value"
  98. :label="label"
  99. :value="value">{{ label }}
  100. </a-select-option>
  101. </a-select>
  102. </a-form-item>
  103. </row-item> -->
  104. <row-item>
  105. <a-form-item
  106. label="维修部门"
  107. :labelCol="BaseTool.Constant.labelCol"
  108. :wrapperCol="BaseTool.Constant.wrapperCol"
  109. >
  110. <a-select v-decorator="['repairDeptId', {rules: [{required: true, message: '维修部门不能为空'}]}]" placeholder="请选择">
  111. <a-select-option
  112. v-for="(label,value) in repairDeptMap"
  113. :key="value"
  114. :label="label"
  115. :value="value">{{ label }}
  116. </a-select-option>
  117. </a-select>
  118. </a-form-item>
  119. </row-item>
  120. <row-item>
  121. <a-form-item
  122. label="报修类型"
  123. :labelCol="BaseTool.Constant.labelCol"
  124. :wrapperCol="BaseTool.Constant.wrapperCol"
  125. >
  126. <a-select v-decorator="['repairFormType', {rules: [{required: true, message: '报修类型不能为空'}]}]" placeholder="请选择">
  127. <a-select-option
  128. v-for="(label,value) in repairFormTypeMap"
  129. :key="value"
  130. :label="label"
  131. :value="parseInt(value)">{{ label }}
  132. </a-select-option>
  133. </a-select>
  134. </a-form-item>
  135. </row-item>
  136. <row-item>
  137. <a-form-item
  138. label="维修专业"
  139. :labelCol="BaseTool.Constant.labelCol"
  140. :wrapperCol="BaseTool.Constant.wrapperCol"
  141. >
  142. <a-tree-select
  143. tree-checkable
  144. :show-checked-strategy="SHOW_PARENT"
  145. v-decorator="['repairProfessor', { rules: [{required: true, message: '检修专业不能为空'}]}]"
  146. placeholder="请选择">
  147. <a-tree-select-node
  148. v-for="(label,value) in professorMap"
  149. :key="value"
  150. :title="label"
  151. :value="parseInt(value)">{{ label }}
  152. </a-tree-select-node>
  153. </a-tree-select>
  154. </a-form-item>
  155. </row-item>
  156. <row-item v-if="inputType===1">
  157. <a-form-item
  158. label="车间位置"
  159. :labelCol="BaseTool.Constant.labelCol"
  160. :wrapperCol="BaseTool.Constant.wrapperCol"
  161. >
  162. <a-select v-decorator="['positionId', {rules: [{required: true, message: '车间位置不能为空'}]}]" placeholder="请选择">
  163. <a-select-option
  164. v-for="({id,name}) in sbPositionData"
  165. :key="id"
  166. :label="name"
  167. :value="id">{{ name }}
  168. </a-select-option>
  169. </a-select>
  170. <!-- <a-cascader
  171. :options="sbPositionList"
  172. :load-data="loadData"
  173. placeholder="请选择"
  174. change-on-select
  175. @change="sbPositionChange"
  176. v-decorator="['sbPosition', {rules: [{required: true, message: '车间位置不能为空'}]}]"
  177. /> -->
  178. </a-form-item>
  179. </row-item>
  180. <row-item>
  181. <a-form-item
  182. label="特殊作业类型"
  183. :labelCol="BaseTool.Constant.labelCol"
  184. :wrapperCol="BaseTool.Constant.wrapperCol"
  185. >
  186. <a-tree-select
  187. tree-checkable
  188. :show-checked-strategy="SHOW_PARENT"
  189. v-decorator="['repairType', {rules: [{required: true, message: '工作类型不能为空'}]}]"
  190. placeholder="请选择">
  191. <a-tree-select-node
  192. v-for="(label,value) in repairTypeMap"
  193. :key="value"
  194. :title="label"
  195. :value="parseInt(value)">{{ label }}
  196. </a-tree-select-node>
  197. </a-tree-select>
  198. </a-form-item>
  199. </row-item>
  200. <row-item>
  201. <a-form-item
  202. label="车间具体位置"
  203. :labelCol="BaseTool.Constant.labelCol"
  204. :wrapperCol="BaseTool.Constant.wrapperCol"
  205. >
  206. <a-input
  207. placeholder="比如:甲七车间北侧"
  208. v-decorator="['sbCph']" />
  209. </a-form-item>
  210. </row-item>
  211. <row-item>
  212. <a-form-item
  213. label="工单类别"
  214. :labelCol="BaseTool.Constant.labelCol"
  215. :wrapperCol="BaseTool.Constant.wrapperCol"
  216. >
  217. <a-select @change="changePlanFlag" v-decorator="['category', {initialValue: 2, rules: [{required: true, message: '工单类别不能为空'}]}]" placeholder="请选择">
  218. <a-select-option
  219. v-for="(label,value) in categoryMap"
  220. :key="value"
  221. :label="label"
  222. :value="parseInt(value)">{{ label }}
  223. </a-select-option>
  224. </a-select>
  225. </a-form-item>
  226. </row-item>
  227. <row-item>
  228. <a-form-item
  229. label="是否停机"
  230. :labelCol="BaseTool.Constant.labelCol"
  231. :wrapperCol="BaseTool.Constant.wrapperCol"
  232. >
  233. <a-select v-decorator="['needStop', {rules: [{required: true, message: '是否停机不能为空'}]}]" placeholder="请选择">
  234. <a-select-option
  235. v-for="(label,value) in needStopMap"
  236. :key="value"
  237. :label="label"
  238. :value="parseInt(value)">{{ label }}
  239. </a-select-option>
  240. </a-select>
  241. </a-form-item>
  242. </row-item>
  243. <row-item v-if="category === 1">
  244. <a-form-item
  245. label="计划性维修级别"
  246. :labelCol="BaseTool.Constant.labelCol"
  247. :wrapperCol="BaseTool.Constant.wrapperCol"
  248. >
  249. <a-select v-decorator="['repairPlanLevel', {rules: [{required: true, message: '计划性维修级别不能为空'}]}]" placeholder="请选择">
  250. <a-select-option
  251. v-for="value in ['大','中','小']"
  252. :key="value"
  253. :label="value"
  254. :value="value">{{ value }}
  255. </a-select-option>
  256. </a-select>
  257. </a-form-item>
  258. </row-item>
  259. <row-item v-if="category === 1">
  260. <a-form-item
  261. label="审批人"
  262. :labelCol="BaseTool.Constant.labelCol"
  263. :wrapperCol="BaseTool.Constant.wrapperCol"
  264. >
  265. <a-select v-decorator="['dispatchUserId', {rules: [{required: true, message: '审批人不能为空'}]}]" placeholder="请选择">
  266. <a-select-option
  267. v-for="({realName,userId}) in dispatchUserList"
  268. :key="userId"
  269. :label="realName"
  270. :value="userId">{{ realName }}
  271. </a-select-option>
  272. </a-select>
  273. </a-form-item>
  274. </row-item>
  275. <row-item v-if="category === 2">
  276. <a-form-item
  277. label="报修审批人"
  278. :labelCol="BaseTool.Constant.labelCol"
  279. :wrapperCol="BaseTool.Constant.wrapperCol"
  280. >
  281. <a-select v-decorator="['verifyRepairUserId', { rules: [{required: true, message: '报修审批人不能为空'}]}]" placeholder="请选择">
  282. <a-select-option
  283. v-for="({realName,userId}) in userRepairList"
  284. :key="userId"
  285. :label="realName"
  286. :value="userId">{{ realName }}
  287. </a-select-option>
  288. </a-select>
  289. </a-form-item>
  290. </row-item>
  291. <!-- <row-item v-show="category === 1">
  292. <a-form-item
  293. label="要求日期"
  294. :labelCol="BaseTool.Constant.labelCol"
  295. :wrapperCol="BaseTool.Constant.wrapperCol"
  296. >
  297. <a-date-picker
  298. style="width: 100%"
  299. :format="BaseTool.Date.PICKER_NORM_DATE_PATTERN"
  300. v-decorator="['limitDate']" />
  301. </a-form-item>
  302. </row-item> -->
  303. <!-- <row-item v-show="category === 2">
  304. <a-form-item
  305. label="要求时间"
  306. :labelCol="BaseTool.Constant.labelCol"
  307. :wrapperCol="BaseTool.Constant.wrapperCol"
  308. >
  309. <a-input
  310. style="width: 100%"
  311. suffix="小时"
  312. v-decorator="['limitHours', {rules: [{required: true, message: '要求时间不能为空'}]}]" />
  313. </a-form-item>
  314. </row-item> -->
  315. <row-item>
  316. <a-form-item
  317. label="计划开始时间"
  318. :labelCol="BaseTool.Constant.labelCol"
  319. :wrapperCol="BaseTool.Constant.wrapperCol"
  320. >
  321. <a-date-picker
  322. style="width: 100%"
  323. :show-time="{ format: 'HH:mm' }"
  324. :format="BaseTool.Date.PICKER_NORM_DATETIME_PATTERN2"
  325. v-decorator="['planStartTime', {rules: [{required: true, message: '计划开始时间不能为空'}]}]" />
  326. </a-form-item>
  327. </row-item>
  328. <row-item>
  329. <a-form-item
  330. label="计划结束时间"
  331. :labelCol="BaseTool.Constant.labelCol"
  332. :wrapperCol="BaseTool.Constant.wrapperCol"
  333. >
  334. <a-date-picker
  335. style="width: 100%"
  336. :show-time="{ format: 'HH:mm' }"
  337. :format="BaseTool.Date.PICKER_NORM_DATETIME_PATTERN2"
  338. v-decorator="['planEndTime', {rules: [{required: true, message: '计划结束时间不能为空'}]}]" />
  339. </a-form-item>
  340. </row-item>
  341. <row-item v-if="category !== 1">
  342. <a-form-item
  343. label="工作优选权"
  344. :labelCol="BaseTool.Constant.labelCol"
  345. :wrapperCol="BaseTool.Constant.wrapperCol"
  346. >
  347. <a-select v-decorator="['level', {initialValue: 1, rules: [{required: true, message: '工作优选权不能为空'}]}]" placeholder="请选择">
  348. <a-select-option
  349. v-for="(label,value) in levelMap"
  350. :key="value"
  351. :label="label"
  352. :value="parseInt(value)">{{ label }}
  353. </a-select-option>
  354. </a-select>
  355. </a-form-item>
  356. </row-item>
  357. <row-item>
  358. <a-form-item
  359. label="报修人"
  360. :labelCol="BaseTool.Constant.labelCol"
  361. :wrapperCol="BaseTool.Constant.wrapperCol"
  362. >
  363. <a-input
  364. disabled="disabled"
  365. v-decorator="['actualUser', {initialValue: userInfo.realName, rules: [{required: true, message: '报修人不能为空'}]}]"/>
  366. </a-form-item>
  367. </row-item>
  368. <!-- <row-item>
  369. <a-form-item
  370. label="紧急等级"
  371. :labelCol="BaseTool.Constant.labelCol"
  372. :wrapperCol="BaseTool.Constant.wrapperCol"
  373. >
  374. <a-select v-decorator="['level', {initialValue: 1, rules: [{required: true, message: '紧急等级不能为空'}]}]" placeholder="请选择">
  375. <a-select-option
  376. v-for="(label,value) in levelMap"
  377. :key="value"
  378. :label="label"
  379. :value="parseInt(value)">{{ label }}
  380. </a-select-option>
  381. </a-select>
  382. </a-form-item>
  383. </row-item>
  384. <row-item>
  385. <a-form-item
  386. label="异常类别"
  387. :labelCol="BaseTool.Constant.labelCol"
  388. :wrapperCol="BaseTool.Constant.wrapperCol"
  389. >
  390. <a-tree-select
  391. style="width: 100%"
  392. :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
  393. :treeData="treeData"
  394. :treeNodeFilterProp="'title'"
  395. :showSearch="true"
  396. v-decorator="['repairErrorTypeId']"
  397. placeholder="请选择"
  398. >
  399. </a-tree-select>
  400. </a-form-item>
  401. </row-item>-->
  402. <row-item>
  403. <a-form-item
  404. label="报修图片"
  405. :labelCol="BaseTool.Constant.labelCol"
  406. :wrapperCol="BaseTool.Constant.wrapperCol"
  407. >
  408. <a-upload
  409. :action="uploadUrl"
  410. :multiple="true"
  411. list-type="picture"
  412. :file-list="this.defaultApplicationFileList"
  413. @change="handleApplicationFileChange"
  414. accept="image/*"
  415. :headers="headers"
  416. >
  417. <a-button> <a-icon type="upload" /> 上传图片 </a-button>
  418. </a-upload>
  419. </a-form-item>
  420. </row-item>
  421. <row-item>
  422. <a-form-item
  423. label="资料文件"
  424. :labelCol="BaseTool.Constant.labelCol"
  425. :wrapperCol="BaseTool.Constant.wrapperCol"
  426. >
  427. <a-upload
  428. :action="uploadUrl"
  429. :multiple="true"
  430. :file-list="defaultCheckFileList"
  431. @change="handleCheckFileChange"
  432. :headers="headers"
  433. >
  434. <a-button> <a-icon type="upload" /> 上传 </a-button>
  435. </a-upload>
  436. </a-form-item>
  437. </row-item>
  438. <row-item v-show="refusedFlag">
  439. <a-form-item
  440. label="驳回原因"
  441. :labelCol="BaseTool.Constant.labelCol"
  442. :wrapperCol="BaseTool.Constant.wrapperCol"
  443. >
  444. <a-input
  445. disabled="disabled"
  446. v-decorator="['remark']"/>
  447. </a-form-item>
  448. </row-item>
  449. </row-list>
  450. <row-list :col="1">
  451. <row-item v-if="false">
  452. <a-form-item
  453. label="报修状态"
  454. :labelCol="BaseTool.Constant.labelCol"
  455. :wrapperCol="BaseTool.Constant.wrapperCol"
  456. >
  457. <a-select disabled v-decorator="['status', {initialValue: DictCache.VALUE.REPAIR_APPLICATION_FORM_STATUS.NOT_ALLOCATED,rules: [{required: true, message: '报修状态不能为空'}]}]" placeholder="请选择">
  458. <a-select-option
  459. v-for="(label,value) in statusMap"
  460. :key="value"
  461. :label="label"
  462. :value="parseInt(value)">{{ label }}
  463. </a-select-option>
  464. </a-select>
  465. </a-form-item>
  466. </row-item>
  467. <!-- <row-item>
  468. <a-form-item
  469. label="故障描述"
  470. :labelCol="BaseTool.Constant.labelCol2"
  471. :wrapperCol="BaseTool.Constant.wrapperCol2"
  472. >
  473. <a-select v-decorator="['content']" placeholder="请选择">
  474. <a-select-option
  475. v-for="(label,value) in questionMap"
  476. :key="value"
  477. :label="label"
  478. :value="parseInt(value)">{{ label }}
  479. </a-select-option>
  480. </a-select>
  481. </a-form-item>
  482. </row-item>-->
  483. <row-item>
  484. <a-form-item
  485. label="委托内容描述"
  486. :labelCol="BaseTool.Constant.labelCol2"
  487. :wrapperCol="BaseTool.Constant.wrapperCol2"
  488. >
  489. <a-textarea
  490. :rows="4"
  491. v-decorator="['content', {rules: [{required: true, message: '委托内容描述不能为空'}]}]"/>
  492. </a-form-item>
  493. </row-item>
  494. </row-list>
  495. </a-form>
  496. <template slot="footer">
  497. <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
  498. </template>
  499. <sb-info-select-modal ref="sbInfoSelectModal" @selected="handleSbSelectd"/>
  500. <part-info-select-modal ref="partInfoSelectModal" @selected="handlePartSelected"/>
  501. </a-modal>
  502. </template>
  503. <script>
  504. import pick from 'lodash.pick'
  505. import BaseTool from '../../../../utils/tool'
  506. import { addRepairApplicationForm, againRepairApplicationForm, updateRepairApplicationForm, getSbPositions, getDispatchUser, receiveProfessor } from '@/api/repair/application-form'
  507. import PartInfoSelectModal from '@/views/part/info/modules/PartInfoSelectModal'
  508. import SbInfoSelectModal from '@/views/sb/info/modules/SbInfoSelectModal'
  509. import { queryUser, queryRepairUser } from '@/api/upms/user'
  510. import { uploadUrl } from '@/api/upms/file'
  511. import Vue from 'vue'
  512. import { ACCESS_TOKEN } from '@/store/mutation-types'
  513. import { fetchErrorTypeTree } from '@/api/repair/errortype'
  514. import { querySbPosition } from '@/api/sb/position'
  515. import { TreeSelect } from 'ant-design-vue'
  516. const SHOW_PARENT = TreeSelect.SHOW_PARENT
  517. export default {
  518. name: 'BaseRepairApplicationForm',
  519. data () {
  520. return {
  521. SHOW_PARENT,
  522. confirmLoading: false,
  523. modalTitle: null,
  524. inputType: 2,
  525. positionId: '',
  526. professorMap: {},
  527. repairTypeMap: {},
  528. sbPositionList: [],
  529. form: this.$form.createForm(this),
  530. visible: false,
  531. sbId: null,
  532. // 下拉框map
  533. sourceMap: {},
  534. levelMap: {},
  535. questionMap: {},
  536. dispatchUserList: {},
  537. repairFormTypeMap: {},
  538. treeData: [],
  539. sbPositionData: [],
  540. needStop: null,
  541. needStopMap: {},
  542. category: 2,
  543. categoryMap: {},
  544. trustMap: {},
  545. statusMap: {},
  546. userInfo: this.$store.getters.userInfo,
  547. userList: [],
  548. userRepairList: [],
  549. uploadUrl: uploadUrl,
  550. defaultRepairFileList: [],
  551. defaultApplicationFileList: [],
  552. defaultCheckFileList: [],
  553. applicationFileList: [], // 报修图片
  554. reportFileList: [], // 审核图片
  555. repairFileList: [], // 维修图片,
  556. repairDeptMap: {},
  557. refusedFlag: false,
  558. headers: {
  559. Authorization: 'Bearer ' + Vue.ls.get(ACCESS_TOKEN)
  560. },
  561. modal: null
  562. }
  563. },
  564. components: {
  565. SbInfoSelectModal,
  566. PartInfoSelectModal
  567. },
  568. props: {
  569. },
  570. created () {
  571. // 下拉框map
  572. this.sourceMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_FORM_SOURCE)
  573. // this.levelMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_FORM_LEVEL)
  574. this.statusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_FORM_STATUS)
  575. this.questionMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_QUESTION)
  576. this.needStopMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.YES_NO)
  577. this.levelMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.LEVEL_TYPE)
  578. this.categoryMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_FORM_CATEGORY)
  579. this.trustMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.TRUST_DEPT_TYPE)
  580. console.log(this.categoryMap)
  581. this.repairDeptMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_DEPT_CATEGORY)
  582. this.repairTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_TYPE)
  583. this.professorMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_APPLICATION_PROFESSOR)
  584. this.repairFormTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REPAIR_FORM_TYPE)
  585. this.getUsers()
  586. this.getSbPositions()
  587. querySbPosition().then(res => {
  588. this.sbPositionData = res.data
  589. })
  590. },
  591. methods: {
  592. base (record) {
  593. this.visible = true
  594. this.refusedFlag = false
  595. this.modal = record
  596. fetchErrorTypeTree().then(res => {
  597. this.treeData = res.data
  598. })
  599. // 如果是空标识添加
  600. if (this.BaseTool.Object.isBlank(record)) {
  601. this.modalTitle = '报修'
  602. if (!this.BaseTool.Object.isBlank(record) && !this.BaseTool.Object.isBlank(record.sbId)) {
  603. const { form: { setFieldsValue } } = this
  604. this.$nextTick(() => {
  605. setFieldsValue(Object.assign(pick(record, [
  606. 'sbId',
  607. 'sbName'
  608. ])))
  609. })
  610. }
  611. return
  612. }
  613. if (this.BaseTool.Object.isBlank(record.id)) {
  614. this.modalTitle = '报修'
  615. if (!this.BaseTool.Object.isBlank(record.sbId)) {
  616. const { form: { setFieldsValue } } = this
  617. this.$nextTick(() => {
  618. setFieldsValue(Object.assign(pick(record, [
  619. 'sbId',
  620. 'sbName',
  621. 'sbCph'
  622. ])))
  623. })
  624. }
  625. return
  626. }
  627. this.modalTitle = '编辑'
  628. this.applicationFileList = record.applicationFileList
  629. this.repairFileList = record.repairFileList
  630. this.reportFileList = record.reportFileList
  631. this.defaultApplicationFileList = this.BaseTool.UPLOAD.transImg(this.applicationFileList)
  632. this.defaultRepairFileList = this.BaseTool.UPLOAD.transImg(this.repairFileList)
  633. this.defaultCheckFileList = this.BaseTool.UPLOAD.transImg(this.reportFileList)
  634. if (record.status === this.DictCache.VALUE.REPAIR_APPLICATION_FORM_STATUS.REFUSED_REPAIR) {
  635. this.refusedFlag = true
  636. }
  637. const { form: { setFieldsValue } } = this
  638. // 日期处理
  639. if (record.limitDate != null) {
  640. record.limitDate = this.BaseTool.Moment(record.limitDate, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
  641. this.$nextTick(() => {
  642. setFieldsValue(Object.assign(pick(record, [
  643. 'limitDate'
  644. ])))
  645. })
  646. }
  647. record.repairType = record.repairType.split(',')
  648. record.repairProfessor = record.repairProfessor.split(',')
  649. this.$nextTick(() => {
  650. setFieldsValue(Object.assign(pick(record, [
  651. 'id',
  652. 'sbId',
  653. 'sbCph',
  654. 'partId',
  655. 'repairUserId',
  656. 'no',
  657. 'repairFormType',
  658. 'category',
  659. 'limitDate',
  660. 'limitHours',
  661. 'source',
  662. 'level',
  663. 'content',
  664. 'status',
  665. 'sbName',
  666. 'needStop',
  667. 'repairProfessor',
  668. 'planStartTime',
  669. 'planEndTime',
  670. 'category',
  671. 'partName',
  672. 'repairType',
  673. 'remark',
  674. 'repairDeptId'
  675. ])))
  676. })
  677. },
  678. getSbPositions (parentId) {
  679. getSbPositions({ parentId }).then(res => {
  680. console.log(res)
  681. this.sbPositionList = res.data.map(item => {
  682. item = {
  683. label: item.name,
  684. value: item.name,
  685. id: item.id,
  686. isLeaf: false
  687. }
  688. return item
  689. })
  690. })
  691. },
  692. loadData (selectedOptions) {
  693. console.log(selectedOptions)
  694. const targetOption = selectedOptions[selectedOptions.length - 1]
  695. targetOption.loading = true
  696. getSbPositions({ parentId: targetOption.id }).then(res => {
  697. targetOption.loading = false
  698. targetOption.children = res.data.map(item => {
  699. item = {
  700. label: item.name,
  701. value: item.name,
  702. id: item.id
  703. }
  704. return item
  705. })
  706. this.sbPositionList = [...this.sbPositionList]
  707. })
  708. },
  709. getUsers () {
  710. queryUser({ status: 1 }).then(res => {
  711. this.userList = res.data
  712. })
  713. queryRepairUser({ roleType: 3 }).then(res => {
  714. this.userRepairList = res.data
  715. })
  716. getDispatchUser().then(res => {
  717. console.log(res)
  718. this.dispatchUserList = res.data
  719. })
  720. },
  721. save () {
  722. console.log(1222)
  723. const { form: { validateFieldsAndScroll } } = this
  724. this.confirmLoading = true
  725. validateFieldsAndScroll((errors, values) => {
  726. if (errors) {
  727. this.confirmLoading = false
  728. return
  729. }
  730. console.log(values)
  731. // // 日期处理
  732. // values.limitDate = BaseTool.Date.formatter(values.limitDate, BaseTool.Date.PICKER_NORM_DATE_PATTERN)
  733. values.planStartTime = BaseTool.Date.formatter(values.planStartTime, BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
  734. values.planEndTime = BaseTool.Date.formatter(values.planEndTime, BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
  735. // 上传文件
  736. values.repairFileList = this.repairFileList
  737. values.inputType = this.inputType
  738. values.repairProfessor = values.repairProfessor.join(',')
  739. console.log(1)
  740. values.repairType = values.repairType.join(',')
  741. console.log(1)
  742. values.applicationFileList = this.applicationFileList
  743. console.log(11)
  744. values.reportFileList = this.reportFileList
  745. // values.sbPosition = values.sbPosition.join('->')
  746. console.log(values)
  747. if (values.partId === undefined) {
  748. values.partId = ''
  749. }
  750. if (values.category === 2) { // 非计划性维修
  751. values.source = 2
  752. } else {
  753. values.source = 1
  754. }
  755. console.log(111)
  756. if (this.BaseTool.String.isBlank(values.id)) {
  757. addRepairApplicationForm(values)
  758. .then(() => {
  759. this.$notification.success({
  760. message: '报修成功!',
  761. duration: 3
  762. })
  763. this.handleCancel(values)
  764. }).catch(() => {
  765. this.confirmLoading = false
  766. })
  767. } else if (this.modal.status === 23) {
  768. console.log(21)
  769. againRepairApplicationForm(values)
  770. .then(() => {
  771. this.$notification.success({
  772. message: '报修成功!',
  773. duration: 3
  774. })
  775. this.handleCancel(values)
  776. }).catch(() => {
  777. this.confirmLoading = false
  778. })
  779. } else {
  780. updateRepairApplicationForm(values)
  781. .then(() => {
  782. this.handleCancel(values)
  783. }).catch(() => {
  784. this.confirmLoading = false
  785. })
  786. }
  787. })
  788. },
  789. changePlanFlag (value) {
  790. this.category = value
  791. const { form: { setFieldsValue } } = this
  792. if (this.category === 1) {
  793. this.$nextTick(() => {
  794. setFieldsValue({ needStop: 1 })
  795. })
  796. } else {
  797. this.$nextTick(() => {
  798. setFieldsValue({ needStop: 0 })
  799. })
  800. }
  801. },
  802. handleCancel (values) {
  803. this.visible = false
  804. this.confirmLoading = false
  805. this.applicationFileList = []
  806. this.defaultApplicationFileList = []
  807. this.form.resetFields()
  808. if (this.BaseTool.Object.isNotBlank(values)) {
  809. this.$emit('ok', values)
  810. }
  811. },
  812. handleSbSelect () {
  813. this.$refs.sbInfoSelectModal.base({}, {})
  814. },
  815. handleSbSelectd (keys, rows) {
  816. const [ key ] = keys
  817. const [ row ] = rows
  818. const { form: { setFieldsValue } } = this
  819. this.sbId = key
  820. // 日期处理
  821. receiveProfessor({ id: key }).then(res => {
  822. const val = res.data ? res.data : 1
  823. this.$nextTick(() => {
  824. setFieldsValue(Object.assign({
  825. 'sbId': key,
  826. 'sbName': row.name,
  827. 'sbCph': row.cph,
  828. 'repairProfessor': [val]
  829. // 'parentSbNo': row.ppNo
  830. }))
  831. })
  832. })
  833. },
  834. handlePartSelect () {
  835. if (this.sbId === null) {
  836. return this.$message.error('选择设备部位之前,请选择设备')
  837. }
  838. this.$refs.partInfoSelectModal.base({ sbId: this.sbId })
  839. },
  840. handlePartSelected (keys, rows) {
  841. const [ key ] = keys
  842. const [ row ] = rows
  843. const { form: { setFieldsValue } } = this
  844. this.$nextTick(() => {
  845. setFieldsValue(Object.assign({
  846. 'partId': key,
  847. 'partName': row.name
  848. }))
  849. })
  850. },
  851. handleCheckFileChange (info) {
  852. this.defaultCheckFileList = info.fileList
  853. this.reportFileList = this.setFileList(info, 32)
  854. },
  855. handleApplicationFileChange (info) {
  856. this.defaultApplicationFileList = info.fileList
  857. this.applicationFileList = this.setFileList(info, 11)
  858. },
  859. setFileList (info, type) {
  860. const file = info.file
  861. const fileList = info.fileList
  862. if (file.status === 'done') {
  863. return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
  864. } else if (file.status === 'removed') {
  865. return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
  866. } else if (file.status === 'error') {
  867. this.$message.error('上传失败')
  868. return []
  869. }
  870. },
  871. inputTypeChange (e) {
  872. this.inputType = e.target.value
  873. this.form.resetFields()
  874. },
  875. sbPositionChange (e, val) {
  876. this.positionId = val[val.length - 1].id
  877. }
  878. }
  879. }
  880. </script>