detailsStatement.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853
  1. <!-- 计费账单 -->
  2. <template>
  3. <div id="detailsStatement">
  4. <div class="top">
  5. <el-form :inline="true">
  6. <el-form-item>
  7. <el-input v-model="shipName" placeholder="请输入船名"></el-input>
  8. </el-form-item>
  9. <!-- <el-form-item>
  10. <span class="demonstration">离港日期</span>
  11. <el-date-picker
  12. v-model="startTime"
  13. type="date"
  14. placeholder="选择日期"
  15. style="width:200px"
  16. >
  17. </el-date-picker>
  18. <span>至</span>
  19. <el-date-picker
  20. v-model="endTime"
  21. type="date"
  22. placeholder="选择日期"
  23. style="width:200px"
  24. >
  25. </el-date-picker>
  26. </el-form-item> -->
  27. <el-form-item>
  28. <el-button @click="onClick" type="primary" icon="el-icon-search">查询</el-button>
  29. </el-form-item>
  30. <el-form-item>
  31. <el-button type="primary" @click="exportAllReportToExcel"
  32. ><i class="el-icon-download"></i>Excel</el-button
  33. >
  34. </el-form-item>
  35. <!-- <el-form-item>
  36. <span class="totalWillTonage">合计已预开票吨位</span>
  37. <el-input
  38. v-model="totalWillTonageedValue"
  39. disabled
  40. style="width:80px"
  41. ></el-input>
  42. </el-form-item>
  43. <el-form-item>
  44. <span class="totalWillTonage">合计已预开金额</span>
  45. <el-input
  46. v-model="totalWillTonageedMoney"
  47. disabled
  48. style="width:80px"
  49. ></el-input>
  50. </el-form-item>
  51. <el-form-item>
  52. <span class="totalWillTonage">合计本次实际开票吨位</span>
  53. <el-input
  54. v-model="totalActuallyTonageedValue"
  55. disabled
  56. style="width:80px"
  57. ></el-input>
  58. </el-form-item>
  59. <el-form-item>
  60. <span class="totalWillTonage">合计本月实际开票金额</span>
  61. <el-input
  62. v-model="totalActuallyTonageedMoney"
  63. disabled
  64. style="width:80px"
  65. ></el-input>
  66. </el-form-item> -->
  67. </el-form>
  68. </div>
  69. <div class="main">
  70. <el-tabs v-model="activeName" @tab-click="handleClick">
  71. <el-tab-pane label="未结算" name="first">
  72. <el-table
  73. :data="tableData"
  74. ref="tableRef"
  75. border
  76. style="width: 100%; margin-top: 0px"
  77. max-height="500px"
  78. :row-style="{ height: '30px' }"
  79. :cell-style="{ fontWeight: '700' }"
  80. class="table"
  81. :span-method="objectSpanMethod"
  82. >
  83. <el-table-column
  84. prop="index"
  85. width="50"
  86. label="序号"
  87. align="center"
  88. :resizable="false"
  89. >
  90. <template slot-scope="scope">{{ scope.row.group + 1 }}</template>
  91. </el-table-column>
  92. <el-table-column
  93. prop="materialName"
  94. label="品种"
  95. width="120px"
  96. align="center"
  97. >
  98. </el-table-column>
  99. <el-table-column
  100. prop="resultForeignShipName"
  101. label="船名"
  102. width="100px"
  103. align="center"
  104. >
  105. </el-table-column>
  106. <el-table-column
  107. prop="portName"
  108. label="放货港口"
  109. width="120px"
  110. align="center"
  111. >
  112. </el-table-column>
  113. <!-- <el-table-column
  114. prop="carrierName"
  115. label="承运单位"
  116. width="100px"
  117. align="center"
  118. >
  119. </el-table-column> -->
  120. <el-table-column
  121. prop="resultOutPortTime"
  122. label="离港日期"
  123. width="100px"
  124. align="center"
  125. >
  126. </el-table-column>
  127. <el-table-column
  128. prop="monthLoadTonnage"
  129. label="月份装船吨位"
  130. width="100px"
  131. align="center"
  132. >
  133. <template slot-scope="scope" v-if="scope.row.unitPriceId">
  134. {{(scope.row.monthLoadTonnage).toFixed(2)}}
  135. </template>
  136. </el-table-column>
  137. <el-table-column
  138. prop="monthLoadingProportion"
  139. label="月份装船比例"
  140. width="70px"
  141. align="center"
  142. >
  143. <template slot-scope="scope" v-if="scope.row.unitPriceId">
  144. {{(scope.row.monthLoadingProportion*100).toFixed(2)}}%
  145. </template>
  146. </el-table-column>
  147. <el-table-column
  148. prop="monthRealTonnage"
  149. label="月份结算吨位"
  150. width="100px"
  151. align="center"
  152. >
  153. <template slot-scope="scope">
  154. {{(scope.row.monthRealTonnage).toFixed(2)}}
  155. </template>
  156. </el-table-column>
  157. <el-table-column
  158. prop="monthMakeTonnage"
  159. label="月份开票吨位"
  160. width="100px"
  161. align="center"
  162. >
  163. <template slot-scope="scope">
  164. {{(scope.row.monthMakeTonnage).toFixed(2)}}
  165. </template>
  166. </el-table-column>
  167. <el-table-column
  168. prop="totalEnTonnage"
  169. label="到厂湿吨"
  170. width="120px"
  171. align="center"
  172. >
  173. <template slot-scope="scope">
  174. <el-input type="number" v-model="scope.row.totalEnTonnage"></el-input>
  175. </template>
  176. </el-table-column>
  177. <el-table-column
  178. prop="unitPrice"
  179. label="合同单价"
  180. width="100px"
  181. align="center"
  182. >
  183. </el-table-column>
  184. <el-table-column
  185. prop="inspectionFees"
  186. label="水分检测费"
  187. width="120px"
  188. align="center"
  189. >
  190. <template slot-scope="scope">
  191. <el-input type="number" v-model="scope.row.inspectionFees"></el-input>
  192. </template>
  193. </el-table-column>
  194. <el-table-column
  195. prop="totalPreviewTonnage"
  196. label="已预开总吨位"
  197. width="120px"
  198. align="center"
  199. >
  200. <template slot-scope="scope">
  201. <el-input type="number" v-model="scope.row.totalPreviewTonnage"></el-input>
  202. </template>
  203. </el-table-column>
  204. <el-table-column
  205. prop="totalPreviewFee"
  206. label="已预开总金额"
  207. width="120px"
  208. align="center"
  209. >
  210. <template slot-scope="scope" v-if="scope.row.totalPreviewFee">
  211. {{(scope.row.totalPreviewFee).toFixed(2)}}
  212. </template>
  213. </el-table-column>
  214. <el-table-column
  215. prop="statementTotalAmount"
  216. label="总计开票金额"
  217. width="100px"
  218. align="center"
  219. >
  220. </el-table-column>
  221. <el-table-column
  222. prop="capacityNumber"
  223. label="江船"
  224. width="100px"
  225. align="center"
  226. >
  227. </el-table-column>
  228. <el-table-column
  229. prop="loadTonnage"
  230. label="装船吨位"
  231. width="100px"
  232. align="center"
  233. >
  234. </el-table-column>
  235. <el-table-column
  236. prop="loadingProportion"
  237. label="装船比例"
  238. width="70px"
  239. align="center"
  240. >
  241. <template slot-scope="scope">
  242. {{(scope.row.loadingProportion*100).toFixed(2)}}%
  243. </template>
  244. </el-table-column>
  245. <el-table-column
  246. prop="realTonnage"
  247. label="结算吨位"
  248. width="100px"
  249. align="center"
  250. >
  251. <template slot-scope="scope" v-if="scope.row.realTonnage">
  252. {{(scope.row.realTonnage).toFixed(2)}}
  253. </template>
  254. </el-table-column>
  255. <el-table-column
  256. prop="fee"
  257. label="水运费"
  258. width="100px"
  259. align="center"
  260. >
  261. <template slot-scope="scope" v-if="scope.row.fee">
  262. {{(scope.row.fee).toFixed(2)}}
  263. </template>
  264. </el-table-column>
  265. <el-table-column
  266. prop="previewTonnage"
  267. label="已预开票吨位"
  268. width="120px"
  269. align="center"
  270. >
  271. <template slot-scope="scope" v-if="scope.row.previewTonnage">
  272. {{(scope.row.previewTonnage).toFixed(2)}}
  273. </template>
  274. </el-table-column>
  275. <el-table-column
  276. prop="previewFee"
  277. label="已预开票金额"
  278. width="100px"
  279. align="center"
  280. >
  281. <template slot-scope="scope" v-if="scope.row.previewFee">
  282. {{(scope.row.previewFee).toFixed(2)}}
  283. </template>
  284. </el-table-column>
  285. <el-table-column
  286. prop="makeTonnage"
  287. label="实际开票吨位"
  288. width="100px"
  289. align="center"
  290. >
  291. <template slot-scope="scope" v-if="scope.row.makeTonnage">
  292. {{(scope.row.makeTonnage).toFixed(2)}}
  293. </template>
  294. </el-table-column>
  295. <el-table-column
  296. prop="actuallyMoney"
  297. label="实际开票金额"
  298. width="100px"
  299. align="center"
  300. >
  301. <template slot-scope="scope" v-if="scope.row.actuallyMoney">
  302. {{(scope.row.actuallyMoney).toFixed(2)}}
  303. </template>
  304. </el-table-column>
  305. <!-- <el-table-column
  306. prop="feeMake"
  307. label="本月实际开票金额"
  308. align="center"
  309. >
  310. </el-table-column> -->
  311. <el-table-column
  312. prop="operate"
  313. label="操作"
  314. width="100px"
  315. align="center"
  316. fixed="right"
  317. >
  318. <template slot-scope="scope">
  319. <el-button type="text" @click="operate(scope.row)"
  320. >预开票</el-button
  321. >
  322. <el-button type="text" @click="settlement(scope.row)"
  323. >结算</el-button
  324. >
  325. </template>
  326. </el-table-column>
  327. </el-table>
  328. </el-tab-pane>
  329. <el-tab-pane label="已结算" name="second">
  330. <el-table
  331. :data="tableData1"
  332. ref="tableRef1"
  333. border
  334. max-height="600px"
  335. :row-style="{ height: '30px' }"
  336. :cell-style="{ fontWeight: '700' }"
  337. class="table"
  338. :span-method="objectSpanMethod1"
  339. >
  340. <el-table-column
  341. prop="index"
  342. width="50"
  343. label="序号"
  344. align="center"
  345. :resizable="false"
  346. >
  347. <template slot-scope="scope">{{ scope.row.group + 1 }}</template>
  348. </el-table-column>
  349. <el-table-column
  350. prop="materialName"
  351. label="品种"
  352. width="150px"
  353. align="center"
  354. >
  355. </el-table-column>
  356. <el-table-column
  357. prop="resultForeignShipName"
  358. label="船名"
  359. width="150px"
  360. align="center"
  361. >
  362. </el-table-column>
  363. <el-table-column
  364. prop="portName"
  365. label="放货港口"
  366. width="150px"
  367. align="center"
  368. >
  369. </el-table-column>
  370. <el-table-column
  371. prop="totalPreviewTonnage"
  372. label="已预开总吨位"
  373. width="120px"
  374. align="center"
  375. >
  376. <template slot-scope="scope" v-if="scope.row.totalPreviewTonnage">
  377. {{(scope.row.totalPreviewTonnage).toFixed(2)}}
  378. </template>
  379. </el-table-column>
  380. <el-table-column
  381. prop="totalPreviewFee"
  382. label="已预开总金额"
  383. width="120px"
  384. align="center"
  385. >
  386. <template slot-scope="scope" v-if="scope.row.totalPreviewFee">
  387. {{(scope.row.totalPreviewFee).toFixed(2)}}
  388. </template>
  389. </el-table-column>
  390. <el-table-column
  391. prop="makeTonnageTotal"
  392. label="开票总吨位"
  393. width="100px"
  394. align="center"
  395. >
  396. </el-table-column>
  397. <el-table-column
  398. prop="statementTotalAmount"
  399. label="开票总金额"
  400. width="100px"
  401. align="center"
  402. >
  403. </el-table-column>
  404. <el-table-column
  405. prop="resultOutPortTime"
  406. label="离港日期"
  407. width="200px"
  408. align="center"
  409. >
  410. </el-table-column>
  411. <el-table-column
  412. prop="loadTonnage"
  413. label="装船吨位"
  414. width="100px"
  415. align="center"
  416. >
  417. </el-table-column>
  418. <el-table-column
  419. prop="loadingProportion"
  420. label="装船比例"
  421. width="100px"
  422. align="center"
  423. >
  424. <template slot-scope="scope">
  425. {{(scope.row.loadingProportion*100).toFixed(2)}}%
  426. </template>
  427. </el-table-column>
  428. <el-table-column
  429. prop="inspectionFees"
  430. label="水分检测费"
  431. width="100px"
  432. align="center"
  433. >
  434. </el-table-column>
  435. <el-table-column
  436. prop="realTonnage"
  437. label="结算吨位"
  438. width="100px"
  439. align="center"
  440. >
  441. </el-table-column>
  442. <el-table-column
  443. prop="unitPrice"
  444. label="合同单价"
  445. width="100px"
  446. align="center"
  447. >
  448. </el-table-column>
  449. <el-table-column
  450. prop="fee"
  451. label="金额(元)"
  452. width="100px"
  453. align="center"
  454. >
  455. </el-table-column>
  456. <el-table-column
  457. prop="previewTonnage"
  458. label="已预开票吨位"
  459. width="100px"
  460. align="center"
  461. >
  462. </el-table-column>
  463. <el-table-column
  464. prop="previewFee"
  465. label="已预开票金额"
  466. width="100px"
  467. align="center"
  468. >
  469. </el-table-column>
  470. <el-table-column
  471. prop="makeTonnage"
  472. label="实际开票吨位"
  473. width="100px"
  474. align="center"
  475. >
  476. </el-table-column>
  477. <el-table-column
  478. prop="feeMake"
  479. label="实际开票金额"
  480. width="100px"
  481. align="center"
  482. >
  483. </el-table-column>
  484. </el-table>
  485. </el-tab-pane>
  486. </el-tabs>
  487. </div>
  488. </div>
  489. </template>
  490. <script>
  491. import { getCookie } from "@/utils/util.js";
  492. import { sjTime } from "@/utils/sharedJsFile";
  493. import BigNumber, {bigNumber} from "bignumber.js"
  494. export default {
  495. data() {
  496. return {
  497. totalWillTonageedValue: 0,
  498. totalWillTonageedMoney: 0,
  499. totalActuallyTonageedMoney: 0,
  500. totalActuallyTonageedValue: 0,
  501. shipName: null,
  502. tableData: [],
  503. tableData1: [],
  504. spanArr: [],
  505. spanArr1: [],
  506. pos: null,
  507. mergeList: [
  508. "index",
  509. "carrierName",
  510. "portName",
  511. "resultForeignShipName",
  512. "materialName",
  513. "totalEnTonnage",
  514. "operate",
  515. "statementTotalAmount",
  516. "makeTonnageTotal",
  517. "monthLoadTonnage",
  518. "monthLoadingProportion",
  519. "monthRealTonnage",
  520. "totalPreviewTonnage",
  521. "monthMakeTonnage",
  522. "totalPreviewFee"
  523. ],
  524. activeName: "first",
  525. tableTitle: "结算账单报表",
  526. startTime: null,
  527. endTime: null
  528. };
  529. },
  530. watch: {
  531. tableData: {
  532. handler(newVal) {
  533. console.log("执行一次汇总函数");
  534. this.computedTableData(newVal);
  535. },
  536. deep: true,
  537. immediate: false
  538. },
  539. tableData1: {
  540. handler(newVal) {
  541. //console.log("执行一次汇总函数");
  542. //this.computedTableData1(newVal);
  543. },
  544. deep: true,
  545. immediate: false
  546. }
  547. },
  548. methods: {
  549. //结算
  550. settlement(row) {
  551. console.log("row:",row);
  552. //遍历tableData,找出相同批次的行数
  553. let arr = this.tableData.filter(e => {
  554. return e.batchId == row.batchId && e.noticeTime==row.noticeTime && row.unitPriceId == e.unitPriceId;
  555. });
  556. let map = {
  557. list: arr,
  558. statementType: 3,
  559. totalEnTonnage: row.monthMakeTonnage,
  560. statementTotalAmount: row.statementTotalAmount,
  561. totalPreviewFee:row.totalPreviewFee,
  562. totalPreviewTonnage:row.totalPreviewTonnage,
  563. userID: getCookie("userId"),
  564. statementStatus:1
  565. };
  566. console.log("map:",map);
  567. this.axios
  568. .post("/api/v1/bms/addShipFeeStatement", map)
  569. .then(res => {
  570. if (res.data.code == "200") {
  571. this.getNoDetailsStament();
  572. this.$message.success("结算成功");
  573. }
  574. })
  575. .catch(() => {
  576. this.$message.error("结算失败");
  577. });
  578. },
  579. //预开保存
  580. operate(row) {
  581. console.log("row:",row);
  582. //遍历tableData,找出相同批次的行数
  583. let arr = this.tableData.filter(e => {
  584. return e.batchId == row.batchId && e.noticeTime==row.noticeTime && row.unitPriceId == e.unitPriceId;
  585. });
  586. let map = {
  587. list: arr,
  588. statementType: 3,
  589. totalEnTonnage: row.monthMakeTonnage,
  590. statementTotalAmount: row.statementTotalAmount,
  591. totalPreviewFee:row.totalPreviewFee,
  592. totalPreviewTonnage:row.totalPreviewTonnage,
  593. userID: getCookie("userId"),
  594. statementStatus:0
  595. };
  596. console.log("map:",map);
  597. this.axios
  598. .post("/api/v1/bms/addShipFeeStatement", map)
  599. .then(res => {
  600. if (res.data.code == "200") {
  601. this.getNoDetailsStament();
  602. this.$message.success("预开成功");
  603. }
  604. })
  605. .catch(() => {
  606. this.$message.error("预开失败");
  607. });
  608. },
  609. //处理表格数据
  610. computedTableData(data) {
  611. data.forEach((item, index) => {
  612. if (index == 0) {
  613. } else if (item.batchId == data[index - 1].batchId && item.noticeTime == data[index - 1].noticeTime && item.unitPriceId == data[index - 1].unitPriceId) {
  614. item.totalEnTonnage = data[index - 1].totalEnTonnage;
  615. item.totalPreviewTonnage= data[index - 1].totalPreviewTonnage;
  616. }
  617. //总计预开票金额
  618. item.totalPreviewFee=item.totalPreviewTonnage*item.unitPrice;
  619. //预开吨位
  620. item.previewTonnage=item.totalPreviewTonnage*(item.loadTonnage/item.monthLoadTonnage);
  621. //预开金额
  622. item.previewFee = (item.unitPrice * item.previewTonnage);
  623. //结算吨位
  624. item.realTonnage = (
  625. item.totalEnTonnage * item.loadingProportion
  626. );
  627. //金额
  628. item.fee = (item.realTonnage * item.unitPrice);
  629. //开票吨位
  630. item.makeTonnage = (item.realTonnage - item.previewTonnage);
  631. //实际开票金额
  632. item.actuallyMoney = (item.makeTonnage * item.unitPrice-item.inspectionFees);
  633. //月份结算吨位/
  634. item.monthRealTonnage = item.totalEnTonnage*item.monthLoadingProportion;
  635. //月份开票吨位
  636. item.monthMakeTonnage = item.monthRealTonnage-item.totalPreviewTonnage;
  637. });
  638. this.computedTotal(data);
  639. this.getSpanArr(this.tableData);
  640. },
  641. //遍历,汇总
  642. computedTotal(data){
  643. data.forEach((item, index) => {
  644. let arr = data.filter(e => {
  645. return e.batchId == item.batchId && e.noticeTime==item.noticeTime && e.unitPriceId==item.unitPriceId;
  646. });
  647. let inspectionFees=arr.reduce((pre, item1) => {
  648. if(item1.inspectionFees)
  649. return pre.plus(new BigNumber(item1.inspectionFees));
  650. else
  651. return pre.plus(0.0);
  652. }, new BigNumber(0.0));
  653. console.log("inspectionFees:",inspectionFees.toNumber());
  654. if(item.monthMakeTonnage){
  655. item.statementTotalAmount=(item.monthMakeTonnage.toFixed(2)*item.unitPrice-inspectionFees.toNumber()).toFixed(2);
  656. }
  657. });
  658. },
  659. //根据表格据汇总顶部展示
  660. getTotalArr(data) {
  661. this.totalWillTonageedValue = data.reduce((pre, item) => {
  662. return pre + item.willTonanged;
  663. }, 0);
  664. this.totalWillTonageedMoney = data.reduce((pre, item) => {
  665. return pre + item.willMoneyed;
  666. });
  667. this.totalActuallyTonageedValue = data.reduce((pre, item) => {
  668. return pre + item.actuallyMoney;
  669. });
  670. this.totalActuallyTonageedMoney = data.reduce((pre, item) => {
  671. return pre + item.actuallyMonthMoney;
  672. });
  673. },
  674. handleClick() {
  675. console.log("我正在进行账单");
  676. },
  677. onClick() {
  678. if(this.activeName=='first'){
  679. this.getNoDetailsStament();
  680. }else if(this.activeName=='second'){
  681. this.getDetailsStamented();
  682. }
  683. },
  684. //获取未结算账单数据
  685. getNoDetailsStament() {
  686. let startTime = null;
  687. let endTime = null;
  688. let map={con:this.shipName};
  689. // if (this.startTime) {
  690. // startTime = sjTime(this.startTime);
  691. // }
  692. // if (this.endTime) {
  693. // endTime = sjTime(this.endTime);
  694. // }
  695. // if(startTime && endTime && startTime < endTime){
  696. // map.startTime=startTime;
  697. // map.endTime=endTime;
  698. // }
  699. this.axios.post("/api/v1/bms/getShipFeeStatement",map).then(res => {
  700. console.log(res.data.data);
  701. this.tableData = res.data.data;
  702. this.computedTableData(this.tableData);
  703. });
  704. },
  705. //已结算账单数据
  706. getDetailsStamented() {
  707. let startTime = null;
  708. let endTime = null;
  709. let map={con:this.shipName};
  710. if (this.startTime) {
  711. startTime = sjTime(this.startTime);
  712. }
  713. if (this.endTime) {
  714. endTime = sjTime(this.endTime);
  715. }
  716. if(startTime && endTime && startTime < endTime){
  717. map.startTime=startTime;
  718. map.endTime=endTime;
  719. }
  720. this.axios.post("/api/v1/bms/getShipFeeStatemented",map).then(res => {
  721. console.log(res.data.data);
  722. this.tableData1 = res.data.data;
  723. this.getSpanArr1(this.tableData1);
  724. });
  725. },
  726. //合并表格数据
  727. getSpanArr(data) {
  728. //每次调用方法初始化
  729. this.spanArr = [];
  730. for (var i = 0; i < data.length; i++) {
  731. if (i === 0) {
  732. this.spanArr.push(1);
  733. data[i].group = i;
  734. this.pos = 0;
  735. } else {
  736. // 判断当前元素与上一个元素是否相同
  737. if (data[i].batchId === data[i - 1].batchId && data[i].unitPriceId==data[i-1].unitPriceId) {
  738. this.spanArr[this.pos] += 1;
  739. data[i].group = data[i - 1].group;
  740. this.spanArr.push(0);
  741. } else {
  742. this.spanArr.push(1);
  743. this.pos = i;
  744. data[i].group = data[i - 1].group + 1;
  745. }
  746. }
  747. }
  748. },
  749. //合并表格数据
  750. getSpanArr1(data) {
  751. //每次调用方法初始化
  752. this.spanArr1 = [];
  753. for (var i = 0; i < data.length; i++) {
  754. if (i === 0) {
  755. this.spanArr1.push(1);
  756. data[i].group = i;
  757. this.pos = 0;
  758. } else {
  759. // 判断当前元素与上一个元素是否相同
  760. if (data[i].statementId === data[i - 1].statementId) {
  761. this.spanArr1[this.pos] += 1;
  762. data[i].group = data[i - 1].group;
  763. this.spanArr1.push(0);
  764. } else {
  765. this.spanArr1.push(1);
  766. this.pos = i;
  767. data[i].group = data[i - 1].group + 1;
  768. }
  769. }
  770. }
  771. },
  772. objectSpanMethod({ row, column, rowIndex, columnIndex }) {
  773. if (this.mergeList.includes(column.property)) {
  774. const _row = this.spanArr[rowIndex];
  775. const _col = _row > 0 ? 1 : 0;
  776. return {
  777. rowspan: _row,
  778. colspan: _col
  779. };
  780. }
  781. },
  782. objectSpanMethod1({ row, column, rowIndex, columnIndex }) {
  783. if (this.mergeList.includes(column.property)) {
  784. const _row = this.spanArr1[rowIndex];
  785. const _col = _row > 0 ? 1 : 0;
  786. return {
  787. rowspan: _row,
  788. colspan: _col
  789. };
  790. }
  791. },
  792. //导出账单数据
  793. exportAllReportToExcel() {
  794. console.log(this.$refs.tableRef);
  795. const loading = this.$loading({
  796. lock: true,
  797. text: "正在导出Excel",
  798. spinner: "el-icon-loading",
  799. background: "rgba(0, 0, 0, 0.7)"
  800. });
  801. var title = this.tableTitle;
  802. let tHeader = [];
  803. let filterVal = [];
  804. let data = [];
  805. if (this.activeName == "first") {
  806. data = this.$refs.tableRef.$children;
  807. } else {
  808. data = this.$refs.tableRef1.$children;
  809. }
  810. data.forEach(item => {
  811. if (item.label != undefined && item.prop != undefined) {
  812. if (tHeader.indexOf(item.label) === -1) {
  813. tHeader.push(item.label);
  814. }
  815. if (filterVal.indexOf(item.prop) === -1) {
  816. filterVal.push(item.prop);
  817. }
  818. }
  819. });
  820. this.downloadLoading = true;
  821. require.ensure([], () => {
  822. const {
  823. export_json_to_excel
  824. } = require("@/assets/excel/Export2Excel.js"); //这里必须使用绝对路径,使用@/+存放export2Excel的路径
  825. let data = this.tableData.map(v => filterVal.map(j => v[j])); //3.formatJson格式转换
  826. export_json_to_excel(tHeader, data, title); // (title)导出的表格名称
  827. });
  828. loading.close();
  829. }
  830. },
  831. mounted() {
  832. this.getNoDetailsStament();
  833. this.getDetailsStamented();
  834. }
  835. };
  836. </script>
  837. <style lang="scss" scoped>
  838. #detailsStatement {
  839. .top {
  840. margin-left: 10px;
  841. margin-top: 10px;
  842. }
  843. .main {
  844. margin-left: 10px;
  845. ::-webkit-scrollbar {
  846. // width: 20px;
  847. height: 20px;
  848. background-color: transparent;
  849. }
  850. }
  851. }
  852. </style>