saleOrderSteel.vue 39 KB

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