addAdpackingDrawer.vue 31 KB

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