detailsPage.vue 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372
  1. <template>
  2. <div>
  3. <div class="customer-head">
  4. <div class="customer-back">
  5. <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left" @click="backToList(0)"
  6. >返回列表
  7. </el-button>
  8. </div>
  9. <div class="add-customer-btn">
  10. <el-button class="el-button&#45;&#45;small-yh" type="primary" size="small" v-if="editButton" @click="confirmEditing">编辑 </el-button>
  11. <el-button v-else class="el-button--small-yh" type="primary" :disabled="editDisabled" size="small" @click="editCustomer">保存数据 </el-button>
  12. <el-button
  13. class="el-button--small-yh"
  14. type="success"
  15. size="small"
  16. v-if="form.statusName == '待入库' || form.statusName == '已撤销'"
  17. @click="complete"
  18. :disabled="editDisabled"
  19. >入库完成
  20. </el-button>
  21. <el-button class="el-button--small-yh" type="success" size="small" v-if="form.statusName == '已入库'" @click="revoke">撤销入库 </el-button>
  22. </div>
  23. </div>
  24. <div style="margin-top: 50px">
  25. <trade-card title="基础信息">
  26. <avue-form :option="optionForm" v-model="form" ref="form"></avue-form>
  27. </trade-card>
  28. <trade-card title="明细信息">
  29. <el-tabs v-model="activeName" type="card">
  30. <el-tab-pane label="入库明细" name="sale_detail">
  31. <avue-crud
  32. :option="optionContacts"
  33. v-model="formContacts"
  34. ref="formContacts"
  35. :data="form.shipItemsList"
  36. @row-save="rowSave"
  37. @row-update="rowUpdate"
  38. @selection-change="selectionContacts"
  39. @resetColumn="resetColumnTwo('formContacts', 'optionContacts', 'optionContactsBack', 274.1)"
  40. @saveColumn="saveColumnTwo('formContacts', 'optionContacts', 'optionContactsBack', 274.1)"
  41. >
  42. <template slot-scope="{ row }" slot="reservoirAreaName">
  43. <dic-select
  44. v-if="row.$cellEdit"
  45. :key="form.storageId"
  46. v-model="row.reservoirAreaName"
  47. placeholder="库区"
  48. label="cname"
  49. res="records"
  50. :url="'/blade-sales-part/reservoirarea/list?current=1&size=5&storageId=' + form.storageId"
  51. :filterable="true"
  52. :remote="true"
  53. dataName="cname"
  54. @selectChange="rowDicChange('reservoirAreaName', $event, row)"
  55. :slotRight="true"
  56. rightLabel="balanceQuantity"
  57. ></dic-select>
  58. <span v-else>{{ row.reservoirAreaName }}</span>
  59. </template>
  60. <template slot="sendNum" slot-scope="{ row }">
  61. <el-input-number
  62. v-if="row.$cellEdit"
  63. size="small"
  64. v-model="row.sendNum"
  65. :controls="false"
  66. :precision="numberDecimal"
  67. :min="0"
  68. style="width: 100%"
  69. ></el-input-number>
  70. <span v-else>{{ row.sendNum }}</span>
  71. </template>
  72. <template slot-scope="{ type, size, row, index, disabled }" slot="menu">
  73. <el-button
  74. v-if="reservoirArea == 1 && row.historyList.length"
  75. :size="size"
  76. :disabled="!row.id || editDisabled"
  77. type="text"
  78. @click="rowDelArea(row, index)"
  79. >
  80. 清空库区
  81. </el-button>
  82. <el-button
  83. v-if="reservoirArea == 1 && row.historyList.length"
  84. :size="size"
  85. :disabled="!row.id"
  86. type="text"
  87. @click="rowArea(row, index)"
  88. >
  89. 查看库区
  90. </el-button>
  91. <el-button
  92. v-if="reservoirArea == 1 && row.historyList.length == 0"
  93. :size="size"
  94. :disabled="!row.id || editDisabled"
  95. type="text"
  96. @click="rowArea(row, index)"
  97. >
  98. 选择库区
  99. </el-button>
  100. <el-button
  101. v-if="reservoirArea != 1"
  102. :size="size"
  103. :disabled="editDisabled"
  104. :type="type"
  105. :icon="row.$cellEdit ? 'el-icon-plus' : 'el-icon-edit'"
  106. @click="rowEdit(row, index)"
  107. >
  108. {{ row.$cellEdit ? "保存" : "编辑" }}
  109. </el-button>
  110. <el-button icon="el-icon-delete" :size="size" :disabled="editDisabled" :type="type" @click="rowDelBox(row, index)">删除 </el-button>
  111. </template>
  112. <template slot-scope="{ scope, row }" slot="menuLeft">
  113. <!-- <el-button type="primary" icon="el-icon-plus" size="small" @click="rowAdd(row, score)"
  114. :disabled="isrowAdd">添加商品</el-button>
  115. <el-button type="success" size="small" :disabled="isrowAdd" icon="el-icon-bottom" @click="excelBox = true">导入库区
  116. </el-button> -->
  117. <el-button type="primary" icon="el-icon-printer" size="small" @click="handlePrint">打印</el-button>
  118. <el-button type="danger" plain size="small" :disabled="editDisabled" @click="batchDelete">一键删除</el-button>
  119. <el-button
  120. v-if="reservoirArea == 1"
  121. type="success"
  122. size="small"
  123. @click="allClick('修改库区')"
  124. :disabled="editDisabled || selectionMultilist.length == 0"
  125. >修改库区</el-button
  126. >
  127. <el-button v-if="reservoirArea == 1" type="success" size="small" @click="allClick('导入库区')" :disabled="editDisabled"
  128. >导入库区</el-button
  129. >
  130. <el-button
  131. v-if="reservoirArea == 1"
  132. type="success"
  133. size="small"
  134. @click="allClick('一键清空库区')"
  135. :disabled="editDisabled || selectionMultilist.length == 0"
  136. >一键清空库区</el-button
  137. >
  138. </template>
  139. </avue-crud>
  140. </el-tab-pane>
  141. <el-tab-pane label="采购信息" name="payment_details">
  142. <avue-crud
  143. :option="optionPaymentDetails"
  144. ref="payment_details"
  145. :data="form.shipVOList"
  146. :key="key"
  147. @resetColumn="resetColumnTwo('payment_details', 'optionPaymentDetails', 'optionPaymentDetailsBack', 274.2)"
  148. @saveColumn="saveColumnTwo('payment_details', 'optionPaymentDetails', 'optionPaymentDetailsBack', 274.2)"
  149. >
  150. </avue-crud>
  151. </el-tab-pane>
  152. <el-tab-pane label="历史记录" name="outbound_records">
  153. <avue-crud
  154. :option="optionOutboundRecords"
  155. ref="outbound_records"
  156. :data="form.historyList"
  157. :key="key"
  158. @resetColumn="resetColumnTwo('outbound_records', 'optionOutboundRecords', 'optionOutboundRecordsBack', 274.3)"
  159. @saveColumn="saveColumnTwo('outbound_records', 'optionOutboundRecords', 'optionOutboundRecordsBack', 274.3)"
  160. >
  161. </avue-crud>
  162. </el-tab-pane>
  163. </el-tabs>
  164. </trade-card>
  165. <report-dialog :switchDialog="switchDialog" :reportId="form.id" reportName="入库工单" @onClose="onClose()"></report-dialog>
  166. <containerTitle title="上传附件"></containerTitle>
  167. <c-upload
  168. v-loading="loadingBtn"
  169. typeUpload="LT"
  170. :disabled="editDisabled"
  171. deleteUrl="/api/trade-purchase/woodHarvestingCloud/removeByFileId"
  172. :data="filesList"
  173. display
  174. :enumerationValue="35.1"
  175. ></c-upload>
  176. </div>
  177. <el-dialog title="导入明细" append-to-body :visible.sync="excelBox" v-if="excelBox" width="555px" :close-on-click-modal="false" v-dialog-drag>
  178. <avue-form :option="excelOption" v-model="excelForm" table-loading="excelLoading" :upload-before="uploadBefore" :upload-after="uploadAfter">
  179. <template slot="excelTemplate">
  180. <el-button type="primary" @click="derivation"> 点击下载<i class="el-icon-download el-icon--right"></i> </el-button>
  181. </template>
  182. </avue-form>
  183. <p style="text-align: center;color: #DC0505">
  184. 温馨提示 第一次导入时请先下载模板
  185. </p>
  186. </el-dialog>
  187. <el-dialog title="批量修改库区" append-to-body :visible.sync="diaVisible" width="300px" :close-on-click-modal="false" v-dialog-drag>
  188. <span>
  189. <dic-select
  190. v-if="diaVisible"
  191. :key="form.storageId"
  192. v-model="fixForm.reservoirAreaName"
  193. placeholder="库区"
  194. label="cname"
  195. res="records"
  196. :url="'/blade-sales-part/reservoirarea/list?current=1&size=5&storageId=' + form.storageId"
  197. :filterable="true"
  198. :remote="true"
  199. dataName="cname"
  200. @selectChange="dicChange('reservoirAreaName', $event)"
  201. :slotRight="true"
  202. rightLabel="balanceQuantity"
  203. ></dic-select>
  204. </span>
  205. <span slot="footer" class="dialog-footer">
  206. <el-button @click="diaVisible = false" size="mini">取 消</el-button>
  207. <el-button type="primary" @click="allClick('修改')" size="mini">修 改</el-button>
  208. </span>
  209. </el-dialog>
  210. <view-area ref="viewArea" @areaData="areaData" :disabled="editDisabled"></view-area>
  211. <el-dialog title="导入明细" append-to-body :visible.sync="excelBox2" width="555px" :close-on-click-modal="false" v-dialog-drag>
  212. <avue-form
  213. v-if="excelBox2"
  214. :option="excelOption2"
  215. v-model="excelForm2"
  216. table-loading="excelLoading"
  217. :upload-before="uploadBefore2"
  218. :upload-after="uploadAfter2"
  219. >
  220. <template slot="excelTemplate">
  221. <el-button type="primary" @click="derivation2"> 点击下载<i class="el-icon-download el-icon--right"></i> </el-button>
  222. </template>
  223. </avue-form>
  224. <p style="text-align: center;color: #DC0505">
  225. 温馨提示 第一次导入时请先下载模板
  226. </p>
  227. </el-dialog>
  228. </div>
  229. </template>
  230. <script>
  231. import dicSelect from "@/components/dicSelect/main";
  232. import {
  233. getDetails,
  234. tradingBox,
  235. submit,
  236. warehousingComplete,
  237. revoke,
  238. goodsDetail,
  239. dotList,
  240. getWarehouseKeeper,
  241. dotListAll,
  242. removeItem,
  243. submitList
  244. } from "@/api/tirePartsMall/purchasingManagement/warehouseEntryOrder";
  245. import { itemRemove } from "@/api/tirePartsMall/salesManagement/outboundWorkOrder";
  246. import { dateFormat } from "@/util/date";
  247. import { getToken } from "@/util/auth";
  248. import { getMenu } from "@/api/system/menu";
  249. import reportDialog from "@/components/report-dialog/main";
  250. import { corpsDescListAll } from "@/api/tirePartsMall/salesManagement/saleOrder";
  251. import { isProcurement } from "@/api/basicData/configuration";
  252. import viewArea from "./components/viewArea.vue";
  253. export default {
  254. name: "detailsPage",
  255. data() {
  256. return {
  257. reservoirArea: 0,
  258. diaVisible: false,
  259. fixForm: {
  260. reservoirAreaId: null,
  261. reservoirAreaName: null,
  262. balanceQuantity: 0
  263. },
  264. numberDecimal: 0,
  265. // 上传附件的需要参数
  266. loadingBtn: false,
  267. filesList: [],
  268. switchDialog: false,
  269. values: "",
  270. editButton: false,
  271. editDisabled: false,
  272. activeName: "sale_detail",
  273. isrowAdd: true,
  274. excelBox: false,
  275. excelOption: {
  276. submitBtn: false,
  277. emptyBtn: false,
  278. column: [
  279. {
  280. label: "模板下载",
  281. prop: "excelTemplate",
  282. formslot: true,
  283. span: 24
  284. },
  285. {
  286. label: "导入明细",
  287. prop: "excelFile",
  288. type: "upload",
  289. drag: true,
  290. loadText: "上传中,请稍等",
  291. accept: ".xls,.xlsx",
  292. span: 24,
  293. propsHttp: {
  294. res: "data"
  295. },
  296. tip: "请上传 .xls,.xlsx 标准格式文件",
  297. action: "/api/blade-sales-part/ship/import-item"
  298. }
  299. ]
  300. },
  301. excelForm: {},
  302. excelBox2: false,
  303. excelOption2: {
  304. submitBtn: false,
  305. emptyBtn: false,
  306. column: [
  307. {
  308. label: "模板下载",
  309. prop: "excelTemplate",
  310. formslot: true,
  311. span: 24
  312. },
  313. {
  314. label: "导入明细",
  315. prop: "excelFile",
  316. type: "upload",
  317. drag: true,
  318. loadText: "上传中,请稍等",
  319. accept: ".xls,.xlsx",
  320. span: 24,
  321. propsHttp: {
  322. res: "data"
  323. },
  324. tip: "请上传 .xls,.xlsx 标准格式文件",
  325. action: "/api/blade-sales-part/ship/importReservoirArea"
  326. }
  327. ]
  328. },
  329. excelForm2: {},
  330. form: {
  331. shipItemsList: [],
  332. shipVOList: [],
  333. historyList: []
  334. },
  335. key: 0,
  336. optionForm: {
  337. disabled: false,
  338. menuBtn: false,
  339. labelWidth: 100,
  340. columnBtn: false,
  341. span: 8,
  342. column: [
  343. {
  344. label: "业务对象",
  345. prop: "customerId",
  346. disabled: true,
  347. type: "select",
  348. props: {
  349. label: "cname",
  350. value: "id"
  351. },
  352. dicData: [],
  353. rules: [
  354. {
  355. required: true,
  356. message: " ",
  357. trigger: "blur"
  358. }
  359. ],
  360. change: ({ value, column }) => {
  361. if (this.form.billno.indexOf("TK") != -1) {
  362. this.corpsDescListAllfun("KH");
  363. } else {
  364. this.corpsDescListAllfun("GYS");
  365. }
  366. }
  367. },
  368. {
  369. label: "仓库",
  370. prop: "storageId",
  371. overHidden: true,
  372. type: "select",
  373. dicUrl: "/api/blade-sales-part/storageDesc/listAll",
  374. disabled: true,
  375. props: {
  376. label: "cname",
  377. value: "id"
  378. },
  379. rules: [
  380. {
  381. required: true,
  382. message: " ",
  383. trigger: "blur"
  384. }
  385. ]
  386. // change:(data)=>{
  387. // // console.log(this.$refs);
  388. // getWarehouseKeeper({salesCompanyId:this.form.storageId}).then((res)=>{
  389. // console.log(res.data.data);
  390. // this.form.stockClerkId = res.data.data[0].id
  391. // })
  392. // }
  393. },
  394. {
  395. label: "库管",
  396. prop: "stockClerkId",
  397. type: "select",
  398. disabled: false,
  399. props: {
  400. label: "realName",
  401. value: "id"
  402. },
  403. dicUrl: "/api/blade-user/stockClerkList"
  404. // rules: [{
  405. // required: true,
  406. // message: " ",
  407. // trigger: "blur"
  408. // }]
  409. },
  410. {
  411. label: "订单数量",
  412. prop: "goodsTotalNum",
  413. search: false,
  414. overHidden: true,
  415. disabled: true
  416. // width: 120,
  417. // rules: [
  418. // {
  419. // required: true,
  420. // message: " ",
  421. // trigger: "blur"
  422. // }
  423. // ]
  424. },
  425. {
  426. label: "入库数量",
  427. prop: "sendTotalNum",
  428. overHidden: true,
  429. disabled: true
  430. },
  431. {
  432. label: "业务日期",
  433. prop: "createTime",
  434. disabled: false,
  435. type: "datetime",
  436. value: dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss"),
  437. format: "yyyy-MM-dd HH:mm",
  438. valueFormat: "yyyy-MM-dd HH:mm:ss",
  439. rules: [
  440. {
  441. required: true,
  442. message: "",
  443. trigger: "blur"
  444. }
  445. ]
  446. },
  447. {
  448. label: "入库单号",
  449. prop: "billno",
  450. disabled: true
  451. },
  452. {
  453. label: "来源单号",
  454. prop: "ordNo",
  455. disabled: true
  456. },
  457. {
  458. label: "备注",
  459. disabled: false,
  460. prop: "remarks",
  461. type: "textarea",
  462. span: 16,
  463. minRows: 1
  464. }
  465. ]
  466. },
  467. formContacts: {},
  468. optionContacts: {},
  469. optionContactsBack: {
  470. dialogDrag: true,
  471. cancelBtn: false,
  472. disabled: false,
  473. align: "center",
  474. index: true,
  475. addBtn: false, // 新增按钮
  476. refreshBtn: false,
  477. editBtn: false, // 修改按钮
  478. delBtn: false, //删除按钮
  479. border: true,
  480. menuWidth: 250,
  481. stripe: true,
  482. span: 8,
  483. addRowBtn: false,
  484. menu: true, // 是否员操作栏
  485. dialogTop: 25,
  486. dialogWidth: "80%",
  487. showSummary: true,
  488. saveBtn: false, // 表格弹窗保存按钮
  489. cellBtn: false, // 行编辑
  490. selection: true,
  491. sumColumnList: [
  492. {
  493. name: "sendNum",
  494. type: "sum"
  495. },
  496. {
  497. name: "goodsNum",
  498. type: "sum"
  499. }
  500. ],
  501. column: [
  502. {
  503. label: "商品名称",
  504. prop: "goodsId",
  505. width: 200,
  506. overHidden: true,
  507. hide: true,
  508. showColumn: false
  509. // disabled: false,
  510. // filterable: true,
  511. // remote: true,
  512. // type: 'select',
  513. // props: {
  514. // label: 'cname',
  515. // value: 'id'
  516. // },
  517. // dicUrl: '/api/blade-sales-part/goodsDesc/list?current=1&size=10&cname={{key}}&enableOrNot=1'
  518. },
  519. {
  520. label: "商品名称",
  521. prop: "goodsName",
  522. width: 200,
  523. overHidden: true,
  524. disabled: false,
  525. filterable: true
  526. },
  527. // {
  528. // label: "价格",
  529. // prop: "price",
  530. // disabled: false,
  531. // ovrHidden: true,
  532. // rules: [{
  533. // required: true,
  534. // message: " ",
  535. // trigger: "blur"
  536. // }, {
  537. // validator: (rule, value, callback) => {
  538. // if (value < 0) {
  539. // callback(new Error("单价不能小于0"));
  540. // } else {
  541. // callback();
  542. // }
  543. // },
  544. // trigger: "blur"
  545. // }]
  546. // },
  547. {
  548. label: "到货数量",
  549. prop: "sendNum",
  550. width: 100,
  551. // cell: true,
  552. disabled: false,
  553. overHidden: true,
  554. rules: [
  555. {
  556. required: true,
  557. message: " ",
  558. trigger: "blur"
  559. },
  560. {
  561. validator: (rule, value, callback) => {
  562. if (value < 0) {
  563. callback(new Error("实际数量不能小于0"));
  564. } else {
  565. callback();
  566. }
  567. },
  568. trigger: "blur"
  569. }
  570. ]
  571. },
  572. {
  573. label: "批次号",
  574. cell: true,
  575. width: 120,
  576. prop: "dot",
  577. type: "select",
  578. disabled: false,
  579. allowCreate: true,
  580. filterable: true,
  581. dicData: [],
  582. props: {
  583. label: "dot",
  584. value: "dot"
  585. },
  586. overHidden: true
  587. },
  588. {
  589. label: "商品编码",
  590. prop: "goodsNo",
  591. overHidden: true,
  592. disabled: false,
  593. width: 140
  594. // }, {
  595. // label: "品牌",
  596. // prop: 'brandId',
  597. // width: 100,
  598. // overHidden: true,
  599. // disabled: false,
  600. // type: 'select',
  601. // props: {
  602. // label: 'cname',
  603. // value: 'id'
  604. // },
  605. // dicUrl: '/api/blade-sales-part/brandDesc/listAll?type=PP'
  606. // }, {
  607. },
  608. {
  609. label: "品牌",
  610. prop: "brandName",
  611. disabled: false,
  612. overHidden: true
  613. },
  614. {
  615. label: "规格型号",
  616. prop: "propertyName",
  617. overHidden: true,
  618. disabled: false
  619. // rules: [{
  620. // required: true,
  621. // message: " ",
  622. // trigger: "blur"
  623. // }]
  624. },
  625. {
  626. label: "花纹",
  627. prop: "pattern",
  628. disabled: false,
  629. overHidden: true
  630. },
  631. {
  632. label: "商品描述",
  633. prop: "goodsDescription",
  634. disabled: false,
  635. overHidden: true
  636. },
  637. {
  638. label: "单位",
  639. prop: "units",
  640. type: "select",
  641. disabled: false,
  642. props: {
  643. label: "dictValue",
  644. value: "dictValue"
  645. },
  646. dicUrl: "/api/blade-system/dict-biz/dictionary?code=unit"
  647. },
  648. {
  649. label: "入库数量",
  650. prop: "goodsNum",
  651. disabled: true,
  652. ovrHidden: true
  653. },
  654. {
  655. label: "备注",
  656. cell: true,
  657. prop: "remarks",
  658. width: 150,
  659. span: 16,
  660. disabled: false,
  661. overHidde: true
  662. }
  663. ]
  664. },
  665. selectionMultilist: [], // 多选数据
  666. optionPaymentDetails: {},
  667. optionPaymentDetailsBack: {
  668. align: "center",
  669. addBtn: false,
  670. refreshBtn: false,
  671. editBtn: false,
  672. delBtn: false,
  673. border: true,
  674. menuWidth: 120,
  675. stripe: true,
  676. index: true,
  677. menu: false,
  678. column: [
  679. {
  680. label: "入库单号",
  681. prop: "billno",
  682. disabled: true
  683. },
  684. {
  685. label: "来源单号",
  686. prop: "ordNo",
  687. disabled: true
  688. },
  689. // {
  690. // label: "业务来源",
  691. // prop: "stockTime",
  692. // type: "date",
  693. // searchRange: true,
  694. // searchDefaultTime: [
  695. // "00:00:00",
  696. // "23:59:59"
  697. // ],
  698. // format: "yyyy-MM-dd",
  699. // valueFormat: "yyyy-MM-dd HH:mm:ss",
  700. // overHidden: true
  701. // },
  702. {
  703. label: "地址",
  704. prop: "recAddress",
  705. overHidden: true
  706. },
  707. {
  708. prop: "contacts",
  709. label: "联系人",
  710. overHidden: true
  711. },
  712. {
  713. prop: "phone",
  714. label: "电话",
  715. overHidden: true
  716. },
  717. {
  718. prop: "remarks",
  719. label: "备注",
  720. disabled: false,
  721. overHidden: true
  722. }
  723. ]
  724. },
  725. optionOutboundRecords: {},
  726. optionOutboundRecordsBack: {
  727. align: "center",
  728. addBtn: false,
  729. refreshBtn: false,
  730. editBtn: false,
  731. delBtn: false,
  732. border: true,
  733. menuWidth: 120,
  734. index: true,
  735. stripe: true,
  736. menu: false,
  737. column: [
  738. {
  739. prop: "operatorName",
  740. label: "操作人",
  741. overHidden: true,
  742. showColumn: false,
  743. width: 120
  744. },
  745. {
  746. prop: "operateStatus",
  747. label: "状态",
  748. overHidden: true
  749. },
  750. {
  751. prop: "operateTime",
  752. label: "时间",
  753. overHidden: true,
  754. searchDefaultTime: ["00:00:00", "23:59:59"],
  755. format: "yyyy-MM-dd",
  756. valueFormat: "yyyy-MM-dd HH:mm:ss"
  757. }
  758. ]
  759. }
  760. };
  761. },
  762. props: {
  763. detailData: Object
  764. },
  765. async created() {
  766. this.findObject(this.optionContactsBack.column, "goodsId").change = ({ value, column }) => {
  767. console.log(value);
  768. this.values = value;
  769. console.log("this.formContacts.goodsId", this.formContacts.goodsId);
  770. if (this.formContacts.goodsId !== value) {
  771. dotListAll({
  772. storageId: this.form.storageId,
  773. goodsId: this.formContacts.goodsId
  774. }).then(res => {
  775. (this.formContacts.price = res.data.data[0].inventoryCostPrice), console.log(res);
  776. });
  777. goodsDetail({ id: value, stock: this.form.storageId ? this.form.storageId : "" }).then(res => {
  778. console.log(this.form.storageId);
  779. this.formContacts.goodsNo = res.data.data.code;
  780. this.formContacts.brandId = res.data.data.brandId;
  781. this.formContacts.brandName = res.data.data.brandName;
  782. this.formContacts.propertyName = res.data.data.specificationAndModel;
  783. this.formContacts.pattern = res.data.data.brandItem;
  784. this.formContacts.goodsDescription = res.data.data.goodsDescription;
  785. this.formContacts.units = res.data.data.unit;
  786. this.findObject(this.optionContacts.column, "goodsNum").disabled = true;
  787. if (res.data.data.whether == 0) {
  788. this.findObject(this.optionContacts.column, "dot").disabled = true;
  789. } else {
  790. this.findObject(this.optionContacts.column, "dot").disabled = false;
  791. dotList({
  792. storageId: this.form.storageId,
  793. goodsId: this.formContacts.goodsId
  794. }).then(res => {
  795. console.log("dot", res);
  796. this.findObject(this.optionContacts.column, "dot").dicData = res.data.data;
  797. });
  798. }
  799. });
  800. }
  801. };
  802. this.optionContacts = await this.getColumnData(this.getColumnName(274.1), this.optionContactsBack);
  803. isProcurement({ param: "whether.model" }).then(res => {
  804. if (res.data.data == 1) {
  805. this.findObject(this.optionContacts.column, "pattern").label = "规格型号1";
  806. }
  807. });
  808. isProcurement({ param: "reservoir.area" }).then(res => {
  809. this.reservoirArea = res.data.data;
  810. });
  811. this.findObject(this.optionContacts.column, "goodsId").change = ({ value, column }) => {
  812. console.log(value);
  813. console.log(this.form.storageId);
  814. this.values = value;
  815. if (this.formContacts.goodsId !== value) {
  816. dotListAll({
  817. storageId: this.form.storageId,
  818. goodsId: this.formContacts.goodsId
  819. }).then(res => {
  820. this.formContacts.price = res.data.data[0].inventoryCostPrice;
  821. });
  822. goodsDetail({ id: value, stock: this.form.storageId ? this.form.storageId : "" }).then(res => {
  823. this.formContacts.goodsNo = res.data.data.code;
  824. this.formContacts.brandId = res.data.data.brandId;
  825. this.formContacts.brandName = res.data.data.brandName;
  826. this.formContacts.propertyName = res.data.data.specificationAndModel;
  827. this.formContacts.pattern = res.data.data.brandItem;
  828. this.formContacts.goodsDescription = res.data.data.goodsDescription;
  829. this.formContacts.units = res.data.data.unit;
  830. this.findObject(this.optionContacts.column, "goodsNum").disabled = true;
  831. if (res.data.data.whether == 0) {
  832. this.findObject(this.optionContacts.column, "dot").disabled = true;
  833. } else {
  834. this.findObject(this.optionContacts.column, "dot").disabled = false;
  835. dotList({
  836. storageId: this.form.storageId,
  837. goodsId: this.formContacts.goodsId
  838. }).then(res => {
  839. console.log("567");
  840. this.findObject(this.optionContacts.column, "dot").dicData = res.data.data;
  841. });
  842. }
  843. });
  844. }
  845. };
  846. this.optionPaymentDetails = await this.getColumnData(this.getColumnName(274.2), this.optionPaymentDetailsBack);
  847. this.optionOutboundRecords = await this.getColumnData(this.getColumnName(274.3), this.optionOutboundRecordsBack);
  848. this.key++;
  849. if (this.detailData.id) {
  850. this.editButton = true;
  851. this.editDisabled = true;
  852. this.optionForm.disabled = true;
  853. this.refresh(this.detailData.id, true);
  854. }
  855. if (this.$route.query.srcId) {
  856. this.editButton = true;
  857. this.editDisabled = true;
  858. this.optionForm.disabled = true;
  859. this.refresh(this.$route.query.srcId);
  860. }
  861. this.$store.commit("DOMIO_IN_DETAIL");
  862. isProcurement({ param: "number.decimal" }).then(res => {
  863. this.numberDecimal = res.data.data ? Number(res.data.data) : 0;
  864. });
  865. },
  866. components: {
  867. reportDialog,
  868. dicSelect,
  869. viewArea
  870. },
  871. methods: {
  872. rowDelArea(row, index) {
  873. if (row.historyList.filter(item => item.id).length) {
  874. this.$confirm("是否撤销库区?", "提示", {
  875. confirmButtonText: "确定",
  876. cancelButtonText: "取消",
  877. type: "warning"
  878. }).then(() => {
  879. let ids = [];
  880. for (let item of row.historyList) {
  881. ids.push(item.id);
  882. }
  883. itemRemove({ ids: ids.join(",") }).then(res => {
  884. row.historyList = [];
  885. // row.dot = null;
  886. row.sendNum = 0;
  887. });
  888. });
  889. } else {
  890. row.historyList = [];
  891. // row.dot = null;
  892. row.sendNum = 0;
  893. }
  894. },
  895. rowArea(row, index) {
  896. this.$refs.viewArea.openDialog(this.form, row, index);
  897. },
  898. areaData(row, index) {
  899. this.form.shipItemsList[index].reservoirAreaId = row.reservoirAreaId;
  900. this.form.shipItemsList[index].reservoirAreaName = row.reservoirAreaName;
  901. this.form.shipItemsList[index].dot = row.dot;
  902. this.form.shipItemsList[index].sendNum = row.sendNum;
  903. this.form.shipItemsList[index].historyList = row.historyList;
  904. if (row.historyList.filter(item => !item.id).length) {
  905. submitList(this.form.shipItemsList).then(res => {
  906. this.form.shipItemsList = res.data.data;
  907. });
  908. }
  909. },
  910. allClick(name) {
  911. if (name == "修改库区") {
  912. for (let item of this.selectionMultilist) {
  913. if (item.historyList.length > 0) {
  914. return this.$message.error("请选择没有选择库区的数据");
  915. }
  916. }
  917. this.fixForm = {
  918. reservoirAreaId: null,
  919. reservoirAreaName: null,
  920. balanceQuantity: 0
  921. };
  922. this.diaVisible = true;
  923. }
  924. if (name == "修改") {
  925. for (let item of this.selectionMultilist) {
  926. this.form.shipItemsList.forEach(row => {
  927. if (item.id == row.id) {
  928. row.historyList.push({
  929. reservoirAreaId: this.fixForm.reservoirAreaId,
  930. reservoirAreaName: this.fixForm.reservoirAreaName,
  931. balanceQuantity: this.fixForm.balanceQuantity,
  932. quantity: row.goodsNum
  933. });
  934. row.sendNum = row.goodsNum;
  935. }
  936. });
  937. }
  938. submitList(this.form.shipItemsList).then(res => {
  939. this.form.shipItemsList = res.data.data;
  940. });
  941. this.diaVisible = false;
  942. }
  943. if (name == "导入库区") {
  944. for (let item of this.form.shipItemsList) {
  945. if (item.historyList.length) {
  946. return this.$message.error("请清空库区");
  947. }
  948. }
  949. this.findObject(this.excelOption2.column, "excelFile").action = "/api/blade-sales-part/ship/importReservoirArea?id=" + this.form.id;
  950. this.excelBox2 = true;
  951. }
  952. if (name == "一键清空库区") {
  953. this.$confirm("是否一键清空库区?", "提示", {
  954. confirmButtonText: "确定",
  955. cancelButtonText: "取消",
  956. type: "warning"
  957. }).then(() => {
  958. let ids = [];
  959. for (let row of this.selectionMultilist) {
  960. if (row.historyList.filter(item => item.id).length) {
  961. for (let item of row.historyList) {
  962. ids.push(item.id);
  963. }
  964. } else {
  965. row.historyList = [];
  966. // row.dot = null;
  967. row.sendNum = 0;
  968. }
  969. }
  970. if (ids.length) {
  971. itemRemove({ ids: ids.join(",") }).then(res => {
  972. for (let row of this.selectionMultilist) {
  973. if (row.historyList.filter(item => item.id).length) {
  974. row.historyList = [];
  975. // row.dot = null;
  976. row.sendNum = 0;
  977. }
  978. }
  979. this.$message.success("操作成功");
  980. });
  981. }
  982. });
  983. }
  984. },
  985. dicChange(name, row) {
  986. if (name == "reservoirAreaName") {
  987. if (row) {
  988. this.fixForm.reservoirAreaId = row.id;
  989. this.fixForm.balanceQuantity = row.balanceQuantity;
  990. } else {
  991. this.fixForm.reservoirAreaId = null;
  992. this.fixForm.reservoirAreaName = null;
  993. this.fixForm.balanceQuantity = row.balanceQuantity;
  994. }
  995. }
  996. },
  997. rowDicChange(name, row, el) {
  998. if (name == "reservoirAreaName") {
  999. if (row) {
  1000. el.reservoirAreaId = row.id;
  1001. } else {
  1002. el.reservoirAreaId = null;
  1003. el.reservoirAreaName = null;
  1004. }
  1005. }
  1006. },
  1007. rowAdd(row, score) {
  1008. console.log(123214);
  1009. this.optionContactsBack.column.forEach(its => {
  1010. if (
  1011. its.prop == "goodsNum" ||
  1012. its.prop == "goodsNo" ||
  1013. its.prop == "brandId" ||
  1014. its.prop == "propertyName" ||
  1015. its.prop == "pattern" ||
  1016. its.prop == "goodsDescription" ||
  1017. its.prop == "units"
  1018. ) {
  1019. this.$set(its, "disabled", true);
  1020. } else {
  1021. this.$set(its, "disabled", false);
  1022. }
  1023. });
  1024. this.$refs.formContacts.rowAdd();
  1025. },
  1026. derivation() {
  1027. window.open(`/api/blade-sales-part/ship/export-item?${this.website.tokenHeader}=${getToken()}`);
  1028. },
  1029. uploadAfter(res, done, loading, column) {
  1030. if (res instanceof Array) {
  1031. this.form.shipItemsList = this.form.shipItemsList.concat(res);
  1032. }
  1033. this.excelBox = false;
  1034. loading = false;
  1035. done();
  1036. },
  1037. uploadBefore(file, done, loading) {
  1038. done();
  1039. loading = true;
  1040. },
  1041. derivation2() {
  1042. window.open(`/api/blade-sales-part/ship/exportReservoirArea?id=${this.form.id}&${this.website.tokenHeader}=${getToken()}`);
  1043. },
  1044. uploadAfter2(res, done, loading, column) {
  1045. this.refresh(this.form.id);
  1046. this.excelBox2 = false;
  1047. loading = false;
  1048. done();
  1049. },
  1050. uploadBefore2(file, done, loading) {
  1051. done();
  1052. loading = true;
  1053. },
  1054. //撤销
  1055. revoke() {
  1056. this.$refs["form"].validate((valid, done) => {
  1057. console.log(valid, "valid");
  1058. done();
  1059. if (valid) {
  1060. const loading = this.$loading({
  1061. lock: true,
  1062. text: "加载中",
  1063. spinner: "el-icon-loading",
  1064. background: "rgba(255,255,255,0.7)"
  1065. });
  1066. revoke({
  1067. ...this.form,
  1068. bizTypeName: this.form.id ? this.form.bizTypeName : "SHGD"
  1069. })
  1070. .then(res => {
  1071. if (res.data.code === 601) {
  1072. this.$message({
  1073. type: "error",
  1074. message: res.data.msg
  1075. });
  1076. this.refresh(this.form.id);
  1077. } else {
  1078. this.$message.success("撤销成功");
  1079. this.refresh(this.form.id, true);
  1080. }
  1081. })
  1082. .finally(() => {
  1083. loading.close();
  1084. });
  1085. }
  1086. });
  1087. },
  1088. //编辑
  1089. confirmEditing() {
  1090. this.editButton = false;
  1091. if (this.form.statusName == "待入库" || this.form.statusName == "已撤销") {
  1092. this.editDisabled = false;
  1093. this.optionForm.disabled = false;
  1094. }
  1095. if (this.form.statusName == "已入库") {
  1096. this.editDisabled = true;
  1097. this.optionForm.disabled = true;
  1098. }
  1099. goodsDetail({ id: this.form.shipItemsList[0].goodsId, stock: this.form.storageId ? this.form.storageId : "" }).then(res => {
  1100. if (res.data.data.whether == 0) {
  1101. this.findObject(this.optionContacts.column, "dot").disabled = true;
  1102. } else {
  1103. this.findObject(this.optionContacts.column, "dot").disabled = false;
  1104. dotList({
  1105. storageId: this.form.storageId,
  1106. goodsId: this.formContacts.goodsId
  1107. }).then(res => {
  1108. this.findObject(this.optionContacts.column, "dot").dicData = res.data.data;
  1109. });
  1110. }
  1111. });
  1112. },
  1113. complete() {
  1114. this.$refs["form"].validate((valid, done) => {
  1115. done();
  1116. if (valid) {
  1117. if (this.reservoirArea == 1) {
  1118. for (let item of this.form.shipItemsList) {
  1119. if (item.historyList.length == 0) {
  1120. return this.$message.error("请选择库区");
  1121. }
  1122. }
  1123. }
  1124. const loading = this.$loading({
  1125. lock: true,
  1126. text: "加载中",
  1127. spinner: "el-icon-loading",
  1128. background: "rgba(255,255,255,0.7)"
  1129. });
  1130. this.form.customerName = this.form.$customerId;
  1131. submit({
  1132. ...this.form,
  1133. bizTypeName: this.form.id ? this.form.bizTypeName : "SHGD"
  1134. })
  1135. .then(res => {
  1136. if (res.data.code === 601) {
  1137. loading.close();
  1138. this.$message({
  1139. type: "error",
  1140. message: res.data.msg
  1141. });
  1142. this.refresh(this.form.id);
  1143. } else {
  1144. warehousingComplete({
  1145. ...this.form,
  1146. bizTypeName: this.form.id ? this.form.bizTypeName : "SHGD"
  1147. })
  1148. .then(res => {
  1149. this.refresh(res.data.data.id);
  1150. this.$message.success("入库完成");
  1151. })
  1152. .finally(() => {
  1153. loading.close();
  1154. });
  1155. }
  1156. })
  1157. .catch(() => {
  1158. loading.close();
  1159. });
  1160. }
  1161. });
  1162. },
  1163. //修改提交触发
  1164. editCustomer() {
  1165. if (this.form.shipItemsList.length == 0) {
  1166. return this.$message.warning("请明细不能为空");
  1167. }
  1168. this.$refs["form"].validate((valid, done) => {
  1169. done();
  1170. if (valid) {
  1171. const loading = this.$loading({
  1172. lock: true,
  1173. text: "加载中",
  1174. spinner: "el-icon-loading",
  1175. background: "rgba(255,255,255,0.7)"
  1176. });
  1177. this.form.customerName = this.form.$customerId;
  1178. this.form.shipItemsList.map(item => {
  1179. item.$cellEdit = false;
  1180. });
  1181. submit({
  1182. ...this.form,
  1183. bizTypeName: this.form.id ? this.form.bizTypeName : "SHGD",
  1184. filesList: this.filesList
  1185. })
  1186. .then(res => {
  1187. if (res.data.code === 601) {
  1188. this.$message({
  1189. type: "error",
  1190. message: res.data.msg
  1191. });
  1192. this.refresh(this.form.id);
  1193. } else {
  1194. this.$message.success("保存成功");
  1195. this.refresh(res.data.data.id);
  1196. }
  1197. })
  1198. .finally(() => {
  1199. loading.close();
  1200. });
  1201. } else {
  1202. return false;
  1203. }
  1204. });
  1205. },
  1206. refresh(id, type) {
  1207. const loading = this.$loading({
  1208. lock: true,
  1209. text: "加载中",
  1210. spinner: "el-icon-loading",
  1211. background: "rgba(255,255,255,0.7)"
  1212. });
  1213. getDetails({ id: id })
  1214. .then(res => {
  1215. if (res.data.data.statusName == "已入库") {
  1216. this.editDisabled = true;
  1217. this.optionForm.disabled = true;
  1218. }
  1219. if (type && !this.editButton) {
  1220. this.editDisabled = false;
  1221. this.optionForm.disabled = false;
  1222. }
  1223. this.form = res.data.data;
  1224. this.filesList = res.data.data.filesList;
  1225. })
  1226. .finally(() => {
  1227. loading.close();
  1228. });
  1229. },
  1230. // 获取业务对象
  1231. corpsDescListAllfun(corpType) {
  1232. corpsDescListAll({ corpType: corpType, enableOrNot: 1 }).then(res => {
  1233. this.optionForm.column[0].dicData = res.data.data;
  1234. });
  1235. },
  1236. //编辑
  1237. rowEdit(row, index) {
  1238. if (row.$cellEdit) {
  1239. this.$set(row, "$cellEdit", false);
  1240. } else {
  1241. this.$set(row, "$cellEdit", true);
  1242. }
  1243. // this.confirmEditing()
  1244. dotList({
  1245. storageId: this.form.storageId,
  1246. goodsId: row.goodsId
  1247. }).then(res => {
  1248. this.findObject(this.optionContactsBack.column, "dot").dicData = res.data.data;
  1249. // console.log(this.dicData)
  1250. });
  1251. console.log(this.optionContacts, 802);
  1252. // this.$refs.formContacts.rowEdit(row, index)
  1253. },
  1254. rowDelBox(row, index) {
  1255. this.$confirm("确定将选择数据删除?", {
  1256. confirmButtonText: "确定",
  1257. cancelButtonText: "取消",
  1258. type: "warning"
  1259. }).then(() => {
  1260. if (row.id) {
  1261. tradingBox(row.id).then(res => {
  1262. this.form.shipItemsList.splice(index, 1);
  1263. this.$message.success("操作成功!");
  1264. });
  1265. } else {
  1266. this.form.shipItemsList.splice(index, 1);
  1267. this.$message.success("操作成功!");
  1268. }
  1269. });
  1270. },
  1271. // 明细信息多选
  1272. selectionContacts(list) {
  1273. this.selectionMultilist = list;
  1274. },
  1275. // 一键删除
  1276. batchDelete() {
  1277. if (this.selectionMultilist.length == 0) {
  1278. return this.$message.warning("请选择要删除的数据");
  1279. }
  1280. this.$confirm("确定将选择数据删除?", {
  1281. confirmButtonText: "确定",
  1282. cancelButtonText: "取消",
  1283. type: "warning"
  1284. }).then(() => {
  1285. let multiList = this.selectionMultilist;
  1286. let arr = this.form.shipItemsList;
  1287. // 获取有id 的数据
  1288. const itemsWithId = multiList.filter(item => item.hasOwnProperty("id"));
  1289. let arrIds = itemsWithId.map(item => item.id); // 获取id 数据
  1290. // 把选中的删除掉
  1291. multiList.forEach(item => {
  1292. for (let index in arr) {
  1293. if (JSON.stringify(item) == JSON.stringify(arr[index])) {
  1294. arr.splice(Number(index), 1);
  1295. }
  1296. }
  1297. });
  1298. // 有id 的处理
  1299. if (itemsWithId.length != 0) {
  1300. removeItem(arrIds.join(",")).then(res => {
  1301. this.$message.success("操作成功!");
  1302. });
  1303. }
  1304. });
  1305. },
  1306. rowSave(form, done, loading) {
  1307. console.log(form);
  1308. done(form);
  1309. },
  1310. // 更新数据后确定触发该事件
  1311. rowUpdate(form, index, done, loading) {
  1312. console.log(form);
  1313. done(form);
  1314. },
  1315. handlePrint() {
  1316. this.switchDialog = !this.switchDialog;
  1317. },
  1318. onClose(val) {
  1319. this.switchDialog = val;
  1320. },
  1321. //自定义列保存
  1322. async saveColumnTwo(ref, option, optionBack, code) {
  1323. /**
  1324. * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
  1325. * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
  1326. * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
  1327. */
  1328. const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
  1329. isProcurement({ param: "whether.model" }).then(res => {
  1330. if (res.data.data == 1) {
  1331. this.findObject(this.optionContacts.column, "pattern").label = "规格型号1";
  1332. }
  1333. });
  1334. if (inSave) {
  1335. this.$message.success("保存成功");
  1336. //关闭窗口b
  1337. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  1338. }
  1339. },
  1340. //自定义列重置
  1341. async resetColumnTwo(ref, option, optionBack, code) {
  1342. this[option] = this[optionBack];
  1343. const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
  1344. isProcurement({ param: "whether.model" }).then(res => {
  1345. if (res.data.data == 1) {
  1346. this.findObject(this.optionContacts.column, "pattern").label = "规格型号1";
  1347. }
  1348. });
  1349. if (inSave) {
  1350. this.$message.success("重置成功");
  1351. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  1352. }
  1353. },
  1354. backToList(type) {
  1355. this.$emit("backToList", type);
  1356. }
  1357. }
  1358. };
  1359. </script>
  1360. <style lang="scss" scoped>
  1361. ::v-deep .el-form-item {
  1362. margin-bottom: 8px !important;
  1363. }
  1364. </style>