addAdpackingDrawer.vue 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916
  1. <template>
  2. <!-- 新增 预装箱单-成衣-->
  3. <div id="addAdvancePacking">
  4. <a-drawer
  5. title="新增预装箱单-成衣"
  6. width="89%"
  7. placement="right"
  8. :closable="true"
  9. :visible="visible"
  10. @close="handleCancel"
  11. >
  12. <!-- 主表信息 填写 -->
  13. <a-card :bordered="false">
  14. <div class="table-page-search-wrapper">
  15. <!-- :rules="validatorRules" -->
  16. <a-form-model layout="inline" ref="form" :model="addAdpacking">
  17. <a-row :gutter="24">
  18. <a-col :md="6" :sm="8">
  19. <a-form-model-item label="单据号" prop="orderNumber">
  20. <a-input placeholder="自动生成" v-model="addAdpacking.orderNumber" readOnly></a-input>
  21. </a-form-model-item>
  22. </a-col>
  23. <a-col :md="6" :sm="8">
  24. <a-form-model-item label="集装箱代号" prop="containerCode">
  25. <a-input placeholder="请输入集装箱代号" v-model="addAdpacking.containerCode"></a-input>
  26. </a-form-model-item>
  27. </a-col>
  28. <a-col :md="6" :sm="8">
  29. <a-form-model-item label="集装箱号" prop="containerNumber">
  30. <a-input placeholder="请输入集装箱号" v-model="addAdpacking.containerNumber"></a-input>
  31. </a-form-model-item>
  32. </a-col>
  33. <!-- <a-col :md="6" :sm="8">
  34. <a-form-model-item label="预发货日期" prop="u8Remarks">
  35. <j-date placeholder="请选择预发货日期" v-model="addAdpacking.preDeliveryDate" style="width:100%"></j-date>
  36. </a-form-model-item>
  37. </a-col> -->
  38. <a-col :md="6" :sm="8">
  39. <a-form-model-item label="u8备注" prop="u8Remarks">
  40. <a-input placeholder="请输入u8备注" v-model="addAdpacking.u8Remarks"></a-input>
  41. </a-form-model-item>
  42. </a-col>
  43. <a-col :md="6" :sm="8">
  44. <a-form-model-item label="款号" prop="itemNumber">
  45. <a-input placeholder="选择子表自动生成" v-model="addAdpacking.itemNumber"></a-input>
  46. </a-form-model-item>
  47. </a-col>
  48. <a-col :md="6" :sm="8">
  49. <a-form-model-item label="中文品名" prop="productName">
  50. <a-input placeholder="选择子表自动生成" v-model="addAdpacking.productName"></a-input>
  51. </a-form-model-item>
  52. </a-col>
  53. <a-col :md="6" :sm="8">
  54. <a-form-model-item label="英文品名" prop="productName">
  55. <a-input placeholder="选择子表自动生成" v-model="addAdpacking.englishProductName"></a-input>
  56. </a-form-model-item>
  57. </a-col>
  58. <a-col :md="6" :sm="8">
  59. <a-form-model-item label="尺码范围" prop="sizeRange">
  60. <a-input placeholder="选择子表自动生成" v-model="addAdpacking.sizeRange" readOnly></a-input>
  61. </a-form-model-item>
  62. </a-col>
  63. <a-col :md="6" :sm="8">
  64. <a-form-model-item label="客户" prop="customer">
  65. <a-input placeholder="选择子表自动生成" v-model="addAdpacking.customer"></a-input>
  66. </a-form-model-item>
  67. </a-col>
  68. <!-- <a-col :md="6" :sm="8">
  69. <a-form-model-item label="成衣工厂" prop="garmentFactory">
  70. <a-input placeholder="选择子表自动生成" v-model="addAdpacking.garmentFactory"></a-input>
  71. </a-form-model-item>
  72. </a-col> -->
  73. <a-col :md="6" :sm="8">
  74. <a-form-model-item label="总箱数" prop="totalBoxes">
  75. <a-input placeholder="自动生成" v-model="addAdpacking.totalBoxes" readOnly></a-input>
  76. </a-form-model-item>
  77. </a-col>
  78. <a-col :md="6" :sm="8">
  79. <a-form-model-item label="总净重" prop="totalNetWeight">
  80. <a-input placeholder="自动生成" v-model="addAdpacking.totalNetWeight" readOnly></a-input>
  81. </a-form-model-item>
  82. </a-col>
  83. <a-col :md="6" :sm="8">
  84. <a-form-model-item label="总毛重" prop="totalGrossWeight">
  85. <a-input placeholder="自动生成" v-model="addAdpacking.totalGrossWeight" readOnly></a-input>
  86. </a-form-model-item>
  87. </a-col>
  88. <a-col :md="6" :sm="8">
  89. <a-form-model-item label="总体积" prop="totalVolume">
  90. <a-input placeholder="自动生成" v-model="addAdpacking.totalVolume" readOnly></a-input>
  91. </a-form-model-item>
  92. </a-col>
  93. <a-col :md="6" :sm="8">
  94. <a-form-model-item label="总价" prop="totalPrice">
  95. <a-input placeholder="自动生成" v-model="addAdpacking.totalPrice" readOnly></a-input>
  96. </a-form-model-item>
  97. </a-col>
  98. <a-col :md="6" :sm="8">
  99. <a-form-model-item label="总件数" prop="totalNumber">
  100. <a-input placeholder="自动生成" v-model="addAdpacking.total" readOnly></a-input>
  101. </a-form-model-item>
  102. </a-col>
  103. </a-row>
  104. </a-form-model>
  105. </div>
  106. </a-card>
  107. <!-- 参照发运明细 増行-->
  108. <a-card :bordered="false" style="margin:10px 0 60px 0;">
  109. <!-- 子表 ipagination :rules="validatorRules"-->
  110. <a-spin :spinning="confirmLoading">
  111. <a-form-model ref="formRef">
  112. <j-vxe-table
  113. ref="vTable"
  114. toolbar
  115. row-number
  116. row-selection
  117. drag-sort
  118. keep-source
  119. :height="300"
  120. :loading="loading"
  121. :dataSource="addAdpacking.syPreAssembledPackingListItemList"
  122. :columns="columns"
  123. :alwaysEdit=true
  124. :bordered=true
  125. :scroll="{ x: 1500 }"
  126. style="margin-top: 5px;"
  127. :toolbarConfig="toolbarConfig"
  128. @valueChange="handleValueChange"
  129. >
  130. <template v-slot:action="props">
  131. <a @click="copy(props)">复制</a>
  132. <a-divider type="vertical"/>
  133. <a-popconfirm title="确定删除吗?" @confirm="handleDelete(props)">
  134. <a>删除</a>
  135. </a-popconfirm>
  136. </template>
  137. <template v-slot:toolbarSuffix>
  138. <a-button type="primary" @click="referShipmentDetails" icon="ordered-list">参照出运明细</a-button>
  139. </template>
  140. </j-vxe-table>
  141. </a-form-model>
  142. </a-spin>
  143. </a-card>
  144. <!-- 页面底部提交取消 -->
  145. <div
  146. :style="{
  147. position: 'absolute',
  148. right: 0,
  149. bottom: 0,
  150. width: '100%',
  151. borderTop: '1px solid #e9e9e9',
  152. padding: '10px 16px',
  153. background: '#fff',
  154. textAlign: 'right',
  155. zIndex: 1
  156. }"
  157. >
  158. <a-popconfirm title="确定放弃编辑?" @confirm="handleCancel" okText="确定" cancelText="取消">
  159. <a-button :style="{ marginRight: '8px' }">取消</a-button>
  160. </a-popconfirm>
  161. <a-button type="primary" @click="myHandSave" :loading="btnLoading" v-preventReClick="2000">
  162. 保存
  163. </a-button>
  164. <a-button type="primary" @click="myHandSubmit" style="margin-left: 8px">
  165. 保存并提交
  166. </a-button>
  167. </div>
  168. </a-drawer>
  169. <!-- 参照发运明细弹框 -->
  170. <referShipmentDetails-modal
  171. ref="referShipmentDetailsModal"
  172. @bao="getSon"
  173. @ok="modalFormOk"
  174. ></referShipmentDetails-modal>
  175. </div>
  176. </template>
  177. <script>
  178. import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  179. import JEllipsis from '@/components/jeecg/JEllipsis'
  180. import moment from 'moment'
  181. import ReferShipmentDetailsModal from '@views/advance-packingList/referShipmentDetailsModal.vue'
  182. import { addAdvPac, editById } from '@api/document/advance-packingList.js'
  183. import { queryShippingDetails } from '@api/document/advance-packingList.js'
  184. import { JVXETypes } from '@/components/jeecg/JVxeTable'
  185. import { pushIfNotExist, randomNumber, randomUUID } from '@/utils/util'
  186. import { getDotConfig, getDotValidExpress } from '@/utils/myutil'
  187. export default {
  188. name: 'AddAdvancePacking', // 新增预装箱单
  189. mixins: [JeecgListMixin],
  190. components: { JEllipsis, moment, ReferShipmentDetailsModal }, // 参照发运明细弹框
  191. data() {
  192. let ellipsis = (v, l = 20) => <j-ellipsis value={v} length={l} /> // 省略
  193. return {
  194. toolbarConfig: {
  195. // add 新增按钮;remove 删除按钮;clearSelection 清空选择按钮
  196. btn: []
  197. },
  198. btnLoading:false,//按钮等待状态
  199. // 表头
  200. columns: [
  201. {
  202. title: '账套',
  203. key: 'acSetNo',
  204. width: 120,
  205. fixed: 'left',
  206. type: JVXETypes.normal,
  207. },
  208. {
  209. title: '成衣工厂',
  210. key: 'garmentFactory',
  211. width: 120,
  212. fixed: 'left',
  213. type: JVXETypes.normal,
  214. },
  215. {
  216. title: 'HOD',
  217. key: 'hod',
  218. width: 120,
  219. fixed: 'left',
  220. type: JVXETypes.normal,
  221. },
  222. {
  223. title: 'STYLE NO.',
  224. key: 'styleNo',
  225. width: 120,
  226. type: JVXETypes.normal,
  227. },
  228. {
  229. title: 'PO NO.',
  230. key: 'poNo',
  231. width: 120,
  232. type: JVXETypes.normal,
  233. },
  234. {
  235. title: 'ITEM NO./SKU NO./UPC NO./PACKS CODE',
  236. key: 'itemCode',
  237. width: 340,
  238. type: JVXETypes.normal,
  239. },
  240. {
  241. title: '分销点/DC/LABEL',
  242. key: 'distributionPoint',
  243. width: 180,
  244. type: JVXETypes.normal,
  245. },
  246. {
  247. title: 'PREPACK SKU',
  248. key: 'prepackSku',
  249. width: 140,
  250. type: JVXETypes.normal,
  251. insertAfter:true,
  252. },
  253. {
  254. title: '起始箱号',
  255. key: 'startingBoxNumber',
  256. width: 120,
  257. type: JVXETypes.inputNumber ,
  258. validateRules:[{ required: true, message: '${title}不能为空' },
  259. {pattern: /^[1-9]\d*$/, message: '请输入零以上的正整数' }],
  260. },
  261. {
  262. title: '结束箱号',
  263. key: 'endCaseNumber',
  264. width: 140,
  265. type: JVXETypes.inputNumber ,
  266. validateRules:[{ required: true, message: '${title}不能为空' },
  267. {pattern: /^[1-9]\d*$/, message: '请输入零以上的正整数' }],
  268. },
  269. {
  270. title: '颜色(中英文)',
  271. key: 'colour',
  272. width: 140,
  273. type: JVXETypes.input ,
  274. },
  275. {
  276. title: '配码--根据U8订单来显示',
  277. key: 'withCode',
  278. width: 240,
  279. type: JVXETypes.input ,
  280. },
  281. {
  282. title: '计划尺码数量',
  283. key: 'planSize',
  284. width: 240,
  285. type: JVXETypes.normal ,
  286. },
  287. {
  288. title: '计划装箱数量',
  289. key: 'planQuantity',
  290. width: 240,
  291. type: JVXETypes.normal ,
  292. },
  293. {
  294. title: '件数/箱',
  295. key: 'piecesBox',
  296. width: 90,
  297. type: JVXETypes.normal ,
  298. },
  299. {
  300. title: '箱数',
  301. key: 'boxNumber',
  302. width: 140,
  303. type: JVXETypes.normal ,
  304. validateRules:[{ required: true, message: '${title}不能为空' },
  305. {pattern: /^[1-9]\d*$/, message: '请输入零以上的正整数' }],
  306. },
  307. {
  308. title: '总件数',
  309. key: 'total',
  310. width: 140,
  311. type: JVXETypes.normal,
  312. },
  313. {
  314. title: '净重/箱',
  315. key: 'netWeight',
  316. width: 90,
  317. type: JVXETypes.inputNumber,
  318. validateRules: [{ required: true, message: '${title}不能为空' },
  319. {pattern: /^\d+(\.\d{1,2})?$/, message: '小数点位数不能超过2位' }]
  320. },
  321. {
  322. title: '总净重',
  323. key: 'totalNetWeight',
  324. width: 140,
  325. type: JVXETypes.normal,
  326. },
  327. {
  328. title: '毛重/箱',
  329. key: 'grossWeight',
  330. width: 120,
  331. type: JVXETypes.inputNumber,
  332. validateRules: [{ required: true, message: '${title}不能为空' },
  333. {pattern: /^\d+(\.\d{1,2})?$/, message: '小数点位数不能超过2位' }]
  334. },
  335. {
  336. title: '总毛重',
  337. key: 'totalGrossWeight',
  338. width: 140,
  339. type: JVXETypes.normal,
  340. },
  341. {
  342. title: '外箱长度',
  343. key: 'outerBoxLength',
  344. width: 120,
  345. type: JVXETypes.inputNumber,
  346. validateRules: [{ required: true, message: '${title}不能为空' },
  347. ]
  348. },
  349. {
  350. title: '外箱宽度',
  351. key: 'outerBoxWidth',
  352. width: 140,
  353. type: JVXETypes.inputNumber,
  354. validateRules: [{ required: true, message: '${title}不能为空' },
  355. ]
  356. },
  357. {
  358. title: '外箱高度',
  359. key: 'outerBoxHeight',
  360. type: JVXETypes.inputNumber ,
  361. validateRules: [{ required: true, message: '${title}不能为空' },
  362. ],
  363. width: 140,
  364. },
  365. {
  366. title: '总体积',
  367. key: 'totalVolume',
  368. type: JVXETypes.normal ,
  369. width: 140,
  370. },
  371. {
  372. title: '净净重',
  373. key: 'netWeightToo',
  374. width: 120,
  375. type: JVXETypes.inputNumber,
  376. validateRules: [{ required: true, message: '${title}不能为空' },
  377. {pattern: /^\d+(\.\d{1,2})?$/, message: '小数点位数不能超过2位' }],
  378. },
  379. {
  380. title: '单价',
  381. key: 'unitPrice',
  382. width: 120,
  383. type: JVXETypes.normal,
  384. },
  385. {
  386. title: '总价',
  387. key: 'totalPrice',
  388. width: 120,
  389. type: JVXETypes.normal,
  390. // validateRules: [{ required: true, message: '${title}不能为空' },
  391. // {pattern: /^\d+(\.\d{1,2})?$/, message: '小数点位数不能超过2位' }],
  392. },
  393. {
  394. title: '操作',
  395. key: 'action',
  396. type: JVXETypes.slot,
  397. fixed: 'right',
  398. width: 160,
  399. align: 'center',
  400. slotName: 'action',
  401. }
  402. ],
  403. loading: false, // 表格加载
  404. visible: false,
  405. editDecide: 'add',
  406. dateFormat: 'YYYY-MM-DD',
  407. addAdpacking: {
  408. syPreAssembledPackingListItemList:[]
  409. }, //主表信息
  410. confirmLoading: false,
  411. msgFormSon: 'test', // 子组件传来数据的变量
  412. // state: '0', // 单据状态初始未【仅保存】
  413. // pushState: '0' // 推送状态初始未【仅保存】
  414. // 待确定还有哪些必填信息 ----------------------------
  415. // validatorRules: {
  416. // orderNumber: [{ required: true, message: '订单号不能为空', trigger: 'blur' }],
  417. // styleNum: [{ required: true, message: '款号不能为空', trigger: 'blur' }],
  418. // name: [{ required: true, message: '品名不能为空', trigger: 'blur' }]
  419. // },
  420. sizeFields:[], // 尺码字段
  421. dotConfig:{}, // 小数点配置
  422. }
  423. },
  424. // 接收父组件查询方法
  425. props: {
  426. fatherList: {
  427. type: Function,
  428. default: null
  429. }
  430. },
  431. methods: {
  432. getSon(val) {
  433. // console.log('勾选发运明细数据', val)
  434. // for (var i in val) {
  435. // val[i]['orderQuantity'] = val[i].quantity
  436. // val[i]['orderRemainingQuantity'] = val[i].surplusNum
  437. // val[i]['salesUnitPrice'] = val[i].unitPriceIncludingTax
  438. // val[i]['customerOrder'] = val[i].customerOrderNumber
  439. // val[i]['shipmentQuantity'] = val[i].surplusNum //订单剩余数量 赋值给发货数量
  440. // }
  441. this.addAdpacking.syPreAssembledPackingListItemList = [];
  442. this.setHeadCalField();
  443. var selectData = val[0];
  444. queryShippingDetails({id:selectData.id,groupId:selectData.groupId}).then(res => {
  445. if (res.success) {
  446. // 放在前面,有小数位数设置
  447. this.setHeadData(val[0], res.result);
  448. this.loadSizeTables(res.result.sizeTables);
  449. var changedData = this.changeData(val[0], res.result);
  450. this.addAdpacking.syPreAssembledPackingListItemList.push(changedData);
  451. }else{
  452. this.$message.error("获取发运明细详情失败");
  453. }
  454. })
  455. },
  456. loadSizeTables(sizeTable){
  457. var newColums = this.columns.filter(item=>{
  458. return item.isSize != true;
  459. });
  460. this.sizeFields = [];
  461. if (sizeTable != null){
  462. var i=0;
  463. // 找到插入位置点
  464. for (; i<newColums.length;i++){
  465. if (newColums[i].insertAfter){
  466. break;
  467. }
  468. }
  469. // 插入数据
  470. for (var j=0;j<sizeTable.length;j++){
  471. this.sizeFields.push('size-'+sizeTable[j].size);
  472. var validExpress = getDotValidExpress(this.dotConfig.quantity);
  473. var field = {
  474. title: sizeTable[j].size,
  475. key: 'size-'+sizeTable[j].size,
  476. type: JVXETypes.inputNumber ,
  477. width: 80,
  478. isSize:true,
  479. validateRules: [validExpress]
  480. };
  481. newColums.splice(i+1+j,0,field);
  482. }
  483. }
  484. this.columns = newColums;
  485. },
  486. // 参照发运明细
  487. referShipmentDetails() {
  488. // console.log('打开参照发运明细')
  489. this.$refs.referShipmentDetailsModal.referShipDetModVis = true
  490. },
  491. myHandSave(){
  492. this.addAdpacking.status=0;
  493. this.saveAdd();
  494. },
  495. myHandSubmit(){
  496. this.addAdpacking.status=1;
  497. this.saveAdd();
  498. },
  499. // 保存
  500. saveAdd() {
  501. var newObj = this.addAdpacking;
  502. if (this.sizeFields.length == 0){
  503. this.$message.error('当前记录没有尺码字段,无法保存');
  504. return;
  505. }
  506. if (newObj.totalBoxes == 0){
  507. this.$message.error('总箱数为0,无法保存');
  508. return;
  509. }
  510. var sort = 0;
  511. for (var i=0; i<newObj.syPreAssembledPackingListItemList.length;i++){
  512. var tableRow = newObj.syPreAssembledPackingListItemList[i];
  513. tableRow = JSON.parse(JSON.stringify(tableRow))
  514. var allSizeSum = this.getAllSizeSum(tableRow);
  515. if (allSizeSum == 0){
  516. this.$message.error('第'+(i+1)+'行所有尺码数量为0,无法保存');
  517. return;
  518. }
  519. if(tableRow.startingBoxNumber > tableRow.endCaseNumber) {
  520. this.$message.error('第'+(i+1)+'行起始箱号大于结束箱号,无法保存');
  521. return;
  522. }
  523. if (tableRow.startingBoxNumber == ""){
  524. this.$message.error('第'+(i+1)+'行起始箱号未填,无法保存');
  525. return;
  526. }
  527. //起始箱数判断
  528. if(!Number.isInteger(Number(tableRow.startingBoxNumber))){
  529. this.$message.error('第'+(i+1)+'行起始箱号不为整数,无法保存');
  530. return
  531. }
  532. if (tableRow.endCaseNumber == ""){
  533. this.$message.error('第'+(i+1)+'行结束箱号未填,无法保存');
  534. return;
  535. }
  536. //结束箱数小数判断
  537. if(!Number.isInteger(Number(tableRow.endCaseNumber))){
  538. this.$message.error('第'+(i+1)+'行结束箱号不为整数,无法保存');
  539. return
  540. }
  541. if (tableRow.boxNumber == "" || tableRow.boxNumber == 0){
  542. this.$message.error('第'+(i+1)+'行箱数,无法保存');
  543. return;
  544. }
  545. if (tableRow.netWeight == null || tableRow.netWeight == "" || tableRow.netWeight == undefined){
  546. this.$message.error('第'+(i+1)+'行净重/箱未填,无法保存');
  547. return;
  548. }
  549. //净重/箱小数判断
  550. if(!Number.isInteger(Number(tableRow.netWeight))){
  551. var position = tableRow.netWeight.toString().indexOf('.') + 1; //小数点的位置
  552. var digit = tableRow.netWeight.toString().length - position; //小数的位数
  553. if(digit > 2){
  554. this.$message.error('第'+(i+1)+'行净重/箱超过两位小数,无法保存');
  555. return
  556. }
  557. }
  558. if (tableRow.piecesBox == null || tableRow.piecesBox == "" || tableRow.piecesBox == undefined){
  559. this.$message.error('第'+(i+1)+'行件数/箱未填,无法保存');
  560. return;
  561. }
  562. //件数/箱小数判断
  563. if(!Number.isInteger(tableRow.piecesBox)){
  564. for (var i=0; i<this.sizeFields.length; i++){
  565. if (!Number.isInteger(tableRow[this.sizeFields[i]]) ){
  566. this.$message.error('第'+(i+1)+'行'+this.sizeFields[i]+'不为整数,无法保存');
  567. return;
  568. }
  569. }
  570. }
  571. if (tableRow.grossWeight == null || tableRow.grossWeight == "" || tableRow.grossWeight == undefined){
  572. this.$message.error('第'+(i+1)+'行毛重/箱未填,无法保存');
  573. return;
  574. }
  575. //毛重/箱小数判断
  576. if(!Number.isInteger(Number(tableRow.grossWeight))){
  577. var position = tableRow.grossWeight.toString().indexOf('.') + 1; //小数点的位置
  578. var digit = tableRow.grossWeight.toString().length - position; //小数的位数
  579. if(digit > 2){
  580. this.$message.error('第'+(i+1)+'行毛重/箱超过两位小数,无法保存');
  581. return
  582. }
  583. }
  584. if (tableRow.outerBoxLength == null || tableRow.outerBoxLength == "" || tableRow.outerBoxLength == undefined){
  585. this.$message.error('第'+(i+1)+'行外箱长度未填,无法保存');
  586. return;
  587. }
  588. if (tableRow.outerBoxWidth == null || tableRow.outerBoxWidth == "" || tableRow.outerBoxWidth == undefined){
  589. this.$message.error('第'+(i+1)+'行外箱宽度未填,无法保存');
  590. return;
  591. }
  592. if (tableRow.outerBoxHeight == null || tableRow.outerBoxHeight == "" || tableRow.outerBoxHeight == undefined){
  593. this.$message.error('第'+(i+1)+'行外箱高度未填,无法保存');
  594. return;
  595. }
  596. if (tableRow.netWeightToo == null || tableRow.netWeightToo == "" || tableRow.netWeightToo == undefined){
  597. this.$message.error('第'+(i+1)+'行净净重未填,无法保存');
  598. return;
  599. }
  600. tableRow.sort = ++sort;
  601. }
  602. //尺码赋值
  603. for(var i =0;i<newObj.syPreAssembledPackingListItemList.length;i++){
  604. var dataTable = newObj.syPreAssembledPackingListItemList[i]
  605. for (var j=0; j<tableRow.sizeTables.length; j++){
  606. var sizeTable = tableRow.sizeTables[j];
  607. var field = 'size-'+sizeTable.size;
  608. dataTable.sizeTables[j].proportion = dataTable[field];
  609. }
  610. }
  611. // 日期格式转换
  612. if (newObj.preDeliveryDate != "" && newObj.preDeliveryDate != undefined){
  613. newObj.preDeliveryDate = newObj.preDeliveryDate+" 00:00:00";
  614. }
  615. // 推送状态、状态赋默认值。新增状态赋值
  616. if (newObj.id == undefined || newObj.id == ""){
  617. newObj.push_status = 0;
  618. }
  619. if(this.editDecide === 'edit'){
  620. editById(newObj).then(res => {
  621. this.btnLoading = true
  622. if (res.success) {
  623. this.$message.success('编辑成功')
  624. this.close()
  625. this.btnLoading = false
  626. //清空信息
  627. newObj = {syPreAssembledPackingListItemList:[]};
  628. this.fatherList() // 调用父组件 查询方法
  629. // this.msgFormSon = {} 清空子表信息
  630. }else{
  631. this.$message.error(res.message)
  632. this.btnLoading = false
  633. }
  634. })
  635. }else {
  636. addAdvPac(newObj).then(res => {
  637. this.btnLoading = true
  638. if (res.success) {
  639. this.$message.success('新增成功')
  640. this.close()
  641. this.btnLoading = false
  642. //清空信息
  643. newObj = {syPreAssembledPackingListItemList:[]};
  644. this.fatherList() // 调用父组件 查询方法
  645. // this.msgFormSon = {} 清空子表信息
  646. }else{
  647. this.$message.error(res.message)
  648. this.btnLoading = false
  649. }
  650. })
  651. }
  652. // const that = this
  653. // // 触发表单验证
  654. // this.$refs.form.validate(valid => {
  655. // if (valid) {
  656. // that.confirmLoading = true
  657. // }
  658. // })
  659. },
  660. // 设置表头信息
  661. setHeadData(referData, mData){
  662. var itemData = {};
  663. if (mData.syPreAssembledPackingListItemList != null && mData.syPreAssembledPackingListItemList.size>0){
  664. itemData = mData.syPreAssembledPackingListItemList[0];
  665. }
  666. // 设置件数小数位数
  667. this.dotConfig = getDotConfig(itemData.masterMetering);
  668. this.addAdpacking.syDeclarationElementsId = mData.syDeclarationElementsId;
  669. this.addAdpacking.itemNumber = referData.itemNumber;
  670. // this.addAdpacking.productName = referData.chineseName;
  671. this.addAdpacking.productName = mData.productName;
  672. this.addAdpacking.englishProductName = mData.englishProductName;
  673. this.addAdpacking.u8Remarks = mData.memo;
  674. this.addAdpacking.sizeRange = "";
  675. if (mData.sizeTables != null){
  676. if (mData.sizeTables.length == 1){
  677. this.addAdpacking.sizeRange = mData.sizeTables[0].size;
  678. }else if (mData.sizeTables.length>1){
  679. this.addAdpacking.sizeRange = mData.sizeTables[0].size + " ~ " + mData.sizeTables[mData.sizeTables.length-1].size;
  680. }
  681. }
  682. this.addAdpacking.customer = mData.customer;
  683. this.addAdpacking.ompoId = mData.ompoId
  684. this.addAdpacking.salesman = mData.salesman
  685. this.addAdpacking.customerAbbreviation = mData.customerAbbreviation
  686. this.addAdpacking.spurOrSubOrder = mData.spurOrSubOrder
  687. this.addAdpacking.garmentFactory = mData.garmentFactory;
  688. this.addAdpacking.orderNumber = mData.orderNumber
  689. },
  690. // 发运明细详情成预装箱记录:mData-主表记录,itemData-子表记录
  691. changeData(referData, mData) {
  692. var itemData = {};
  693. if (mData.syPreAssembledPackingListItemList != null && mData.syPreAssembledPackingListItemList.length>0){
  694. itemData = mData.syPreAssembledPackingListItemList[0];
  695. }
  696. var addrow = {
  697. syDeclarationElementsId:itemData.syDeclarationElementsId,
  698. syDeclarationElementsItemId:itemData.syDeclarationElementsItemId,
  699. acSetNo: itemData.acSetNo,
  700. garmentFactory: mData.garmentFactory,
  701. hod: itemData.hod,
  702. styleNo:itemData.styleNo,
  703. poNo:itemData.poNo,
  704. itemCode:referData.packId,
  705. distributionPoint:referData.distributionPoint,
  706. prepackSku: '',
  707. size:"",
  708. startingBoxNumber: '',
  709. endCaseNumber: '',
  710. colour: itemData.colour,
  711. withCode: itemData.withCode,
  712. piecesBox: 0,
  713. boxNumber: '',
  714. total: '',
  715. netWeight: '',
  716. totalNetWeight: '',
  717. grossWeight: '',
  718. totalGrossWeight: '',
  719. outerBoxLength: '',
  720. outerBoxWidth: '',
  721. outerBoxHeight: '',
  722. totalVolume: '',
  723. netWeightToo: '',
  724. unitPrice: itemData.unitPrice,
  725. totalPrice: '',
  726. smallPo: referData.smallPo,
  727. inventoryName:referData.inventoryName,
  728. spurOrSubOrder:referData.purOrSubOrder,
  729. factoryUnitPrice:referData.factoryUnitPrice,
  730. customerAbbreviation:referData.customerAbbreviation,
  731. sizeTables : itemData.sizeTables,
  732. planSize : itemData.planSize,
  733. planQuantity:itemData.planQuantity,
  734. supplierCode:itemData.supplierCode,
  735. supplier:itemData.supplier,
  736. ompoAccount:itemData.ompoAccount,
  737. ompoId:itemData.ompoId,
  738. ompoIdItem:itemData.ompoIdItem,
  739. ymoney:itemData.ymoney
  740. }
  741. return addrow;
  742. },
  743. // 操作按钮 删除
  744. handleDelete(index) {
  745. var ret = this.addAdpacking.syPreAssembledPackingListItemList.splice(index.rowIndex, 1);
  746. this.setHeadCalField();
  747. return ret;
  748. },
  749. // 复制
  750. copy(record) {
  751. var newRow = JSON.parse(JSON.stringify(record.row));
  752. newRow.isAdd = 1
  753. this.addAdpacking.syPreAssembledPackingListItemList.push(newRow);
  754. this.setHeadCalField();
  755. },
  756. // 抽屉 取消
  757. handleCancel() {
  758. this.close()
  759. },
  760. close() {
  761. this.$emit('close')
  762. this.visible = false;
  763. this.btnLoading = false
  764. this.editDecide = 'add'
  765. this.addAdpacking = {syPreAssembledPackingListItemList:[]};
  766. },
  767. aa() {},
  768. modalFormOk() {
  769. this.$refs.referShipmentDetailsModal.referShipmentDetailsModVis = true
  770. },
  771. // 表格字段值变动时触发
  772. handleValueChange(event) {
  773. if (event.row.startingBoxNumber != undefined && event.row.startingBoxNumber != "" &&
  774. event.row.endCaseNumber != undefined && event.row.endCaseNumber != ""){
  775. event.row.boxNumber = event.row.endCaseNumber*1-event.row.startingBoxNumber*1+1;
  776. }
  777. var allSizeSum = this.getAllSizeSum(event.row);
  778. event.row.piecesBox = allSizeSum;
  779. event.row.total = (event.row.piecesBox*event.row.boxNumber);
  780. if (event.row.unitPrice != undefined && event.row.unitPrice != ""){
  781. event.row.totalPrice = (event.row.unitPrice*event.row.total).toFixed(2);
  782. }
  783. if (event.row.netWeight != "" && event.row.netWeight != undefined){
  784. event.row.totalNetWeight = event.row.netWeight * event.row.boxNumber;
  785. }
  786. if (event.row.grossWeight != "" && event.row.grossWeight != undefined){
  787. event.row.totalGrossWeight = event.row.grossWeight * event.row.boxNumber;
  788. }
  789. if (event.row.outerBoxLength != "" && event.row.outerBoxLength != undefined &&
  790. event.row.outerBoxWidth != "" && event.row.outerBoxWidth != undefined &&
  791. event.row.outerBoxHeight != "" && event.row.outerBoxHeight != undefined){
  792. event.row.totalVolume = ((event.row.outerBoxLength * event.row.outerBoxWidth * event.row.outerBoxHeight * event.row.boxNumber)/1000000).toFixed(3);
  793. }
  794. this.$forceUpdate()
  795. this.setHeadCalField();
  796. },
  797. // 获取不同尺码数量之和
  798. getAllSizeSum(record){
  799. var ret = 0;
  800. for (var i=0; i<this.sizeFields.length; i++){
  801. if (record[this.sizeFields[i]] != undefined && record[this.sizeFields[i]] != ""){
  802. ret += record[this.sizeFields[i]]*1;
  803. }
  804. }
  805. return ret;
  806. },
  807. // 设置表头计算值,直接设置表头值对象不能刷新,把表头对象换了就可以了
  808. setHeadCalField(){
  809. var headData = JSON.parse(JSON.stringify(this.addAdpacking));
  810. var totalBoxes = 0;
  811. var totalNetWeight = 0;
  812. var totalGrossWeight = 0;
  813. var totalVolume = 0;
  814. var totalPrice = 0;
  815. var total = 0;
  816. for (var i=0; i<headData.syPreAssembledPackingListItemList.length; i++){
  817. var rowData = headData.syPreAssembledPackingListItemList[i];
  818. totalBoxes += rowData.boxNumber;
  819. if (rowData.totalNetWeight != undefined && rowData.totalNetWeight != ""){
  820. totalNetWeight += rowData.totalNetWeight*1;
  821. }
  822. if (rowData.totalGrossWeight != undefined && rowData.totalGrossWeight != ""){
  823. totalGrossWeight += rowData.totalGrossWeight*1;
  824. }
  825. if (rowData.totalVolume != undefined && rowData.totalVolume != ""){
  826. totalVolume += rowData.totalVolume*1;
  827. }
  828. if (rowData.totalPrice != undefined && rowData.totalPrice != ""){
  829. totalPrice += rowData.totalPrice*1;
  830. }
  831. if (rowData.total != undefined && rowData.total != ""){
  832. total += rowData.total*1;
  833. }
  834. }
  835. headData.totalBoxes = totalBoxes;
  836. headData.totalNetWeight = totalNetWeight;
  837. headData.totalGrossWeight = totalGrossWeight;
  838. headData.totalVolume = totalVolume.toFixed(3);
  839. headData.totalPrice = totalPrice.toFixed(2);
  840. headData.total = total
  841. this.addAdpacking = headData;
  842. },
  843. },
  844. computed: {},
  845. mounted() {}
  846. }
  847. </script>
  848. <style lang="less" scoped>
  849. @import '~@assets/less/common.less';
  850. /deep/ .ant-table-thead > tr > th {
  851. text-align: center;
  852. // font-weight: 700;
  853. }
  854. /deep/ .ant-table-tbody {
  855. text-align: center;
  856. }
  857. // /deep/ th.replacecolor {
  858. // background-color: #ccc;
  859. // }
  860. // 抽屉里的card样式
  861. /deep/ .ant-drawer-content {
  862. background-color: #f0f2f5;
  863. }
  864. /deep/ .ant-drawer-body {
  865. padding: 10px;
  866. }
  867. </style>