newPackingBomDetails.vue 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299
  1. <template>
  2. <view>
  3. <view>
  4. <view class="col userInp" style="display: flex; align-items: center">
  5. <text class="label lable150 rx-cc">是否拆包</text>
  6. <text
  7. v-if="objData.packInfo.isUnpack == '1'"
  8. style="color: green; font-size: 12px; margin-left: 15px"
  9. >是</text
  10. >
  11. <text
  12. v-else-if="objData.packInfo.isNewUnpack == 1"
  13. style="
  14. color: green;
  15. font-size: 14px;
  16. font-weight: 700;
  17. margin-left: 15px;
  18. "
  19. >手动拆包</text
  20. >
  21. <text v-else style="color: green; font-size: 12px; margin-left: 15px"
  22. >否</text
  23. >
  24. </view>
  25. </view>
  26. <view
  27. v-if="
  28. warehouseId != 1 &&
  29. objData.packInfo.isUnpack == '1' &&
  30. objData.packInfo.isNewUnpack != 1
  31. "
  32. >
  33. <view class="title_box rx-bc">
  34. <view class="name">包装信息</view>
  35. </view>
  36. <view class="col userInp" style="display: flex; align-items: center">
  37. <text class="label lable150 rx-cc">规格选择:</text>
  38. <!-- multiple -->
  39. <view>{{ objData.packInfo ? objData.packInfo.specText : "" }}</view>
  40. </view>
  41. <view class="col userInp" style="display: flex; align-items: center">
  42. <text class="label lable150 rx-cc">包装选择:</text>
  43. <!-- multiple -->
  44. <zxz-uni-data-select
  45. :localdata="warehouseSpecTypeList"
  46. v-model="warehouseId"
  47. @change="changeWarehouseType"
  48. disabled
  49. ></zxz-uni-data-select>
  50. </view>
  51. <view v-if="warehouseId != 1">
  52. <view v-for="(item, i) in DispositionList" :key="i">
  53. <view class="title_box rx-bc">
  54. <!-- 最小包装单元 -->
  55. <view class="name">{{ item.titel }}</view>
  56. <!-- <view class="btn_box rx-bc" @click="handCancelPacking">
  57. 重置打包
  58. </view> -->
  59. </view>
  60. <view class="material">
  61. <view class="content_table">
  62. <view class="item">
  63. <view class="lable rx-cc">包装总数 </view>
  64. <view class="content content_num">
  65. <input
  66. class="uni-input"
  67. v-model="formedNumLast"
  68. type="number"
  69. disabled
  70. @input="changeinput"
  71. />
  72. <view class="unit">{{ item.packageUnit }}</view>
  73. </view>
  74. </view>
  75. <view class="item rx-sc">
  76. <view class="rx ww55">
  77. <view class="lable lable150 rx-cc">{{ item.titel }}单元</view>
  78. <view class="content content_num">
  79. <input
  80. class="uni-input"
  81. v-model="item.packageCell"
  82. disabled
  83. />
  84. <view style="max-width: 100rpx; font-size: 24rpx">{{
  85. item.packageUnit
  86. }}</view>
  87. </view>
  88. </view>
  89. <view class="rx ww45">
  90. <view class="rx-cc ww80">
  91. /<view style="max-width: 100rpx; font-size: 24rpx">{{
  92. item.conversionUnit
  93. }}</view>
  94. </view>
  95. <view class="content rx-sc">
  96. <!-- <zxz-uni-data-select :localdata="unitList" v-model="unit" dataValue='Key'
  97. format='{Value}' dataKey="Key" filterable :clear='false'></zxz-uni-data-select> -->
  98. <!-- <view class="penalize" @click="handleSplit">确认</view> -->
  99. </view>
  100. </view>
  101. </view>
  102. </view>
  103. <view class="content_table2" v-if="item.splitList.length">
  104. <view class="head row rx-sc">
  105. <view class="item ww10">序号</view>
  106. <view class="item ww15">数量</view>
  107. <view class="item ww20">类型</view>
  108. <view class="item ww20">包装层级</view>
  109. <!-- <view class="item ww20">计量数</view> -->
  110. <view class="item ww40">包装编码</view>
  111. <!-- <view class="item ww10 jsColor" @click="calculation()" v-if="clientEnvironmentId != 3">计算</view>
  112. <view class="item ww10" v-if="clientEnvironmentId == 3"></view> -->
  113. </view>
  114. <view class="table">
  115. <u-list
  116. @scrolltolower="scrolltolower"
  117. class="z_list"
  118. style="height: 100% !important"
  119. >
  120. <view
  121. class="tr row rx-sc"
  122. v-for="(it, idx) in item.splitList"
  123. :key="idx"
  124. >
  125. <view class="item ww10 rx-cc">{{ idx + 1 }}</view>
  126. <view class="item ww15 rx-sc">
  127. <view> {{ it.feedQuantity }}</view>
  128. </view>
  129. <view class="item ww20 rx-sc">
  130. <view v-if="it.rootCategoryLevelId == 2">在制品</view>
  131. <view v-else-if="it.rootCategoryLevelId == 23"
  132. >半成品</view
  133. >
  134. <view v-else-if="it.rootCategoryLevelId == 9">产品</view>
  135. <view v-else-if="it.rootCategoryLevelId == 28">废品</view>
  136. <view v-else>{{ "" }}</view>
  137. </view>
  138. <view class="item ww20 rx-cc">
  139. <view v-if="it.packingType == 4">外包装</view>
  140. <view v-else-if="it.packingType == 2">最小包装</view>
  141. <view v-else-if="it.packingType == 3">内包装</view>
  142. <view v-else>计量</view>
  143. </view>
  144. <view class="item ww40">
  145. {{ it.packingCode }}
  146. </view>
  147. </view>
  148. </u-list>
  149. </view>
  150. </view>
  151. </view>
  152. </view>
  153. </view>
  154. </view>
  155. <view v-if="warehouseId != 1 && objData.packInfo.isNewUnpack == 1">
  156. <view class="title_box rx-bc">
  157. <view class="name">包装信息</view>
  158. </view>
  159. <view class="col userInp" style="display: flex; align-items: center">
  160. <text class="label lable150 rx-cc">规格选择:</text>
  161. <!-- multiple -->
  162. <text style="font-size: 12px; margin-left: 15px">
  163. {{ objData.packInfo ? objData.packInfo.specText : "" }}</text
  164. >
  165. </view>
  166. <view v-if="warehouseId != 1">
  167. <view v-for="(item, i) in DispositionList" :key="i">
  168. <view class="material">
  169. <view class="content_table">
  170. <view class="item">
  171. <view class="lable rx-cc">总数</view>
  172. <view class="content content_num">
  173. <span>{{ item.formedNumLast }}</span>
  174. <view class="unit">{{ item.packageUnit }}</view>
  175. </view>
  176. </view>
  177. </view>
  178. </view>
  179. <view class="title_box rx-bc">
  180. <view class="name">最小包装</view>
  181. </view>
  182. <view class="material">
  183. <view class="content_table">
  184. <view class="item">
  185. <view class="lable rx-cc lable150">包装总数 </view>
  186. <view class="content content_num">
  187. <span>{{ item.minimumFormedNumLast }}</span>
  188. <view class="unit">{{ item.minimumConversionUnit }}</view>
  189. </view>
  190. </view>
  191. <view class="item rx-sc">
  192. <view class="rx ww55">
  193. <view class="lable lable150 rx-cc">最小包装单元</view>
  194. <view class="content content_num">
  195. <span>{{ item.minimumPackageCell }}</span>
  196. <view class="unit">{{ item.minimumPackageUnit }}</view>
  197. /
  198. <view class="unit">{{ item.minimumConversionUnit }}</view>
  199. </view>
  200. </view>
  201. </view>
  202. </view>
  203. <view class="title_box rx-bc">
  204. <view class="name">内包装</view>
  205. </view>
  206. <view class="content_table">
  207. <view class="item">
  208. <view class="lable rx-cc lable150">包装总数 </view>
  209. <view class="content content_num">
  210. <span>{{ item.withinFormedNumLast }}</span>
  211. <view class="unit">{{ item.withinConversionUnit }}</view>
  212. </view>
  213. </view>
  214. <view class="item rx-sc">
  215. <view class="rx ww55">
  216. <view class="lable lable150 rx-cc">内包装单元</view>
  217. <view class="content content_num">
  218. <span>{{ item.withinPackageCell }}</span>
  219. <view class="unit">{{ item.withinPackageUnit }}</view>
  220. /
  221. <view class="unit">{{ item.withinConversionUnit }}</view>
  222. </view>
  223. </view>
  224. </view>
  225. </view>
  226. <view class="title_box rx-bc">
  227. <view class="name">外包装</view>
  228. </view>
  229. <view class="content_table">
  230. <view class="item">
  231. <view class="lable rx-cc lable150">包装总数 </view>
  232. <view class="content content_num">
  233. <span>{{ item.outsideFormedNumLast }}</span>
  234. <view class="unit">{{ item.outsideConversionUnit }}</view>
  235. </view>
  236. </view>
  237. <view class="item rx-sc">
  238. <view class="rx ww55">
  239. <view class="lable lable150 rx-cc">外包装单元</view>
  240. <view class="content content_num">
  241. <span>{{ item.outsidePackageCell }}</span>
  242. <view class="unit">{{ item.outsidePackageUnit }}</view>
  243. /
  244. <view class="unit">{{ item.outsideConversionUnit }}</view>
  245. </view>
  246. </view>
  247. </view>
  248. </view>
  249. <view class="content_table2" v-if="item.splitList.length">
  250. <view class="head row rx-sc">
  251. <view class="item ww10">序号</view>
  252. <view class="item ww15">数量</view>
  253. <view class="item ww20">类型</view>
  254. <view class="item ww20">包装规格</view>
  255. <!-- <view class="item ww20">计量数</view> -->
  256. <view class="item ww40">包装编码</view>
  257. <!-- <view class="item ww10 jsColor" @click="calculation()" v-if="clientEnvironmentId != 3">计算</view>
  258. <view class="item ww10" v-if="clientEnvironmentId == 3"></view> -->
  259. </view>
  260. <view class="table">
  261. <u-list
  262. @scrolltolower="scrolltolower"
  263. class="z_list"
  264. style="height: 100% !important"
  265. >
  266. <view
  267. class="tr row rx-sc"
  268. v-for="(it, idx) in item.splitList"
  269. :key="idx"
  270. >
  271. <view class="item ww10 rx-cc">{{ idx + 1 }}</view>
  272. <view class="item ww15 rx-sc">
  273. <view> {{ it.feedQuantity }}</view>
  274. </view>
  275. <view class="item ww20 rx-sc">
  276. <view v-if="it.rootCategoryLevelId == 2">在制品</view>
  277. <view v-else-if="it.rootCategoryLevelId == 23"
  278. >半成品</view
  279. >
  280. <view v-else-if="it.rootCategoryLevelId == 9">产品</view>
  281. <view v-else-if="it.rootCategoryLevelId == 28">废品</view>
  282. <view v-else>{{ "" }}</view>
  283. </view>
  284. <view class="item ww20 rx-cc">
  285. <view>{{ it.extInfo.packageDisposition }}</view>
  286. </view>
  287. <view class="item ww40">
  288. {{ it.packingCode }}
  289. </view>
  290. </view>
  291. </u-list>
  292. </view>
  293. </view>
  294. </view>
  295. </view>
  296. </view>
  297. </view>
  298. <SearchPopup mode="center" v-if="show">
  299. <template v-slot:list>
  300. <view class="search_list">
  301. <u-form
  302. labelPosition="left"
  303. :model="formData"
  304. labelWidth="180"
  305. labelAlign="left"
  306. class="baseForm"
  307. >
  308. <u-form-item
  309. label="外包装数:"
  310. class="required-form"
  311. borderBottom
  312. prop="assetType"
  313. >
  314. <input
  315. class="uni-input"
  316. v-model="formData.wPackNum"
  317. style="width: 280rpx"
  318. placeholder="外包装数"
  319. />
  320. / {{ splitList[0].unit }}
  321. </u-form-item>
  322. </u-form>
  323. </view>
  324. </template>
  325. <template v-slot:operate>
  326. <view class="operate_box rx-bc">
  327. <u-button
  328. size="small"
  329. class="u-reset-button"
  330. @click="calculationClose()"
  331. >
  332. 取消
  333. </u-button>
  334. <u-button
  335. type="success"
  336. size="small"
  337. class="u-reset-button"
  338. @click="calculationReset()"
  339. >
  340. 重置
  341. </u-button>
  342. <u-button
  343. type="success"
  344. size="small"
  345. class="u-reset-button"
  346. @click="calculationSave()"
  347. >
  348. 确定
  349. </u-button>
  350. </view>
  351. </template>
  352. </SearchPopup>
  353. </view>
  354. </template>
  355. <script>
  356. import { getByCode } from "@/api/pda/common.js";
  357. import {
  358. cancelPacking,
  359. packingReport,
  360. getPackingReport,
  361. packingReportRepeat,
  362. packageDisposition,
  363. getPackingReportRepeat,
  364. getPackingList,
  365. } from "@/api/pda/workOrder.js";
  366. import SearchPopup from "../../components/searchPopup.vue";
  367. export default {
  368. components: {
  369. SearchPopup,
  370. },
  371. props: {
  372. categoryId: {
  373. type: String,
  374. default: "",
  375. },
  376. objData: {
  377. type: Object,
  378. default: () => {},
  379. },
  380. taskId: {
  381. type: String,
  382. default: "",
  383. },
  384. workOrderId: {
  385. type: String,
  386. default: "",
  387. },
  388. },
  389. data() {
  390. return {
  391. formedNumLast: 0,
  392. quantity: "",
  393. unit: "",
  394. Usertype: "", // 规格
  395. unitList: [],
  396. resObj: {},
  397. splitList: [],
  398. localdataList: [],
  399. newDispositionList: [],
  400. withinQuantity: "", //内包装数量
  401. withinUnit: "", //内包装单位
  402. outsideQuantity: "", //外包装数量
  403. outsideUnit: "", //外包装单位
  404. timeout: null,
  405. packUnit: null,
  406. temporaryNum: 0,
  407. temporaryCount: 0,
  408. temporaryList: [],
  409. packTwoList: [],
  410. DispositionList: [],
  411. selectList: [],
  412. text: "",
  413. value: "",
  414. minimumPackage: [], // 最小包装
  415. withinPackage: [], // 内包装
  416. minimumUnit: "",
  417. outsidePackage: [], //外包装
  418. newCategoryId: "",
  419. warehouseId: 2,
  420. warehouseSpecTypeList: [
  421. {
  422. text: "按计量",
  423. value: 1,
  424. },
  425. {
  426. text: "最小包装",
  427. value: 2,
  428. },
  429. {
  430. text: "内包装",
  431. value: 3,
  432. },
  433. {
  434. text: "外包装",
  435. value: 4,
  436. },
  437. ],
  438. show: false,
  439. formData: {
  440. wPackNum: null,
  441. },
  442. clientEnvironmentId:
  443. uni.getStorageSync("userInfo") &&
  444. uni.getStorageSync("userInfo").clientEnvironmentId,
  445. };
  446. },
  447. created() {
  448. // this.formedNumLast = this.objData.product[0].feedQuantity;
  449. // this.byCode();
  450. // this.packageDispositionFn();
  451. if (this.objData.packInfo) {
  452. this.warehouseId = this.objData.packInfo.tier;
  453. if (this.objData.packInfo.isUnpack == "1") {
  454. this.DispositionList.push({
  455. titel: "最小包装",
  456. splitList: this.objData.packInfo.minimumPackage,
  457. packageCell: this.objData.packInfo.minimumPackageCell,
  458. packageUnit: this.objData.packInfo.minimumPackageUnit,
  459. conversionUnit: this.objData.packInfo.minimumConversionUnit,
  460. });
  461. } else if (this.objData.packInfo.isNewUnpack == 1) {
  462. this.DispositionList.push({
  463. titel: "",
  464. splitList:
  465. this.objData.packInfo.minimumPackage.length != 0
  466. ? this.objData.packInfo.minimumPackage
  467. : this.objData.packInfo.withinPackage.length != 0
  468. ? this.objData.packInfo.withinPackage
  469. : this.objData.packInfo.outsidePackage.length != 0
  470. ? this.objData.packInfo.outsidePackage
  471. : [],
  472. minimumPackageCell: this.objData.packInfo.minimumPackageCell,
  473. minimumPackageUnit: this.objData.packInfo.minimumPackageUnit,
  474. minimumConversionUnit: this.objData.packInfo.minimumConversionUnit,
  475. minimumFormedNumLast: this.objData.packInfo.minimumFormedNumLast,
  476. withinPackageCell: this.objData.packInfo.withinPackageCell,
  477. withinPackageUnit: this.objData.packInfo.withinPackageUnit,
  478. withinConversionUnit: this.objData.packInfo.withinConversionUnit,
  479. withinFormedNumLast: this.objData.packInfo.withinFormedNumLast,
  480. outsidePackageCell: this.objData.packInfo.outsidePackageCell,
  481. outsidePackageUnit: this.objData.packInfo.outsidePackageUnit,
  482. outsideConversionUnit: this.objData.packInfo.outsideConversionUnit,
  483. outsideFormedNumLast: this.objData.packInfo.outsideFormedNumLast,
  484. formedNumLast: this.objData.formingNum,
  485. packageUnit: this.objData.unit,
  486. });
  487. }
  488. // this.formedNumLast = this.objData.packInfo.minimumPackage.reduce(
  489. // (acc, pro) => {
  490. // return pro.feedQuantity ? acc + Number(pro.feedQuantity) : acc;
  491. // },
  492. // 0
  493. // );
  494. } else {
  495. if (this.objData.packInfo.isUnpack == "1") {
  496. this.DispositionList.push({
  497. titel: "最小包装",
  498. splitList: this.objData.product,
  499. // packageCell: this.objData.packInfo.minimumPackageCell,
  500. // packageUnit: this.objData.packInfo.minimumPackageUnit,
  501. // conversionUnit: this.objData.packInfo.minimumConversionUnit
  502. });
  503. }
  504. }
  505. if (this.objData.product && this.objData.product.length != 0) {
  506. this.formedNumLast = this.objData.product.reduce((acc, pro) => {
  507. return pro.feedQuantity ? acc + Number(pro.feedQuantity) : acc;
  508. }, 0);
  509. }
  510. if (
  511. this.objData.semiProductList &&
  512. this.objData.semiProductList.length != 0
  513. ) {
  514. this.formedNumLast = this.objData.semiProductList.reduce((acc, pro) => {
  515. return pro.feedQuantity ? acc + Number(pro.feedQuantity) : acc;
  516. }, 0);
  517. }
  518. // this.getPackingDetails()
  519. // this.getPackingDetailsTwo()
  520. },
  521. methods: {
  522. // 输入数量变化
  523. changeinput(e) {
  524. clearTimeout(this.timeout);
  525. // 设置新的定时器
  526. this.timeout = setTimeout(() => {
  527. this.formedNumLast = e.detail.value;
  528. this.initFn(this.selectList);
  529. }, 500); // 500毫秒后触发
  530. },
  531. changeUserType(e) {
  532. console.log(e);
  533. this.text = e.text;
  534. this.value = e.value;
  535. this.selectList = e.arr;
  536. this.initFn(e.arr);
  537. },
  538. groupBy(arr, key) {
  539. return arr.reduce((acc, obj) => {
  540. const groupKey = obj[key];
  541. if (!acc[groupKey]) {
  542. acc[groupKey] = [];
  543. }
  544. console.log();
  545. acc[groupKey].push(obj);
  546. return acc;
  547. }, {});
  548. },
  549. async packageDispositionFn() {
  550. console.log(this.categoryId, "555555555555");
  551. let that = this;
  552. const res = await packageDisposition(this.categoryId);
  553. if (res.length) {
  554. res.shift();
  555. let data = JSON.parse(JSON.stringify(res));
  556. let list = this.groupBy(data, "code");
  557. this.localdataList = [];
  558. Object.entries(list).forEach(([key, value]) => {
  559. let obj = {
  560. text: value[0].name,
  561. arr: value,
  562. value: key,
  563. };
  564. this.localdataList.push(obj);
  565. });
  566. this.Usertype = this.localdataList[0].value;
  567. this.text = this.localdataList[0].text;
  568. this.value = this.localdataList[0].value;
  569. // res.map((v) => {
  570. // v.splitList = [];
  571. // });
  572. // // this.newDispositionList = res;
  573. // if (this.warehouseId == 2) {
  574. // this.newDispositionList = [res[0]];
  575. // } else if (this.warehouseId == 3) {
  576. // this.newDispositionList = [res[1]];
  577. // } else if (this.warehouseId == 4) {
  578. // this.newDispositionList = [res[2]];
  579. // }
  580. // this.selectList = res;
  581. // this.initFn(this.localdataList[0].arr);
  582. // this.listFn(this.localdataList[0].arr);
  583. }
  584. },
  585. initFn(v) {
  586. if (v.length) {
  587. this.withinQuantity = v[1].packageCell; //内包装数量
  588. this.withinUnit = v[1].conversionUnit; //内包装单位
  589. this.outsideQuantity = v[2].packageCell; //外包装数量
  590. this.outsideUnit = v[2].conversionUnit; //外包装单位
  591. this.minimumUnit = v[0].conversionUnit;
  592. }
  593. console.log("几次", v);
  594. this.handleSplit(v[0]);
  595. },
  596. async listFn(res) {
  597. let {
  598. minimumPackage,
  599. withinQuantity,
  600. outsidePackage,
  601. outsideQuantity,
  602. withinPackage,
  603. } = res;
  604. // let textList = ["最小包装", "内包装", "外包装"];
  605. // let arr = [
  606. // { list: minimumPackage },
  607. // { list: withinPackage, num: withinQuantity },
  608. // { list: outsidePackage, num: outsideQuantity },
  609. // ];
  610. let textList = [];
  611. let arr = [];
  612. if (this.warehouseId == 2) {
  613. textList.push("最小包装");
  614. arr.push({ list: minimumPackage });
  615. } else if (this.warehouseId == 3) {
  616. textList.push("内包装");
  617. arr.push({ list: withinPackage, num: withinQuantity });
  618. } else if (this.warehouseId == 4) {
  619. textList.push("外包装");
  620. arr.push({ list: outsidePackage, num: outsideQuantity });
  621. }
  622. this.minimumPackage = minimumPackage; // 最小包装
  623. this.withinPackage = withinPackage; // 内包装
  624. this.outsidePackage = outsidePackage; //外包装
  625. // this.newDispositionList.map((v, i) => {
  626. // v.splitList = arr[i].list;
  627. // v.titel = textList[i];
  628. // if (i == 0) {
  629. // v.formedNumLast = this.formedNumLast;
  630. // } else {
  631. // v.formedNumLast = arr[i].num;
  632. // }
  633. // });
  634. this.newDispositionList.map((v, i) => {
  635. v.splitList = arr[0].list;
  636. v.titel = textList[0];
  637. if (i == 0) {
  638. v.formedNumLast = this.formedNumLast;
  639. } else {
  640. v.formedNumLast = arr.num;
  641. }
  642. });
  643. this.$nextTick(() => {
  644. console.log(this.DispositionList, "我是啥来着");
  645. this.$set(this, "DispositionList", this.newDispositionList);
  646. });
  647. },
  648. sunNum(v, i) {
  649. let _this = this;
  650. this.$nextTick(() => {
  651. switch (i) {
  652. case 0:
  653. console.log(_this.formedNumLast);
  654. return _this.formedNumLast;
  655. case 1:
  656. return v.splitList.length || 0;
  657. case 2:
  658. return v.splitList.length || 0;
  659. }
  660. });
  661. },
  662. byCode() {
  663. getByCode("packing_unit").then((res) => {
  664. this.unitList = [];
  665. res.forEach((obj, index) => {
  666. for (let key in obj) {
  667. if (obj.hasOwnProperty(key)) {
  668. // 确保key是对象自身的属性
  669. this.unitList.push({
  670. Key: `${key}`,
  671. Value: ` ${obj[key]}`,
  672. });
  673. }
  674. }
  675. });
  676. });
  677. },
  678. getPackingDetails() {
  679. let param = {
  680. workOrderId: this.workOrderId,
  681. taskId: this.taskId,
  682. tier: 1,
  683. };
  684. getPackingReport(param).then((res) => {
  685. this.splitList = res.detailList;
  686. this.formedNumLast = res.totalQuantity;
  687. this.quantity = res.quantity;
  688. this.unit = res.unit;
  689. });
  690. },
  691. handCancelPacking() {
  692. uni.showModal({
  693. title: `是否清空包装?`,
  694. content: "",
  695. confirmText: "确认",
  696. success: () => {
  697. let param = {
  698. workOrderId: this.workOrderId,
  699. taskId: this.taskId,
  700. };
  701. cancelPacking(param).then((res) => {
  702. this.getPackingDetails();
  703. this.getPackingDetailsTwo();
  704. });
  705. },
  706. });
  707. },
  708. // 第一次调用
  709. handleSplit(v) {
  710. if (this.splitList.length) {
  711. uni.showToast({
  712. title: "产品已分包",
  713. icon: "none",
  714. });
  715. return false;
  716. }
  717. // if (!this.formedNumLast) {
  718. // uni.showToast({
  719. // title: '包装总数数量不能为空',
  720. // icon: 'none'
  721. // })
  722. // return false
  723. // }
  724. if (!v.packageCell) {
  725. uni.showToast({
  726. title: "内包装单元数量不能为空",
  727. icon: "none",
  728. });
  729. return false;
  730. }
  731. if (!v.packageUnit) {
  732. uni.showToast({
  733. title: "请选择包装单位",
  734. icon: "none",
  735. });
  736. return false;
  737. }
  738. let param = {
  739. workOrderId: this.workOrderId, //工单id
  740. taskId: this.taskId,
  741. tier: this.warehouseId,
  742. totalQuantity: this.formedNumLast, //总数量
  743. quantity: v.packageCell, //数量
  744. unit: v.packageUnit, //单位
  745. minimumUnit: this.minimumUnit, //最小包装单位
  746. withinQuantity: this.withinQuantity, //内包装数量
  747. withinUnit: this.withinUnit, //内包装单位
  748. outsideQuantity: this.outsideQuantity, //外包装数量
  749. outsideUnit: this.outsideUnit, //外包装单位
  750. packageUnit: v.conversionUnit,
  751. };
  752. // packingReport(param).then((res) => {
  753. // this.listFn(res);
  754. // });
  755. if (this.warehouseId != 1) {
  756. getPackingList(param).then((res) => {
  757. this.listFn(res);
  758. });
  759. }
  760. // getPackingList(param).then((res) => {
  761. // this.listFn(res);
  762. // });
  763. },
  764. handleCheck(idx, it) {
  765. if (it.quantity <= 0) {
  766. uni.showToast({
  767. icon: "none",
  768. title: "数量为空不能勾选",
  769. });
  770. return false;
  771. }
  772. this.$set(this.splitList[idx], "check", it.check ? 0 : 1);
  773. this.temporaryList = [];
  774. this.temporaryList = this.splitList.filter((e) => {
  775. return e.check == 1;
  776. });
  777. this.temporaryNum = 0;
  778. this.temporaryCount = 0;
  779. if (this.temporaryList.length > 0) {
  780. this.temporaryList.forEach((e) => {
  781. this.temporaryNum = this.temporaryNum + 1;
  782. this.temporaryCount = this.temporaryCount + Number(e.quantity);
  783. });
  784. }
  785. },
  786. handclose(it) {
  787. this.splitList.forEach((f) => {
  788. if (f.computeSize == it.computeSize) {
  789. f.check = 0;
  790. }
  791. });
  792. this.temporaryList = [];
  793. this.temporaryList = this.splitList.filter((e) => {
  794. return e.check == 1;
  795. });
  796. },
  797. getPackingDetailsTwo(v) {
  798. console.log(v);
  799. let param = {
  800. totalQuantity: v.formedNumLast,
  801. quantity: v.packageCell,
  802. unit: v.conversionUnit,
  803. workOrderId: this.workOrderId,
  804. taskId: this.taskId,
  805. tier: 2,
  806. };
  807. getPackingReportRepeat(param).then((res) => {
  808. resolve(res.detailList);
  809. });
  810. },
  811. handlePack(v, s) {
  812. let _arr = [];
  813. _arr = s.map((m) => {
  814. return {
  815. ...m,
  816. isChecked: 1,
  817. };
  818. });
  819. console.log(_arr, "123");
  820. let param = {
  821. detailList: _arr,
  822. quantity: v.temporaryCount,
  823. totalQuantity: v.formedNumLast,
  824. unit: v.packageUnit,
  825. taskId: this.taskId,
  826. workOrderId: this.workOrderId,
  827. tier: 2,
  828. };
  829. return new Promise((resolve, reject) => {
  830. packingReportRepeat(param).then((res) => {
  831. console.log(res);
  832. // this.temporaryList = []
  833. this.getPackingDetails();
  834. // this.getPackingDetailsTwo()
  835. });
  836. });
  837. },
  838. scrolltolower() {},
  839. getData() {
  840. let _packingReportMarginList = [];
  841. _packingReportMarginList = this.splitList.filter((e) => {
  842. return !e.parentId;
  843. });
  844. console.log(this.DispositionList);
  845. // let packInfo = {
  846. // this.DispositionList[0]
  847. // specText: this.text,
  848. // specValue: this.value,
  849. // minimumPackage: this.minimumPackage, // 最小包装
  850. // minimumPackageCell: this.DispositionList[0].packageCell, // 最小包装
  851. // minimumPackageUnit: this.DispositionList[0].packageUnit, // 最小包装单位
  852. // minimumConversionUnit: this.DispositionList[0].conversionUnit, // 最小包装单位
  853. // minimumFormedNumLast: this.DispositionList[0].formedNumLast, // 总包装数量
  854. // withinPackage: this.withinPackage, // 内包装
  855. // withinPackageCell: this.DispositionList[1].packageCell, // 最小包装名称
  856. // withinPackageUnit: this.DispositionList[1].packageUnit, // 最小包装单位
  857. // withinConversionUnit: this.DispositionList[1].conversionUnit, // 最小包装单位
  858. // withinFormedNumLast: this.DispositionList[1].formedNumLast, // 总包装数量
  859. // // packingReportList: this.packTwoList,
  860. // // packingReportMarginList: _packingReportMarginList,
  861. // outsidePackage: this.outsidePackage, //外包装
  862. // outsidePackageCell: this.DispositionList[2].packageCell, // 最小包装名称
  863. // outsidePackageUnit: this.DispositionList[2].packageUnit, // 最小包装单位
  864. // outsideConversionUnit: this.DispositionList[2].conversionUnit, // 最小包装单位
  865. // outsideFormedNumLast: this.DispositionList[2].formedNumLast, // 总包装数量
  866. // };
  867. let packInfo = {};
  868. if (this.warehouseId == 2) {
  869. if (this.DispositionList && this.DispositionList.length != 0) {
  870. packInfo = {
  871. // this.DispositionList[0]
  872. specText: this.span,
  873. specValue: this.value,
  874. minimumPackage: this.minimumPackage, // 最小包装
  875. tier: this.warehouseId,
  876. minimumPackageCell: this.DispositionList[0].packageCell, // 最小包装
  877. minimumPackageUnit: this.DispositionList[0].packageUnit, // 最小包装单位
  878. minimumConversionUnit: this.DispositionList[0].conversionUnit, // 最小包装单位
  879. minimumFormedNumLast: this.DispositionList[0].formedNumLast, // 总包装数量
  880. };
  881. } else {
  882. packInfo = {};
  883. }
  884. } else if (this.warehouseId == 3) {
  885. if (this.DispositionList && this.DispositionList.length != 0) {
  886. packInfo = {
  887. withinPackage: this.withinPackage, // 内包装
  888. tier: this.warehouseId,
  889. withinPackageCell: this.DispositionList[0].packageCell, // 最小包装名称
  890. withinPackageUnit: this.DispositionList[0].packageUnit, // 最小包装单位
  891. withinConversionUnit: this.DispositionList[0].conversionUnit, // 最小包装单位
  892. withinFormedNumLast: this.DispositionList[0].formedNumLast,
  893. };
  894. } else {
  895. packInfo = {};
  896. } // 总包装数量
  897. } else if (this.warehouseId == 4) {
  898. if (this.DispositionList && this.DispositionList.length != 0) {
  899. packInfo = {
  900. outsidePackage: this.outsidePackage, //外包装
  901. tier: this.warehouseId,
  902. outsidePackageCell: this.DispositionList[0].packageCell, // 最小包装名称
  903. outsidePackageUnit: this.DispositionList[0].packageUnit, // 最小包装单位
  904. outsideConversionUnit: this.DispositionList[0].conversionUnit, // 最小包装单位
  905. outsideFormedNumLast: this.DispositionList[0].formedNumLast,
  906. }; // 总包装数量
  907. } else {
  908. packInfo = {};
  909. }
  910. }
  911. return packInfo;
  912. },
  913. calculation() {
  914. this.show = true;
  915. },
  916. calculationSave() {
  917. let count = this.splitList.filter((item) => item.isChecked != 1).length;
  918. if (this.formData.wPackNum <= count && count != 0) {
  919. for (let i = 0; i < this.formData.wPackNum; i++) {
  920. this.splitList[i].check = 1;
  921. }
  922. this.handleCheck(0, 0);
  923. this.calculationClose();
  924. } else {
  925. if (count != 0) {
  926. for (let i = 0; i < count; i++) {
  927. this.splitList[i].check = 1;
  928. }
  929. this.handleCheck(0, 0);
  930. this.calculationClose();
  931. }
  932. uni.showToast({
  933. icon: "none",
  934. title: "外包装数超出内包装条数",
  935. });
  936. }
  937. },
  938. calculationClose() {
  939. this.show = false;
  940. },
  941. calculationReset() {
  942. this.formData.wPackNum = null;
  943. this.splitList.forEach((f) => {
  944. f.check = null;
  945. });
  946. this.temporaryList = [];
  947. this.show = false;
  948. },
  949. changeWarehouseType() {
  950. this.packageDispositionFn();
  951. },
  952. },
  953. };
  954. </script>
  955. <style lang="scss" scoped>
  956. .title_box {
  957. margin-top: 20rpx;
  958. .ww20 {
  959. width: 20%;
  960. }
  961. .name {
  962. font-size: 28rpx;
  963. font-style: normal;
  964. font-weight: 400;
  965. color: $theme-color;
  966. padding-left: 20rpx;
  967. position: relative;
  968. &:before {
  969. position: absolute;
  970. content: "";
  971. left: 0rpx;
  972. top: 0rpx;
  973. bottom: 0rpx;
  974. width: 4rpx;
  975. height: 28rpx;
  976. background: $theme-color;
  977. margin: auto;
  978. }
  979. }
  980. .btn_box {
  981. color: $theme-color;
  982. }
  983. }
  984. .material {
  985. margin-top: 10rpx;
  986. .content_table {
  987. width: 100%;
  988. border: 2rpx solid $border-color;
  989. .item {
  990. display: flex;
  991. border-bottom: 2rpx solid $border-color;
  992. .lable {
  993. width: 132rpx;
  994. text-align: center;
  995. background-color: #f7f9fa;
  996. font-size: 26rpx;
  997. border-right: 2rpx solid $border-color;
  998. flex-shrink: 0;
  999. }
  1000. .lable220 {
  1001. width: 220rpx !important;
  1002. font-size: 24rpx;
  1003. }
  1004. .lable150 {
  1005. width: 156rpx !important;
  1006. font-size: 24rpx;
  1007. }
  1008. .ww80 {
  1009. width: 80rpx;
  1010. }
  1011. .content {
  1012. width: 518rpx;
  1013. min-height: 64rpx;
  1014. font-size: 28rpx;
  1015. line-height: 28rpx;
  1016. font-style: normal;
  1017. font-weight: 400;
  1018. // padding: 18rpx 8rpx;
  1019. box-sizing: border-box;
  1020. word-wrap: break-word;
  1021. flex-grow: 1 !important;
  1022. .unit {
  1023. padding: 0 4rpx;
  1024. font-size: 24rpx;
  1025. color: #404446;
  1026. }
  1027. }
  1028. &:last-child {
  1029. border-bottom: none;
  1030. }
  1031. }
  1032. .ww55 {
  1033. width: 55%;
  1034. }
  1035. .ww45 {
  1036. width: 45%;
  1037. }
  1038. }
  1039. }
  1040. .content_table2 {
  1041. width: 100%;
  1042. margin-top: 16rpx;
  1043. .row {
  1044. width: 100%;
  1045. .item {
  1046. color: #404446;
  1047. font-size: 28rpx;
  1048. padding-left: 12rpx;
  1049. }
  1050. .color157 {
  1051. color: $theme-color;
  1052. }
  1053. .ww30 {
  1054. width: 30%;
  1055. }
  1056. .ww50 {
  1057. width: 50%;
  1058. }
  1059. .ww90 {
  1060. width: 90%;
  1061. }
  1062. .ww15 {
  1063. width: 15%;
  1064. }
  1065. .ww10 {
  1066. width: 10%;
  1067. }
  1068. .ww30 {
  1069. width: 30%;
  1070. }
  1071. .ww20 {
  1072. width: 20%;
  1073. }
  1074. .ww40 {
  1075. width: 40%;
  1076. }
  1077. .jsColor {
  1078. color: $theme-color;
  1079. font-size: 20rpx;
  1080. }
  1081. }
  1082. .head {
  1083. height: 64rpx;
  1084. background: #f7f9fa;
  1085. border-top: 2rpx solid #e3e5e5;
  1086. border-left: 2rpx solid #e3e5e5;
  1087. .item {
  1088. height: 64rpx;
  1089. line-height: 64rpx;
  1090. border-right: 2rpx solid #e3e5e5;
  1091. box-sizing: border-box;
  1092. }
  1093. }
  1094. .tr {
  1095. border-top: 2rpx solid #e3e5e5;
  1096. border-left: 2rpx solid #e3e5e5;
  1097. .item {
  1098. font-size: 24rpx;
  1099. min-height: 64rpx;
  1100. display: flex;
  1101. align-items: center;
  1102. border-right: 2rpx solid #e3e5e5;
  1103. box-sizing: border-box;
  1104. white-space: normal;
  1105. word-break: break-all;
  1106. }
  1107. &:last-child {
  1108. border-bottom: 2rpx solid #e3e5e5;
  1109. }
  1110. }
  1111. }
  1112. .label {
  1113. display: flex;
  1114. height: 70rpx;
  1115. width: 86px !important;
  1116. font-size: 13px;
  1117. align-items: center;
  1118. justify-content: center;
  1119. background-color: #f7f9fa;
  1120. }
  1121. .content_num {
  1122. display: flex;
  1123. align-items: center;
  1124. padding: 0 4rpx;
  1125. /deep/ .uni-input-input {
  1126. border: 2rpx solid #f0f8f2;
  1127. background: #f0f8f2;
  1128. color: $theme-color;
  1129. }
  1130. }
  1131. .penalize {
  1132. width: 86rpx;
  1133. line-height: 60rpx;
  1134. background: $theme-color;
  1135. font-size: 24rpx;
  1136. text-align: center;
  1137. color: #fff;
  1138. }
  1139. .check {
  1140. width: 30rpx;
  1141. height: 30rpx;
  1142. }
  1143. .z_list {
  1144. max-height: 500rpx;
  1145. }
  1146. .search_list {
  1147. min-height: 100rpx;
  1148. width: 80vw;
  1149. /deep/ .baseForm {
  1150. padding: 0 20rpx;
  1151. }
  1152. }
  1153. .operate_box {
  1154. padding: 10rpx 32rpx;
  1155. /deep/ .u-button {
  1156. width: 30%;
  1157. }
  1158. }
  1159. </style>