addEdit.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916
  1. <template>
  2. <el-dialog
  3. :title="title"
  4. :center="true"
  5. align="left"
  6. top="5vh"
  7. width="1040px"
  8. @close="closeModel"
  9. :close-on-click-modal="false"
  10. :visible.sync="showModelThis"
  11. v-loading="loading"
  12. element-loading-text="拼命加载中"
  13. element-loading-spinner="el-icon-loading"
  14. element-loading-background="rgba(0, 0, 0, 0.8)"
  15. append-to-body
  16. >
  17. <el-card style="margin-top: -20px">
  18. <el-row :gutter="10">
  19. <el-col :span="24">
  20. <el-form
  21. ref="ruleForm"
  22. :model="ruleForm"
  23. status-icon
  24. :rules="rulesThis"
  25. label-width="95px"
  26. class="demo-ruleForm"
  27. >
  28. <el-row>
  29. <el-col :span="12">
  30. <el-form-item label="商品分类" prop="good_code">
  31. <good-class
  32. :value="ruleForm.goods_class"
  33. @handleChange="goods_class_change"
  34. :disabled="
  35. !(
  36. id === 'add' ||
  37. (status === '0' && powers.some((item) => item == '005'))
  38. )
  39. "
  40. :placeholder="'商品分类'"
  41. />
  42. </el-form-item>
  43. </el-col>
  44. <el-col :span="12">
  45. <el-form-item label="商品名称" prop="good_code">
  46. <el-input
  47. v-model="ruleForm.good_name"
  48. readonly
  49. @focus="showGoodsModel = true"
  50. />
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="24">
  54. <el-form-item label="企业客户" prop="customer_code">
  55. <search-customer
  56. :value="ruleForm.customer_code"
  57. @searchChange="customer_code_change"
  58. />
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="24">
  62. <search-stock-good-modal
  63. :show-model="showGoodsModel"
  64. :code="stock_code"
  65. @cancel="showGoodsModel = false"
  66. @searchChange="addGoodsRes"
  67. />
  68. </el-col>
  69. </el-row>
  70. </el-form>
  71. </el-col>
  72. <el-col :span="24" style="padding: 0 0 20px 0">
  73. <el-form :model="stockForm" ref="stockForm" :size="'mini'">
  74. <el-table
  75. :data="stockForm.good_stock"
  76. border
  77. :size="'mini'"
  78. style="width: 100%"
  79. row-key="key"
  80. >
  81. <el-table-column
  82. prop="wsm_supplierNo"
  83. label="发货公司编号"
  84. width="145"
  85. />
  86. <el-table-column
  87. show-overflow-tooltip
  88. prop="wsm_supplier"
  89. label="发货公司名称"
  90. min-width="145"
  91. />
  92. <el-table-column
  93. prop="wsm_code"
  94. label="发货仓库编码"
  95. width="180"
  96. />
  97. <el-table-column
  98. show-overflow-tooltip
  99. prop="wsm_name"
  100. label="发货仓库名称"
  101. min-width="180"
  102. />
  103. <el-table-column
  104. prop="usable_stock"
  105. label="商品可用库存"
  106. width="120"
  107. />
  108. <el-table-column prop="num" label="下单数量" width="150">
  109. <template slot-scope="scope">
  110. <el-form-item
  111. :prop="'good_stock.' + scope.$index + '.' + 'num'"
  112. :rules="{}"
  113. :size="'mini'"
  114. style="margin-bottom: 0"
  115. >
  116. <el-input
  117. v-model="scope.row.num"
  118. :disabled="!scope.row.edit"
  119. />
  120. </el-form-item>
  121. </template>
  122. </el-table-column>
  123. <el-table-column
  124. prop="original_price"
  125. label="销售价"
  126. width="110"
  127. />
  128. <el-table-column fixed="right" width="80" label="操作">
  129. <template slot-scope="scope">
  130. <el-tooltip
  131. effect="dark"
  132. content="编辑"
  133. v-if="!scope.row.edit"
  134. placement="top"
  135. >
  136. <i
  137. class="el-icon-edit tb-icon"
  138. @click="editRow(scope.$index)"
  139. ></i>
  140. </el-tooltip>
  141. <el-tooltip
  142. effect="dark"
  143. content="保存"
  144. v-if="scope.row.edit"
  145. placement="top"
  146. >
  147. <i
  148. class="el-icon-circle-check tb-icon"
  149. @click="checkStockRow(scope.$index)"
  150. ></i>
  151. </el-tooltip>
  152. <el-tooltip effect="dark" content="删除" placement="top">
  153. <i
  154. class="el-icon-delete tb-icon"
  155. @click="deleteRow(scope.$index, stockForm.good_stock)"
  156. ></i>
  157. </el-tooltip>
  158. </template>
  159. </el-table-column>
  160. </el-table>
  161. </el-form>
  162. </el-col>
  163. <el-col :span="24" style="padding: 0 0 22px 0">
  164. <div style="height: 30px">
  165. <a href="./static/收货地址模板.xlsx">
  166. <el-tooltip
  167. class="fr"
  168. style="margin: 3px 0 0 0"
  169. effect="dark"
  170. content="下载收货地址模板"
  171. placement="top"
  172. >
  173. <i
  174. class="el-icon-circle-plus-outline tb-icon"
  175. style="color: #63cbe7"
  176. ></i>
  177. </el-tooltip>
  178. </a>
  179. <el-tooltip
  180. class="fr"
  181. style="margin: 3px 0 0 0"
  182. effect="dark"
  183. content="导入收货地址"
  184. placement="top"
  185. >
  186. <i
  187. class="el-icon-circle-plus-outline tb-icon"
  188. style="color: #63cbe7"
  189. @click="openAddModal(-1)"
  190. ></i>
  191. </el-tooltip>
  192. </div>
  193. <el-form :model="addrForm" ref="addrForm" :size="'mini'">
  194. <el-table
  195. :data="addrForm.order_addr"
  196. border
  197. :size="'mini'"
  198. style="width: 100%"
  199. row-key="key"
  200. >
  201. <el-table-column
  202. prop="receipt_quantity"
  203. label="收货总数"
  204. min-width="125"
  205. >
  206. <template slot-scope="scope">
  207. <el-form-item
  208. :prop="
  209. 'order_addr.' + scope.$index + '.' + 'receipt_quantity'
  210. "
  211. :rules="addrRules.receipt_quantity"
  212. :size="'mini'"
  213. :style="{ marginBottom: scope.row.edit ? '13px' : '0' }"
  214. >
  215. <el-input
  216. v-model="scope.row.receipt_quantity"
  217. :disabled="!scope.row.edit"
  218. />
  219. </el-form-item>
  220. </template>
  221. </el-table-column>
  222. <el-table-column
  223. prop="arrive_time"
  224. label="最晚收货日期"
  225. min-width="200"
  226. >
  227. <template slot-scope="scope">
  228. <el-form-item
  229. :prop="'order_addr.' + scope.$index + '.' + 'arrive_time'"
  230. :rules="addrRules.arrive_time"
  231. :size="'mini'"
  232. :style="{ marginBottom: scope.row.edit ? '13px' : '0' }"
  233. >
  234. <el-date-picker
  235. :disabled="!scope.row.edit"
  236. v-model="scope.row.arrive_time"
  237. type="datetime"
  238. style="width: 100%"
  239. value-format="yyyy-MM-dd HH:mm:ss"
  240. :picker-options="pickerOptions"
  241. >
  242. </el-date-picker>
  243. </el-form-item>
  244. </template>
  245. </el-table-column>
  246. <el-table-column
  247. prop="contactor"
  248. label="收件联系人"
  249. min-width="110"
  250. >
  251. <template slot-scope="scope">
  252. <el-form-item
  253. :prop="'order_addr.' + scope.$index + '.' + 'contactor'"
  254. :rules="addrRules.contactor"
  255. :size="'mini'"
  256. :style="{ marginBottom: scope.row.edit ? '13px' : '0' }"
  257. >
  258. <el-input
  259. v-model="scope.row.contactor"
  260. :disabled="!scope.row.edit"
  261. />
  262. </el-form-item>
  263. </template>
  264. </el-table-column>
  265. <el-table-column
  266. prop="mobile"
  267. label="收货联系电话"
  268. min-width="130"
  269. >
  270. <template slot-scope="scope">
  271. <el-form-item
  272. :prop="'order_addr.' + scope.$index + '.' + 'mobile'"
  273. :rules="addrRules.mobile"
  274. :size="'mini'"
  275. :style="{ marginBottom: scope.row.edit ? '13px' : '0' }"
  276. >
  277. <el-input
  278. v-model="scope.row.mobile"
  279. :disabled="!scope.row.edit"
  280. />
  281. </el-form-item>
  282. </template>
  283. </el-table-column>
  284. <el-table-column
  285. prop="addr_code"
  286. label="收货省市区"
  287. min-width="230"
  288. >
  289. <template slot-scope="scope">
  290. <el-form-item
  291. :prop="'order_addr.' + scope.$index + '.' + 'addr_code'"
  292. :rules="addrRules.addr_code"
  293. :size="'mini'"
  294. :style="{ marginBottom: scope.row.edit ? '13px' : '0' }"
  295. >
  296. <select-area
  297. :value="scope.row.addr_code"
  298. :disabled="!scope.row.edit"
  299. :size="'mini'"
  300. @selectChange="select_area_change($event, scope.$index)"
  301. />
  302. </el-form-item>
  303. </template>
  304. </el-table-column>
  305. <el-table-column prop="addr" label="详细地址" min-width="170">
  306. <template slot-scope="scope">
  307. <el-form-item
  308. :prop="'order_addr.' + scope.$index + '.' + 'addr'"
  309. :rules="addrRules.addr"
  310. :size="'mini'"
  311. :style="{ marginBottom: scope.row.edit ? '13px' : '0' }"
  312. >
  313. <el-input
  314. v-model="scope.row.addr"
  315. :disabled="!scope.row.edit"
  316. />
  317. </el-form-item>
  318. </template>
  319. </el-table-column>
  320. <el-table-column fixed="right" width="80">
  321. <template slot="header" slot-scope="scope">
  322. <span>操作</span>
  323. <el-tooltip
  324. class="fr"
  325. style="margin: 3px 0 0 0"
  326. effect="dark"
  327. content="添加"
  328. placement="top"
  329. >
  330. <i
  331. class="el-icon-circle-plus-outline tb-icon"
  332. style="color: #63cbe7"
  333. @click="openHouseModal(-1)"
  334. ></i>
  335. </el-tooltip>
  336. </template>
  337. <template slot-scope="scope">
  338. <el-tooltip
  339. effect="dark"
  340. content="编辑"
  341. v-if="!scope.row.edit"
  342. placement="top"
  343. >
  344. <i
  345. class="el-icon-edit tb-icon"
  346. @click="openHouseModal(scope.$index)"
  347. ></i>
  348. </el-tooltip>
  349. <el-tooltip
  350. effect="dark"
  351. content="保存"
  352. v-if="scope.row.edit"
  353. placement="top"
  354. >
  355. <i
  356. class="el-icon-circle-check tb-icon"
  357. @click="checkRow(scope.$index)"
  358. ></i>
  359. </el-tooltip>
  360. <el-tooltip effect="dark" content="删除" placement="top">
  361. <i
  362. class="el-icon-delete tb-icon"
  363. @click="deleteRow(scope.$index, addrForm.order_addr)"
  364. ></i>
  365. </el-tooltip>
  366. </template>
  367. </el-table-column>
  368. </el-table>
  369. </el-form>
  370. </el-col>
  371. <el-col :span="24">
  372. <in-addr-model
  373. :show-model="addrmodel"
  374. @cancel="addrmodel = false"
  375. @refresh="addrRefresh"
  376. />
  377. </el-col>
  378. <el-col :span="24" style="text-align: right">
  379. <el-button :size="'mini'" type="primary" @click="submitForm"
  380. >保 存
  381. </el-button>
  382. </el-col>
  383. </el-row>
  384. </el-card>
  385. </el-dialog>
  386. </template>
  387. <script>
  388. import resToken from "@/mixins/resToken";
  389. import asyncRequest from "@/apis/service/sellOut/salesOrder/detail";
  390. import searchStockGoodModal from "@/components/search-stock-good-modal";
  391. import { isnumber, isMobile } from "@/utils/validate";
  392. import inAddrModel from "./in-addr-model";
  393. export default {
  394. name: "allot",
  395. props: ["showModel", "id"],
  396. mixins: [resToken],
  397. components: { searchStockGoodModal, inAddrModel },
  398. data() {
  399. const validatemobile = (rule, value, callback) => {
  400. if (value === "") {
  401. callback(new Error("手机号不能为空!"));
  402. } else {
  403. if (!isMobile(value)) {
  404. callback(new Error("手机号格式不正确!"));
  405. } else {
  406. callback();
  407. }
  408. }
  409. };
  410. const validateWeight = (rule, value, callback) => {
  411. console.log(value);
  412. if (value === "") {
  413. callback(new Error("收货总数不能为空!"));
  414. } else {
  415. if (!isnumber(value)) {
  416. callback(new Error("收货总数仅支持整数!"));
  417. } else {
  418. callback();
  419. }
  420. }
  421. };
  422. return {
  423. loading: false,
  424. addrmodel: false,
  425. title: "新建销售订单",
  426. showModelThis: this.showModel,
  427. showGoodsModel: false,
  428. stock_code: "",
  429. cat_id: "",
  430. ruleForm: {
  431. goods_class: [],
  432. good_name: "",
  433. good_code: "", // 商品选择
  434. customer_code: [], // 企业客户选择
  435. },
  436. rulesThis: this.rules,
  437. rules: {
  438. good_code: [
  439. {
  440. required: true,
  441. message: "请选择商品",
  442. trigger: "blur",
  443. },
  444. ],
  445. customer_code: [
  446. {
  447. type: "array",
  448. required: true,
  449. message: "请选择企业客户",
  450. trigger: "change",
  451. },
  452. ],
  453. },
  454. addrForm: {
  455. order_addr: [], //收货地址
  456. },
  457. addrRules: {
  458. arrive_time: [
  459. {
  460. required: true,
  461. message: "最晚收货日期不能为空",
  462. trigger: "change",
  463. },
  464. ],
  465. receipt_quantity: [
  466. {
  467. required: true,
  468. validator: validateWeight,
  469. trigger: "blur",
  470. },
  471. ],
  472. contactor: [
  473. {
  474. required: true,
  475. trigger: "blur",
  476. message: "联系人不能为空",
  477. },
  478. ],
  479. mobile: [
  480. {
  481. required: true,
  482. validator: validatemobile,
  483. trigger: "blur",
  484. },
  485. ],
  486. addr_code: [
  487. {
  488. type: "array",
  489. required: true,
  490. message: "收货省市区不能为空",
  491. trigger: "change",
  492. },
  493. ],
  494. addr: [
  495. {
  496. required: true,
  497. message: "详细地址不能为空",
  498. trigger: "blur",
  499. },
  500. ],
  501. },
  502. stockForm: {
  503. good_stock: [], //出货仓库
  504. },
  505. loading: false,
  506. id: "",
  507. };
  508. },
  509. watch: {
  510. showModel: function (val) {
  511. this.showModelThis = val;
  512. if (val) {
  513. this.rulesThis = this.rules;
  514. this.resetForm();
  515. }
  516. },
  517. showModelThis(val) {
  518. if (!val) {
  519. this.$emit("cancel");
  520. }
  521. },
  522. },
  523. methods: {
  524. closeModel() {
  525. console.log("closeModel!!");
  526. this.showModelThis = false;
  527. },
  528. openAddModal(index) {
  529. this.addrmodel = true;
  530. },
  531. addrRefresh(e) {
  532. console.log(e);
  533. },
  534. DownloadTemplate() {
  535. if (!this.loading) {
  536. this.loading = true;
  537. const bloc = dataURLtoBlob(fileUrl);
  538. const blob = new Blob([bloc], {
  539. type: "application/vnd.ms-excel",
  540. });
  541. const downLoadEle = document.createElement("a");
  542. // 通过返回的二进制数据来创建一个对象URL.
  543. const href = URL.createObjectURL(blob);
  544. downLoadEle.href = href;
  545. // 信息表为自定义文件名
  546. downLoadEle.download = "信息表";
  547. document.body.appendChild(downLoadEle);
  548. downLoadEle.click();
  549. document.body.removeChild(downLoadEle);
  550. // 当加载完成后释放对象URL.
  551. window.URL.revokeObjectURL(href);
  552. // window.open(fileUrl, "_blank");
  553. this.loading = false;
  554. }
  555. },
  556. goods_class_change(e) {
  557. this.ruleForm.goods_class = e;
  558. this.cat_id = e.length > 0 ? e[e.length - 1] : "";
  559. this.$refs.ruleForm.validateField("goods_class");
  560. this.ruleForm.good_code = "";
  561. this.ruleForm.good_name = "";
  562. this.$refs.ruleForm.validateField("good_code");
  563. },
  564. refresh(e) {
  565. this.showModelThis = e;
  566. this.$emit("refresh", true);
  567. },
  568. async getstock(code) {
  569. this.loading = true;
  570. let model = {
  571. wsm_code: "",
  572. page: 1,
  573. size: 100,
  574. type_code: code,
  575. good_code: "",
  576. good_name: "",
  577. supplierNo: "",
  578. stock_low: "",
  579. stock_up: "",
  580. warn_low: "",
  581. warn_up: "",
  582. stock_max: "1",
  583. };
  584. const res = await asyncRequest.getGoodStock(model);
  585. if (res && res.code === 0 && res.data) {
  586. this.stockForm = {
  587. good_stock: [], //出货仓库
  588. };
  589. const { list } = res.data;
  590. list.forEach((v) => {
  591. let model = {
  592. num: v.usable_stock,
  593. usable_stock: v.usable_stock,
  594. wsm_name: v.wsm_name,
  595. wsm_supplier: v.wsm_supplier,
  596. wsm_supplierNo: v.wsm_supplierNo,
  597. wsm_code: v.wsm_code,
  598. original_price: v.original_price,
  599. edit: false,
  600. };
  601. this.stockForm.good_stock.push(model);
  602. });
  603. } else if (res && res.code >= 100 && res.code <= 104) {
  604. await this.logout();
  605. } else {
  606. this.$message.warning(res.message);
  607. }
  608. this.loading = false;
  609. },
  610. getNewTime() {
  611. this.newTime = new Date().valueOf();
  612. },
  613. async resetForm() {
  614. // 重置
  615. await this.$nextTick(() => {
  616. if (this.$refs.ruleForm) {
  617. this.$refs.ruleForm.resetFields();
  618. this.$refs.ruleForm.clearValidate();
  619. this.cat_id = "";
  620. this.ruleForm = {
  621. goods_class: [],
  622. good_code: "", // 商品选择
  623. customer_code: [], // 企业客户选择
  624. };
  625. }
  626. if (this.$refs.stockForm) {
  627. this.$refs.stockForm.resetFields();
  628. this.$refs.stockForm.clearValidate();
  629. this.stockForm = {
  630. good_stock: [], //出货仓库
  631. };
  632. }
  633. if (this.$refs.addrForm) {
  634. this.$refs.addrForm.resetFields();
  635. this.$refs.addrForm.clearValidate();
  636. this.addrForm = {
  637. order_addr: [],
  638. };
  639. }
  640. });
  641. },
  642. async addGoodsRes(e) {
  643. if (e && e.length === 1) {
  644. this.ruleForm.good_name = e[0].good_name;
  645. this.ruleForm.good_code = e[0].type_code;
  646. } else {
  647. this.ruleForm.good_name = "";
  648. this.ruleForm.good_code = "";
  649. }
  650. this.$refs.ruleForm.validateField("good_code");
  651. if (this.ruleForm.good_code !== "" && this.id === "add") {
  652. await this.getstock(this.ruleForm.good_code);
  653. } else {
  654. this.stockForm = {
  655. good_stock: [], //出货仓库
  656. };
  657. }
  658. },
  659. editRow(index) {
  660. let findex = this.stockForm.good_stock.findIndex((v) => v.edit === true);
  661. if (findex !== -1) {
  662. this.$message.warning("当前已有发货仓库信息在编辑,请保存后再试!");
  663. return;
  664. } else {
  665. this.stockForm.good_stock[index].edit = true;
  666. }
  667. },
  668. checkStockRow(index) {
  669. let total = parseInt(this.stockForm.good_stock[index].usable_stock),
  670. num = parseInt(this.stockForm.good_stock[index].num);
  671. if (total === 0) {
  672. this.$message.warning("该仓库已无该商品库存!不能销售!");
  673. return;
  674. } else {
  675. if (num > total) {
  676. this.$message.warning("销售数量不能大于可用库存!");
  677. return;
  678. } else {
  679. this.stockForm.good_stock[index].edit = false;
  680. }
  681. }
  682. },
  683. customer_code_change(e) {
  684. if (e && e.code) {
  685. this.ruleForm.customer_code = [e.code];
  686. } else {
  687. this.ruleForm.customer_code = [];
  688. }
  689. this.$refs.ruleForm.validateField("customer_code");
  690. },
  691. openHouseModal(index) {
  692. let findex = this.addrForm.order_addr.findIndex((v) => v.edit === true);
  693. if (findex !== -1) {
  694. this.$message.warning("当前已有地址在编辑,请保存后再试!");
  695. return;
  696. } else {
  697. if (index === -1) {
  698. this.addrForm.order_addr.push({
  699. edit: true,
  700. arrive_time: "",
  701. receipt_quantity: "",
  702. contactor: "",
  703. mobile: "",
  704. addr_code: [],
  705. addr: "",
  706. });
  707. } else {
  708. this.addrForm.order_addr[index].edit = true;
  709. }
  710. }
  711. },
  712. //省市区选择
  713. select_area_change(e, index) {
  714. this.addrForm.order_addr[index].addr_code = e;
  715. },
  716. //省市区保存某一行
  717. checkRow(rowIndex) {
  718. this.$refs.addrForm.validate((valid) => {
  719. if (valid) {
  720. this.addrForm.order_addr[rowIndex].edit = false;
  721. } else {
  722. console.log("error submit!!");
  723. return false;
  724. }
  725. });
  726. },
  727. // 省市区删除行操作
  728. deleteRow(index, rows) {
  729. rows.splice(index, 1);
  730. },
  731. async submitForm() {
  732. await this.$refs.ruleForm.validate(async (valid) => {
  733. if (valid) {
  734. this.loading = true;
  735. const { good_code, customer_code } = JSON.parse(
  736. JSON.stringify(this.ruleForm)
  737. );
  738. const { good_stock } = JSON.parse(JSON.stringify(this.stockForm));
  739. const { order_addr } = JSON.parse(JSON.stringify(this.addrForm));
  740. let model = {
  741. good_code,
  742. customer_code: customer_code.join(","), // 账号
  743. order_addr: [],
  744. good_stock: [],
  745. };
  746. let stockT = 0,
  747. addrT = 0,
  748. isStockOk = true,
  749. isSEdit = false,
  750. isAEdit = false;
  751. good_stock.forEach((v1) => {
  752. if (v1.edit) {
  753. isSEdit = true;
  754. }
  755. if (parseInt(v1.usable_stock) < parseInt(v1.num)) {
  756. isStockOk = false;
  757. }
  758. stockT += parseInt(v1.num);
  759. let model1 = {
  760. num: v1.num,
  761. wsm_code: v1.wsm_code,
  762. };
  763. model.good_stock.push(model1);
  764. });
  765. order_addr.forEach((v2) => {
  766. if (v2.edit) {
  767. isAEdit = true;
  768. }
  769. addrT += parseInt(v2.receipt_quantity);
  770. let model2 = {
  771. contactor: v2.contactor,
  772. mobile: v2.mobile,
  773. arrive_time: v2.arrive_time,
  774. addr: v2.addr,
  775. receipt_quantity: v2.receipt_quantity,
  776. addr_code: v2.addr_code,
  777. };
  778. model.order_addr.push(model2);
  779. });
  780. if (isSEdit) {
  781. this.$message.warning("请保存仓库信息!");
  782. this.loading = false;
  783. return;
  784. }
  785. if (isAEdit) {
  786. this.$message.warning("请保存地址信息!");
  787. this.loading = false;
  788. return;
  789. }
  790. if (!isStockOk) {
  791. this.$message.warning("部分仓库销售数量已大于可用数量!");
  792. this.loading = false;
  793. return;
  794. }
  795. if (stockT !== addrT) {
  796. this.$message.warning(
  797. "库存出库总数量,与收货地址信息中的总数量不一致!"
  798. );
  799. this.loading = false;
  800. return;
  801. }
  802. let res = await asyncRequest.add(model);
  803. this.loading = false;
  804. if (res && res.code === 0) {
  805. this.$notify.success({
  806. title: "添加成功",
  807. message: "",
  808. });
  809. this.showModelThis = false;
  810. // 刷新
  811. this.$emit("refresh");
  812. } else if (res && res.code >= 100 && res.code <= 104) {
  813. await this.logout();
  814. } else {
  815. this.$message.warning(res.message);
  816. }
  817. } else {
  818. console.log("error submit!!");
  819. return false;
  820. }
  821. });
  822. },
  823. },
  824. };
  825. </script>
  826. <style lang="scss" scoped>
  827. // .capitalClaim {
  828. .excelUploadBox {
  829. position: relative;
  830. width: 100%;
  831. height: 120px;
  832. line-height: 120px;
  833. box-sizing: border-box;
  834. &:hover {
  835. cursor: pointer;
  836. }
  837. .el-icon-receiving {
  838. width: 100%;
  839. text-align: center;
  840. height: 50px;
  841. display: block;
  842. font-size: 32px;
  843. line-height: 90px;
  844. color: #d3d4d6;
  845. }
  846. .boxM {
  847. width: 100%;
  848. display: block;
  849. text-align: center;
  850. line-height: 65px;
  851. height: 60px;
  852. color: #909399;
  853. }
  854. }
  855. .excelUpload {
  856. top: 0;
  857. left: 0;
  858. position: absolute;
  859. z-index: 2;
  860. width: 100%;
  861. height: 120px;
  862. line-height: 120px;
  863. box-sizing: border-box;
  864. }
  865. .excelUploadRes {
  866. width: 100%;
  867. height: 120px;
  868. line-height: 120px;
  869. box-sizing: border-box;
  870. i {
  871. width: 55px;
  872. height: 120px;
  873. line-height: 120px;
  874. text-align: center;
  875. font-size: 20px;
  876. &.fl {
  877. padding-left: 16px;
  878. }
  879. &.fr {
  880. padding-right: 16px;
  881. &:hover {
  882. cursor: pointer;
  883. }
  884. }
  885. }
  886. span {
  887. width: 386px;
  888. line-height: 16px;
  889. margin: 52px 0 0 0;
  890. font-size: 16px;
  891. }
  892. }
  893. // }
  894. </style>