saleOrderSteel.vue 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276
  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. "海南瀚途贸易有限公司"
  261. ],
  262. option: {
  263. // 表格请求数据的地址
  264. requestUrl: "",
  265. selectionType: "select",
  266. comparison: "saleNumber",
  267. columnIndexs: [0, 1, 2, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
  268. },
  269. option2: {
  270. // 表格请求数据的地址
  271. requestUrl: "",
  272. comparison: "saleNumber",
  273. columnIndexs: [0, 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
  274. },
  275. option4: {
  276. // 表格请求数据的地址
  277. requestUrl: "",
  278. comparison: "saleNumber",
  279. columnIndexs: [
  280. 0,
  281. 1,
  282. 6,
  283. 7,
  284. 8,
  285. 9,
  286. 10,
  287. 11,
  288. 12,
  289. 13,
  290. 14,
  291. 15,
  292. 16,
  293. 17,
  294. 18,
  295. 20,
  296. 21,
  297. 22
  298. ]
  299. },
  300. option5: {
  301. // 表格请求数据的地址
  302. requestUrl: "",
  303. comparison: "saleNumber",
  304. columnIndexs: [
  305. 0,
  306. 6,
  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. this.option2.requestUrl =
  439. "/api/v1/ams/getSaleOrderReportedes?apiId=408&consigneeSsoId=" +
  440. getCookie("userId") +
  441. "&i=" +
  442. new Date();
  443. } else if (getCookie("orgCode") == "xiaoshouyewuyuan") {
  444. this.option.requestUrl =
  445. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saler=" +
  446. getCookie("loginName") +
  447. "&i=" +
  448. new Date();
  449. this.option2.requestUrl =
  450. "/api/v1/ams/getSaleOrderReportedes?apiId=408&saler=" +
  451. getCookie("loginName") +
  452. "&i=" +
  453. new Date();
  454. } else {
  455. this.option.requestUrl =
  456. "/api/v1/ams/getSaleOrderInfoes?apiId=408&consigneeSsoId=" +
  457. null +
  458. "&i=" +
  459. new Date();
  460. this.option2.requestUrl =
  461. "/api/v1/ams/getSaleOrderReportedes?apiId=408&consigneeSsoId=" +
  462. null +
  463. "&i=" +
  464. new Date();
  465. }
  466. let loadTime1 = new Date(
  467. new Date(new Date().toLocaleDateString()).getTime() +
  468. (3600 * 1000 * 8 - 1)
  469. ); // 当天8点前
  470. let loadTime2 = new Date(
  471. new Date(new Date().toLocaleDateString()).getTime() +
  472. (3600 * 1000 * 32 - 1)
  473. ); // 次天8点前
  474. if (new Date().getTime() - loadTime1 > 0) {
  475. this.saleDateOfReceipt = loadTime2;
  476. } else {
  477. this.saleDateOfReceipt = loadTime1;
  478. }
  479. },
  480. methods: {
  481. //导入Excel格式
  482. //导入excel
  483. importExcel(file) {
  484. let that = this;
  485. if (!file) {
  486. that.$message({
  487. message: "文件错误!",
  488. type: "warning"
  489. });
  490. return;
  491. }
  492. this.tableData = [];
  493. var reader = new FileReader();
  494. var data = null;
  495. var workbook = null;
  496. //设置读取操作
  497. reader.onload = function(e) {
  498. data = e.target.result;
  499. workbook = XLSX.read(data, {
  500. type: "binary"
  501. });
  502. let rows = XLSX.utils.sheet_to_json(
  503. workbook.Sheets[workbook.SheetNames[0]]
  504. ); //只取第一页
  505. console.log("rows", rows);
  506. Array.from(rows).forEach((e, index) => {
  507. let map = {};
  508. try {
  509. debugger;
  510. Object.keys(e).forEach(e1 => {
  511. if (e1.includes("销售订单编号")) {
  512. map.saleOrderNo = e[e1];
  513. }
  514. if (e1.includes("物资名称")) {
  515. map.materialName = e[e1];
  516. if (
  517. e[e1].includes("盘螺") ||
  518. e[e1].includes("乱尺") ||
  519. e[e1].includes("盘元") ||
  520. e[e1].includes("盘圆")
  521. ) {
  522. map.isPoundSale = 0;
  523. } else {
  524. map.isPoundSale = 1;
  525. }
  526. //确定更改的物资有无米数
  527. if (e[e1].includes("米")) {
  528. map.steelMeters = Number(e[e1].replace(/[^0.0-9.0]/gi, ""));
  529. } else {
  530. map.steelMeters = null;
  531. }
  532. }
  533. if (e1.includes("规格型号")) {
  534. console.log(e[e1]);
  535. let str = e[e1];
  536. let regex = /\((.+?)\)/g;
  537. if (str.match(regex) != null) {
  538. let spa = str.replace(str.match(regex)[0], "");
  539. let model = str
  540. .match(regex)[0]
  541. .replace("(", "")
  542. .replace(")", "");
  543. map.materialModel = model;
  544. if ((spa + "").includes("Φ")) {
  545. map.materialSpecification = spa;
  546. } else {
  547. map.materialSpecification = "Φ" + spa;
  548. }
  549. } else {
  550. map.materialSpecification = e[e1];
  551. map.model = null;
  552. }
  553. }
  554. if (e1.includes("下单客户")) {
  555. map.receiveName = e[e1];
  556. }
  557. if (
  558. e1.includes("米数") &&
  559. (map.steelMeters == null || map.steelMeters != "")
  560. ) {
  561. map.steelMeters = e[e1];
  562. }
  563. if (e1.includes("物资规格") && !e1.includes("规格型号")) {
  564. if ((e[e1] + "").includes("Φ")) {
  565. map.materialSpecification = e[e1];
  566. } else {
  567. map.materialSpecification = "Φ" + e[e1];
  568. }
  569. }
  570. if (e1.includes("物资型号") && !e1.includes("规格型号")) {
  571. map.materialModel = e[e1];
  572. }
  573. if (e1.includes("物资件数")) {
  574. if (isNumber(e[e1])) {
  575. map.materialNumber = e[e1];
  576. } else {
  577. throw new Error(
  578. `该Excel第--${index +
  579. 2}--行-“物资件数”错误,请核实后再输入(件数输入整数)`
  580. );
  581. }
  582. }
  583. if (e1.includes("车序号")) {
  584. if (typeof e[e1] != "undefined" && isNumber(e[e1])) {
  585. map.truckNo = e[e1];
  586. } else {
  587. throw new Error(
  588. `该Excel第--${index +
  589. 2}--行-“车序号”错误,请核实后再输入(车序号输入正整数)`
  590. );
  591. }
  592. }
  593. if (e1.includes("收款公司")) {
  594. if (that.receivingCompany.indexOf(e[e1]) === -1) {
  595. throw new Error(
  596. `该Excel第--${index + 2}--行-“收款公司”错误,请核实后再输入`
  597. );
  598. } else {
  599. map.saleOrderReceiveCustomer = e[e1];
  600. }
  601. }
  602. if (e1.includes("业务员")) {
  603. map.salerName = e[e1];
  604. }
  605. if (e1.includes("摘要")) {
  606. if (e[e1].includes("范围定尺")) {
  607. map.saleRemark = e[e1];
  608. } else {
  609. map.saleRemark = e[e1];
  610. }
  611. map.saleRemark = e[e1];
  612. let regex = /钢材.*组/g;
  613. if (e[e1].match(regex)) {
  614. map.saleArea = e[e1].match(regex)[0];
  615. }
  616. let regex1 = /范围.*米/g;
  617. if (e[e1].match(regex1)) {
  618. map.steelMeters = Number(
  619. e[e1].match(regex1)[0].match(/(\d+(\.\d+)?)/g)
  620. );
  621. }
  622. }
  623. if (e1.includes("省")) {
  624. map.province = e[e1];
  625. }
  626. if (e1.includes("市")) {
  627. map.district = e[e1];
  628. }
  629. if (e1.includes("县/区")) {
  630. map.town = e[e1];
  631. }
  632. if (e1.includes("具体收货地址")) {
  633. map.place = e[e1];
  634. }
  635. if (e1.includes("收货客户电话")) {
  636. map.saleOrderConsigneeTel = e[e1];
  637. }
  638. if (e1.includes("备注")) {
  639. map.truckRemark = e[e1];
  640. }
  641. if (e1.includes("是否自提")) {
  642. if (e[e1] === "是" || e[e1] === "否") {
  643. map.isSelfMention = e[e1];
  644. } else {
  645. map.isSelfMention = "否";
  646. }
  647. }
  648. });
  649. map.shipperName = that.shipperName;
  650. if (typeof map.isSelfMention === "undefined") {
  651. map.isSelfMention = "否";
  652. }
  653. if (map.saleRemark && map.receiveName && map.materialName) {
  654. that.tableData.push(map);
  655. }
  656. } catch (e) {
  657. that.$message.error(e.message);
  658. }
  659. });
  660. console.log(this.tableData);
  661. that.addExcelInport();
  662. // that.dialogTableVisible = true;
  663. return;
  664. };
  665. reader.readAsBinaryString(file.raw); //以二进制方式读取
  666. },
  667. //自己写一个比较函数排序
  668. // 排序
  669. compare(property) {
  670. return function(a, b) {
  671. var value1 = a[property];
  672. var value2 = b[property];
  673. return value2 - value1;
  674. };
  675. },
  676. addExcelInport() {
  677. //加载虚拟
  678. const loading = this.$loading({
  679. lock: true,
  680. text: "正在快马加鞭为您生成销售订单,请稍候",
  681. spinner: "el-icon-loading",
  682. background: "rgba(0, 0, 0, 0.7)"
  683. });
  684. console.log(this.tableData);
  685. debugger;
  686. //遍历数组,根据摘要和下单客户自动给出销售订单编号
  687. for (let i = 0; i < this.tableData.length; i++) {
  688. if (i === 0) {
  689. this.tableData[i].saleOrderNo = 1;
  690. } else {
  691. let sortArr = this.tableData
  692. .filter(e => {
  693. return (
  694. typeof e.saleOrderNo != "undefined" &&
  695. e.saleOrderNo != "undefined" &&
  696. isNumber(e.saleOrderNo)
  697. );
  698. })
  699. .map(e => {
  700. if (
  701. typeof e.saleOrderNo != "undefined" &&
  702. e.saleOrderNo != "undefined" &&
  703. isNumber(e.saleOrderNo)
  704. ) {
  705. return e.saleOrderNo;
  706. }
  707. })
  708. .sort((a, b) => {
  709. return a - b;
  710. });
  711. //当大于0的时候,需要遍历整个数组,与之相等的有哪些
  712. for (let j = 0; j < i; j++) {
  713. if (
  714. this.tableData[i].saleRemark === this.tableData[j].saleRemark &&
  715. this.tableData[i].receiveName === this.tableData[j].receiveName &&
  716. this.tableData[i].saleOrderReceiveCustomer ===
  717. this.tableData[j].saleOrderReceiveCustomer
  718. ) {
  719. this.tableData[i].saleOrderNo = this.tableData[j].saleOrderNo;
  720. break;
  721. } else {
  722. if (j == i - 1) {
  723. this.tableData[i].saleOrderNo = sortArr[sortArr.length - 1] + 1;
  724. }
  725. }
  726. }
  727. }
  728. }
  729. // this.tableData = this.tableData.sort(this.compare("saleOrderNo"));
  730. // debugger;
  731. //需要遍历数组,以销售订单编号为分类
  732. const map1 = this.tableData.reduce((result, item) => {
  733. result[item.saleOrderNo] = result[item.saleOrderNo] || [];
  734. result[item.saleOrderNo].push(item);
  735. return result;
  736. }, {});
  737. // result即为所求
  738. let result = Object.values(map1);
  739. console.log(result);
  740. //遍历数组
  741. let saleOrderListMap = [];
  742. result.forEach((saleOrderList, index) => {
  743. let map = {};
  744. let arr = [];
  745. console.log("saleOrderList");
  746. console.log(saleOrderList);
  747. saleOrderList.forEach(e => {
  748. let mapMaterial = {};
  749. Object.keys(e).forEach(e1 => {
  750. if (this.saleOrderList.includes(e1)) {
  751. map[e1] = e[e1];
  752. }
  753. if (this.saleOrderMapList.includes(e1)) {
  754. mapMaterial[e1] = e[e1];
  755. }
  756. });
  757. mapMaterial.saleDateOfReceipt = sjTime(this.saleDateOfReceipt);
  758. arr.push(mapMaterial);
  759. });
  760. map.shipperId = 1;
  761. map.mapList = arr;
  762. saleOrderListMap.push(map);
  763. });
  764. console.log(saleOrderListMap);
  765. this.axios
  766. .post("/api/v1/ams/addSteelSaleOrderList", saleOrderListMap)
  767. .then(res => {
  768. if (res.data.code == "200") {
  769. loading.close();
  770. this.getRequestUrl();
  771. this.$message.success("新增销售订单成功!");
  772. this.tableData = [];
  773. } else {
  774. this.$message.error(res.data.data);
  775. this.getRequestUrl();
  776. loading.close();
  777. this.tableData = [];
  778. }
  779. })
  780. .catch(e => {
  781. this.$message.error("生成错误!");
  782. loading.close();
  783. this.tableData = [];
  784. });
  785. },
  786. adverseCloseSaleOrder(row) {
  787. console.log(row);
  788. this.$confirm("确定反关闭整条订单吗?", "继续?", {
  789. cancelButtonText: "取消",
  790. confirmButtonText: "确定",
  791. center: true
  792. }).then(() => {
  793. this.axios
  794. .post(
  795. "/api/v1/ams/adverseCloseSaleOrder?saleOrderId=" + row.saleOrderId
  796. )
  797. .then(res => {
  798. if (res.data.code == "200") {
  799. this.$message.success("反关闭成功");
  800. this.getRequestUrl();
  801. } else {
  802. this.$message.error("反关闭失败");
  803. this.getRequestUrl();
  804. }
  805. })
  806. .catch(() => {
  807. this.$message.error("反关闭失败");
  808. });
  809. });
  810. },
  811. updateReportedSaleOrder(scope) {
  812. this.$router.push("/editSaleOrder/" + scope.row.saleOrderId);
  813. },
  814. updateSaleOrderStatusById(scope) {
  815. console.log(scope.row.saleOrderId);
  816. this.$confirm("是否撤销", "警告", {
  817. confirmButtonText: "确定撤销",
  818. cancelButtonText: "取消撤销",
  819. type: "warning",
  820. center: true
  821. })
  822. .then(() => {
  823. this.axios
  824. .post(
  825. "/api/v1/uc/updateSaleOrderStatusById?saleOrderId=" +
  826. scope.row.saleOrderId
  827. )
  828. .then(res => {
  829. if (res.data.code == "200") {
  830. this.$message.success("撤销成功");
  831. this.activeName = "first";
  832. this.getRequestUrl();
  833. } else {
  834. this.$message.error("撤销失败");
  835. }
  836. })
  837. .catch(() => {
  838. this.$message.error("撤销失败");
  839. });
  840. })
  841. .catch(() => {
  842. console.log("取消撤销");
  843. });
  844. },
  845. func(res) {
  846. this.matSum = res.list.reduce(function(prev, item) {
  847. return prev + item.materialNumber;
  848. }, 0);
  849. },
  850. func1(res) {
  851. this.matSum = res.list.reduce(function(prev, item) {
  852. return prev + item.materialNumber;
  853. }, 0);
  854. },
  855. func2(res) {
  856. this.matSum = res.list.reduce(function(prev, item) {
  857. return prev + item.materialNumber;
  858. }, 0);
  859. },
  860. func3(res) {
  861. this.matSum = res.list.reduce(function(prev, item) {
  862. return prev + item.materialNumber;
  863. }, 0);
  864. },
  865. closeSteelOrderAndEas(row) {
  866. this.$prompt("此操作将同步关闭金蝶和物流的销售订单,是否继续?", "提示", {
  867. confirmButtonText: "确定",
  868. cancelButtonText: "取消",
  869. inputPlaceholder: "请输入关闭原因-必填!!!",
  870. center: true,
  871. type: "warning"
  872. })
  873. .then(({ value }) => {
  874. if (value != null) {
  875. let mapValue = {
  876. number: row.saleNumber,
  877. saleOrderId: row.saleOrderId,
  878. reason: value
  879. };
  880. console.log(mapValue);
  881. this.axios
  882. .post("/api/v1/ams/deleteSaleOrderSame", mapValue)
  883. .then(res => {
  884. if (res.data.code == 200) {
  885. this.$message.success("关闭成功");
  886. this.getRequestUrl();
  887. } else {
  888. this.$message.error("关闭失败,请联系管理员");
  889. }
  890. })
  891. .catch(() => {
  892. this.$message.error("关闭失败,请联系管理员");
  893. this.getRequestUrl();
  894. });
  895. } else {
  896. this.$message.error("请输入理由");
  897. }
  898. })
  899. .catch(() => {
  900. this.$message({
  901. type: "info",
  902. message: "取消输入"
  903. });
  904. });
  905. },
  906. deleteSaleOrder(row) {
  907. console.log(row);
  908. this.$prompt("此操作将关闭订单且下面的待运输订单,是否继续?", "提示", {
  909. confirmButtonText: "确定",
  910. cancelButtonText: "取消",
  911. inputPlaceholder: "请输入关闭原因-必填!!!",
  912. center: true,
  913. type: "warning"
  914. })
  915. .then(({ value }) => {
  916. if (value != null) {
  917. let mapValue = {
  918. number: row.saleNumber,
  919. saleOrderId: row.saleOrderId,
  920. reason: value
  921. };
  922. this.axios
  923. .post(
  924. "/api/v1/ams/deleteSaleOrderById?saleOrderId=" + row.saleOrderId
  925. )
  926. .then(res => {
  927. if (res.data.code == 200) {
  928. this.$message.success("关闭成功");
  929. this.getRequestUrl();
  930. }
  931. });
  932. } else {
  933. this.$message.error("请输入理由");
  934. }
  935. })
  936. .catch(() => {
  937. this.$message({
  938. type: "info",
  939. message: "取消输入"
  940. });
  941. });
  942. },
  943. updateSaleOrder(row) {
  944. console.log(row);
  945. this.$router.push(
  946. "updateSaleOrderSteel/" + row.saleOrderId + "/" + row.deleted
  947. );
  948. },
  949. getOrderDetails(saleOrderId) {
  950. console.log(saleOrderId);
  951. this.$router.push("saleOrderOODetails/" + saleOrderId);
  952. },
  953. getRequestUrl() {
  954. if (getCookie("orgCode") == "shouhuokehu") {
  955. this.option.requestUrl =
  956. "/api/v1/ams/getSaleOrderInfoes?apiId=408&consigneeSsoId=" +
  957. getCookie("userId") +
  958. "&i=" +
  959. new Date();
  960. this.option2.requestUrl =
  961. "/api/v1/ams/getSaleOrderReportedes?apiId=408&consigneeSsoId=" +
  962. getCookie("userId") +
  963. "&i=" +
  964. new Date();
  965. this.option4.requestUrl =
  966. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&shipperId=1&saleType=1&consigneeSsoId=" +
  967. getCookie("userId") +
  968. "&i=" +
  969. new Date();
  970. this.option5.requestUrl =
  971. "/api/v1/ams/getSteelOrderDeletedList?apiId=409&consigneeSsoId=" +
  972. getCookie("userId") +
  973. "&i=" +
  974. new Date();
  975. } else if (getCookie("orgCode") == "xiaoshouyewuyuan") {
  976. this.option.requestUrl =
  977. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saler=" +
  978. getCookie("loginName") +
  979. "&i=" +
  980. new Date();
  981. this.option2.requestUrl =
  982. "/api/v1/ams/getSaleOrderReportedes?apiId=408&saler=" +
  983. getCookie("loginName") +
  984. "&i=" +
  985. new Date();
  986. this.option4.requestUrl =
  987. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&shipperId=1&saleType=1&saler=" +
  988. getCookie("loginName") +
  989. "&i=" +
  990. new Date();
  991. this.option5.requestUrl =
  992. "/api/v1/ams/getSteelOrderDeletedList?apiId=409&saler=" +
  993. getCookie("loginName");
  994. } else {
  995. this.option.requestUrl =
  996. "/api/v1/ams/getSaleOrderInfoes?apiId=408&consigneeSsoId=" +
  997. null +
  998. "&i=" +
  999. new Date();
  1000. this.option2.requestUrl =
  1001. "/api/v1/ams/getSaleOrderReportedes?apiId=408&consigneeSsoId=" +
  1002. null +
  1003. "&i=" +
  1004. new Date();
  1005. this.option4.requestUrl =
  1006. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&shipperId=1&saleType=1&consigneeSsoId=" +
  1007. null +
  1008. "&i=" +
  1009. new Date();
  1010. this.option5.requestUrl =
  1011. "/api/v1/ams/getSteelOrderDeletedList?apiId=409&consigneeSsoId=" +
  1012. null +
  1013. "&i=" +
  1014. new Date();
  1015. }
  1016. },
  1017. batchReport() {
  1018. if (this.batchReportList.length === 0) {
  1019. this.$message.error("请先选择需要批量上传的销售订单");
  1020. return;
  1021. }
  1022. const loading = this.$loading({
  1023. lock: true,
  1024. text: "正在努力上传",
  1025. spinner: "el-icon-loading",
  1026. background: "rgba(0, 0, 0, 0.7)"
  1027. });
  1028. this.axios
  1029. .post("/api/v1/ams/uploadSaleOrderList", this.batchReportList)
  1030. .then(res => {
  1031. if (res.data.code == "200") {
  1032. this.$message.success("上传成功");
  1033. this.getRequestUrl();
  1034. loading.close();
  1035. } else {
  1036. this.$message.error("上传失败");
  1037. loading.close();
  1038. }
  1039. })
  1040. .catch(() => {
  1041. this.$message.error("上传失败");
  1042. loading.close();
  1043. });
  1044. },
  1045. selectionChange(selection) {
  1046. console.log(selection);
  1047. this.batchReportList = [];
  1048. this.batchReportList = selection;
  1049. },
  1050. refresh() {
  1051. this.getRequestUrl();
  1052. },
  1053. handleClick(tab, event) {
  1054. console.log(tab, event);
  1055. },
  1056. onclick() {
  1057. var startTime = null;
  1058. var endTime = null;
  1059. if (this.startTime && this.endTime) {
  1060. startTime = sjTime(this.startTime);
  1061. endTime = sjTime(this.endTime);
  1062. }
  1063. if (getCookie("orgCode") == "shouhuokehu") {
  1064. if (this.activeName == "first") {
  1065. this.option.requestUrl =
  1066. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saleType=1&con=" +
  1067. this.input +
  1068. "&consigneeSsoId=" +
  1069. getCookie("userId") +
  1070. "&startTime=" +
  1071. startTime +
  1072. "&endTime=" +
  1073. endTime +
  1074. "&i=" +
  1075. new Date();
  1076. } else if (this.activeName == "second") {
  1077. this.option2.requestUrl =
  1078. "/api/v1/ams/getSaleOrderReportedes?apiId=408&saleType=1&con=" +
  1079. this.input +
  1080. "&consigneeSsoId=" +
  1081. getCookie("userId") +
  1082. "&startTime=" +
  1083. startTime +
  1084. "&endTime=" +
  1085. endTime +
  1086. "&i=" +
  1087. new Date();
  1088. } else if (this.activeName == "four") {
  1089. this.option4.requestUrl =
  1090. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&saleType=1&shipperId=1&con=" +
  1091. this.input +
  1092. "&consigneeSsoId=" +
  1093. getCookie("userId") +
  1094. "&startTime=" +
  1095. startTime +
  1096. "&endTime=" +
  1097. endTime +
  1098. "&i=" +
  1099. new Date();
  1100. }
  1101. } else if (getCookie("orgCode") == "xiaoshouyewuyuan") {
  1102. if (this.activeName == "first") {
  1103. this.option.requestUrl =
  1104. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saleType=1&con=" +
  1105. this.input +
  1106. "&startTime=" +
  1107. startTime +
  1108. "&endTime=" +
  1109. endTime +
  1110. "&i=" +
  1111. new Date() +
  1112. "saler=" +
  1113. getCookie("loginName");
  1114. } else if (this.activeName == "second") {
  1115. this.option2.requestUrl =
  1116. "/api/v1/ams/getSaleOrderReportedes?apiId=408&saleType=1&con=" +
  1117. this.input +
  1118. "&startTime=" +
  1119. startTime +
  1120. "&endTime=" +
  1121. endTime +
  1122. "&i=" +
  1123. new Date() +
  1124. "saler=" +
  1125. getCookie("loginName");
  1126. } else if (this.activeName == "four") {
  1127. this.option4.requestUrl =
  1128. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&saleType=1&shipperId=1&con=" +
  1129. this.input +
  1130. "&startTime=" +
  1131. startTime +
  1132. "&endTime=" +
  1133. endTime +
  1134. "&i=" +
  1135. new Date() +
  1136. "saler=" +
  1137. getCookie("loginName");
  1138. }
  1139. } else {
  1140. if (this.activeName == "first") {
  1141. this.option.requestUrl =
  1142. "/api/v1/ams/getSaleOrderInfoes?apiId=408&saleType=1&con=" +
  1143. this.input +
  1144. "&startTime=" +
  1145. startTime +
  1146. "&endTime=" +
  1147. endTime +
  1148. "&i=" +
  1149. new Date();
  1150. } else if (this.activeName == "second") {
  1151. this.option2.requestUrl =
  1152. "/api/v1/ams/getSaleOrderReportedes?apiId=408&saleType=1&con=" +
  1153. this.input +
  1154. "&startTime=" +
  1155. startTime +
  1156. "&endTime=" +
  1157. endTime +
  1158. "&i=" +
  1159. new Date();
  1160. } else if (this.activeName == "four") {
  1161. this.option4.requestUrl =
  1162. "/api/v1/ams/getSaleOrderListBySaleCompanyes?apiId=409&saleType=1&shipperId=1&con=" +
  1163. this.input +
  1164. "&startTime=" +
  1165. startTime +
  1166. "&endTime=" +
  1167. endTime +
  1168. "&i=" +
  1169. new Date();
  1170. }
  1171. }
  1172. },
  1173. handleClose() {},
  1174. seeclick(saleOrderId) {
  1175. this.$router.push("/saleOrderDetail/" + saleOrderId);
  1176. },
  1177. btnclick() {
  1178. this.$router.push("/addSaleOrder");
  1179. },
  1180. click(saleOrderId) {
  1181. this.$router.push("/editSaleOrder/" + saleOrderId);
  1182. },
  1183. copyClick(saleOrderId) {
  1184. this.$router.push("/copySteelOrder/" + saleOrderId);
  1185. },
  1186. // 上传
  1187. uploadclick(saleOrderId) {
  1188. this.$confirm("是否上传", "提示", {
  1189. confirmButtonText: "确定",
  1190. cancelButtonText: "取消",
  1191. type: "warning",
  1192. center: true
  1193. })
  1194. .then(() => {
  1195. const loading = this.$loading({
  1196. lock: true,
  1197. text: "正在努力上传",
  1198. spinner: "el-icon-loading",
  1199. background: "rgba(0, 0, 0, 0.7)"
  1200. });
  1201. this.axios
  1202. .post("/api/v1/ams/uploadSaleOrder?saleOrderId=" + saleOrderId)
  1203. .then(res => {
  1204. if (res.data.code == "200") {
  1205. this.$message.success("上传成功!");
  1206. this.getRequestUrl();
  1207. loading.close();
  1208. } else {
  1209. this.$message.success("上传失败!");
  1210. this.getRequestUrl();
  1211. loading.close();
  1212. }
  1213. })
  1214. .catch(() => {
  1215. loading.close();
  1216. });
  1217. })
  1218. .catch(() => {
  1219. this.$message({
  1220. type: "info",
  1221. message: "取消上传!"
  1222. });
  1223. });
  1224. },
  1225. //删除
  1226. deleteclick(scope) {
  1227. let saleOrderId = scope;
  1228. this.$confirm("是否删除", "提示", {
  1229. confirmButtonText: "确定",
  1230. cancelButtonText: "取消",
  1231. type: "warning",
  1232. center: true
  1233. })
  1234. .then(() => {
  1235. this.axios
  1236. .post(
  1237. "/api/v1/ams/deleteAmsSaleOrderBySaleOrderId?saleOrderId=" +
  1238. saleOrderId
  1239. )
  1240. .then(res => {
  1241. if (res.data.code == "200") {
  1242. this.$message.success("删除成功");
  1243. this.getRequestUrl();
  1244. } else {
  1245. this.$message.success("删除失败");
  1246. this.getRequestUrl();
  1247. }
  1248. });
  1249. })
  1250. .catch(() => {
  1251. this.$message({
  1252. type: "info",
  1253. message: "取消删除!"
  1254. });
  1255. });
  1256. }
  1257. }
  1258. };
  1259. </script>
  1260. <style lang="scss" scoped>
  1261. .salePlan {
  1262. .top {
  1263. margin-left: 20px;
  1264. margin-top: 20px;
  1265. }
  1266. .table {
  1267. margin-left: 20px;
  1268. margin-top: 20px;
  1269. }
  1270. .btn {
  1271. display: flex;
  1272. justify-content: center;
  1273. align-items: center;
  1274. }
  1275. }
  1276. </style>