index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. <template>
  2. <div>
  3. <!-- 列表页 -->
  4. <el-form ref="form" :model="form" label-width="80px" v-show="showSearch">
  5. <el-row>
  6. <el-col :span="6">
  7. <el-form-item label="结算单位">
  8. <el-select
  9. v-model="form.fCorpid"
  10. size="small"
  11. placeholder="请选择"
  12. clearable
  13. style="width: 100%"
  14. filterable
  15. >
  16. <el-option
  17. v-for="item in corpList"
  18. :key="item.fId"
  19. :label="item.fName"
  20. :value="item.fId"
  21. />
  22. </el-select>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="6">
  26. <el-form-item label="船名">
  27. <el-select
  28. v-model="form.fVslid"
  29. size="small"
  30. placeholder="请选择"
  31. style="width: 100%"
  32. clearable
  33. @change="fvslChange"
  34. @clear="fvslClear"
  35. >
  36. <el-option
  37. v-for="item in TVesselfs"
  38. :key="item.fId"
  39. :label="item.fName"
  40. :value="item.fId"
  41. />
  42. </el-select>
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="6">
  46. <el-form-item label="航次">
  47. <el-select
  48. v-model="form.fVoyid"
  49. size="small"
  50. placeholder="请选择"
  51. style="width: 100%"
  52. clearable
  53. >
  54. <el-option
  55. v-for="item in TVoyagefs"
  56. :key="item.fId"
  57. :label="item.fNo"
  58. :value="item.fId"
  59. />
  60. </el-select>
  61. </el-form-item>
  62. </el-col>
  63. <el-col :span="6">
  64. <el-form-item label="提单号">
  65. <el-input
  66. v-model="form.fMblno"
  67. size="small"
  68. placeholder="请输入"
  69. ></el-input>
  70. </el-form-item>
  71. </el-col>
  72. </el-row>
  73. <el-collapse-transition>
  74. <div v-if="show">
  75. <el-row>
  76. <el-col :span="6">
  77. <el-form-item label="起运港">
  78. <el-select
  79. v-model="form.fLoadportid"
  80. size="small"
  81. placeholder="请选择"
  82. style="width: 100%"
  83. clearable
  84. >
  85. <el-option
  86. v-for="item in portNames"
  87. :key="item.fId"
  88. :label="item.fName"
  89. :value="item.fId"
  90. />
  91. </el-select>
  92. </el-form-item>
  93. </el-col>
  94. <el-col :span="6">
  95. <el-form-item label="目的港">
  96. <el-select
  97. v-model="form.fDestportid"
  98. size="small"
  99. placeholder="请选择"
  100. style="width: 100%"
  101. clearable
  102. >
  103. <el-option
  104. v-for="item in portNames"
  105. :key="item.fId"
  106. :label="item.fName"
  107. :value="item.fId"
  108. />
  109. </el-select>
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="6">
  113. <el-form-item label="开船日期">
  114. <el-date-picker
  115. v-model="form.timeInterval"
  116. type="daterange"
  117. size="small"
  118. placeholder="请选择日期"
  119. format="yyyy-MM-dd"
  120. value-format="yyyy-MM-dd"
  121. style="width: 100%"
  122. />
  123. </el-form-item>
  124. </el-col>
  125. <el-col :span="6">
  126. <el-form-item label="审核日期">
  127. <el-date-picker
  128. v-model="form.timeExamine"
  129. type="daterange"
  130. size="small"
  131. placeholder="请选择日期"
  132. format="yyyy-MM-dd"
  133. value-format="yyyy-MM-dd"
  134. style="width: 100%"
  135. />
  136. </el-form-item>
  137. </el-col>
  138. </el-row>
  139. <el-row>
  140. <el-col :span="6">
  141. <el-form-item label="费用状态">
  142. <el-select
  143. v-model="form.fBillstatus"
  144. size="small"
  145. placeholder="请选择"
  146. style="width: 100%"
  147. clearable
  148. >
  149. <el-option
  150. v-for="item in fBillstatusList"
  151. :key="item.fId"
  152. :label="item.fName"
  153. :value="item.fId"
  154. />
  155. </el-select>
  156. </el-form-item>
  157. </el-col>
  158. </el-row>
  159. </div>
  160. </el-collapse-transition>
  161. </el-form>
  162. <div class="head-but">
  163. <div>
  164. <el-button
  165. type="warning"
  166. icon="el-icon-download"
  167. size="mini"
  168. @click="handleExport"
  169. >
  170. 导出
  171. </el-button>
  172. </div>
  173. <div class="tabSetting">
  174. <el-button
  175. type="cyan"
  176. icon="el-icon-search"
  177. size="mini"
  178. @click="handleQuery"
  179. >
  180. 搜索
  181. </el-button>
  182. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">
  183. 重置
  184. </el-button>
  185. <el-button
  186. v-show="show"
  187. @click="show = !show"
  188. icon="el-icon-arrow-up"
  189. size="mini"
  190. >
  191. 展开
  192. </el-button>
  193. <el-button
  194. v-show="!show"
  195. @click="show = !show"
  196. icon="el-icon-arrow-down"
  197. size="mini"
  198. >
  199. 展开
  200. </el-button>
  201. <right-toolbar
  202. style="margin-left: 12px"
  203. :showSearch.sync="showSearch"
  204. @queryTable="getList"
  205. ></right-toolbar>
  206. <div style="margin: 0 12px">
  207. <el-button
  208. icon="el-icon-setting"
  209. size="mini"
  210. circle
  211. @click="colSetting"
  212. ></el-button>
  213. </div>
  214. </div>
  215. </div>
  216. <el-table :data="tableData" show-summary :summary-method="getSummaries">
  217. <el-table-column label="序号" type="index" width="50" />
  218. <el-table-column
  219. v-for="(item, index) in tableOption"
  220. :key="index"
  221. :label="item.name"
  222. :width="item.width"
  223. :prop="item.label"
  224. align="center"
  225. :fixed="item.fixed"
  226. :show-overflow-tooltip="true"
  227. >
  228. <template slot-scope="scope">
  229. <span v-if="item.label == 'shipsName'">
  230. {{ scope.row.shipsName }}
  231. </span>
  232. <span v-if="item.label == 'voyage'">
  233. {{ scope.row.voyage }}
  234. </span>
  235. <span v-if="item.label == 'unitOfAccount'">
  236. {{ scope.row.unitOfAccount }}
  237. </span>
  238. <span v-if="item.label == 'blNo'">
  239. <el-link :underline="false" type="primary"
  240. ><div @click="handleUpdate(scope.row, 1)">
  241. {{ scope.row.blNo }}
  242. </div></el-link
  243. >
  244. </span>
  245. <span v-if="item.label == 'portOfLoading'">
  246. {{ scope.row.portOfLoading }}
  247. </span>
  248. <span v-if="item.label == 'destination'">
  249. {{ scope.row.destination }}
  250. </span>
  251. <span v-if="item.label == 'sailingDate'">
  252. {{ scope.row.sailingDate }}
  253. </span>
  254. <span v-if="item.label == 'auditDate'">
  255. {{ scope.row.auditDate }}
  256. </span>
  257. <span v-if="item.label == 'receivable'">
  258. {{ scope.row.receivable }}
  259. </span>
  260. <span v-if="item.label == 'handle'">
  261. {{ scope.row.handle }}
  262. </span>
  263. <span v-if="item.label == 'profit'">
  264. {{ scope.row.profit }}
  265. </span>
  266. </template>
  267. </el-table-column>
  268. </el-table>
  269. <pagination
  270. v-show="page.total > 0"
  271. :total="page.total"
  272. :page.sync="page.pageNum"
  273. :limit.sync="page.pageSize"
  274. @pagination="getList"
  275. />
  276. <column-setting
  277. ref="columnSetting"
  278. @reset="reset"
  279. @getRowdata="getRowdata"
  280. tableName="凯和应付总账"
  281. />
  282. </div>
  283. </template>
  284. <script>
  285. import { tableOption } from "./js/index";
  286. import {
  287. selectTVesself,
  288. selectTVoyagef,
  289. selectPortName,
  290. listCorps,
  291. } from "@/api/finance/kaihe/contrast";
  292. import {
  293. getList,
  294. getExcel,
  295. } from "@/api/kaihe-reportManagement/generalLedgerCr";
  296. import Cookies from "js-cookie";
  297. import columnSetting from "@/components/ColumnSetting/index";
  298. export default {
  299. data() {
  300. return {
  301. form: {
  302. fVoyid: null,
  303. },
  304. show: false,
  305. tableData: [],
  306. tableOption: tableOption,
  307. page: {
  308. pageNum: 1,
  309. pageSize: 10,
  310. total: 0,
  311. },
  312. TVesselfs: [],
  313. TVoyagefs: [],
  314. portNames: [],
  315. corpList: [],
  316. showSearch: true,
  317. fBillstatusList: [
  318. {
  319. fId: 0,
  320. fName: "全部",
  321. },
  322. {
  323. fId: 1,
  324. fName: "未审核",
  325. },
  326. {
  327. fId: 2,
  328. fName: "审核通过",
  329. },
  330. ],
  331. sysType: null,
  332. };
  333. },
  334. components: {
  335. columnSetting,
  336. },
  337. created() {
  338. this.getList();
  339. selectTVesself().then((res) => {
  340. this.TVesselfs = res.rows;
  341. });
  342. selectTVoyagef().then((res) => {
  343. this.TVoyagefs = res.rows;
  344. });
  345. selectPortName().then((res) => {
  346. this.portNames = res.rows;
  347. });
  348. listCorps().then((res) => {
  349. this.corpList = res;
  350. });
  351. this.sysType = Cookies.get("sysType");
  352. },
  353. activated() {
  354. this.$refs.columnSetting.getRow(this.tableOption);
  355. },
  356. methods: {
  357. fvslChange(id) {
  358. selectTVoyagef({ fPid: id }).then((res) => {
  359. this.TVoyagefs = res.rows;
  360. });
  361. this.form.fVoyid = null;
  362. },
  363. fvslClear() {
  364. selectTVoyagef().then((res) => {
  365. this.TVoyagefs = res.rows;
  366. });
  367. this.form.fVoyid = null;
  368. },
  369. handleUpdate(row, num) {
  370. let res = {};
  371. res = {
  372. fMblno: row.blNo,
  373. num: num,
  374. type: "C",
  375. };
  376. this.$router.push({
  377. path: "/domesticTrade/orderInformation",
  378. query: { DC: JSON.stringify(res) },
  379. });
  380. },
  381. /** 导出按钮操作 */
  382. handleExport() {
  383. let that = this;
  384. this.$confirm("是否确认导出所有应付总账主数据项?", "警告", {
  385. confirmButtonText: "确定",
  386. cancelButtonText: "取消",
  387. type: "warning",
  388. })
  389. .then(function () {
  390. return getExcel(that.form);
  391. })
  392. .then((response) => {
  393. this.download(response.msg);
  394. });
  395. },
  396. getRowdata(list) {
  397. this.tableOption = list;
  398. },
  399. reset() {
  400. this.tableOption = this.$options.data().tableOption;
  401. },
  402. colSetting() {
  403. this.$refs.columnSetting.init(this.tableOption);
  404. },
  405. getSummaries(param) {
  406. const { columns, data } = param;
  407. const sums = [];
  408. if (data.length > 0) {
  409. columns.forEach((column, index) => {
  410. if (index == 0) {
  411. sums[index] = "合计";
  412. }
  413. if (
  414. column.label == "应付金额" ||
  415. column.label == "实付金额" ||
  416. column.label == "未付金额"
  417. ) {
  418. const values = data.map((item) => Number(item[column.property]));
  419. if (!values.every((value) => isNaN(value))) {
  420. if (this.sysType == 3) {
  421. sums[index] =
  422. Number(
  423. values.reduce((prev, curr) => {
  424. const value = Number(curr);
  425. if (!isNaN(value)) {
  426. return prev + curr;
  427. } else {
  428. return prev;
  429. }
  430. }, 0)
  431. ).toFixed(2) + "元";
  432. } else {
  433. sums[index] =
  434. Number(
  435. values.reduce((prev, curr) => {
  436. const value = Number(curr);
  437. if (!isNaN(value)) {
  438. return prev + curr;
  439. } else {
  440. return prev;
  441. }
  442. }, 0) / 10000
  443. ).toFixed(2) + "万";
  444. }
  445. } else {
  446. sums[index] = "0";
  447. }
  448. }
  449. });
  450. }
  451. return sums;
  452. },
  453. handleQuery() {
  454. this.page.pageNum = 1;
  455. if (this.form.date) {
  456. this.form.fFromDate = this.form.date[0];
  457. this.form.fToDate = this.form.date[1];
  458. }
  459. this.getList();
  460. },
  461. resetQuery() {
  462. this.form = this.$options.data().form;
  463. },
  464. getList() {
  465. const data = {
  466. ...this.form,
  467. pageNum: this.page.pageNum,
  468. pageSize: this.page.pageSize,
  469. };
  470. getList(data).then((response) => {
  471. response.rows.forEach((e) => {
  472. e.sailingDate = e.sailingDate ? e.sailingDate.slice(0, 10) : "";
  473. });
  474. response.rows.forEach((e) => {
  475. e.auditDate = e.auditDate ? e.auditDate.slice(0, 10) : "";
  476. });
  477. this.tableData = response.rows;
  478. this.page.total = response.total;
  479. this.loading = false;
  480. });
  481. },
  482. },
  483. };
  484. </script>
  485. <style lang="scss" scoped>
  486. .head-but {
  487. display: flex;
  488. justify-content: space-between;
  489. margin-bottom: 8px;
  490. }
  491. .tabSetting {
  492. display: flex;
  493. justify-content: flex-end;
  494. }
  495. </style>