index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. <template>
  2. <div>
  3. <basic-container v-if="isShow">
  4. <avue-crud :option="option"
  5. :table-loading="loading"
  6. :data="data"
  7. :page.sync="page"
  8. :permission="permissionList"
  9. :before-open="beforeOpen"
  10. v-model="form"
  11. ref="crud"
  12. id="out-table"
  13. :header-cell-class-name="headerClassName"
  14. @row-update="rowUpdate"
  15. @row-save="rowSave"
  16. @row-del="rowDel"
  17. @search-change="searchChange"
  18. @search-reset="searchReset"
  19. @selection-change="selectionChange"
  20. @current-change="currentChange"
  21. @size-change="sizeChange"
  22. @refresh-change="refreshChange"
  23. @resetColumn="resetColumnTwo('crud', 'option', 'optionBack', 320)"
  24. @saveColumn="saveColumnTwo('crud', 'option', 'optionBack', 320)"
  25. @on-load="onLoad">
  26. <template slot="menuLeft">
  27. <el-button type="success"
  28. size="small"
  29. icon="el-icon-plus"
  30. plain
  31. @click="newbillFun">新建发票申请
  32. </el-button>
  33. <el-button type="danger"
  34. size="small"
  35. icon="el-icon-delete"
  36. plain
  37. @click="handleDelete">删 除
  38. </el-button>
  39. </template>
  40. <template slot="menu" slot-scope="{row}">
  41. <el-button type="text"
  42. size="small"
  43. @click="editFun(row)">编辑
  44. </el-button>
  45. <el-button type="text"
  46. size="small"
  47. @click="rowDel(row)">删除
  48. </el-button>
  49. </template>
  50. <template slot-scope="scope" slot="stlMode">
  51. <span>{{scope.row.stlMode?'月结':'票结'}}</span>
  52. </template>
  53. <template slot-scope="{ row }" slot="billNo">
  54. <span class="pointerClick" @click="editFun(row)" >{{row.billNo}}</span>
  55. </template>
  56. </avue-crud>
  57. </basic-container>
  58. <fininvoicesDetails ref="fininvoicesDetails" :editSave="editSave" v-if="!isShow" @goBack="goBack"></fininvoicesDetails>
  59. </div>
  60. </template>
  61. <script>
  62. import {
  63. fininvoicesList,
  64. fininvoicesDetail,
  65. fininvoicesRemove, fininvoicesSubmit
  66. } from "@/api/iosBasicData/fininvoices";
  67. import fininvoicesDetails from "@/views/iosBasicData/fininvoicesApplyfor/fininvoicesDetails.vue";
  68. import {mapGetters} from "vuex";
  69. export default {
  70. components:{ fininvoicesDetails},
  71. data() {
  72. return {
  73. // 详情页面和列表切换
  74. isShow:true,
  75. editSave:false, // 编辑还是保存
  76. form: {},
  77. query: {},
  78. loading: true,
  79. page: {
  80. pageSize: 10,
  81. currentPage: 1,
  82. total: 0
  83. },
  84. selectionList: [],
  85. option:{},
  86. optionBack: {
  87. height:'auto',
  88. calcHeight: 30,
  89. tip: false,
  90. searchShow: true,
  91. searchMenuSpan: 6,
  92. border: true,
  93. index: true,
  94. viewBtn: true,
  95. selection: true,
  96. dialogClickModal: false,
  97. menuWidth:100,
  98. column: [
  99. {
  100. label: "单据编号",
  101. prop: "billNo",
  102. search:true,
  103. rules: [{
  104. required: true,
  105. message: "请输入单据编号",
  106. trigger: "blur"
  107. }],
  108. overHidden:true,
  109. },
  110. {
  111. label: "客户名称",
  112. prop: "corpCnName",
  113. width:"120",
  114. search:true,
  115. overHidden:true,
  116. },
  117. {
  118. label: "发票抬头",
  119. prop: "invCorpCnName",
  120. width:"160",
  121. search:true,
  122. overHidden:true,
  123. },
  124. {
  125. label: "合计本位币(CNY)",
  126. prop: "amountLoc",
  127. width: "120",
  128. overHidden:true,
  129. },
  130. {
  131. label: "单据日期",
  132. prop: "billDate",
  133. rules: [{
  134. required: true,
  135. message: "请输入单据日期",
  136. trigger: "blur"
  137. }],
  138. overHidden:true,
  139. },
  140. {
  141. label: "发票号码",
  142. prop: "invoiceNo",
  143. search:true,
  144. rules: [{
  145. required: true,
  146. message: "请输入发票号码",
  147. trigger: "blur"
  148. }],
  149. overHidden:true,
  150. },
  151. {
  152. label: "开票日期",
  153. prop: "invoiceDate",
  154. search:true,
  155. rules: [{
  156. required: true,
  157. message: "请输入开票日期",
  158. trigger: "blur"
  159. }],
  160. overHidden:true,
  161. },
  162. {
  163. label: "原发票号码",
  164. prop: "origInvoiceNo",
  165. width:"120",
  166. overHidden:true,
  167. },
  168. {
  169. label: "税务发票号码",
  170. prop: "taxInvoiceNo",
  171. width:"150",
  172. overHidden:true,
  173. },
  174. {
  175. label: "全电发票",
  176. prop: "invType",
  177. overHidden:true,
  178. },
  179. {
  180. label: "发票类型",
  181. search:true,
  182. prop: "taxType",
  183. width:"160",
  184. overHidden:true,
  185. },
  186. {
  187. label: "税率 %",
  188. prop: "taxRate",
  189. rules: [{
  190. required: true,
  191. message: "请输入税率 %",
  192. trigger: "blur"
  193. }],
  194. overHidden:true,
  195. },
  196. {
  197. label: "结算方式",
  198. prop: "stlMode",
  199. overHidden:true,
  200. },
  201. {
  202. label: "发票币种",
  203. prop: "invCurCode",
  204. rules: [{
  205. required: true,
  206. message: "请输入发票币种",
  207. trigger: "blur"
  208. }],
  209. overHidden:true,
  210. },
  211. {
  212. label: "客户英文名称",
  213. prop: "corpEnName",
  214. width:"120",
  215. overHidden:true,
  216. },
  217. {
  218. label: "开票单位英文名称",
  219. prop: "invCorpEnName",
  220. width:"150",
  221. overHidden:true,
  222. },
  223. {
  224. label: "开票单位税号",
  225. prop: "invCorpTaxNo",
  226. width:"140",
  227. overHidden:true,
  228. },
  229. {
  230. label: "开票单位CNY开户银行",
  231. prop: "invCorpAccountBankCny",
  232. width:"160",
  233. overHidden:true,
  234. },
  235. {
  236. label: "开票单位CNY银行账号",
  237. prop: "invCorpAccountNoCny",
  238. width:"160",
  239. overHidden:true,
  240. },
  241. {
  242. label: "开票单位USD开户银行",
  243. prop: "invCorpAccountBankUsd",
  244. width:"160",
  245. overHidden:true,
  246. },
  247. {
  248. label: "开票单位USD银行账号",
  249. prop: "invCorpAccountNoUsd",
  250. width:"160",
  251. overHidden:true,
  252. },
  253. {
  254. label: "船名/航次",
  255. prop: "vesselVoyno",
  256. width:"100",
  257. overHidden:true,
  258. },
  259. {
  260. label: "开船日",
  261. prop: "etd",
  262. overHidden:true,
  263. },
  264. {
  265. label: "装货港",
  266. prop: "pol",
  267. overHidden:true,
  268. },
  269. {
  270. label: "卸货港",
  271. prop: "pod",
  272. overHidden:true,
  273. },
  274. {
  275. label: "目的地",
  276. prop: "destination",
  277. overHidden:true,
  278. },
  279. {
  280. label: "箱型/箱量",
  281. prop: "containers",
  282. width:"100",
  283. overHidden:true,
  284. },
  285. {
  286. label: "币种",
  287. prop: "curCode",
  288. overHidden:true,
  289. },
  290. {
  291. label: "原汇率",
  292. prop: "exrate",
  293. overHidden:true,
  294. },
  295. {
  296. label: "是否转换为人民币",
  297. prop: "isExchangeToCny",
  298. width:"140",
  299. dicData:[{
  300. label:'否',
  301. value:0
  302. },{
  303. label:'是',
  304. value:1
  305. }],
  306. overHidden:true,
  307. },
  308. {
  309. label: "业务类型",
  310. prop: "businessTypes",
  311. overHidden:true,
  312. },
  313. {
  314. label: "业务单据编号",
  315. prop: "businessNo",
  316. width:"120",
  317. overHidden:true,
  318. },
  319. {
  320. label: "对账单编号",
  321. prop: "checkNo",
  322. width:"120",
  323. overHidden:true,
  324. },
  325. {
  326. label: "MBL NO",
  327. prop: "mblno",
  328. overHidden:true,
  329. },
  330. {
  331. label: "HBL NO",
  332. prop: "hblno",
  333. overHidden:true,
  334. },
  335. {
  336. label: "订舱",
  337. prop: "bookingNo",
  338. overHidden:true,
  339. },
  340. {
  341. label: "中文船名",
  342. prop: "vesselCnName",
  343. overHidden:true,
  344. },
  345. {
  346. label: "英文船名",
  347. prop: "vesselEnName",
  348. overHidden:true,
  349. },
  350. {
  351. label: "航次",
  352. prop: "voyageNo",
  353. overHidden:true,
  354. },
  355. {
  356. label: "财务开始日期",
  357. prop: "accountDateFrom",
  358. width:"100",
  359. overHidden:true,
  360. },
  361. {
  362. label: "财务结束日期",
  363. prop: "accountDateTo",
  364. width:"100",
  365. overHidden:true,
  366. },
  367. {
  368. label: "申请人",
  369. prop: "applicantName",
  370. overHidden:true,
  371. },
  372. {
  373. label: "审核人",
  374. prop: "approverName",
  375. overHidden:true,
  376. },
  377. {
  378. label: "是否代理发票",
  379. prop: "isAgent",
  380. width:"120",
  381. dicData:[{
  382. label:'否',
  383. value:0
  384. },{
  385. label:'是',
  386. value:1
  387. }],
  388. overHidden:true,
  389. },
  390. {
  391. label: "是否DK",
  392. prop: "isDk",
  393. dicData:[{
  394. label:'否',
  395. value:0
  396. },{
  397. label:'是',
  398. value:1
  399. }],
  400. overHidden:true,
  401. },
  402. {
  403. label: "是否RP",
  404. prop: "isRp",
  405. dicData:[{
  406. label:'否',
  407. value:0
  408. },{
  409. label:'是',
  410. value:1
  411. }],
  412. overHidden:true,
  413. },
  414. {
  415. label: "RP名称",
  416. prop: "rpName",
  417. overHidden:true,
  418. },
  419. {
  420. label: "导出日期",
  421. prop: "exportDate",
  422. width: "100",
  423. overHidden:true,
  424. },
  425. {
  426. label: "导出人",
  427. prop: "exportName",
  428. overHidden:true,
  429. },
  430. {
  431. label: "是否导出船名航次",
  432. prop: "isExportVslvoy",
  433. width: "140",
  434. dicData:[{
  435. label:'否',
  436. value:0
  437. },{
  438. label:'是',
  439. value:1
  440. }],
  441. overHidden:true,
  442. },
  443. {
  444. label: "是否导出主单号",
  445. prop: "isExportMblno",
  446. width: "140",
  447. dicData:[{
  448. label:'否',
  449. value:0
  450. },{
  451. label:'是',
  452. value:1
  453. }],
  454. overHidden:true,
  455. },
  456. {
  457. label: "是否导出分单号",
  458. prop: "isExportHblno",
  459. width: "140",
  460. dicData:[{
  461. label:'否',
  462. value:0
  463. },{
  464. label:'是',
  465. value:1
  466. }],
  467. overHidden:true,
  468. },
  469. {
  470. label: "发票本位币(CNY)",
  471. prop: "amountCny",
  472. width: "140",
  473. overHidden:true,
  474. },
  475. {
  476. label: "发票USD",
  477. prop: "amountUsd",
  478. width: "100",
  479. overHidden:true,
  480. },
  481. {
  482. label: "税额(CNY)",
  483. prop: "amountTax",
  484. width: "100",
  485. overHidden:true,
  486. },
  487. {
  488. label: "全电发票备注",
  489. prop: "elecRemarks",
  490. width: "120",
  491. overHidden:true,
  492. },
  493. {
  494. label: "银行进账单出票人名称",
  495. prop: "bankReceiptCorpName",
  496. width: "160",
  497. overHidden:true,
  498. },
  499. {
  500. label: "银行进账单出票银行",
  501. prop: "bankReceiptBankName",
  502. width: "160",
  503. overHidden:true,
  504. },
  505. {
  506. label: "银行进账单出票银行账号",
  507. prop: "bankReceiptAccountNo",
  508. width: "160",
  509. overHidden:true,
  510. },
  511. {
  512. label: "银行进账单票据种类",
  513. prop: "bankReceiptBillType",
  514. width: "160",
  515. overHidden:true,
  516. },
  517. {
  518. label: "银行进账单票据张数",
  519. prop: "bankReceiptBillCount",
  520. width: "160",
  521. overHidden:true,
  522. },
  523. {
  524. label: "银行进账单是否已进账(收款)",
  525. prop: "bankReceiptIsIncome",
  526. width: "180",
  527. overHidden:true,
  528. },
  529. {
  530. label: "备注",
  531. prop: "remarks",
  532. rules: [{
  533. required: true,
  534. message: "请输入备注",
  535. trigger: "blur"
  536. }],
  537. overHidden:true,
  538. },
  539. ]
  540. },
  541. data: []
  542. };
  543. },
  544. watch:{
  545. },
  546. computed: {
  547. ...mapGetters(["permission"]),
  548. permissionList() {
  549. return {
  550. addBtn: this.vaildData(this.permission.fininvoices_add, false),
  551. viewBtn: this.vaildData(this.permission.fininvoices_view, false),
  552. delBtn: this.vaildData(this.permission.fininvoices_delete, false),
  553. editBtn: this.vaildData(this.permission.fininvoices_edit, false)
  554. };
  555. },
  556. ids() {
  557. let ids = [];
  558. this.selectionList.forEach(ele => {
  559. ids.push(ele.id);
  560. });
  561. return ids.join(",");
  562. }
  563. },
  564. async created() {
  565. this.option = await this.getColumnData(this.getColumnName(320), this.optionBack);
  566. },
  567. methods: {
  568. // 新建发票
  569. newbillFun(){
  570. this.isShow = false;
  571. this.editSave = false
  572. },
  573. // 编辑
  574. editFun(row) {
  575. this.isShow = false
  576. this.editSave = true
  577. this.$nextTick(()=>{
  578. this.$refs.fininvoicesDetails.fininvoicesDetailfun(row.id)
  579. })
  580. },
  581. // 详情的返回列表
  582. goBack() {
  583. // 初始化数据
  584. // this.detailData = this.$options.data().detailData;
  585. if (JSON.stringify(this.$route.query) != "{}") {
  586. this.$router.$avueRouter.closeTag();
  587. this.$router.push({
  588. path: "/iosBasicData/fininvoices/index"
  589. });
  590. }
  591. this.isShow = true;
  592. this.onLoad(this.page, this.search);
  593. },
  594. rowSave(row, done, loading) {
  595. fininvoicesSubmit(row).then(() => {
  596. this.onLoad(this.page);
  597. this.$message({
  598. type: "success",
  599. message: "操作成功!"
  600. });
  601. done();
  602. }, error => {
  603. loading();
  604. window.console.log(error);
  605. });
  606. },
  607. rowUpdate(row, index, done, loading) {
  608. fininvoicesSubmit(row).then(() => {
  609. this.onLoad(this.page);
  610. this.$message({
  611. type: "success",
  612. message: "操作成功!"
  613. });
  614. done();
  615. }, error => {
  616. loading();
  617. console.log(error);
  618. });
  619. },
  620. rowDel(row) {
  621. this.$confirm("确定将选择数据删除?", {
  622. confirmButtonText: "确定",
  623. cancelButtonText: "取消",
  624. type: "warning"
  625. })
  626. .then(() => {
  627. return fininvoicesRemove(row.id);
  628. })
  629. .then(() => {
  630. this.onLoad(this.page);
  631. this.$message({
  632. type: "success",
  633. message: "操作成功!"
  634. });
  635. });
  636. },
  637. handleDelete() {
  638. if (this.selectionList.length === 0) {
  639. this.$message.warning("请选择至少一条数据");
  640. return;
  641. }
  642. this.$confirm("确定将选择数据删除?", {
  643. confirmButtonText: "确定",
  644. cancelButtonText: "取消",
  645. type: "warning"
  646. })
  647. .then(() => {
  648. return fininvoicesRemove(this.ids);
  649. })
  650. .then(() => {
  651. this.onLoad(this.page);
  652. this.$message({
  653. type: "success",
  654. message: "操作成功!"
  655. });
  656. this.$refs.crud.toggleSelection();
  657. });
  658. },
  659. beforeOpen(done, type) {
  660. if (["edit", "view"].includes(type)) {
  661. fininvoicesDetail(this.form.id).then(res => {
  662. this.form = res.data.data;
  663. });
  664. }
  665. done();
  666. },
  667. searchReset() {
  668. this.query = {};
  669. this.onLoad(this.page);
  670. },
  671. searchChange(params, done) {
  672. this.query = params;
  673. this.page.currentPage = 1;
  674. this.onLoad(this.page, params);
  675. done();
  676. },
  677. selectionChange(list) {
  678. this.selectionList = list;
  679. },
  680. selectionClear() {
  681. this.selectionList = [];
  682. this.$refs.crud.toggleSelection();
  683. },
  684. currentChange(currentPage){
  685. this.page.currentPage = currentPage;
  686. },
  687. sizeChange(pageSize){
  688. this.page.pageSize = pageSize;
  689. },
  690. refreshChange() {
  691. this.onLoad(this.page, this.query);
  692. },
  693. onLoad(page, params = {}) {
  694. this.loading = true;
  695. fininvoicesList(page.currentPage, page.pageSize,
  696. {...Object.assign(params, this.query),type:"申请",billNoFormat:'FPSQ',businessTypeCode:'FPSQ'}).then(res => {
  697. const data = res.data.data;
  698. this.page.total = data.total;
  699. this.data = data.records;
  700. this.loading = false;
  701. this.selectionClear();
  702. });
  703. },
  704. //自定义列保存
  705. async saveColumnTwo(ref, option, optionBack, code) {
  706. /**
  707. * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
  708. * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
  709. * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
  710. */
  711. const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
  712. if (inSave) {
  713. this.$message.success("保存成功");
  714. //关闭窗口
  715. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  716. }
  717. },
  718. //自定义列重置
  719. async resetColumnTwo(ref, option, optionBack, code) {
  720. this[option] = this[optionBack];
  721. const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
  722. if (inSave) {
  723. this.$message.success("重置成功");
  724. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  725. }
  726. },
  727. // 更改表格颜色
  728. headerClassName(tab) {
  729. //颜色间隔
  730. let back = ""
  731. if (tab.columnIndex >= 0 && tab.column.level === 1) {
  732. if (tab.columnIndex % 2 === 0) {
  733. back = "back-one"
  734. } else if (tab.columnIndex % 2 === 1) {
  735. back = "back-two"
  736. }
  737. }
  738. return back;
  739. },
  740. }
  741. };
  742. </script>
  743. <style scoped>
  744. ::v-deep#out-table .back-one {
  745. background: #ecf5ff !important;
  746. text-align: center;
  747. }
  748. ::v-deep#out-table .back-two {
  749. background: #ecf5ff !important;
  750. text-align: center;
  751. }
  752. .pointerClick {
  753. cursor:pointer;
  754. color: #1e9fff;
  755. }
  756. </style>