kaihe-index.vue 15 KB

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