editModal.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973
  1. <template>
  2. <ele-modal
  3. :title="title"
  4. :visible.sync="visible"
  5. :close-on-click-modal="false"
  6. @close="handleClose"
  7. resizable
  8. maxable
  9. width="80%"
  10. >
  11. <div>
  12. <el-form ref="formRef" :model="form" :rules="rules" label-width="130px">
  13. <header-title title="事项信息"></header-title>
  14. <el-row style="margin-bottom: 20px">
  15. <el-col :span="8">
  16. <el-form-item label="记录编码">
  17. <el-input
  18. v-model="form.code"
  19. placeholder="系统自动生成"
  20. disabled
  21. ></el-input>
  22. </el-form-item>
  23. </el-col>
  24. <el-col :span="8">
  25. <el-form-item label="类型" required prop="itemType">
  26. <DictSelection
  27. dictName="记录规则事项类型"
  28. clearable
  29. v-model="form.itemType"
  30. @change="itemTypeChange"
  31. >
  32. </DictSelection>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="8">
  36. <el-form-item label="执行方式" required prop="executeMethod">
  37. <DictSelection
  38. dictName="记录规则执行方式"
  39. clearable
  40. v-model="form.executeMethod"
  41. disabled
  42. >
  43. </DictSelection>
  44. </el-form-item>
  45. </el-col>
  46. </el-row>
  47. <el-row>
  48. <el-col :span="8">
  49. <el-form-item
  50. v-if="form.itemType == '1'"
  51. label="选择设备"
  52. required
  53. prop="deviceName"
  54. >
  55. <div class="mask-box" @click="selectDeviceId">
  56. <el-input
  57. v-model="form.deviceName"
  58. placeholder="请选择设备"
  59. size="small"
  60. :readonly="true"
  61. >
  62. <template #append>
  63. <el-button size="small">选择设备</el-button>
  64. </template>
  65. </el-input>
  66. </div>
  67. </el-form-item>
  68. </el-col>
  69. <el-col v-if="form.itemType == '3'" :span="8">
  70. <el-form-item label="关联任务">
  71. <el-input
  72. v-model="form.itemTaskName"
  73. placeholder="请输入任务名称"
  74. ></el-input>
  75. </el-form-item>
  76. </el-col>
  77. <el-col v-if="form.itemType == '2'" :span="8">
  78. <el-form-item label="关联记录规则" required prop="ruleName">
  79. <div class="mask-box" @click="selectReleaseId">
  80. <el-input
  81. v-model="form.ruleName"
  82. placeholder="请选择记录规则名称"
  83. size="small"
  84. readonly
  85. >
  86. <template #append>
  87. <el-button size="small">选择规则</el-button>
  88. </template>
  89. </el-input>
  90. </div>
  91. </el-form-item>
  92. </el-col>
  93. <el-col v-if="form.itemType == '2'" :span="8">
  94. <el-form-item label="记录规则分类">
  95. <DictSelection
  96. dictName="记录规则类型"
  97. v-model="form.recordRulesClassify"
  98. disabled
  99. >
  100. </DictSelection>
  101. </el-form-item>
  102. </el-col>
  103. <el-col v-if="form.itemType == '1'" :span="8">
  104. <el-form-item label="关联事项规则" required prop="ruleName">
  105. <div class="mask-box" @click="selectRulesId">
  106. <el-input
  107. v-model="form.ruleName"
  108. placeholder="请选择设备有关计划规则,如保养规则,巡点检规则等"
  109. size="small"
  110. readonly
  111. >
  112. <template #append>
  113. <el-button size="small">选择规则</el-button>
  114. </template>
  115. </el-input>
  116. </div>
  117. </el-form-item></el-col
  118. >
  119. </el-row>
  120. <header-title title="关联产品" style="margin-top: 20px"></header-title>
  121. <el-row style="margin-bottom: 20px">
  122. <el-col :span="8">
  123. <el-form-item label="生产工单号" prop="workOrderCode">
  124. <el-select
  125. v-model="form.workOrderCode"
  126. placeholder="请选择生产工单"
  127. style="width: 100%"
  128. filterable
  129. remote
  130. clearable
  131. :remote-method="getWorkOrderList"
  132. @change="workOrderCodeChange"
  133. >
  134. <el-option
  135. v-for="item in workOrderList"
  136. :key="item.id"
  137. :label="item.code"
  138. :value="item.code"
  139. >
  140. </el-option>
  141. </el-select>
  142. </el-form-item>
  143. </el-col>
  144. <el-col :span="8">
  145. <el-form-item label="工序名称" prop="produceTaskId">
  146. <el-select
  147. v-model="form.produceTaskId"
  148. placeholder="请选择工序"
  149. style="width: 100%"
  150. @change="produceTaskIdChange"
  151. >
  152. <el-option
  153. v-for="item in produceTaskList"
  154. :key="item.taskId"
  155. :label="item.taskTypeName"
  156. :value="item.taskId"
  157. >
  158. </el-option>
  159. </el-select>
  160. </el-form-item>
  161. </el-col>
  162. <el-col :span="8">
  163. <el-form-item label="牌号">
  164. <el-input
  165. v-model="form.brandNo"
  166. placeholder="请输入牌号"
  167. ></el-input>
  168. </el-form-item>
  169. </el-col>
  170. </el-row>
  171. <el-row style="margin-bottom: 20px">
  172. <el-col :span="8">
  173. <el-form-item
  174. label="产品编码"
  175. :required="form.recordRulesClassify != '4'"
  176. :prop="form.recordRulesClassify != '4' ? 'productCode' : ''"
  177. >
  178. <el-input
  179. v-model="form.productCode"
  180. placeholder="请选择产品信息"
  181. @click.native="openProductDialog"
  182. readonly
  183. >
  184. <template #append>
  185. <el-button size="small">选择产品</el-button>
  186. </template>
  187. </el-input>
  188. </el-form-item>
  189. </el-col>
  190. <el-col :span="8">
  191. <el-form-item
  192. label="产品名称"
  193. :required="form.recordRulesClassify != '4'"
  194. :prop="form.recordRulesClassify != '4' ? 'productName' : ''"
  195. >
  196. <el-input
  197. v-model="form.productName"
  198. placeholder="请选择产品信息"
  199. @click.native="openProductDialog"
  200. readonly
  201. >
  202. <template #append>
  203. <el-button size="small">选择产品</el-button>
  204. </template>
  205. </el-input>
  206. </el-form-item>
  207. </el-col>
  208. <el-col :span="8">
  209. <el-form-item label="批次号" prop="batchNo">
  210. <el-input
  211. v-model="form.batchNo"
  212. placeholder="请输入"
  213. :disabled="Boolean(form.workOrderId)"
  214. ></el-input>
  215. </el-form-item>
  216. </el-col>
  217. </el-row>
  218. <el-row style="margin-bottom: 20px">
  219. <el-col :span="8">
  220. <el-form-item label="规格" prop="specification">
  221. <el-input
  222. v-model="form.specification"
  223. placeholder="请输入"
  224. :disabled="Boolean(form.workOrderId)"
  225. ></el-input>
  226. </el-form-item>
  227. </el-col>
  228. <el-col :span="8">
  229. <el-form-item label="型号" prop="productModel">
  230. <el-input
  231. v-model="form.productModel"
  232. placeholder="请输入"
  233. :disabled="Boolean(form.workOrderId)"
  234. ></el-input>
  235. </el-form-item>
  236. </el-col>
  237. <el-col :span="8">
  238. <el-form-item
  239. label="要求生产数量"
  240. :prop="form.recordRulesClassify != '4' ? 'formingNum' : ''"
  241. >
  242. <el-input
  243. v-model.number="form.formingNum"
  244. placeholder="请输入"
  245. :disabled="Boolean(form.workOrderId)"
  246. ></el-input>
  247. </el-form-item>
  248. </el-col>
  249. </el-row>
  250. <header-title
  251. v-if="form.executeMethod == 2"
  252. title="检查项目"
  253. style="margin-top: 20px"
  254. ></header-title>
  255. <!-- 记录规则 -->
  256. <div v-if="form.executeMethod == 2">
  257. <el-table :data="form.details" style="width: 100%">
  258. <el-table-column type="index" label="序号" width="50">
  259. </el-table-column>
  260. <el-table-column label="检查内容">
  261. <template slot-scope="scope">
  262. <div v-if="form.recordRulesClassify == 4">
  263. {{ scope.row.productName || scope.row.name }}
  264. </div>
  265. <div v-else>
  266. {{ scope.row.paramValue }}
  267. </div>
  268. </template>
  269. </el-table-column>
  270. <el-table-column v-if="form.recordRulesClassify != '4'" label="检查工具">
  271. <template slot-scope="{ row }">
  272. <el-link :underline="false" style="cursor: pointer">
  273. <div class="ele-cell">
  274. <div @click="handleAdd(row)">
  275. {{ row.toolNames ? row.toolNames : '请选择' }}
  276. </div>
  277. <i
  278. v-if="!row.toolNames"
  279. class="el-icon-arrow-down"
  280. @click="handleAdd(row)"
  281. ></i>
  282. <i v-else class="el-icon-close" @click="clearTool(row)"></i>
  283. </div>
  284. </el-link>
  285. </template>
  286. </el-table-column>
  287. <el-table-column v-if="form.recordRulesClassify != '4'" label="检查人">
  288. <template slot-scope="scope">
  289. <div
  290. @click="openSelectUser(scope.row)"
  291. style="display: flex; align-items: center; cursor: pointer"
  292. >
  293. <div>{{ showCheckUserNames(scope.row.checkUsers) }}</div
  294. ><i class="el-icon-caret-bottom"></i>
  295. </div>
  296. </template>
  297. </el-table-column>
  298. <el-table-column v-if="form.recordRulesClassify != '4'" label="检查情况">
  299. <template slot-scope="scope">
  300. <div>
  301. <el-radio-group v-model="scope.row.checkStatus">
  302. <el-radio :label="1">已检查</el-radio>
  303. <el-radio :label="0">未检查</el-radio>
  304. </el-radio-group>
  305. </div>
  306. </template>
  307. </el-table-column>
  308. <el-table-column label="描述">
  309. <template slot-scope="scope">
  310. <div>
  311. <el-input
  312. type="text"
  313. :rows="1"
  314. placeholder="请输入"
  315. v-model="scope.row.errorMsg"
  316. >
  317. <template v-if="scope.row.unitName" slot="append">
  318. <div>{{ scope.row.unitName }}</div>
  319. </template>
  320. </el-input>
  321. </div>
  322. </template>
  323. </el-table-column>
  324. <el-table-column v-if="form.recordRulesClassify != '4'" label="检查结果">
  325. <template slot-scope="scope">
  326. <div>
  327. <el-radio-group v-model="scope.row.checkResult">
  328. <el-radio :label="1">合格</el-radio>
  329. <el-radio :label="0">不合格</el-radio>
  330. </el-radio-group>
  331. </div>
  332. </template>
  333. </el-table-column>
  334. </el-table>
  335. </div>
  336. </el-form>
  337. </div>
  338. <template v-if="type == 'detail'" v-slot:footer>
  339. <el-button @click="handleClose" :loading="butLoading">关 闭</el-button>
  340. </template>
  341. <template v-else v-slot:footer>
  342. <template
  343. v-if="
  344. ($hasPermission('mes:producetaskrulerecord:tempsu') ||
  345. $hasPermission('mes:producetaskrulerecord:tempsus')) &&
  346. form.executeMethod == '1'
  347. "
  348. >
  349. <el-button
  350. v-if="$hasPermission('mes:producetaskrulerecord:tempsu')"
  351. type="primary"
  352. @click="save"
  353. :loading="butLoading"
  354. :disabled="form.executeStatus != 0"
  355. >保存</el-button
  356. >
  357. <el-button
  358. v-if="$hasPermission('mes:producetaskrulerecord:tempsus')"
  359. type="primary"
  360. @click="submit"
  361. :loading="butLoading"
  362. >执行</el-button
  363. >
  364. </template>
  365. <template
  366. v-if="
  367. ($hasPermission('mes:producetaskrecordrulesrecord:saveorupdate') ||
  368. $hasPermission('mes:producetaskrecordrulesrecord:sus')) &&
  369. form.executeMethod == '2'
  370. "
  371. >
  372. <el-button
  373. v-if="$hasPermission('mes:producetaskrecordrulesrecord:saveorupdate')"
  374. type="primary"
  375. @click="save"
  376. :loading="butLoading"
  377. :disabled="form.executeStatus != 0"
  378. >保存</el-button
  379. >
  380. <el-button
  381. v-if="$hasPermission('mes:producetaskrecordrulesrecord:sus')"
  382. type="primary"
  383. @click="submit"
  384. :loading="butLoading"
  385. >执行</el-button
  386. >
  387. </template>
  388. <template v-if="form.executeMethod == '3'">
  389. <el-button
  390. type="primary"
  391. @click="save"
  392. :loading="butLoading"
  393. :disabled="form.executeStatus != 0"
  394. >保存</el-button
  395. >
  396. <el-button type="primary" @click="submit" :loading="butLoading"
  397. >执行</el-button
  398. >
  399. </template>
  400. <el-button @click="handleClose" :loading="butLoading">取 消</el-button>
  401. </template>
  402. <selectDevices
  403. ref="deviceSelectDialog"
  404. selectType="single"
  405. @chooseEquipment="chooseEquipment"
  406. ></selectDevices>
  407. <selectMatterRules
  408. ref="selectMatterRulesRef"
  409. @chooseRules="chooseRules"
  410. :filterType="[1, 2, 5]"
  411. ></selectMatterRules>
  412. <selectReleaseRules
  413. ref="selectReleaseRulesRef"
  414. @chooseRules="chooseReleaseRules"
  415. :notProduceTaskConfig="reportWorkType == 2"
  416. ></selectReleaseRules>
  417. <programRulesDialog
  418. ref="programRulesDialogRef"
  419. :dialogTitle="dialogTitle"
  420. @reload="reload"
  421. :isTempRecord="1"
  422. />
  423. <releaseRulesDialog
  424. v-model="showReleaseRulesDialog"
  425. ref="releaseRulesDialogRef"
  426. @reload="reload"
  427. :isTempRecord="1"
  428. />
  429. <taskDialog ref="taskDialogRef" @reload="reload" :isTempRecord="1" />
  430. <EquipmentDialog ref="EquipmentDialogRef" isMultiple="0" @choose="choose" />
  431. <!-- 选择用户 -->
  432. <SelectUser
  433. ref="SelectUserRef"
  434. v-model="showSelectUser"
  435. multipleSelect
  436. @selectUserFinished="selectUserFinished"
  437. ></SelectUser>
  438. <toolModal ref="toolModalRef" @chooseModal="chooseModal" />
  439. </ele-modal>
  440. </template>
  441. <script>
  442. import { submit } from '@/api/entrust';
  443. import dictMixins from '@/mixins/dictMixins';
  444. import selectMatterRules from '@/components/selectMatterRules/select-matter-rules.vue';
  445. import selectReleaseRules from '@/components/selectReleaseRules/select-release-rules.vue';
  446. import selectDevices from '@/components/selectDevices/index.vue';
  447. import { produceOrder } from '@/api/aps/index.js';
  448. import { getTaskInstanceList } from '@/api/produce/job.js';
  449. import { tempSaveOrUpdate } from '@/api/producetaskrulerecord/index.js';
  450. import programRulesDialog from '@/views/produce/components/prenatalExamination/programRulesDialog.vue';
  451. import releaseRulesDialog from '@/views/produce/components/prenatalExamination/releaseRulesDialog.vue';
  452. import taskDialog from '@/views/produce/components/prenatalExamination/taskDialog.vue';
  453. import { saveOrUpdate } from '@/api/producetaskrecordrulesrecord/index';
  454. import { getById } from '@/api/produceOrder/index.js';
  455. import EquipmentDialog from './EquipmentDialog.vue';
  456. import { recordRulesDetailPage } from '@/api/recordRules/index.js';
  457. import SelectUser from '@/components/select/SelectUser/index.vue';
  458. import toolModal from './toolModal.vue';
  459. import { getById as producetaskrulerecordGetById } from '@/api/producetaskrecordrulesrecord/index.js';
  460. export default {
  461. name: 'editModal',
  462. mixins: [dictMixins],
  463. emits: ['reload'],
  464. components: {
  465. selectMatterRules,
  466. selectReleaseRules,
  467. selectDevices,
  468. programRulesDialog,
  469. releaseRulesDialog,
  470. EquipmentDialog,
  471. taskDialog,
  472. SelectUser,
  473. toolModal
  474. },
  475. props: {
  476. // 1-产前准备,2-过程监测,3-产后检查
  477. reportWorkType: {
  478. type: Number,
  479. default: 1
  480. }
  481. },
  482. data() {
  483. const formBaseData = {
  484. id: null,
  485. // 设备id
  486. deviceId: null,
  487. //设备名称
  488. deviceName: '',
  489. // 记录规则执行方式,参考字典项:record_rules_execute_method
  490. executeMethod: '1',
  491. // 执行状态
  492. executeStatus: 0,
  493. // 记录规则事项类型,参考字典项:record_rules_item_type
  494. itemType: '1',
  495. // 工序ID
  496. produceTaskId: null,
  497. // 工序名称
  498. produceTaskName: '',
  499. // 记录规则报工类型,参考字典项:record_rules_report_work_type
  500. reportWorkType: null,
  501. // 规则id,包括事项规则id,记录规则id,根据事项类型区分
  502. ruleId: null,
  503. // 规则名称
  504. ruleName: '',
  505. // 任务id
  506. taskId: null,
  507. itemTaskName: '',
  508. // mes生产工单表工单号 code
  509. workOrderCode: '',
  510. // workOrderId mes生产工单表id
  511. workOrderId: null,
  512. // 产品编码
  513. productCode: null,
  514. // 产品型号
  515. productModel: null,
  516. // 产品名称
  517. productName: null,
  518. // 记录规则分类,字典项:record_sheet
  519. recordRulesClassify: '',
  520. // 产品批次号
  521. batchNo: '',
  522. // 牌号
  523. brandNo: '',
  524. // 产品规格
  525. specification: '',
  526. // 要求生产数量
  527. formingNum: null,
  528. // 是否临时执行
  529. isTempRecord: 1,
  530. // 记录规则详情
  531. details: []
  532. };
  533. return {
  534. visible: false,
  535. title: '',
  536. formBaseData,
  537. form: JSON.parse(JSON.stringify(formBaseData)),
  538. // 生产工单列表
  539. workOrderList: [],
  540. //工序名称列表
  541. produceTaskList: [],
  542. // 工单信息
  543. workOrderInfo: null,
  544. butLoading: false,
  545. showReleaseRulesDialog: false,
  546. dialogTitle: '',
  547. showSelectUser: false,
  548. currentRow: null,
  549. type: '',
  550. rules: {
  551. itemType: [
  552. { required: true, message: '请选择规则事项类型', trigger: 'blur' }
  553. ],
  554. deviceName: [
  555. { required: true, message: '请选择设备', trigger: 'blur' }
  556. ],
  557. ruleName: [
  558. { required: true, message: '请选择规则', trigger: 'blur' },
  559. { required: true, message: '请选择规则', trigger: 'change' }
  560. ],
  561. productCode: [
  562. {
  563. required: true,
  564. message: '请输入产品编码',
  565. trigger: 'blur'
  566. },
  567. {
  568. required: true,
  569. message: '请输入产品编码',
  570. trigger: 'change'
  571. }
  572. ],
  573. productName: [
  574. {
  575. required: true,
  576. message: '请输入产品名称',
  577. trigger: 'blur'
  578. },
  579. {
  580. required: true,
  581. message: '请输入产品编码',
  582. trigger: 'change'
  583. }
  584. ],
  585. formingNum: [
  586. {
  587. required: true,
  588. message: '请输入要求生产数量',
  589. trigger: 'blur'
  590. },
  591. {
  592. required: true,
  593. message: '请输入产品编码',
  594. trigger: 'change'
  595. }
  596. ],
  597. produceTaskId: [
  598. {
  599. validator: (rule, value, callback) => {
  600. if (this.form.workOrderCode) {
  601. if (!this.form.produceTaskId) {
  602. callback(new Error('请选择工序'));
  603. }
  604. }
  605. callback();
  606. },
  607. trigger: 'blur'
  608. }
  609. ]
  610. }
  611. };
  612. },
  613. computed: {
  614. reportWorkTypeName() {
  615. switch (this.reportWorkType) {
  616. case 1:
  617. return '产前准备';
  618. case 2:
  619. return '过程监测';
  620. default:
  621. return '产后检查';
  622. }
  623. }
  624. },
  625. created() {
  626. this.requestDict('记录规则报工类型');
  627. this.requestDict('记录规则执行方式');
  628. this.requestDict('记录规则事项类型');
  629. this.getWorkOrderList();
  630. },
  631. methods: {
  632. // 外部调用,打开弹窗
  633. open(type, data) {
  634. console.log('data', type, data);
  635. this.type = type;
  636. if (type == 'add') {
  637. this.title = `新增${this.reportWorkTypeName}事项`;
  638. } else if (type == 'edit' || type == 'detail') {
  639. this.title = `编辑${this.reportWorkTypeName}事项`;
  640. this.form.workOrderId = data.workOrderId;
  641. this.form.id = data.id;
  642. console.log('this.form', this.form);
  643. if (this.form.workOrderId) {
  644. this.getProductTaskList(this.form.workOrderId);
  645. // 根据工单id 获取详情
  646. this.getWorkOrderById(this.form.workOrderId);
  647. this.getDetias();
  648. }
  649. } else {
  650. }
  651. this.visible = true;
  652. },
  653. // 查询详情
  654. async getDetias() {
  655. const data = await producetaskrulerecordGetById(this.form.id);
  656. data.tools = data.tools || [];
  657. this.$util.assignObject(this.form, data);
  658. this.form.details = this.form.details.map((i) => {
  659. return {
  660. ...i,
  661. toolNames: i.tools.map((i) => i.toolName).join(',')
  662. };
  663. });
  664. console.log('this.form', this.form);
  665. },
  666. // 查询规则详情
  667. async getRulesDetias() {
  668. if (this.form.ruleId) {
  669. const { list } = await recordRulesDetailPage({
  670. pageNum: 1,
  671. size: 999,
  672. rulesId: this.form.ruleId
  673. });
  674. this.form.details = list.map((i) => {
  675. return {
  676. ...i,
  677. id: null,
  678. checkResult: null,
  679. checkStatus: null,
  680. checkStatusDesc: i.defaultValue || '',
  681. errorMsg: '',
  682. checkUsers: [],
  683. paramValue: i.paramValue,
  684. toolNames: i.tools.map((i) => i.toolName).join(',')
  685. };
  686. });
  687. }
  688. },
  689. // 关闭时清理表单
  690. handleClose() {
  691. this.form = JSON.parse(JSON.stringify(this.formBaseData));
  692. this.produceTaskList = [];
  693. this.$refs.formRef && this.$refs.formRef.resetFields();
  694. this.visible = false;
  695. },
  696. // 修改规则事项类型
  697. itemTypeChange() {
  698. this.form.executeMethod = this.form.itemType;
  699. this.form.ruleId = null;
  700. this.form.ruleName = '';
  701. this.form.details = [];
  702. },
  703. // 去选择设备
  704. selectDeviceId() {
  705. this.$refs.deviceSelectDialog.open([]);
  706. },
  707. // 设备选
  708. chooseEquipment(data, index, categoryId) {
  709. console.log('data', data, index, categoryId);
  710. this.form.deviceId = data?.id;
  711. this.form.deviceName = data?.name;
  712. },
  713. // 去选择记录规则
  714. selectReleaseId() {
  715. this.$refs.selectReleaseRulesRef.open();
  716. },
  717. // 选择记录规则
  718. chooseReleaseRules(rules) {
  719. console.log('rules', rules);
  720. this.form.ruleId = rules?.id;
  721. this.form.ruleName = rules?.name;
  722. this.form.recordRulesClassify = rules?.classify + '';
  723. this.getRulesDetias();
  724. // 重置表单验证
  725. this.$nextTick(() => {
  726. this.$refs.formRef.clearValidate([
  727. 'productCode',
  728. 'productName',
  729. 'formingNum'
  730. ]);
  731. });
  732. },
  733. // 去选择事项规则
  734. selectRulesId() {
  735. this.$refs.selectMatterRulesRef.open([this.form.ruleId]);
  736. },
  737. // 选择事项规则
  738. chooseRules(rules) {
  739. console.log('rules', rules);
  740. this.form.ruleId = rules?.id;
  741. this.form.ruleName = rules?.name;
  742. },
  743. // 获取生产工单号
  744. async getWorkOrderList(code = '') {
  745. if (typeof code != 'string') {
  746. code = '';
  747. }
  748. const { list } = await produceOrder({
  749. code,
  750. pageNum: 1,
  751. size: 50
  752. });
  753. console.log('生产工单', list);
  754. this.workOrderList = list;
  755. },
  756. // 选择生产工单
  757. workOrderCodeChange(code) {
  758. console.log('code', code);
  759. if (code) {
  760. const workOrder = this.workOrderList.find((i) => i.code == code);
  761. console.log('workOrder', workOrder);
  762. this.workOrderInfo = workOrder;
  763. this.form.workOrderId = workOrder.id;
  764. // 赋值产品信息
  765. this.form.productCode = workOrder.productCode;
  766. this.form.productModel = workOrder.productModel;
  767. this.form.productName = workOrder.productName;
  768. this.form.batchNo = workOrder.batchNo;
  769. this.form.specification = workOrder.specification;
  770. this.form.formingNum = workOrder.formingNum;
  771. this.form.brandNo = workOrder.brandNo;
  772. this.getProductTaskList(workOrder.id);
  773. } else {
  774. this.workOrderInfo = null;
  775. this.form.workOrderId = null;
  776. // 赋值产品信息
  777. this.form.productCode = null;
  778. this.form.productModel = null;
  779. this.form.productName = '';
  780. this.form.batchNo = '';
  781. this.form.specification = null;
  782. this.form.formingNum = null;
  783. this.form.produceTaskId = null;
  784. this.form.produceTaskName = '';
  785. this.form.brandNo = '';
  786. this.produceTaskList = [];
  787. }
  788. },
  789. // 获取工序列表
  790. async getProductTaskList(id) {
  791. const data = await getTaskInstanceList(id);
  792. console.log('data 工序列表', data);
  793. this.produceTaskList = data;
  794. },
  795. // 选择工序
  796. produceTaskIdChange() {
  797. const prodceTask = this.produceTaskList.find(
  798. (i) => i.taskId == this.form.produceTaskId
  799. );
  800. if (prodceTask) {
  801. this.form.produceTaskName = prodceTask.taskTypeName;
  802. }
  803. },
  804. // 执行
  805. submit() {
  806. this.$refs.formRef.validate((valid) => {
  807. if (!valid) {
  808. return '';
  809. }
  810. this.form.reportWorkType = this.reportWorkType;
  811. console.log('this.form', this.form);
  812. if (this.form.executeMethod == 1) {
  813. // 设备保养计划相关逻辑
  814. this.dialogTitle = '新增设备保养计划';
  815. this.$refs.programRulesDialogRef.init(
  816. this.form,
  817. this.workOrderInfo ? this.workOrderInfo : this.form,
  818. {
  819. name: this.form.produceTaskName
  820. }
  821. );
  822. } else if (this.form.executeMethod == 2) {
  823. this.$refs.releaseRulesDialogRef.open(
  824. this.form,
  825. this.workOrderInfo ? this.workOrderInfo : this.form
  826. );
  827. } else {
  828. // 任务确认
  829. this.$refs.taskDialogRef.open(
  830. this.form,
  831. this.workOrderInfo ? this.workOrderInfo : this.form
  832. );
  833. }
  834. });
  835. },
  836. // 保存
  837. save() {
  838. this.$refs.formRef.validate(async (valid) => {
  839. if (!valid) {
  840. return '';
  841. }
  842. this.form.reportWorkType = this.reportWorkType;
  843. console.log('this.form', this.form);
  844. try {
  845. this.butLoading = true;
  846. const id = await tempSaveOrUpdate(this.form);
  847. this.form.id = id;
  848. this.$message.success('保存成功!');
  849. this.$emit('reload');
  850. // this.handleClose();
  851. this.butLoading = false;
  852. } catch (error) {
  853. this.butLoading = false;
  854. }
  855. });
  856. },
  857. // 执行完成
  858. reload() {
  859. this.$emit('reload');
  860. this.handleClose();
  861. },
  862. // 获取工单详情
  863. async getWorkOrderById(id) {
  864. const data = await getById(id);
  865. console.log('工单详情', data);
  866. this.workOrderInfo = data;
  867. },
  868. openProductDialog() {
  869. if (this.form.workOrderId) {
  870. return this.$message.warning('已选择生产工单,不能修改产品信息');
  871. }
  872. this.$refs.EquipmentDialogRef.open();
  873. },
  874. // 选择产品
  875. choose(data) {
  876. console.log('data', data);
  877. const info = data[0];
  878. if (info) {
  879. this.form.productCode = info.code;
  880. this.form.productName = info.name;
  881. this.form.productModel = info.model;
  882. this.form.specification = info.specification;
  883. }
  884. },
  885. showCheckUserNames(userList) {
  886. if (userList.length == 0) return '请选择部门-选择员工';
  887. return userList
  888. .map((i) => {
  889. return i.groupName + '-' + i.userName;
  890. })
  891. .join(',');
  892. },
  893. openSelectUser(row) {
  894. this.currentRow = row;
  895. console.log('row', row);
  896. this.showSelectUser = true;
  897. },
  898. selectUserFinished(userInfo) {
  899. console.log('userInfo', userInfo);
  900. this.currentRow.checkUsers = userInfo.map((i) => {
  901. // 构建参数和接口的对应上
  902. return { ...i, userName: i.name, userId: i.id };
  903. });
  904. },
  905. // 选择工具
  906. handleAdd(row) {
  907. this.currentRow = row;
  908. this.$refs.toolModalRef.open(row.tools.map((i) => i.toolCode));
  909. },
  910. chooseModal(data) {
  911. console.log('data', data);
  912. this.currentRow.tools = data.map((i) => {
  913. return {
  914. toolCode: i.code,
  915. toolName: i.name
  916. };
  917. });
  918. this.currentRow.toolNames = this.currentRow.tools
  919. .map((i) => i.toolName)
  920. .join(',');
  921. },
  922. clearTool(row) {
  923. row.tools = [];
  924. row.toolNames = '';
  925. }
  926. }
  927. };
  928. </script>
  929. <style scoped lang="scss">
  930. .mask-box {
  931. position: relative;
  932. &::after {
  933. content: '';
  934. width: 100%;
  935. height: 100%;
  936. position: absolute;
  937. top: 0;
  938. left: 0;
  939. background: rgba(0, 0, 0, 0);
  940. cursor: pointer;
  941. }
  942. }
  943. </style>