BaseForm.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705
  1. <template>
  2. <a-modal
  3. :title="modalTitle"
  4. :width="1200"
  5. :visible="visible"
  6. :confirmLoading="confirmLoading"
  7. @cancel="handleCancel"
  8. >
  9. <a-form :form="form">
  10. <a-form-item v-show="false">
  11. <a-input v-decorator="['id']" type="hidden"/>
  12. <a-input v-decorator="['sbId']" type="hidden"/>
  13. <a-input v-decorator="['part']" type="hidden"/>
  14. </a-form-item>
  15. <row-list :col="2">
  16. <row-item>
  17. <a-form-item
  18. label="编码"
  19. :labelCol="BaseTool.Constant.labelCol"
  20. :wrapperCol="BaseTool.Constant.wrapperCol"
  21. >
  22. <a-input
  23. disabled
  24. v-decorator="['no', {rules: [{required: false, message: '编码不能为空'}]}]"/>
  25. </a-form-item>
  26. </row-item>
  27. <row-item>
  28. <a-form-item
  29. label="设备编号"
  30. :labelCol="BaseTool.Constant.labelCol"
  31. :wrapperCol="BaseTool.Constant.wrapperCol"
  32. >
  33. <a-input
  34. disabled
  35. style="width: 80%"
  36. v-decorator="['sbNo', {rules: [{required: false, message: '请选择设备'}]}]"/>
  37. <a-button type="primary" style="width: 20%" @click="handleSbSelect">选择</a-button>
  38. </a-form-item>
  39. </row-item>
  40. <row-item>
  41. <a-form-item
  42. label="标准名称"
  43. :labelCol="BaseTool.Constant.labelCol"
  44. :wrapperCol="BaseTool.Constant.wrapperCol"
  45. >
  46. <a-input
  47. v-decorator="['name', {rules: [{required: true, message: '标准名称不能为空'}]}]"/>
  48. </a-form-item>
  49. </row-item>
  50. <row-item>
  51. <a-form-item
  52. label="维护部位"
  53. :labelCol="BaseTool.Constant.labelCol"
  54. :wrapperCol="BaseTool.Constant.wrapperCol"
  55. >
  56. <a-input
  57. disabled
  58. style="width: 80%"
  59. v-decorator="['partName']"/>
  60. <a-button type="primary" style="width: 20%" @click="handlePartSelect">选择</a-button>
  61. </a-form-item>
  62. </row-item>
  63. <row-item>
  64. <a-form-item
  65. label="维护等级"
  66. :labelCol="BaseTool.Constant.labelCol"
  67. :wrapperCol="BaseTool.Constant.wrapperCol"
  68. >
  69. <a-select
  70. @change="changeLevel"
  71. v-decorator="['level', {rules: [{required: true, message: '维护等级不能为空'}]}]"
  72. placeholder="请选择">
  73. <a-select-option
  74. v-for="(label,value) in levelMap"
  75. :key="value"
  76. :label="label"
  77. :value="parseInt(value)">{{ label }}
  78. </a-select-option>
  79. </a-select>
  80. </a-form-item>
  81. </row-item>
  82. <row-item>
  83. <a-form-item
  84. label="执行人方式"
  85. :labelCol="BaseTool.Constant.labelCol"
  86. :wrapperCol="BaseTool.Constant.wrapperCol"
  87. >
  88. <a-select
  89. disabled
  90. v-decorator="['checkUserType', {rules: [{required: true, message: '执行人方式不能为空'}]}]"
  91. placeholder="请选择">
  92. <a-select-option
  93. v-for="(label,value) in checkUserTypeMap"
  94. :key="value"
  95. :label="label"
  96. :value="parseInt(value)">{{ label }}
  97. </a-select-option>
  98. </a-select>
  99. </a-form-item>
  100. </row-item>
  101. <row-item>
  102. <a-form-item
  103. label="计划周期"
  104. :labelCol="BaseTool.Constant.labelCol"
  105. :wrapperCol="BaseTool.Constant.wrapperCol"
  106. style="margin-bottom:0;"
  107. >
  108. <a-form-item :style="{ display: 'inline-block', width: '70%' }">
  109. <a-input-number
  110. style="width: 100%"
  111. :min="1"
  112. v-decorator="['period', {rules: [{required: true, message: '计划周期不能为空'}]}]"/>
  113. </a-form-item>
  114. <a-form-item
  115. :style="{ display: 'inline-block', width: '30%' }"
  116. >
  117. <a-select
  118. v-decorator="['periodType', {rules: [{required: true, message: '周期类型不能为空'}]}]"
  119. placeholder="请选择">
  120. <a-select-option
  121. v-for="(label,value) in periodTypeMap"
  122. :key="value"
  123. :label="label"
  124. :value="parseInt(value)">{{ label }}
  125. </a-select-option>
  126. </a-select>
  127. </a-form-item>
  128. </a-form-item>
  129. </row-item>
  130. <row-item>
  131. <a-form-item
  132. label="标准工时"
  133. :labelCol="BaseTool.Constant.labelCol"
  134. :wrapperCol="BaseTool.Constant.wrapperCol"
  135. >
  136. <a-input
  137. v-decorator="['standardHours']"
  138. suffix="小时"/>
  139. </a-form-item>
  140. </row-item>
  141. <row-item>
  142. <a-form-item
  143. label="类型"
  144. :labelCol="BaseTool.Constant.labelCol"
  145. :wrapperCol="BaseTool.Constant.wrapperCol"
  146. >
  147. <a-select
  148. disabled
  149. v-decorator="['type', {initialValue:checkType,rules: [{required: true, message: '类型不能为空'}]}]"
  150. placeholder="请选择">
  151. <a-select-option
  152. v-for="(label,value) in typeMap"
  153. :key="value"
  154. :label="label"
  155. :value="parseInt(value)">{{ label }}
  156. </a-select-option>
  157. </a-select>
  158. </a-form-item>
  159. </row-item>
  160. <row-item>
  161. <a-form-item
  162. label="排序"
  163. :labelCol="BaseTool.Constant.labelCol"
  164. :wrapperCol="BaseTool.Constant.wrapperCol"
  165. >
  166. <a-input-number
  167. :step="1"
  168. v-decorator="['sort', {initialValue: 1,rules: [{required: true, message: '排序不能为空'}]}]"/>
  169. </a-form-item>
  170. </row-item>
  171. <row-item>
  172. <a-form-item
  173. label="动作类型"
  174. :labelCol="BaseTool.Constant.labelCol"
  175. :wrapperCol="BaseTool.Constant.wrapperCol"
  176. >
  177. <a-select
  178. v-decorator="['actionType', {initialValue: 1,rules: [{required: true, message: '是否启用不能为空'}]}]"
  179. placeholder="请选择">
  180. <a-select-option
  181. v-for="(label,value) in actionTypeMap"
  182. :key="value"
  183. :label="label"
  184. :value="parseInt(value)">{{ label }}
  185. </a-select-option>
  186. </a-select>
  187. </a-form-item>
  188. </row-item>
  189. <!-- <row-item>
  190. <a-form-item
  191. v-show="false"
  192. label="是否启用"
  193. :labelCol="BaseTool.Constant.labelCol"
  194. :wrapperCol="BaseTool.Constant.wrapperCol"
  195. >
  196. <a-select
  197. v-show="false"
  198. v-decorator="['enable', {initialValue:1,rules: [{required: true, message: '是否启用不能为空'}]}]"
  199. placeholder="请选择">
  200. <a-select-option
  201. v-for="(label,value) in enableMap"
  202. :key="value"
  203. :label="label"
  204. :value="parseInt(value)">{{ label }}
  205. </a-select-option>
  206. </a-select>
  207. </a-form-item>
  208. </row-item>-->
  209. <row-item>
  210. <a-form-item
  211. label="上次实际执行日期"
  212. :labelCol="BaseTool.Constant.labelCol"
  213. :wrapperCol="BaseTool.Constant.wrapperCol"
  214. >
  215. <a-date-picker
  216. style="width: 100%"
  217. :format="BaseTool.Date.PICKER_NORM_DATE_PATTERN"
  218. v-decorator="['lastDate']" />
  219. </a-form-item>
  220. </row-item>
  221. <row-item>
  222. <a-form-item
  223. label="下次预计执行日期"
  224. :labelCol="BaseTool.Constant.labelCol"
  225. :wrapperCol="BaseTool.Constant.wrapperCol"
  226. >
  227. <a-date-picker
  228. disabled
  229. style="width: 100%"
  230. :format="BaseTool.Date.PICKER_NORM_DATE_PATTERN"
  231. v-decorator="['nextDate']" />
  232. </a-form-item>
  233. </row-item>
  234. </row-list>
  235. <row-list :col="1">
  236. <row-item>
  237. <a-form-item
  238. label="检查项目"
  239. :labelCol="BaseTool.Constant.labelCol2"
  240. :wrapperCol="BaseTool.Constant.wrapperCol2"
  241. >
  242. <a-textarea
  243. :rows="4"
  244. v-decorator="['requirement', {rules: [{required: true, message: '检查项目不能为空'}]}]"/>
  245. </a-form-item>
  246. </row-item>
  247. <row-item>
  248. <a-form-item
  249. label="执行标准"
  250. :labelCol="BaseTool.Constant.labelCol2"
  251. :wrapperCol="BaseTool.Constant.wrapperCol2"
  252. >
  253. <a-textarea
  254. :rows="4"
  255. v-decorator="['remark', {rules: [{required: false, message: '操作说明及标准不能为空'}]}]"/>
  256. </a-form-item>
  257. </row-item>
  258. </row-list>
  259. <row-list :col="2">
  260. <row-item>
  261. <a-form-item
  262. label="图片"
  263. :labelCol="BaseTool.Constant.labelCol"
  264. :wrapperCol="BaseTool.Constant.wrapperCol"
  265. >
  266. <a-upload
  267. :action="uploadUrl"
  268. :multiple="true"
  269. list-type="picture"
  270. accept="image/*"
  271. :file-list="this.defaultCheckImgList"
  272. @change="handleCheckImgChange"
  273. :headers="headers"
  274. >
  275. <a-button> <a-icon type="upload" /> 选择上传图片 </a-button>
  276. </a-upload>
  277. </a-form-item>
  278. </row-item>
  279. <row-item>
  280. <a-form-item
  281. label="文件"
  282. :labelCol="BaseTool.Constant.labelCol"
  283. :wrapperCol="BaseTool.Constant.wrapperCol"
  284. >
  285. <a-upload
  286. :action="uploadUrl"
  287. :multiple="true"
  288. :file-list="this.defaultCheckFileList"
  289. @change="handleCheckFileChange"
  290. :headers="headers"
  291. >
  292. <a-button> <a-icon type="upload" /> 选择上传文件 </a-button>
  293. </a-upload>
  294. </a-form-item>
  295. </row-item>
  296. </row-list>
  297. </a-form>
  298. <!-- <title-divider title="关联备件" width="100px"></title-divider>
  299. <div class="table-operator" style="margin-bottom: 8px;">
  300. <a-button style="margin-left:8px;" type="primary" @click="handleSpareSelect">
  301. <a-icon type="plus"/>
  302. 添加
  303. </a-button>
  304. <a-button class="margin-left8" size="small" type="danger" @click="handleDel">
  305. <a-icon type="delete"/>
  306. 删除
  307. </a-button>
  308. </div>
  309. <a-table
  310. :data-source="data"
  311. :columns="columns"
  312. bordered
  313. ref="table"
  314. tableLayout="auto"
  315. :row-selection="rowSelection"
  316. rowKey="bomId">
  317. <template slot="num" slot-scope="text, record">
  318. <div class="editable-cell-input-wrapper">
  319. <a-input :value="text" :id="record.spareId + ',num'" @change="$event => onQuantityChange($event, record.id, 'num')" />
  320. </div>
  321. </template>
  322. <span slot="action" slot-scope="record">
  323. <template>
  324. &lt;!&ndash; <a @click="handleDetailSelect(record)">修改</a>
  325. <a-divider type="vertical" />&ndash;&gt;
  326. <a-popconfirm title="是否要删除该条数据?" @confirm="handleDelOne(record)">
  327. <a>删除</a>
  328. </a-popconfirm>
  329. </template>
  330. </span>
  331. </a-table>-->
  332. <template slot="footer">
  333. <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
  334. </template>
  335. <part-info-select-modal ref="partInfoSelectModal" @selected="handlePartSelected"/>
  336. <sb-info-select-modal ref="sbInfoSelectModal" @selected="handleSbSelectd"/>
  337. <spare-part-info-select-modal-sb-info :type="'checkbox'" ref="spareSelectModal" @selected="handleSpareSelected"/>
  338. </a-modal>
  339. </template>
  340. <script>
  341. import pick from 'lodash.pick'
  342. import { STable, Ellipsis } from '@/components'
  343. import { addCheckStandard, fetchCheckStandard, updateCheckStandard } from '@/api/check/checkstandard'
  344. import { queryUser } from '@/api/upms/user'
  345. import { uploadUrl } from '@/api/upms/file'
  346. import PartInfoSelectModal from '@/views/part/info/modules/PartInfoSelectModal'
  347. import Vue from 'vue'
  348. import { ACCESS_TOKEN } from '@/store/mutation-types'
  349. import SparePartInfoSelectModalSbInfo from '@/views/sqarepartmanage/sparepartinfo/modules/SparePartInfoSelectModalSbInfo'
  350. import SbInfoSelectModal from '@/views/sb/info/modules/SbInfoSelectModal'
  351. export default {
  352. name: 'BaseCheckStandard',
  353. components: {
  354. STable,
  355. Ellipsis,
  356. SbInfoSelectModal,
  357. PartInfoSelectModal,
  358. SparePartInfoSelectModalSbInfo
  359. },
  360. data () {
  361. return {
  362. confirmLoading: false,
  363. modalTitle: null,
  364. form: this.$form.createForm(this),
  365. visible: false,
  366. sbId: null,
  367. levelMap: {},
  368. level: null,
  369. // 下拉框map
  370. typeMap: {},
  371. actionTypeMap: {},
  372. paramTypeMap: {},
  373. enableMap: {},
  374. checkUserTypeMap: {},
  375. periodTypeMap: {},
  376. checkImgList: [], // 图片
  377. checkFileList: [], // 文档
  378. defaultCheckImgList: [],
  379. defaultCheckFileList: [],
  380. userList: {},
  381. editingKey: '',
  382. uploadUrl: uploadUrl,
  383. headers: {
  384. Authorization: 'Bearer ' + Vue.ls.get(ACCESS_TOKEN)
  385. },
  386. rowSelection: {
  387. onChange: (selectedRowKeys, selectedRows) => {
  388. this.selectedRowKeys = selectedRowKeys
  389. this.selectedRows = selectedRows
  390. }
  391. },
  392. // 表头
  393. columns: [
  394. {
  395. title: '名称',
  396. dataIndex: 'spareName'
  397. },
  398. {
  399. title: '规格型号',
  400. dataIndex: 'ggxh'
  401. },
  402. {
  403. title: '数量',
  404. dataIndex: 'num',
  405. width: 150,
  406. scopedSlots: { customRender: 'num' }
  407. },
  408. {
  409. title: '操作',
  410. key: 'action',
  411. checked: true,
  412. align: 'center',
  413. // fixed: 'right',
  414. scopedSlots: { customRender: 'action' }
  415. }
  416. ],
  417. data: [],
  418. cacheData: [],
  419. selectedRowKeys: [],
  420. selectedRows: [],
  421. options: {
  422. rowSelection: {
  423. selectedRowKeys: this.selectedRowKeys
  424. }
  425. }
  426. }
  427. },
  428. props: {
  429. /**
  430. * 检查类型: 1-点检 2-巡检
  431. */
  432. checkType: {
  433. type: Number,
  434. default: 2
  435. }
  436. },
  437. created () {
  438. // 下拉框map
  439. this.paramTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_STANDARD_PARAM_TYPE)
  440. this.typeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_STANDARD_TYPE)
  441. this.periodTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_PLAN_PERIOD_TYPE)
  442. this.actionTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_PLAN_ACTION_TYPE)
  443. this.enableMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.YES_NO)
  444. this.checkUserTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_USER_TYPE)
  445. this.levelMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_PLAN_LEVEL)
  446. },
  447. methods: {
  448. base (record, sbId, sbNo) {
  449. this.visible = true
  450. this.selectedRowKeys = []
  451. this.selectedRows = []
  452. this.form.resetFields()
  453. queryUser({}).then(res => {
  454. this.userList = res.data
  455. })
  456. // 如果是空标识添加
  457. if (this.BaseTool.Object.isBlank(record)) {
  458. this.modalTitle = '添加'
  459. this.data = []
  460. this.cacheData = []
  461. if (sbId != null) {
  462. this.sbId = sbId
  463. const { form: { setFieldsValue } } = this
  464. // 日期处理
  465. this.$nextTick(() => {
  466. setFieldsValue({ sbId: sbId, sbNo: sbNo })
  467. })
  468. }
  469. return
  470. }
  471. this.modalTitle = '编辑'
  472. if (this.BaseTool.Object.isBlank(record.id)) {
  473. this.modalTitle = '复制'
  474. }
  475. this.sbId = record.sbId
  476. this.level = record.level
  477. // 查询列表
  478. if (record.id !== null) {
  479. fetchCheckStandard({ id: record.id }).then(res => {
  480. this.data = res.data.detailList
  481. })
  482. } else {
  483. this.data = record.detailList
  484. }
  485. this.checkImgList = record.checkImgList
  486. this.checkFileList = record.checkFileList
  487. if (record.lastDate != null) {
  488. record.lastDate = this.BaseTool.Moment(record.lastDate, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
  489. this.$nextTick(() => {
  490. setFieldsValue(Object.assign(pick(record, [
  491. 'lastDate'
  492. ])))
  493. })
  494. }
  495. if (record.nextDate != null) {
  496. record.nextDate = this.BaseTool.Moment(record.nextDate, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
  497. this.$nextTick(() => {
  498. setFieldsValue(Object.assign(pick(record, [
  499. 'nextDate'
  500. ])))
  501. })
  502. }
  503. if (this.checkImgList == null) {
  504. this.defaultCheckImgList = this.BaseTool.UPLOAD.transImg(this.checkImgList)
  505. }
  506. if (this.checkImgList == null) {
  507. this.defaultCheckFileList = this.BaseTool.UPLOAD.transImg(this.checkFileList)
  508. }
  509. const { form: { setFieldsValue } } = this
  510. // 日期处理
  511. this.$nextTick(() => {
  512. setFieldsValue(Object.assign(pick(record, [
  513. 'id',
  514. 'sbId',
  515. 'sbNo',
  516. 'name',
  517. // 'no',
  518. // 'type',
  519. 'period',
  520. 'level',
  521. 'part',
  522. 'partName',
  523. 'checkUserType',
  524. 'checkUserId',
  525. 'periodType',
  526. 'standardHours',
  527. // 'actionType',
  528. // 'enable',
  529. 'requirement',
  530. 'nextDate',
  531. 'lastDate',
  532. 'remark'
  533. ])))
  534. })
  535. },
  536. save () {
  537. const { form: { validateFieldsAndScroll } } = this
  538. this.confirmLoading = true
  539. validateFieldsAndScroll((errors, values) => {
  540. if (errors) {
  541. this.confirmLoading = false
  542. return
  543. }
  544. // 上传文件
  545. values.checkImgList = this.checkImgList
  546. values.checkFileList = this.checkFileList
  547. values.nextDate = values.nextDate ? this.BaseTool.Date.formatter(values.nextDate, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN) : null
  548. values.lastDate = values.lastDate ? this.BaseTool.Date.formatter(values.lastDate, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN) : null
  549. // 备件列表
  550. values.detailList = this.data
  551. if (this.BaseTool.String.isBlank(values.id)) {
  552. addCheckStandard(values)
  553. .then(() => {
  554. this.handleCancel(values)
  555. }).catch(() => {
  556. this.confirmLoading = false
  557. })
  558. } else {
  559. updateCheckStandard(values)
  560. .then(() => {
  561. this.handleCancel(values)
  562. }).catch(() => {
  563. this.confirmLoading = false
  564. })
  565. }
  566. })
  567. },
  568. handleCancel (values) {
  569. this.visible = false
  570. this.data = []
  571. this.confirmLoading = false
  572. this.selectedRowKeys = []
  573. this.selectedRows = []
  574. this.form.resetFields()
  575. if (this.BaseTool.Object.isNotBlank(values)) {
  576. this.$emit('ok', values)
  577. }
  578. },
  579. handleSbSelect () {
  580. this.$refs.sbInfoSelectModal.base()
  581. },
  582. handleSbSelectd (keys, rows) {
  583. const [ key ] = keys
  584. const [ row ] = rows
  585. const { form: { setFieldsValue } } = this
  586. this.sbId = key
  587. // 日期处理
  588. this.$nextTick(() => {
  589. setFieldsValue(Object.assign({
  590. 'sbId': key,
  591. 'sbNo': row.no,
  592. 'part': null,
  593. 'partName': null
  594. }))
  595. })
  596. },
  597. handlePartSelect () {
  598. const sbId = this.form.getFieldValue('sbId')
  599. if (this.BaseTool.Object.isBlank(sbId)) {
  600. this.$message.error('请先选择设备')
  601. }
  602. this.$refs.partInfoSelectModal.base({ sbId })
  603. },
  604. handlePartSelected (keys, rows) {
  605. const [ key ] = keys
  606. const [ row ] = rows
  607. const { form: { setFieldsValue } } = this
  608. this.$nextTick(() => {
  609. setFieldsValue(Object.assign({
  610. 'part': key,
  611. 'partName': row.name
  612. }))
  613. })
  614. },
  615. handleCheckImgChange (info) {
  616. this.defaultCheckImgList = info.fileList
  617. this.checkImgList = this.setFileList(info, 1)
  618. },
  619. handleCheckFileChange (info) {
  620. this.defaultCheckFileList = info.fileList
  621. this.checkFileList = this.setFileList(info, 2)
  622. },
  623. setFileList (info, type) {
  624. const file = info.file
  625. const fileList = info.fileList
  626. if (file.status === 'done') {
  627. return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
  628. } else if (file.status === 'removed') {
  629. return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
  630. } else if (file.status === 'error') {
  631. this.$message.error('上传失败')
  632. return null
  633. }
  634. },
  635. handleSpareSelect () {
  636. this.$refs.spareSelectModal.base(null, { sbId: this.sbId })
  637. },
  638. handleSpareSelected (record, keys, rows) {
  639. const addData = []
  640. for (let i = 0; i < rows.length; i++) {
  641. addData.push({ sbId: this.sbId, spareId: rows[i].id, spareName: rows[i].name, num: 1 })
  642. }
  643. const { data } = this
  644. for (let i = 0; i < rows.length; i++) {
  645. let find = false
  646. for (let j = 0; j < data.length; j++) {
  647. if (rows[i].spareId === data[j].spareId) {
  648. find = true
  649. break
  650. }
  651. }
  652. if (!find) {
  653. const selectData = {}
  654. selectData.spareId = rows[i].spareId
  655. selectData.spareName = rows[i].name
  656. selectData.ggxh = rows[i].ggxh
  657. selectData.sbId = this.sbId
  658. selectData.bomId = rows[i].id
  659. selectData.num = 1
  660. data.push(selectData)
  661. }
  662. }
  663. },
  664. handleDel () {
  665. const data = [...this.data]
  666. if (this.selectedRowKeys.length === 0) {
  667. this.$message.error('请至少选择一条数据')
  668. return
  669. }
  670. this.data = data.filter(item => !this.selectedRowKeys.includes(item.bomId))
  671. },
  672. handleDelOne (record) {
  673. const data = [...this.data]
  674. this.data = data.filter(item => record.bomId !== item.bomId)
  675. },
  676. changeLevel (value) {
  677. this.level = value
  678. const { form: { setFieldsValue } } = this
  679. // 日期处理
  680. this.$nextTick(() => {
  681. setFieldsValue({ checkUserType: value })
  682. })
  683. },
  684. onQuantityChange (e, id, attr) {
  685. const value = e.target.value
  686. console.log(value)
  687. if (value !== 0 && !value) {
  688. return
  689. }
  690. const data = [...this.data]
  691. const target = data.find(item => item.id === id)
  692. if (target) {
  693. target[attr] = value
  694. this.data = data
  695. }
  696. }
  697. }
  698. }
  699. </script>