BaseForm.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. <template>
  2. <a-modal
  3. :title="modalTitle"
  4. :width="800"
  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-form-item>
  14. <!-- <a-form-item label="计划id" v-show="false">
  15. <a-input
  16. v-decorator="['planId', {rules: [{required: true, message: '计划id不能为空'}]}]"/>
  17. </a-form-item>
  18. <a-form-item label="设备id" v-show="false">
  19. <a-input
  20. v-decorator="['sbId', {rules: [{required: true, message: '设备id不能为空'}]}]"/>
  21. </a-form-item>
  22. <a-form-item label="部位id" v-show="false">
  23. <a-input
  24. v-decorator="['partId', {rules: [{required: false, message: '部位id不能为空'}]}]"/>
  25. </a-form-item>-->
  26. <a-form-item label="标准id" v-show="false">
  27. <a-input
  28. v-decorator="['standardId', {rules: [{required: true, message: '标准id不能为空'}]}]"/>
  29. </a-form-item>
  30. <!-- <a-form-item label="负责人id" v-show="false">
  31. <a-input
  32. v-decorator="['checkUserId', {rules: [{required: false, message: '计划id不能为空'}]}]"/>
  33. </a-form-item>
  34. <row-list :col="2">
  35. <row-item>
  36. <a-form-item
  37. label="任务名称"
  38. :labelCol="BaseTool.Constant.labelCol"
  39. :wrapperCol="BaseTool.Constant.wrapperCol"
  40. >
  41. <a-input
  42. disabled
  43. v-decorator="['name', {rules: [{required: true, message: '负责人不能为空'}]}]"/>
  44. </a-form-item>
  45. </row-item>
  46. <row-item>
  47. <a-form-item
  48. label="计划名称"
  49. :labelCol="BaseTool.Constant.labelCol"
  50. :wrapperCol="BaseTool.Constant.wrapperCol"
  51. >
  52. <a-input
  53. disabled
  54. v-decorator="['planName', {rules: [{required: true, message: '点计划名称不能为空'}]}]"/>
  55. </a-form-item>
  56. </row-item>
  57. <row-item>
  58. <a-form-item
  59. label="计划单号"
  60. :labelCol="BaseTool.Constant.labelCol"
  61. :wrapperCol="BaseTool.Constant.wrapperCol"
  62. >
  63. <a-input
  64. disabled
  65. v-decorator="['planNo', {rules: [{required: true, message: '计划单号不能为空'}]}]"/>
  66. </a-form-item>
  67. </row-item>
  68. <row-item>
  69. <a-form-item
  70. label="负责人"
  71. :labelCol="BaseTool.Constant.labelCol"
  72. :wrapperCol="BaseTool.Constant.wrapperCol"
  73. >
  74. <a-input
  75. disabled
  76. v-decorator="['checkUserName', {rules: [{required: true, message: '负责人不能为空'}]}]"/>
  77. </a-form-item>
  78. </row-item>
  79. <row-item>
  80. <a-form-item
  81. label="设备名称"
  82. :labelCol="BaseTool.Constant.labelCol"
  83. :wrapperCol="BaseTool.Constant.wrapperCol"
  84. >
  85. <a-input
  86. disabled
  87. v-decorator="['sbName', {rules: [{required: true, message: '设备名称不能为空'}]}]"/>
  88. </a-form-item>
  89. </row-item>
  90. <row-item>
  91. <a-form-item
  92. label="执行日期"
  93. :labelCol="BaseTool.Constant.labelCol"
  94. :wrapperCol="BaseTool.Constant.wrapperCol"
  95. >
  96. <a-date-picker
  97. showTime
  98. disabled
  99. style="width: 100%"
  100. :format="BaseTool.Date.PICKER_NORM_DATE_PATTERN"
  101. v-decorator="['startTime', {rules: [{required: true, message: '执行日期不能为空'}]}]"/>
  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-date-picker
  111. showTime
  112. disabled
  113. style="width: 100%"
  114. :format="BaseTool.Date.PICKER_NORM_DATE_PATTERN"
  115. v-decorator="['endTime', {rules: [{required: true, message: '截至日期不能为空'}]}]"/>
  116. </a-form-item>
  117. </row-item>
  118. <row-item>
  119. <a-form-item
  120. label="实际开始时间"
  121. :labelCol="BaseTool.Constant.labelCol"
  122. :wrapperCol="BaseTool.Constant.wrapperCol"
  123. >
  124. <a-date-picker
  125. showTime
  126. style="width: 100%"
  127. :format="BaseTool.Date.PICKER_NORM_DATETIME_PATTERN"
  128. v-decorator="['actualStartTime']"/>
  129. </a-form-item>
  130. </row-item>
  131. <row-item>
  132. <a-form-item
  133. label="实际结束时间"
  134. :labelCol="BaseTool.Constant.labelCol"
  135. :wrapperCol="BaseTool.Constant.wrapperCol"
  136. >
  137. <a-date-picker
  138. showTime
  139. style="width: 100%"
  140. :format="BaseTool.Date.PICKER_NORM_DATETIME_PATTERN"
  141. v-decorator="['actualEndTime']"/>
  142. </a-form-item>
  143. </row-item>
  144. <row-item>
  145. <a-form-item
  146. label="计划性维修"
  147. :labelCol="BaseTool.Constant.labelCol"
  148. :wrapperCol="BaseTool.Constant.wrapperCol"
  149. >
  150. <a-select
  151. v-decorator="['sbStatus', {initialValue:1,rules: [{required: true, message: '计划性维修不能为空'}]}]"
  152. placeholder="请选择">
  153. <a-select-option
  154. v-for="(label,value) in sbStatusMap"
  155. :key="value"
  156. :label="label"
  157. :value="parseInt(value)">{{ label }}
  158. </a-select-option>
  159. </a-select>
  160. </a-form-item>
  161. </row-item>
  162. <row-item>
  163. <a-form-item
  164. label="任务状态"
  165. :labelCol="BaseTool.Constant.labelCol"
  166. :wrapperCol="BaseTool.Constant.wrapperCol"
  167. >
  168. <a-select
  169. disabled
  170. v-decorator="['status']"
  171. placeholder="请选择">
  172. <a-select-option
  173. v-for="(label,value) in statusMap"
  174. :key="value"
  175. :label="label"
  176. :value="parseInt(value)">{{ label }}
  177. </a-select-option>
  178. </a-select>
  179. </a-form-item>
  180. </row-item>
  181. </row-list>-->
  182. <row-list :col="1">
  183. <!--<row-item>
  184. <a-form-item
  185. label="要求"
  186. :labelCol="BaseTool.Constant.labelCol2"
  187. :wrapperCol="BaseTool.Constant.wrapperCol2"
  188. >
  189. <a-textarea
  190. disabled
  191. :rows="4"
  192. v-decorator="['requirement']"/>
  193. </a-form-item>
  194. </row-item>
  195. <row-item>
  196. <a-form-item
  197. label="备注"
  198. :labelCol="BaseTool.Constant.labelCol2"
  199. :wrapperCol="BaseTool.Constant.wrapperCol2"
  200. >
  201. <a-textarea
  202. disabled
  203. :rows="4"
  204. v-decorator="['remark']"/>
  205. </a-form-item>
  206. </row-item>-->
  207. <row-item>
  208. <a-form-item
  209. label="完成图片"
  210. :labelCol="BaseTool.Constant.labelCol2"
  211. :wrapperCol="BaseTool.Constant.wrapperCol2"
  212. >
  213. <a-upload
  214. :action="uploadUrl"
  215. :multiple="true"
  216. list-type="picture"
  217. accept="image/*"
  218. :file-list="this.defaultCheckImgList"
  219. @change="handleCheckImgChange"
  220. :headers="headers"
  221. >
  222. <a-button> <a-icon type="upload" /> 选择上传图片 </a-button>
  223. </a-upload>
  224. </a-form-item>
  225. </row-item>
  226. <row-item>
  227. <a-form-item
  228. label="检查结果"
  229. :labelCol="BaseTool.Constant.labelCol2"
  230. :wrapperCol="BaseTool.Constant.wrapperCol2"
  231. >
  232. <a-textarea
  233. :rows="4"
  234. v-decorator="['feedback']"/>
  235. </a-form-item>
  236. </row-item>
  237. </row-list>
  238. </a-form>
  239. <template slot="footer">
  240. <a-button :loading="confirmLoading" type="primary" @click="save()">完成</a-button>
  241. <a-button :loading="confirmLoading" type="danger" @click="save(1)">完成并报修</a-button>
  242. </template>
  243. <base-form ref="baseModal" @ok="handleOk"/>
  244. </a-modal>
  245. </template>
  246. <script>
  247. import pick from 'lodash.pick'
  248. import { addCheckJob, finishJob } from '@/api/check/checkjob'
  249. import { uploadUrl } from '@/api/upms/file'
  250. import Vue from 'vue'
  251. import { ACCESS_TOKEN } from '@/store/mutation-types'
  252. import BaseForm from '@/views/repair/application-form/modules/BaseForm'
  253. import { fetchSbInfo } from '@/api/sb/info'
  254. export default {
  255. name: 'BaseCheckJob',
  256. components: {
  257. BaseForm
  258. },
  259. data () {
  260. return {
  261. confirmLoading: false,
  262. modalTitle: null,
  263. form: this.$form.createForm(this),
  264. visible: false,
  265. // 下拉框map
  266. statusMap: {},
  267. sbId: null,
  268. sbStatusMap: {},
  269. checkImgList: [],
  270. defaultCheckImgList: [],
  271. uploadUrl: uploadUrl,
  272. headers: {
  273. Authorization: 'Bearer ' + Vue.ls.get(ACCESS_TOKEN)
  274. }
  275. }
  276. },
  277. props: {
  278. /**
  279. * 检查类型: 1-负责 2-巡检
  280. */
  281. checkType: {
  282. type: Number,
  283. default: 1
  284. }
  285. },
  286. created () {
  287. // 下拉框map
  288. this.statusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_JOB_STATUS)
  289. this.sbStatusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.YES_NO)
  290. },
  291. methods: {
  292. base (record) {
  293. this.visible = true
  294. // 如果是空标识添加
  295. if (this.BaseTool.Object.isBlank(record)) {
  296. this.modalTitle = '添加'
  297. return
  298. }
  299. this.modalTitle = '编辑'
  300. this.defaultCheckImgList = this.BaseTool.UPLOAD.transImg(this.imgList)
  301. const { form: { setFieldsValue } } = this
  302. // 日期处理
  303. record.startTime = this.BaseTool.Moment(record.startTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
  304. record.endTime = this.BaseTool.Moment(record.endTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
  305. record.actualStartTime = this.BaseTool.Moment(record.actualStartTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
  306. record.actualEndTime = this.BaseTool.Moment(record.actualEndTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
  307. this.sbId = record.sbId
  308. this.$nextTick(() => {
  309. setFieldsValue(Object.assign(pick(record, [
  310. 'id',
  311. 'standardId',
  312. 'feedback'
  313. /* 'name',
  314. 'planId',
  315. 'planNo',
  316. 'planName',
  317. 'sbId',
  318. 'sbName',
  319. 'partId',
  320. 'partName',
  321. 'checkUserId',
  322. 'checkUserName',
  323. 'startTime',
  324. 'endTime',
  325. 'status',
  326. 'sbStatus',
  327. 'requirement',
  328. 'remark' */
  329. ])))
  330. if (record.actualStartTime.isValid()) {
  331. setFieldsValue(Object.assign(pick(record, [
  332. 'actualStartTime'
  333. ])))
  334. }
  335. if (record.actualEndTime.isValid()) {
  336. setFieldsValue(Object.assign(pick(record, [
  337. 'actualEndTime'
  338. ])))
  339. }
  340. })
  341. },
  342. save (type) {
  343. const { form: { validateFieldsAndScroll } } = this
  344. this.confirmLoading = true
  345. validateFieldsAndScroll((errors, values) => {
  346. if (errors) {
  347. this.confirmLoading = false
  348. return
  349. }
  350. // 日期处理
  351. values.startTime = this.BaseTool.Date.formatter(values.startTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
  352. values.endTime = this.BaseTool.Date.formatter(values.endTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
  353. values.actualStartTime = this.BaseTool.Date.formatter(values.actualStartTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
  354. values.actualEndTime = this.BaseTool.Date.formatter(values.actualEndTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
  355. // 上传文件
  356. values.imgList = this.checkImgList
  357. if (this.BaseTool.String.isBlank(values.id)) {
  358. addCheckJob(values)
  359. .then(() => {
  360. this.handleCancel(values)
  361. }).catch(() => {
  362. this.confirmLoading = false
  363. })
  364. } else {
  365. finishJob(values)
  366. .then(() => {
  367. if (type === 1) {
  368. this.handleAdd()
  369. } else {
  370. this.handleCancel(values)
  371. }
  372. }).catch(() => {
  373. this.confirmLoading = false
  374. })
  375. }
  376. })
  377. },
  378. handleCancel (values) {
  379. this.visible = false
  380. this.confirmLoading = false
  381. this.form.resetFields()
  382. if (this.BaseTool.Object.isNotBlank(values)) {
  383. this.$emit('ok', values)
  384. }
  385. },
  386. handleAdd () {
  387. fetchSbInfo({ id: this.sbId }).then(res => {
  388. this.visible = false
  389. const modal = this.$refs.baseModal
  390. modal.base({ sbId: this.sbId, sbName: res.data.name, sbCph: res.data.cph })
  391. })
  392. },
  393. handleOk () {
  394. this.handleCancel()
  395. },
  396. handleCheckImgChange (info) {
  397. this.defaultCheckImgList = info.fileList
  398. this.checkImgList = this.setFileList(info, 23)
  399. },
  400. setFileList (info, type) {
  401. const file = info.file
  402. const fileList = info.fileList
  403. if (file.status === 'done') {
  404. return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
  405. } else if (file.status === 'removed') {
  406. return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
  407. } else if (file.status === 'error') {
  408. this.$message.error('上传失败')
  409. return null
  410. }
  411. }
  412. }
  413. }
  414. </script>