addEdit.vue 25 KB

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