saleOrderSteel.vue 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255
  1. <template>
  2. <!-- 销售订单页面 -->
  3. <div class="salePlan">
  4. <div class="top">
  5. <el-form :inline="true">
  6. <el-form-item v-if="activeName != 'first'">
  7. <el-date-picker
  8. v-model="startTime"
  9. type="datetime"
  10. placeholder="选择日期"
  11. style="width:220px"
  12. >
  13. </el-date-picker>
  14. <span>至</span>
  15. <el-date-picker
  16. v-model="endTime"
  17. type="datetime"
  18. placeholder="选择日期"
  19. style="width:220px"
  20. >
  21. </el-date-picker>
  22. </el-form-item>
  23. <el-form-item>
  24. <el-input
  25. placeholder="请输入内容"
  26. v-model="input"
  27. clearable
  28. style="width:250px"
  29. >
  30. </el-input>
  31. <el-button type="primary" @click="onclick">
  32. <i class="el-icon-search"></i>
  33. </el-button>
  34. </el-form-item>
  35. <el-form-item>
  36. <el-button type="primary" @click="btnclick(0)">
  37. <i class="el-icon-plus"></i>新增
  38. </el-button>
  39. <el-button type="primary" @click="refresh">
  40. <i class="el-icon-refresh"></i>
  41. </el-button>
  42. <el-button type="primary" @click="batchReport">
  43. <i class="upload2"></i>批量上传
  44. </el-button>
  45. <el-button
  46. type="primary"
  47. @click="exportData()"
  48. v-if="activeName == 'first'"
  49. ><i class="el-icon-download"></i>导出Excel</el-button
  50. >
  51. <el-form-item v-if="activeName == 'first'">
  52. <el-upload
  53. class="upload-excel"
  54. action=""
  55. :on-change="importExcel"
  56. :show-file-list="false"
  57. accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
  58. :auto-upload="false"
  59. >
  60. <el-button type="primary" icon="el-icon-upload"
  61. >导入Excel</el-button
  62. >
  63. </el-upload>
  64. </el-form-item>
  65. <el-button disabled>物资总件数</el-button>
  66. <el-input
  67. placeholder=""
  68. v-model="matSum"
  69. clearable
  70. style="width:100px"
  71. disabled
  72. >
  73. </el-input>
  74. </el-form-item>
  75. </el-form>
  76. </div>
  77. <div class="table">
  78. <el-tabs v-model="activeName" @tab-click="handleClick">
  79. <!-- 未上报 -->
  80. <el-tab-pane label="未上报" name="first">
  81. <mergeRowTable
  82. v-bind.sync="option"
  83. ref="excelDom"
  84. @selection-change="selectionChange"
  85. :pageSize="200"
  86. @func="func"
  87. >
  88. <el-table-column
  89. fixed="right"
  90. label="操作"
  91. align="center"
  92. width="200"
  93. >
  94. <template slot-scope="scope">
  95. <el-button
  96. @click="uploadclick(scope.row.saleOrderId)"
  97. type="text"
  98. size="small"
  99. >上传</el-button
  100. >
  101. <el-button
  102. @click="click(scope.row.saleOrderId)"
  103. type="text"
  104. size="small"
  105. >修改</el-button
  106. >
  107. <el-button
  108. type="text"
  109. size="small"
  110. @click="deleteclick(scope.row.saleOrderId)"
  111. >删除</el-button
  112. >
  113. <el-button
  114. type="text"
  115. size="small"
  116. @click="copyClick(scope.row.saleOrderId)"
  117. >复制</el-button
  118. >
  119. </template>
  120. </el-table-column>
  121. </mergeRowTable>
  122. </el-tab-pane>
  123. <!-- 已审批 -->
  124. <el-tab-pane label="已审批" name="four">
  125. <mergeRowTable
  126. v-bind.sync="option4"
  127. ref="table"
  128. :pageSize="200"
  129. @func="func1"
  130. >
  131. <el-table-column
  132. fixed="right"
  133. label="操作"
  134. align="center"
  135. width="280"
  136. >
  137. <template slot-scope="scope">
  138. <el-button
  139. @click="getOrderDetails(scope.row.saleOrderId)"
  140. type="text"
  141. size="small"
  142. >运单</el-button
  143. >
  144. <el-button
  145. @click="deleteSaleOrder(scope.row)"
  146. type="text"
  147. size="small"
  148. >关闭订单</el-button
  149. >
  150. <el-button
  151. @click="adverseCloseSaleOrder(scope.row)"
  152. type="text"
  153. size="small"
  154. >反关闭订单</el-button
  155. >
  156. <el-button
  157. @click="updateSaleOrder(scope.row)"
  158. type="text"
  159. size="small"
  160. >异常处理</el-button
  161. >
  162. <el-button
  163. type="text"
  164. size="small"
  165. @click="copyClick(scope.row.saleOrderId)"
  166. >复制</el-button
  167. >
  168. </template>
  169. </el-table-column>
  170. </mergeRowTable>
  171. </el-tab-pane>
  172. <el-tab-pane label="反审批" name="five">
  173. <mergeRowTable
  174. v-bind.sync="option5"
  175. ref="table2"
  176. :pageSize="200"
  177. @func="func3"
  178. >
  179. <el-table-column
  180. fixed="right"
  181. label="操作"
  182. align="center"
  183. width="200"
  184. >
  185. <template slot-scope="scope">
  186. <el-button
  187. @click="updateSaleOrder(scope.row)"
  188. type="text"
  189. size="small"
  190. >异常处理</el-button
  191. >
  192. </template>
  193. </el-table-column></mergeRowTable
  194. >
  195. </el-tab-pane>
  196. <!-- 已上报 -->
  197. <el-tab-pane label="已上报" name="second">
  198. <mergeRowTable
  199. v-bind.sync="option2"
  200. ref="table2"
  201. :pageSize="200"
  202. @func="func2"
  203. >
  204. <el-table-column
  205. fixed="right"
  206. label="操作"
  207. align="center"
  208. width="200"
  209. >
  210. <template slot-scope="scope">
  211. <el-button
  212. @click="closeSteelOrderAndEas(scope.row)"
  213. type="text"
  214. size="small"
  215. >关闭订单</el-button
  216. >
  217. <el-button
  218. @click="updateReportedSaleOrder(scope)"
  219. type="text"
  220. size="small"
  221. >修改</el-button
  222. >
  223. </template>
  224. </el-table-column>
  225. </mergeRowTable>
  226. </el-tab-pane>
  227. </el-tabs>
  228. </div>
  229. </div>
  230. </template>
  231. <script>
  232. import { getCookie } from "@/utils/util.js";
  233. import { sjTime } from "@/utils/sharedJsFile";
  234. import { isNumber } from "../../../ADMINISTRATORS/app";
  235. import ExcelSaleOrder from "../saleContract/importExcelSaleOrder.vue";
  236. export default {
  237. name: "saleOrder",
  238. components: {
  239. ExcelSaleOrder
  240. },
  241. data() {
  242. return {
  243. dialogTableVisible: false,
  244. startTime: null,
  245. endTime: null,
  246. batchReportList: [],
  247. activeName: "first",
  248. tableTitle: "未上传销售订单报表",
  249. drawer: false,
  250. input: "",
  251. index: "",
  252. carrierId: null,
  253. carrierName: null,
  254. shipperName: "四川省达州钢铁集团有限责任公司",
  255. shipperId: 1,
  256. receivingCompany: [
  257. "四川省达州钢铁集团有限责任公司",
  258. "四川达钢商贸有限公司"
  259. ],
  260. option: {
  261. // 表格请求数据的地址
  262. requestUrl: "",
  263. selectionType: "select",
  264. comparison: "saleNumber",
  265. columnIndexs: [0, 1, 2, 3, 4, 9, 10, 11, 12, 13, 14, 15, 16, 17]
  266. },
  267. option2: {
  268. // 表格请求数据的地址
  269. requestUrl: "",
  270. comparison: "saleNumber",
  271. columnIndexs: [0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15, 16]
  272. },
  273. option4: {
  274. // 表格请求数据的地址
  275. requestUrl: "",
  276. comparison: "saleNumber",
  277. columnIndexs: [
  278. 0,
  279. 1,
  280. 2,
  281. 3,
  282. 8,
  283. 9,
  284. 10,
  285. 11,
  286. 12,
  287. 13,
  288. 14,
  289. 15,
  290. 16,
  291. 17,
  292. 18,
  293. 20,
  294. 21,
  295. 22
  296. ]
  297. },
  298. option5: {
  299. // 表格请求数据的地址
  300. requestUrl: "",
  301. comparison: "saleNumber",
  302. columnIndexs: [
  303. 0,
  304. 1,
  305. 2,
  306. 3,
  307. 7,
  308. 8,
  309. 9,
  310. 10,
  311. 11,
  312. 12,
  313. 13,
  314. 14,
  315. 15,
  316. 16,
  317. 17,
  318. 18,
  319. 20,
  320. 21
  321. ]
  322. },
  323. mapList: [],
  324. mapItemList: [],
  325. matSum: null,
  326. tableData: [],
  327. saleDateOfReceipt: null,
  328. //销售订单主表数据
  329. saleOrderList: [
  330. "receiveName",
  331. "isSelfMention",
  332. "saleRemark",
  333. "saleOrderReceiveCustomer",
  334. "salerName",
  335. "saleOrderNo",
  336. "saleArea"
  337. ],
  338. saleOrderMapList: [
  339. "truckNo",
  340. "province",
  341. "district",
  342. "town",
  343. "truckRemark",
  344. "place",
  345. "saleOrderConsigneeTel",
  346. "saleDateOfReceipt",
  347. "materialName",
  348. "materialSpecification",
  349. "materialModel",
  350. "materialNumber",
  351. "steelMeters",
  352. "isPoundSale"
  353. ]
  354. };
  355. },
  356. created() {
  357. if (getCookie("orgCode") == "shouhuokehu") {
  358. this.option.requestUrl =
  359. "/api/v1/ams/getSaleOrderInfoes?apiId=408&consigneeSsoId=" +
  360. getCookie("userId") +
  361. "&i=" +
  362. new Date();
  363. this.option2.requestUrl =
  364. "/api/v1/ams/getSaleOrderReportedes?apiId=408&consigneeSsoId=" +
  365. getCookie("userId") +
  366. "&i=" +
  367. new Date();
  368. this.option4.requestUrl =
  369. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&shipperId=1&saleType=1&consigneeSsoId=" +
  370. getCookie("userId");
  371. this.option5.requestUrl =
  372. "/api/v1/ams/getSteelOrderDeletedList?apiId=409&consigneeSsoId=" +
  373. getCookie("userId") +
  374. "&i=" +
  375. new Date();
  376. } else if (getCookie("orgCode") == "xiaoshouyewuyuan") {
  377. this.option.requestUrl =
  378. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saler=" +
  379. getCookie("loginName") +
  380. "&i=" +
  381. new Date();
  382. this.option2.requestUrl =
  383. "/api/v1/ams/getSaleOrderReportedes?apiId=408&saler=" +
  384. getCookie("loginName") +
  385. "&i=" +
  386. new Date();
  387. this.option4.requestUrl =
  388. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&shipperId=1&saleType=1&saler=" +
  389. getCookie("loginName") +
  390. "&i=" +
  391. new Date();
  392. this.option5.requestUrl =
  393. "/api/v1/ams/getSteelOrderDeletedList?apiId=409&saler=" +
  394. getCookie("loginName");
  395. } else {
  396. this.option.requestUrl =
  397. "/api/v1/ams/getSaleOrderInfoes?apiId=408&consigneeSsoId=" +
  398. null +
  399. "&i=" +
  400. new Date();
  401. this.option2.requestUrl =
  402. "/api/v1/ams/getSaleOrderReportedes?apiId=408&consigneeSsoId=" +
  403. null +
  404. "&i=" +
  405. new Date();
  406. this.option4.requestUrl =
  407. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&shipperId=1&saleType=1&consigneeSsoId=" +
  408. null +
  409. "&i=" +
  410. new Date();
  411. this.option5.requestUrl =
  412. "/api/v1/ams/getSteelOrderDeletedList?apiId=409&consigneeSsoId=" +
  413. null +
  414. "&i=" +
  415. new Date();
  416. }
  417. let loadTime1 = new Date(
  418. new Date(new Date().toLocaleDateString()).getTime() +
  419. (3600 * 1000 * 8 - 1)
  420. ); // 当天8点前
  421. let loadTime2 = new Date(
  422. new Date(new Date().toLocaleDateString()).getTime() +
  423. (3600 * 1000 * 32 - 1)
  424. ); // 次天8点前
  425. if (new Date().getTime() - loadTime1 > 0) {
  426. this.saleDateOfReceipt = loadTime2;
  427. } else {
  428. this.saleDateOfReceipt = loadTime1;
  429. }
  430. },
  431. activated() {
  432. if (getCookie("orgCode") == "shouhuokehu") {
  433. this.option.requestUrl =
  434. "/api/v1/ams/getSaleOrderInfoes?apiId=408&consigneeSsoId=" +
  435. getCookie("userId") +
  436. "&i=" +
  437. new Date();
  438. } else if (getCookie("orgCode") == "xiaoshouyewuyuan") {
  439. this.option.requestUrl =
  440. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saler=" +
  441. getCookie("loginName") +
  442. "&i=" +
  443. new Date();
  444. } else {
  445. this.option.requestUrl =
  446. "/api/v1/ams/getSaleOrderInfoes?apiId=408&consigneeSsoId=" +
  447. null +
  448. "&i=" +
  449. new Date();
  450. }
  451. let loadTime1 = new Date(
  452. new Date(new Date().toLocaleDateString()).getTime() +
  453. (3600 * 1000 * 8 - 1)
  454. ); // 当天8点前
  455. let loadTime2 = new Date(
  456. new Date(new Date().toLocaleDateString()).getTime() +
  457. (3600 * 1000 * 32 - 1)
  458. ); // 次天8点前
  459. if (new Date().getTime() - loadTime1 > 0) {
  460. this.saleDateOfReceipt = loadTime2;
  461. } else {
  462. this.saleDateOfReceipt = loadTime1;
  463. }
  464. },
  465. methods: {
  466. //导入Excel格式
  467. //导入excel
  468. importExcel(file) {
  469. let that = this;
  470. if (!file) {
  471. that.$message({
  472. message: "文件错误!",
  473. type: "warning"
  474. });
  475. return;
  476. }
  477. this.tableData = [];
  478. var reader = new FileReader();
  479. var data = null;
  480. var workbook = null;
  481. //设置读取操作
  482. reader.onload = function(e) {
  483. console.log(e);
  484. data = e.target.result;
  485. workbook = XLSX.read(data, {
  486. type: "binary"
  487. });
  488. let rows = XLSX.utils.sheet_to_json(
  489. workbook.Sheets[workbook.SheetNames[0]]
  490. ); //只取第一页
  491. console.log("rows", rows);
  492. Array.from(rows).forEach((e, index) => {
  493. let map = {};
  494. try {
  495. debugger;
  496. Object.keys(e).forEach(e1 => {
  497. if (e1.includes("销售订单编号")) {
  498. map.saleOrderNo = e[e1];
  499. }
  500. if (e1.includes("物资名称")) {
  501. map.materialName = e[e1];
  502. if (
  503. e[e1].includes("盘螺") ||
  504. e[e1].includes("乱尺") ||
  505. e[e1].includes("盘元") ||
  506. e[e1].includes("盘圆")
  507. ) {
  508. map.isPoundSale = 0;
  509. } else {
  510. map.isPoundSale = 1;
  511. }
  512. //确定更改的物资有无米数
  513. if (e[e1].includes("米")) {
  514. map.steelMeters = Number(e[e1].replace(/[^0.0-9.0]/gi, ""));
  515. } else {
  516. map.steelMeters = null;
  517. }
  518. }
  519. if (e1.includes("规格型号")) {
  520. console.log(e[e1]);
  521. let str = e[e1];
  522. let regex = /\((.+?)\)/g;
  523. if (str.match(regex) != null) {
  524. let spa = str.replace(str.match(regex)[0], "");
  525. let model = str
  526. .match(regex)[0]
  527. .replace("(", "")
  528. .replace(")", "");
  529. map.materialModel = model;
  530. if ((spa + "").includes("Φ")) {
  531. map.materialSpecification = spa;
  532. } else {
  533. map.materialSpecification = "Φ" + spa;
  534. }
  535. } else {
  536. map.materialSpecification = e[e1];
  537. map.model = null;
  538. }
  539. }
  540. if (e1.includes("下单客户")) {
  541. map.receiveName = e[e1];
  542. }
  543. if (
  544. e1.includes("米数") &&
  545. (map.steelMeters == null || map.steelMeters != "")
  546. ) {
  547. map.steelMeters = e[e1];
  548. }
  549. if (e1.includes("物资规格") && !e1.includes("规格型号")) {
  550. if ((e[e1] + "").includes("Φ")) {
  551. map.materialSpecification = e[e1];
  552. } else {
  553. map.materialSpecification = "Φ" + e[e1];
  554. }
  555. }
  556. if (e1.includes("物资型号") && !e1.includes("规格型号")) {
  557. map.materialModel = e[e1];
  558. }
  559. if (e1.includes("物资件数")) {
  560. if (isNumber(e[e1])) {
  561. map.materialNumber = e[e1];
  562. } else {
  563. throw new Error(
  564. `该Excel第--${index +
  565. 2}--行-“物资件数”错误,请核实后再输入(件数输入整数)`
  566. );
  567. }
  568. }
  569. if (e1.includes("车序号")) {
  570. if (isNumber(e[e1])) {
  571. map.truckNo = e[e1];
  572. } else {
  573. throw new Error(
  574. `该Excel第--${index +
  575. 2}--行-“车序号”错误,请核实后再输入(车序号输入正整数)`
  576. );
  577. }
  578. }
  579. if (e1.includes("收款公司")) {
  580. if (that.receivingCompany.indexOf(e[e1]) === -1) {
  581. throw new Error(
  582. `该Excel第--${index + 2}--行-“收款公司”错误,请核实后再输入`
  583. );
  584. } else {
  585. map.saleOrderReceiveCustomer = e[e1];
  586. }
  587. }
  588. if (e1.includes("业务员")) {
  589. map.salerName = e[e1];
  590. }
  591. if (e1.includes("摘要")) {
  592. map.saleRemark = e[e1];
  593. let regex = /钢材.*组/g;
  594. if (e[e1].match(regex)) {
  595. map.saleArea = e[e1].match(regex)[0];
  596. }
  597. let regex1 = /范围.*米/g;
  598. if (e[e1].match(regex1)) {
  599. map.steelMeters = Number(
  600. str.match(regex)[0].match(/(\d+(\.\d+)?)/g)
  601. );
  602. }
  603. }
  604. if (e1.includes("省")) {
  605. map.province = e[e1];
  606. }
  607. if (e1.includes("市")) {
  608. map.district = e[e1];
  609. }
  610. if (e1.includes("县/区")) {
  611. map.town = e[e1];
  612. }
  613. if (e1.includes("具体收货地址")) {
  614. map.place = e[e1];
  615. }
  616. if (e1.includes("收货客户电话")) {
  617. map.saleOrderConsigneeTel = e[e1];
  618. }
  619. if (e1.includes("备注")) {
  620. map.truckRemark = e[e1];
  621. }
  622. if (e1.includes("是否自提")) {
  623. if (e[e1] === "是" || e[e1] === "否") {
  624. map.isSelfMention = e[e1];
  625. } else {
  626. map.isSelfMention = "否";
  627. }
  628. }
  629. });
  630. map.shipperName = that.shipperName;
  631. if (typeof map.isSelfMention === "undefined") {
  632. map.isSelfMention = "否";
  633. }
  634. if (map.saleRemark && map.receiveName && map.materialName) {
  635. that.tableData.push(map);
  636. }
  637. } catch (e) {
  638. that.$message.error(e.message);
  639. }
  640. });
  641. console.log(this.tableData);
  642. that.addExcelInport();
  643. // that.dialogTableVisible = true;
  644. return;
  645. };
  646. reader.readAsBinaryString(file.raw); //以二进制方式读取
  647. },
  648. //自己写一个比较函数排序
  649. // 排序
  650. compare(property) {
  651. return function(a, b) {
  652. var value1 = a[property];
  653. var value2 = b[property];
  654. return value2 - value1;
  655. };
  656. },
  657. addExcelInport() {
  658. //加载虚拟
  659. const loading = this.$loading({
  660. lock: true,
  661. text: "正在快马加鞭为您生成销售订单,请稍候",
  662. spinner: "el-icon-loading",
  663. background: "rgba(0, 0, 0, 0.7)"
  664. });
  665. console.log(this.tableData);
  666. debugger;
  667. //遍历数组,根据摘要和下单客户自动给出销售订单编号
  668. for (let i = 0; i < this.tableData.length; i++) {
  669. if (i === 0) {
  670. this.tableData[i].saleOrderNo = 1;
  671. } else {
  672. let sortArr = this.tableData
  673. .filter(e => {
  674. return (
  675. typeof e.saleOrderNo != "undefined" &&
  676. e.saleOrderNo != "undefined" &&
  677. isNumber(e.saleOrderNo)
  678. );
  679. })
  680. .map(e => {
  681. if (
  682. typeof e.saleOrderNo != "undefined" &&
  683. e.saleOrderNo != "undefined" &&
  684. isNumber(e.saleOrderNo)
  685. ) {
  686. return e.saleOrderNo;
  687. }
  688. })
  689. .sort((a, b) => {
  690. return a - b;
  691. });
  692. //当大于0的时候,需要遍历整个数组,与之相等的有哪些
  693. for (let j = 0; j < i; j++) {
  694. if (
  695. this.tableData[i].saleRemark === this.tableData[j].saleRemark &&
  696. this.tableData[i].receiveName === this.tableData[j].receiveName
  697. ) {
  698. this.tableData[i].saleOrderNo = this.tableData[j].saleOrderNo;
  699. break;
  700. } else {
  701. if (j == i - 1) {
  702. this.tableData[i].saleOrderNo = sortArr[sortArr.length - 1] + 1;
  703. }
  704. }
  705. }
  706. }
  707. }
  708. console.log(this.tableData);
  709. debugger;
  710. // this.tableData = this.tableData.sort(this.compare("saleOrderNo"));
  711. // debugger;
  712. //需要遍历数组,以销售订单编号为分类
  713. const map1 = this.tableData.reduce((result, item) => {
  714. result[item.saleOrderNo] = result[item.saleOrderNo] || [];
  715. result[item.saleOrderNo].push(item);
  716. return result;
  717. }, {});
  718. // result即为所求
  719. let result = Object.values(map1);
  720. console.log(result);
  721. debugger;
  722. //遍历数组
  723. let saleOrderListMap = [];
  724. result.forEach((saleOrderList, index) => {
  725. let map = {};
  726. let arr = [];
  727. console.log("saleOrderList");
  728. console.log(saleOrderList);
  729. saleOrderList.forEach(e => {
  730. let mapMaterial = {};
  731. Object.keys(e).forEach(e1 => {
  732. if (this.saleOrderList.includes(e1)) {
  733. map[e1] = e[e1];
  734. }
  735. if (this.saleOrderMapList.includes(e1)) {
  736. mapMaterial[e1] = e[e1];
  737. }
  738. });
  739. mapMaterial.saleDateOfReceipt = sjTime(this.saleDateOfReceipt);
  740. arr.push(mapMaterial);
  741. });
  742. map.shipperId = 1;
  743. map.mapList = arr;
  744. saleOrderListMap.push(map);
  745. });
  746. console.log(saleOrderListMap);
  747. this.axios
  748. .post("/api/v1/ams/addSteelSaleOrderList", saleOrderListMap)
  749. .then(res => {
  750. if (res.data.code == "200") {
  751. loading.close();
  752. this.getRequestUrl();
  753. this.$message.success("新增销售订单成功!");
  754. this.tableData = [];
  755. } else {
  756. this.$message.error(res.data.data);
  757. this.getRequestUrl();
  758. loading.close();
  759. this.tableData = [];
  760. }
  761. })
  762. .catch(e => {
  763. this.$message.error("生成错误!");
  764. loading.close();
  765. this.tableData = [];
  766. });
  767. },
  768. adverseCloseSaleOrder(row) {
  769. console.log(row);
  770. this.$confirm("确定反关闭整条订单吗?", "继续?", {
  771. cancelButtonText: "取消",
  772. confirmButtonText: "确定",
  773. center: true
  774. }).then(() => {
  775. this.axios
  776. .post(
  777. "/api/v1/ams/adverseCloseSaleOrder?saleOrderId=" + row.saleOrderId
  778. )
  779. .then(res => {
  780. if (res.data.code == "200") {
  781. this.$message.success("反关闭成功");
  782. this.getRequestUrl();
  783. } else {
  784. this.$message.error("反关闭失败");
  785. this.getRequestUrl();
  786. }
  787. })
  788. .catch(() => {
  789. this.$message.error("反关闭失败");
  790. });
  791. });
  792. },
  793. updateReportedSaleOrder(scope) {
  794. this.$router.push("/editSaleOrder/" + scope.row.saleOrderId);
  795. },
  796. updateSaleOrderStatusById(scope) {
  797. console.log(scope.row.saleOrderId);
  798. this.$confirm("是否撤销", "警告", {
  799. confirmButtonText: "确定撤销",
  800. cancelButtonText: "取消撤销",
  801. type: "warning",
  802. center: true
  803. })
  804. .then(() => {
  805. this.axios
  806. .post(
  807. "/api/v1/uc/updateSaleOrderStatusById?saleOrderId=" +
  808. scope.row.saleOrderId
  809. )
  810. .then(res => {
  811. if (res.data.code == "200") {
  812. this.$message.success("撤销成功");
  813. this.activeName = "first";
  814. this.getRequestUrl();
  815. } else {
  816. this.$message.error("撤销失败");
  817. }
  818. })
  819. .catch(() => {
  820. this.$message.error("撤销失败");
  821. });
  822. })
  823. .catch(() => {
  824. console.log("取消撤销");
  825. });
  826. },
  827. func(res) {
  828. this.matSum = res.list.reduce(function(prev, item) {
  829. return prev + item.materialNumber;
  830. }, 0);
  831. },
  832. func1(res) {
  833. this.matSum = res.list.reduce(function(prev, item) {
  834. return prev + item.materialNumber;
  835. }, 0);
  836. },
  837. func2(res) {
  838. this.matSum = res.list.reduce(function(prev, item) {
  839. return prev + item.materialNumber;
  840. }, 0);
  841. },
  842. func3(res) {
  843. this.matSum = res.list.reduce(function(prev, item) {
  844. return prev + item.materialNumber;
  845. }, 0);
  846. },
  847. closeSteelOrderAndEas(row) {
  848. this.$prompt("此操作将同步关闭金蝶和物流的销售订单,是否继续?", "提示", {
  849. confirmButtonText: "确定",
  850. cancelButtonText: "取消",
  851. inputPlaceholder: "请输入关闭原因-必填!!!",
  852. center: true,
  853. type: "warning"
  854. })
  855. .then(({ value }) => {
  856. if (value != null) {
  857. let mapValue = {
  858. number: row.saleNumber,
  859. saleOrderId: row.saleOrderId,
  860. reason: value
  861. };
  862. console.log(mapValue);
  863. this.axios
  864. .post("/api/v1/ams/deleteSaleOrderSame", mapValue)
  865. .then(res => {
  866. if (res.data.code == 200) {
  867. this.$message.success("关闭成功");
  868. this.getRequestUrl();
  869. } else {
  870. this.$message.error("关闭失败,请联系管理员");
  871. }
  872. })
  873. .catch(() => {
  874. this.$message.error("关闭失败,请联系管理员");
  875. this.getRequestUrl();
  876. });
  877. } else {
  878. this.$message.error("请输入理由");
  879. }
  880. })
  881. .catch(() => {
  882. this.$message({
  883. type: "info",
  884. message: "取消输入"
  885. });
  886. });
  887. },
  888. deleteSaleOrder(row) {
  889. this.$prompt("此操作将关闭订单且下面的待运输订单,是否继续?", "提示", {
  890. confirmButtonText: "确定",
  891. cancelButtonText: "取消",
  892. inputPlaceholder: "请输入关闭原因-必填!!!",
  893. center: true,
  894. type: "warning"
  895. })
  896. .then(({ value }) => {
  897. if (value != null) {
  898. let mapValue = {
  899. number: row.saleNumber,
  900. saleOrderId: row.saleOrderId,
  901. reason: value
  902. };
  903. this.axios
  904. .post("/api/v1/ams/deleteSaleOrderSame", mapValue)
  905. .then(res => {
  906. if (res.data.code == 200) {
  907. this.$message.success("关闭成功");
  908. this.getRequestUrl();
  909. }
  910. });
  911. } else {
  912. this.$message.error("请输入理由");
  913. }
  914. })
  915. .catch(() => {
  916. this.$message({
  917. type: "info",
  918. message: "取消输入"
  919. });
  920. });
  921. },
  922. updateSaleOrder(row) {
  923. console.log(row);
  924. this.$router.push(
  925. "updateSaleOrderSteel/" + row.saleOrderId + "/" + row.deleted
  926. );
  927. },
  928. getOrderDetails(saleOrderId) {
  929. console.log(saleOrderId);
  930. this.$router.push("saleOrderOODetails/" + saleOrderId);
  931. },
  932. getRequestUrl() {
  933. if (getCookie("orgCode") == "shouhuokehu") {
  934. this.option.requestUrl =
  935. "/api/v1/ams/getSaleOrderInfoes?apiId=408&consigneeSsoId=" +
  936. getCookie("userId") +
  937. "&i=" +
  938. new Date();
  939. this.option2.requestUrl =
  940. "/api/v1/ams/getSaleOrderReportedes?apiId=408&consigneeSsoId=" +
  941. getCookie("userId") +
  942. "&i=" +
  943. new Date();
  944. this.option4.requestUrl =
  945. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&shipperId=1&saleType=1&consigneeSsoId=" +
  946. getCookie("userId") +
  947. "&i=" +
  948. new Date();
  949. this.option5.requestUrl =
  950. "/api/v1/ams/getSteelOrderDeletedList?apiId=409&consigneeSsoId=" +
  951. getCookie("userId") +
  952. "&i=" +
  953. new Date();
  954. } else if (getCookie("orgCode") == "xiaoshouyewuyuan") {
  955. this.option.requestUrl =
  956. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saler=" +
  957. getCookie("loginName") +
  958. "&i=" +
  959. new Date();
  960. this.option2.requestUrl =
  961. "/api/v1/ams/getSaleOrderReportedes?apiId=408&saler=" +
  962. getCookie("loginName") +
  963. "&i=" +
  964. new Date();
  965. this.option4.requestUrl =
  966. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&shipperId=1&saleType=1&saler=" +
  967. getCookie("loginName") +
  968. "&i=" +
  969. new Date();
  970. this.option5.requestUrl =
  971. "/api/v1/ams/getSteelOrderDeletedList?apiId=409&saler=" +
  972. getCookie("loginName");
  973. } else {
  974. this.option.requestUrl =
  975. "/api/v1/ams/getSaleOrderInfoes?apiId=408&consigneeSsoId=" +
  976. null +
  977. "&i=" +
  978. new Date();
  979. this.option2.requestUrl =
  980. "/api/v1/ams/getSaleOrderReportedes?apiId=408&consigneeSsoId=" +
  981. null +
  982. "&i=" +
  983. new Date();
  984. this.option4.requestUrl =
  985. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&shipperId=1&saleType=1&consigneeSsoId=" +
  986. null +
  987. "&i=" +
  988. new Date();
  989. this.option5.requestUrl =
  990. "/api/v1/ams/getSteelOrderDeletedList?apiId=409&consigneeSsoId=" +
  991. null +
  992. "&i=" +
  993. new Date();
  994. }
  995. },
  996. batchReport() {
  997. if (this.batchReportList.length === 0) {
  998. this.$message.error("请先选择需要批量上传的销售订单");
  999. return;
  1000. }
  1001. const loading = this.$loading({
  1002. lock: true,
  1003. text: "正在努力上传",
  1004. spinner: "el-icon-loading",
  1005. background: "rgba(0, 0, 0, 0.7)"
  1006. });
  1007. this.axios
  1008. .post("/api/v1/ams/uploadSaleOrderList", this.batchReportList)
  1009. .then(res => {
  1010. if (res.data.code == "200") {
  1011. this.$message.success("上传成功");
  1012. this.getRequestUrl();
  1013. loading.close();
  1014. } else {
  1015. this.$message.error("上传失败");
  1016. loading.close();
  1017. }
  1018. })
  1019. .catch(() => {
  1020. this.$message.error("上传失败");
  1021. loading.close();
  1022. });
  1023. },
  1024. selectionChange(selection) {
  1025. console.log(selection);
  1026. this.batchReportList = [];
  1027. this.batchReportList = selection;
  1028. },
  1029. refresh() {
  1030. this.getRequestUrl();
  1031. },
  1032. handleClick(tab, event) {
  1033. console.log(tab, event);
  1034. },
  1035. onclick() {
  1036. var startTime = null;
  1037. var endTime = null;
  1038. if (this.startTime && this.endTime) {
  1039. startTime = sjTime(this.startTime);
  1040. endTime = sjTime(this.endTime);
  1041. }
  1042. if (getCookie("orgCode") == "shouhuokehu") {
  1043. if (this.activeName == "first") {
  1044. this.option.requestUrl =
  1045. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saleType=1&con=" +
  1046. this.input +
  1047. "&consigneeSsoId=" +
  1048. getCookie("userId") +
  1049. "&startTime=" +
  1050. startTime +
  1051. "&endTime=" +
  1052. endTime +
  1053. "&i=" +
  1054. new Date();
  1055. } else if (this.activeName == "second") {
  1056. this.option2.requestUrl =
  1057. "/api/v1/ams/getSaleOrderReportedes?apiId=408&saleType=1&con=" +
  1058. this.input +
  1059. "&consigneeSsoId=" +
  1060. getCookie("userId") +
  1061. "&startTime=" +
  1062. startTime +
  1063. "&endTime=" +
  1064. endTime +
  1065. "&i=" +
  1066. new Date();
  1067. } else if (this.activeName == "four") {
  1068. this.option4.requestUrl =
  1069. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&saleType=1&shipperId=1&con=" +
  1070. this.input +
  1071. "&consigneeSsoId=" +
  1072. getCookie("userId") +
  1073. "&startTime=" +
  1074. startTime +
  1075. "&endTime=" +
  1076. endTime +
  1077. "&i=" +
  1078. new Date();
  1079. }
  1080. } else if (getCookie("orgCode") == "xiaoshouyewuyuan") {
  1081. if (this.activeName == "first") {
  1082. this.option.requestUrl =
  1083. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saleType=1&con=" +
  1084. this.input +
  1085. "&startTime=" +
  1086. startTime +
  1087. "&endTime=" +
  1088. endTime +
  1089. "&i=" +
  1090. new Date() +
  1091. "saler=" +
  1092. getCookie("loginName");
  1093. } else if (this.activeName == "second") {
  1094. this.option2.requestUrl =
  1095. "/api/v1/ams/getSaleOrderReportedes?apiId=408&saleType=1&con=" +
  1096. this.input +
  1097. "&startTime=" +
  1098. startTime +
  1099. "&endTime=" +
  1100. endTime +
  1101. "&i=" +
  1102. new Date() +
  1103. "saler=" +
  1104. getCookie("loginName");
  1105. } else if (this.activeName == "four") {
  1106. this.option4.requestUrl =
  1107. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&saleType=1&shipperId=1&con=" +
  1108. this.input +
  1109. "&startTime=" +
  1110. startTime +
  1111. "&endTime=" +
  1112. endTime +
  1113. "&i=" +
  1114. new Date() +
  1115. "saler=" +
  1116. getCookie("loginName");
  1117. }
  1118. } else {
  1119. if (this.activeName == "first") {
  1120. this.option.requestUrl =
  1121. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saleType=1&con=" +
  1122. this.input +
  1123. "&startTime=" +
  1124. startTime +
  1125. "&endTime=" +
  1126. endTime +
  1127. "&i=" +
  1128. new Date();
  1129. } else if (this.activeName == "second") {
  1130. this.option2.requestUrl =
  1131. "/api/v1/ams/getSaleOrderReportedes?apiId=408&saleType=1&con=" +
  1132. this.input +
  1133. "&startTime=" +
  1134. startTime +
  1135. "&endTime=" +
  1136. endTime +
  1137. "&i=" +
  1138. new Date();
  1139. } else if (this.activeName == "four") {
  1140. this.option4.requestUrl =
  1141. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&saleType=1&shipperId=1&con=" +
  1142. this.input +
  1143. "&startTime=" +
  1144. startTime +
  1145. "&endTime=" +
  1146. endTime +
  1147. "&i=" +
  1148. new Date();
  1149. }
  1150. }
  1151. },
  1152. handleClose() {},
  1153. seeclick(saleOrderId) {
  1154. this.$router.push("/saleOrderDetail/" + saleOrderId);
  1155. },
  1156. btnclick() {
  1157. this.$router.push("/addSaleOrder");
  1158. },
  1159. click(saleOrderId) {
  1160. this.$router.push("/editSaleOrder/" + saleOrderId);
  1161. },
  1162. copyClick(saleOrderId) {
  1163. this.$router.push("/copySteelOrder/" + saleOrderId);
  1164. },
  1165. // 上传
  1166. uploadclick(saleOrderId) {
  1167. this.$confirm("是否上传", "提示", {
  1168. confirmButtonText: "确定",
  1169. cancelButtonText: "取消",
  1170. type: "warning",
  1171. center: true
  1172. })
  1173. .then(() => {
  1174. const loading = this.$loading({
  1175. lock: true,
  1176. text: "正在努力上传",
  1177. spinner: "el-icon-loading",
  1178. background: "rgba(0, 0, 0, 0.7)"
  1179. });
  1180. this.axios
  1181. .post("/api/v1/ams/uploadSaleOrder?saleOrderId=" + saleOrderId)
  1182. .then(res => {
  1183. if (res.data.code == "200") {
  1184. this.$message.success("上传成功!");
  1185. this.getRequestUrl();
  1186. loading.close();
  1187. } else {
  1188. this.$message.success("上传失败!");
  1189. this.getRequestUrl();
  1190. loading.close();
  1191. }
  1192. })
  1193. .catch(() => {
  1194. loading.close();
  1195. });
  1196. })
  1197. .catch(() => {
  1198. this.$message({
  1199. type: "info",
  1200. message: "取消上传!"
  1201. });
  1202. });
  1203. },
  1204. //删除
  1205. deleteclick(scope) {
  1206. let saleOrderId = scope;
  1207. this.$confirm("是否删除", "提示", {
  1208. confirmButtonText: "确定",
  1209. cancelButtonText: "取消",
  1210. type: "warning",
  1211. center: true
  1212. })
  1213. .then(() => {
  1214. this.axios
  1215. .post(
  1216. "/api/v1/ams/deleteAmsSaleOrderBySaleOrderId?saleOrderId=" +
  1217. saleOrderId
  1218. )
  1219. .then(res => {
  1220. if (res.data.code == "200") {
  1221. this.$message.success("删除成功");
  1222. this.getRequestUrl();
  1223. } else {
  1224. this.$message.success("删除失败");
  1225. this.getRequestUrl();
  1226. }
  1227. });
  1228. })
  1229. .catch(() => {
  1230. this.$message({
  1231. type: "info",
  1232. message: "取消删除!"
  1233. });
  1234. });
  1235. }
  1236. }
  1237. };
  1238. </script>
  1239. <style lang="scss" scoped>
  1240. .salePlan {
  1241. .top {
  1242. margin-left: 20px;
  1243. margin-top: 20px;
  1244. }
  1245. .table {
  1246. margin-left: 20px;
  1247. margin-top: 20px;
  1248. }
  1249. .btn {
  1250. display: flex;
  1251. justify-content: center;
  1252. align-items: center;
  1253. }
  1254. }
  1255. </style>