InRequestForm.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  1. <template>
  2. <div class="app-container">
  3. <div class="page-header">
  4. <div class="header-content">
  5. <!-- 按钮区域 -->
  6. <div class="header-buttons">
  7. <el-button
  8. type="primary"
  9. :loading="formLoading"
  10. plain
  11. size="mini"
  12. :disabled="isFormDisabled"
  13. @click="submitForm"
  14. >
  15. 保 存
  16. </el-button>
  17. <!-- 提交菜单 -->
  18. <el-dropdown class="ml-5" trigger="click">
  19. <el-button type="primary" size="mini" plain>
  20. 提交菜单
  21. <i class="el-icon-arrow-down el-icon--right" />
  22. </el-button>
  23. <el-dropdown-menu slot="dropdown">
  24. <el-dropdown-item :disabled="isButtonDisabled('commit')" @click.native="commit">提交</el-dropdown-item>
  25. <el-dropdown-item :disabled="isButtonDisabled('cancel')" @click.native="cancel">撤销</el-dropdown-item>
  26. </el-dropdown-menu>
  27. </el-dropdown>
  28. <!-- 审批菜单 -->
  29. <el-dropdown class="ml-5 mr-5" trigger="click">
  30. <el-button type="warning" size="mini" plain>
  31. 审批菜单
  32. <i class="el-icon-arrow-down el-icon--right" />
  33. </el-button>
  34. <el-dropdown-menu slot="dropdown">
  35. <el-dropdown-item :disabled="isButtonDisabled('audit')" @click.native="audit">审核</el-dropdown-item>
  36. <el-dropdown-item :disabled="isButtonDisabled('antiAudit')" @click.native="antiAudit">反审核</el-dropdown-item>
  37. </el-dropdown-menu>
  38. </el-dropdown>
  39. <!-- <el-button @click="reset" plain>重置</el-button> -->
  40. <el-button
  41. type="primary"
  42. size="mini"
  43. plain
  44. :disabled="isFormDisabled"
  45. @click="add()">新增明细
  46. </el-button>
  47. <el-button plain size="mini" @click="handleCancel">返回</el-button>
  48. </div>
  49. </div>
  50. </div>
  51. <el-form
  52. ref="formRef"
  53. v-loading="formLoading"
  54. :model="formData"
  55. :rules="formRules"
  56. label-width="150px"
  57. class="form-container"
  58. >
  59. <el-row :gutter="20">
  60. <el-col :span="12"
  61. ><el-form-item label="业务类型" prop="businessType">
  62. <el-select
  63. v-model="formData.businessType"
  64. placeholder="请选择业务类型"
  65. :disabled="!isEditable"
  66. @change="changeBusinessType"
  67. >
  68. <el-option
  69. v-for="dict in getDictDatas('in_business_type')"
  70. :key="dict.value"
  71. :label="dict.label"
  72. :value="dict.value"
  73. />
  74. </el-select>
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="12">
  78. <el-form-item label="申请单号" prop="remark">
  79. <el-input
  80. v-model="formData.requestNo"
  81. :disabled="true"
  82. placeholder="保存后自动生成"
  83. /> </el-form-item
  84. ></el-col>
  85. <el-col :span="12">
  86. <el-form-item label="部门" prop="deptCode">
  87. <DepartMentSelect
  88. ref="departMentSelect"
  89. v-model="formData.deptCode"
  90. :disabled="isFormDisabled || !formData.businessType"
  91. placeholder="请选择部门"
  92. clearable
  93. @change="selectDepart"
  94. />
  95. </el-form-item>
  96. </el-col>
  97. <el-col :span="12"
  98. ><el-form-item label="业务分类名称" prop="businessDescribe">
  99. <el-select
  100. v-model="formData.businessDescribe"
  101. :disabled="isFormDisabled || !formData.businessType"
  102. placeholder="请选择业务类型"
  103. @change="changeBusinessDescribe"
  104. >
  105. <el-option
  106. v-for="dict in businessDescribeList"
  107. :key="dict.label"
  108. :label="dict.label"
  109. :value="dict.label"
  110. />
  111. </el-select> </el-form-item
  112. ></el-col>
  113. <el-col :span="12"
  114. ><el-form-item label="优先级" prop="priority">
  115. <el-select
  116. v-model="formData.priority"
  117. :disabled="isFormDisabled || !formData.businessType"
  118. placeholder="请选择优先级"
  119. >
  120. <el-option
  121. v-for="dict in getDictDatas('priority')"
  122. :key="dict.value"
  123. :label="dict.label"
  124. :value="dict.value"
  125. />
  126. </el-select>
  127. </el-form-item>
  128. </el-col>
  129. <el-col :span="12">
  130. <el-form-item label="供应商编码" prop="supplierCode">
  131. <el-input
  132. v-model="formData.supplierCode"
  133. :disabled="isFormDisabled || !formData.businessType"
  134. placeholder="请输入供应商编码"
  135. />
  136. </el-form-item>
  137. </el-col>
  138. <el-col :span="12">
  139. <el-form-item label="客户编码" prop="customerCode">
  140. <el-input
  141. v-model="formData.customerCode"
  142. :disabled="isFormDisabled || !formData.businessType"
  143. placeholder="请输入客户编码"
  144. />
  145. </el-form-item>
  146. </el-col>
  147. <el-col :span="12">
  148. <el-form-item label="源单编号" prop="sourceOrderNo">
  149. <el-select
  150. v-model="formData.sourceOrderNo"
  151. filterable
  152. remote
  153. :disabled="isFormDisabled || !formData.businessType"
  154. reserve-keyword
  155. placeholder="请输入源单编号"
  156. :remote-method="remoteMethod"
  157. :loading="loading"
  158. @change="changeSourceOrderNo"
  159. >
  160. <el-option
  161. v-for="item in sourceOrderNoList"
  162. :key="item.sourceOrderNo"
  163. :label="item.sourceOrderNo"
  164. :value="item.sourceOrderNo"
  165. />
  166. </el-select>
  167. </el-form-item>
  168. </el-col>
  169. <el-col :span="12">
  170. <el-form-item label="预计出入库时间" prop="expectedTime">
  171. <el-date-picker
  172. v-model="formData.expectedTime"
  173. :disabled="isFormDisabled || !formData.businessType"
  174. clearable
  175. type="date"
  176. value-format="timestamp"
  177. placeholder="选择预计出入库时间"
  178. /> </el-form-item
  179. ></el-col>
  180. <el-col :span="12">
  181. <el-form-item label="实际出入库时间" prop="actualTime">
  182. <el-date-picker
  183. v-model="formData.actualTime"
  184. clearable
  185. :disabled="true"
  186. type="date"
  187. value-format="timestamp"
  188. placeholder="选择实际出入库时间"
  189. /> </el-form-item
  190. ></el-col>
  191. <el-col :span="12">
  192. <el-form-item label="备注" prop="remark">
  193. <el-input
  194. v-model="formData.remark"
  195. :disabled="isFormDisabled || !formData.businessType"
  196. placeholder="请输入备注"
  197. /> </el-form-item
  198. ></el-col>
  199. <el-col :span="12">
  200. <el-form-item label="存储地点" prop="warehouseId">
  201. <el-select
  202. v-model="formData.warehouseId"
  203. filterable
  204. remote
  205. :disabled="isFormDisabled || !formData.businessType"
  206. reserve-keyword
  207. placeholder="请输入存储地点"
  208. :remote-method="remoteWarehouse"
  209. :loading="loading"
  210. >
  211. <el-option
  212. v-for="item in warehouseList"
  213. :key="item.erpId"
  214. :label="item.name"
  215. :value="item.erpId"
  216. />
  217. </el-select>
  218. </el-form-item>
  219. </el-col>
  220. <el-col :span="12">
  221. <el-form-item label="状态" prop="status" aria-disabled="true">
  222. <el-select
  223. v-model="formData.status"
  224. disabled
  225. placeholder="请选择状态"
  226. >
  227. <el-option
  228. v-for="dict in getDictDatas('in_out_status')"
  229. :key="dict.value"
  230. :label="dict.label"
  231. :value="dict.value"
  232. />
  233. </el-select>
  234. </el-form-item>
  235. </el-col>
  236. </el-row>
  237. </el-form>
  238. <el-table :data="formData.list" border size="mini">
  239. <el-table-column
  240. label="源单编号"
  241. align="center"
  242. prop="sourceRequestId"
  243. width="160"
  244. show-overflow-tooltip
  245. />
  246. <el-table-column
  247. label="源单行号"
  248. align="center"
  249. prop="sourceLineNo"
  250. width="160"
  251. show-overflow-tooltip
  252. />
  253. <el-table-column
  254. label="物料编码"
  255. align="center"
  256. prop="materialNo"
  257. width="200"
  258. show-overflow-tooltip
  259. >
  260. <template v-slot="scope">
  261. <el-select
  262. v-model="scope.row.materialNo"
  263. filterable
  264. remote
  265. reserve-keyword
  266. placeholder="请选择物料编码"
  267. :remote-method="
  268. (query) => remoteMaterialSearch(query, 'code', scope.$index)
  269. "
  270. :loading="loading"
  271. @change="(value) => changeMaterial(value, scope.$index, 'code')"
  272. >
  273. <el-option
  274. v-for="item in materialNoList"
  275. :key="item.code"
  276. :label="item.code"
  277. :value="item.code"
  278. />
  279. </el-select>
  280. </template>
  281. </el-table-column>
  282. <el-table-column
  283. label="物料名称"
  284. align="center"
  285. prop="materialName"
  286. width="200"
  287. show-overflow-tooltip
  288. >
  289. <template v-slot="scope">
  290. <el-select
  291. v-model="scope.row.materialName"
  292. filterable
  293. remote
  294. reserve-keyword
  295. placeholder="请选择物料名称"
  296. :remote-method="
  297. (query) => remoteMaterialSearch(query, 'name', scope.$index)
  298. "
  299. :loading="loading"
  300. @change="(value) => changeMaterial(value, scope.$index, 'name')"
  301. >
  302. <el-option
  303. v-for="item in materialNameList"
  304. :key="item.code"
  305. :label="item.name"
  306. :value="item.name"
  307. />
  308. </el-select>
  309. </template>
  310. </el-table-column>
  311. <el-table-column
  312. label="客户编码"
  313. align="center"
  314. prop="customerCode"
  315. width="150"
  316. show-overflow-tooltip
  317. />
  318. <el-table-column
  319. label="客户名称"
  320. align="center"
  321. prop="customerName"
  322. width="160"
  323. show-overflow-tooltip
  324. />
  325. <el-table-column
  326. label="本次申请数量"
  327. align="center"
  328. prop="nowDeliveredQty"
  329. width="160"
  330. >
  331. <template slot-scope="scope">
  332. <el-input
  333. v-model="scope.row.nowDeliveredQty"
  334. :disabled="isFormDisabled"
  335. @change="deliverChange"
  336. />
  337. </template>
  338. </el-table-column>
  339. <el-table-column
  340. label="已入库数量"
  341. align="center"
  342. prop="completedQty"
  343. width="120"
  344. />
  345. <el-table-column
  346. label="源单计划数量"
  347. align="center"
  348. prop="planQty"
  349. width="120"
  350. />
  351. <el-table-column
  352. label="单位"
  353. align="center"
  354. prop="unitName"
  355. width="150"
  356. show-overflow-tooltip
  357. />
  358. <el-table-column label="行备注" align="center" prop="remark" width="200">
  359. <template slot-scope="scope">
  360. <el-input v-model="scope.row.remark" :disabled="isFormDisabled" />
  361. </template>
  362. </el-table-column>
  363. <el-table-column
  364. label="操作"
  365. align="center"
  366. fixed="right"
  367. width="150px"
  368. class-name="small-padding fixed-width"
  369. >
  370. <template v-slot="scope">
  371. <el-button
  372. size="mini"
  373. type="text"
  374. icon="el-icon-delete"
  375. :disabled="isFormDisabled"
  376. @click="handleDelete(scope)"
  377. >删除</el-button
  378. >
  379. </template>
  380. </el-table-column>
  381. </el-table>
  382. </div>
  383. </template>
  384. <script>
  385. import * as InRequestApi from "@/api/wms/output/inrequest";
  386. import DepartMentSelect from "./components/DepartMentSelect.vue";
  387. // import ShipmentNotification from "./ShipmentNotification.vue";
  388. export default {
  389. name: "InRequestForm",
  390. components: {
  391. // ShipmentNotification,
  392. DepartMentSelect,
  393. },
  394. data() {
  395. return {
  396. materialNameList: [],
  397. materialNoList: [],
  398. sourceOrderNoList: [],
  399. businessDescribeList: [],
  400. warehouseList: [],
  401. loading: false,
  402. // 页面标题
  403. dialogTitle: "",
  404. // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  405. formLoading: false,
  406. // 表单参数
  407. formData: {
  408. departmentNo: undefined,
  409. deptCode: undefined,
  410. deptName: undefined,
  411. id: undefined,
  412. requestNo: undefined,
  413. requestType: undefined,
  414. businessType: undefined,
  415. businessCategory: undefined,
  416. businessDescribe: undefined,
  417. businessSubType: undefined,
  418. status: undefined,
  419. priority: undefined,
  420. warehouseId: undefined,
  421. relatedWarehouseId: undefined,
  422. supplierCode: undefined,
  423. customerCode: undefined,
  424. sourceOrderNo: undefined,
  425. expectedTime: undefined,
  426. actualTime: undefined,
  427. totalQty: undefined,
  428. totalSku: undefined,
  429. totalLine: undefined,
  430. remark: undefined,
  431. extendInfo: undefined,
  432. submitter: undefined,
  433. submitTime: undefined,
  434. auditor: undefined,
  435. auditTime: undefined,
  436. erpWriteFlag: undefined,
  437. erpErrMsg: undefined,
  438. erpBackId: undefined,
  439. list: [],
  440. },
  441. // 表单校验
  442. formRules: {
  443. deptCode: [
  444. { required: true, message: "请选择部门", trigger: "blur" },
  445. ],
  446. requestNo: [
  447. { required: true, message: "申请单号不能为空", trigger: "blur" },
  448. ],
  449. expectedTime: [
  450. { required: true, message: "预计入库时间不能为空", trigger: "blur" },
  451. ],
  452. requestType: [
  453. {
  454. required: true,
  455. message: "申请类型(0入库 1出库)不能为空",
  456. trigger: "change",
  457. },
  458. ],
  459. businessType: [
  460. {
  461. required: true,
  462. message:
  463. "业务类型(0采购入库 3生产退料 4成品入库 6销售退货 8委外退料 9委外入库 11其他入库 13转移调拨 14仓库盘点)不能为空",
  464. trigger: "change",
  465. },
  466. ],
  467. businessSubType: [
  468. {
  469. required: true,
  470. message: "业务子类型(0正常 1补料)不能为空",
  471. trigger: "change",
  472. },
  473. ],
  474. status: [
  475. {
  476. required: false,
  477. message:
  478. "状态(0草稿 1已提交 2已审核 3执行中 4已完成 5已取消)不能为空",
  479. trigger: "blur",
  480. },
  481. ],
  482. priority: [
  483. {
  484. required: true,
  485. message: "优先级(0普通 1紧急 2加急)不能为空",
  486. trigger: "blur",
  487. },
  488. ],
  489. },
  490. };
  491. },
  492. computed: {
  493. isFormDisabled() {
  494. // 当路径有id且status>=2时禁用表单
  495. const hasId = this.$route.query.id;
  496. const status = parseInt(this.formData.status || "0");
  497. return hasId && status >= 2;
  498. },
  499. //计算属性判断修改状态下是否可编辑
  500. isEditable() {
  501. // 有 id 表示是编辑模式,不可编辑
  502. // 没有 id 表示是新增模式,可编辑
  503. return this.formData.id === undefined || this.formData.id === null || this.formData.id === '';
  504. },
  505. },
  506. watch: {
  507. "$route.query.id": {
  508. immediate: true,
  509. handler(newId) {
  510. // 只有当前路由路径包含"/inStorageManage/in-request/InRequestForm"时才处理,避免标签跳转时错误调用API
  511. if (
  512. this.$route.path.includes("/inStorageManage/in-request/InRequestForm")
  513. ) {
  514. if (newId) {
  515. this.initData(newId);
  516. } else {
  517. this.reset();
  518. }
  519. }
  520. },
  521. },
  522. },
  523. created() {
  524. // 从路由参数获取ID
  525. const id = this.$route.query.id;
  526. if (id) {
  527. this.dialogTitle = "修改";
  528. // this.initData(id)
  529. } else {
  530. this.dialogTitle = "新增";
  531. }
  532. },
  533. methods: {
  534. // 通用的判断函数判断按钮是否可点击
  535. isButtonDisabled(buttonType) {
  536. const status = Number(this.formData.status);
  537. switch(buttonType) {
  538. case 'commit':
  539. return status !== 0; // 提交,status=0时可点击
  540. case 'cancel':
  541. return status !== 1; // 撤销,status=1时可点击
  542. case 'audit':
  543. return status !== 1; // 审核,status=1时可点击
  544. case 'antiAudit':
  545. return status < 2; // 反审核,status>=2时可点击
  546. default:
  547. return true;
  548. }
  549. },
  550. handleDelete(row) {
  551. console.log(row);
  552. this.formData.list.splice(row.$index, 1);
  553. },
  554. selectDepart(item) {
  555. this.formData.deptCode = item.code;
  556. this.formData.deptName = item.name;
  557. },
  558. remoteMaterialSearch(query, type, index) {
  559. if (query !== "") {
  560. this.loading = true;
  561. setTimeout(async () => {
  562. this.loading = false;
  563. const params = {
  564. pageSize: 999,
  565. };
  566. // 根据搜索类型设置参数
  567. if (type === "code") {
  568. params.code = query;
  569. } else {
  570. params.name = query;
  571. }
  572. try {
  573. const {
  574. data: { list },
  575. } = await InRequestApi.getMaterialPage(params);
  576. // 每次搜索都重新赋值,保证列表始终是最新数据
  577. if (type === "code") {
  578. this.materialNoList = list || [];
  579. } else {
  580. this.materialNameList = list || [];
  581. }
  582. } catch (error) {
  583. console.error("搜索物料失败:", error);
  584. // 出错时清空列表
  585. if (type === "code") {
  586. this.materialNoList = [];
  587. } else {
  588. this.materialNameList = [];
  589. }
  590. }
  591. }, 200);
  592. } else {
  593. // 清空对应的列表
  594. if (type === "code") {
  595. this.materialNoList = [];
  596. } else {
  597. this.materialNameList = [];
  598. }
  599. }
  600. },
  601. remoteMethod(query) {
  602. if (query !== "") {
  603. const that = this;
  604. this.loading = true;
  605. setTimeout(async () => {
  606. this.loading = false;
  607. const { data } = await InRequestApi.getSourceOrder({
  608. businessType: that.formData.businessType,
  609. sourceOrderNo: query,
  610. pageSize: 999,
  611. });
  612. this.sourceOrderNoList = data || [];
  613. }, 200);
  614. } else {
  615. this.sourceOrderNoList = [];
  616. }
  617. },
  618. add() {
  619. if (!this.formData.businessType) {
  620. return this.$message.error("请先选择业务类型");
  621. }
  622. this.formData.list = this.formData.list || [];
  623. this.formData.list.push({});
  624. this.formData = { ...this.formData };
  625. },
  626. remoteWarehouse(query) {
  627. if (query !== "") {
  628. const that = this;
  629. this.loading = true;
  630. setTimeout(async () => {
  631. this.loading = false;
  632. const {
  633. data: { list },
  634. } = await InRequestApi.getStockPage({
  635. name: query,
  636. pageSize: 999,
  637. });
  638. this.warehouseList = list || [];
  639. }, 200);
  640. } else {
  641. this.warehouseList = [];
  642. }
  643. },
  644. changeSourceOrderNo(value) {
  645. this.sourceOrderNoList.map((v) => {
  646. if (v.sourceOrderNo == value) {
  647. this.formData.list = v.list;
  648. }
  649. });
  650. },
  651. changeMaterial(value, index, type) {
  652. // 根据选择的类型获取对应的列表
  653. const list =
  654. type === "code" ? this.materialNoList : this.materialNameList;
  655. // 查找选中的物料信息
  656. let selectedMaterial = null;
  657. if (type === "code") {
  658. selectedMaterial = list.find((item) => item.code === value);
  659. // 如果在当前列表找不到,尝试从另一个列表找
  660. if (!selectedMaterial) {
  661. selectedMaterial = this.materialNameList.find(
  662. (item) => item.code === value
  663. );
  664. }
  665. } else {
  666. selectedMaterial = list.find((item) => item.name === value);
  667. // 如果在当前列表找不到,尝试从另一个列表找
  668. if (!selectedMaterial) {
  669. selectedMaterial = this.materialNoList.find(
  670. (item) => item.name === value
  671. );
  672. }
  673. }
  674. if (selectedMaterial) {
  675. // 更新表单中的物料信息
  676. const newRow = {
  677. ...this.formData.list[index],
  678. materialNo: selectedMaterial.code,
  679. materialName: selectedMaterial.name,
  680. unitName: selectedMaterial.unit || "",
  681. };
  682. // 更新行数据
  683. this.$set(this.formData.list, index, newRow);
  684. // 强制更新列表,确保页面正常展示
  685. this.formData.list = [...this.formData.list];
  686. }
  687. },
  688. changeBusinessDescribe(e) {
  689. this.businessDescribeList.map((v) => {
  690. if (v.label == e) {
  691. this.formData.businessCategory = v.value;
  692. }
  693. });
  694. },
  695. async changeBusinessType(value) {
  696. this.formData.businessType = value;
  697. this.formData.businessDescribe = "";
  698. this.formData.businessCategory = "";
  699. const { data } = await InRequestApi.getDictByOrderType({
  700. orderType: value,
  701. });
  702. this.businessDescribeList = data;
  703. },
  704. /** 初始化数据 */
  705. async initData(id) {
  706. this.formLoading = true;
  707. try {
  708. const res = await InRequestApi.getRequest(id);
  709. res.data.businessType = res.data.businessType
  710. ? res.data.businessType.toString()
  711. : "0";
  712. res.data.businessDescribe = res.data.businessDescribe
  713. ? res.data.businessDescribe.toString()
  714. : "";
  715. res.data.priority = res.data.priority
  716. ? res.data.priority.toString()
  717. : "0";
  718. res.data.status = res.data.status ? res.data.status.toString() : "0";
  719. // res.data.list = res.data.list || [];
  720. this.formData = res.data;
  721. } finally {
  722. this.formLoading = false;
  723. }
  724. },
  725. /** 保存按钮 */
  726. async submitForm() {
  727. // 校验主表
  728. await this.$refs["formRef"].validate();
  729. this.formLoading = true;
  730. try {
  731. const data = this.formData;
  732. data.list = data.list
  733. .filter((v) => v.nowDeliveredQty)
  734. .map(
  735. ({
  736. completedQty,
  737. actualQty,
  738. stock_code,
  739. area_code,
  740. location_code,
  741. status,
  742. lineNo,
  743. inventory_status,
  744. ...rest
  745. }) => rest
  746. );
  747. // 修改的提交
  748. if (data.id) {
  749. await InRequestApi.updateRequest(data);
  750. this.$modal.msgSuccess("修改成功");
  751. return;
  752. }
  753. // 添加的提交
  754. await InRequestApi.createRequest(data);
  755. this.$modal.msgSuccess("新增成功");
  756. this.$router.push({
  757. path: "/inStorageManage/in-request",
  758. });
  759. } finally {
  760. this.formLoading = false;
  761. }
  762. },
  763. /** 提交按钮 */
  764. async commit() {
  765. const data = this.formData;
  766. // 接口调用
  767. await InRequestApi.commitInRequest(data);
  768. this.$modal.msgSuccess("提交成功");
  769. // 状态变化
  770. this.$set(this.formData, 'status', "1");
  771. },
  772. /** 撤销按钮 */
  773. async cancel() {
  774. const data = this.formData;
  775. // 接口调用
  776. await InRequestApi.cancelInRequest(data);
  777. this.$modal.msgSuccess("撤销成功");
  778. // 状态变化
  779. this.$set(this.formData, 'status', "0");
  780. },
  781. /** 审核按钮 */
  782. async audit() {
  783. const data = this.formData;
  784. // 接口调用
  785. await InRequestApi.auditInRequest(data);
  786. this.$modal.msgSuccess("审核成功");
  787. // 状态变化
  788. this.$set(this.formData, 'status', "2");
  789. },
  790. /** 反审核按钮 */
  791. async antiAudit() {
  792. const data = this.formData;
  793. // 接口调用
  794. await InRequestApi.antiAuditInRequest(data);
  795. this.$modal.msgSuccess("反审核成功");
  796. // 状态变化
  797. this.$set(this.formData, 'status', "0");
  798. },
  799. /** 返回按钮 */
  800. handleCancel() {
  801. this.reset();
  802. this.$router.push({
  803. path: "/inStorageManage/in-request",
  804. });
  805. },
  806. /** 表单重置 */
  807. reset() {
  808. this.formData = {
  809. id: undefined,
  810. // list: [],
  811. requestNo: undefined,
  812. requestType: undefined,
  813. businessType: undefined,
  814. businessCategory: undefined,
  815. businessDescribe: undefined,
  816. businessSubType: undefined,
  817. status: undefined,
  818. priority: undefined,
  819. warehouseId: undefined,
  820. relatedWarehouseId: undefined,
  821. supplierCode: undefined,
  822. customerCode: undefined,
  823. sourceOrderNo: undefined,
  824. expectedTime: undefined,
  825. actualTime: undefined,
  826. totalQty: undefined,
  827. totalSku: undefined,
  828. totalLine: undefined,
  829. remark: undefined,
  830. extendInfo: undefined,
  831. submitter: undefined,
  832. submitTime: undefined,
  833. auditor: undefined,
  834. auditTime: undefined,
  835. erpWriteFlag: undefined,
  836. erpErrMsg: undefined,
  837. erpBackId: undefined,
  838. list: [],
  839. };
  840. this.resetForm("formRef");
  841. },
  842. deliverChange(val) {
  843. // 这里可以写“本次出入数量”变化后的校验或计算逻辑
  844. console.log("deliverChange", val);
  845. },
  846. },
  847. };
  848. </script>
  849. <style scoped>
  850. .page-header {
  851. margin-bottom: 20px;
  852. padding: 15px 0;
  853. border-bottom: 1px solid #eee;
  854. }
  855. .header-content {
  856. display: flex;
  857. flex-direction: column;
  858. align-items: flex-start;
  859. }
  860. .breadcrumb {
  861. margin-bottom: 15px;
  862. }
  863. .header-buttons {
  864. display: flex;
  865. justify-content: flex-start;
  866. align-items: center;
  867. }
  868. .header-buttons .el-button {
  869. margin-right: 10px;
  870. }
  871. .form-container {
  872. margin-bottom: 20px;
  873. }
  874. </style>