index.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634
  1. <template>
  2. <div class="app-container">
  3. <el-row type="flex" justify="space-between" style="margin-bottom: 20px">
  4. <div class="grid-content bg-purple">
  5. <div class="grid-content bg-purple" style="margin-left: 30px">
  6. <el-input placeholder="请输入出票人名称" v-model="formData.name" @change="Search" clearable
  7. style="width: 100%">
  8. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  9. </el-input>
  10. </div>
  11. </div>
  12. <div class="grid-content bg-purple">
  13. <el-dropdown @command="handleCommand">
  14. <div class="pulldown">
  15. <span class="el-dropdown-link" v-if="!status"> 出票人状态 </span>
  16. <span class="el-dropdown-link" v-if="status">
  17. {{ status }}
  18. </span>
  19. <i class="el-icon-arrow-down el-icon--right"></i>
  20. </div>
  21. <el-dropdown-menu slot="dropdown">
  22. <el-dropdown-item command="全部">全部</el-dropdown-item>
  23. <el-dropdown-item command="正常">正常</el-dropdown-item>
  24. <el-dropdown-item command="删除">删除</el-dropdown-item>
  25. </el-dropdown-menu>
  26. </el-dropdown>
  27. </div>
  28. <div class="grid-content bg-purple" style="display: flex; justify-content: flex-end">
  29. <el-button type="success" @click="recovers">恢复</el-button>
  30. <el-button type="danger" @click="deletestatuses">删除</el-button>
  31. <el-button type="primary" @click="dialogVisible2 = true">新增出票人</el-button>
  32. \
  33. <el-button type="primary" @click="batchExports">导出</el-button>
  34. </div>
  35. </el-row>
  36. <!--修改出票人弹窗 -->
  37. <el-dialog title="修改出票人" :visible.sync="dialogVisible1" width="500px">
  38. <el-form ref="form" :model="tableData" label-width="80px">
  39. <el-form-item label="姓名" prop="tableData.name">
  40. <el-input v-model="tableData.name" style="width: 100%"></el-input>
  41. </el-form-item>
  42. <el-form-item label="银行账号" prop="tableData.bankAccount">
  43. <el-input v-model="tableData.bankAccount" style="width: 100%"></el-input>
  44. </el-form-item>
  45. <el-form-item label="银行名称" prop="tableData.bankName">
  46. <el-input v-model="tableData.bankName" style="width: 100%"></el-input>
  47. </el-form-item>
  48. <el-form-item>
  49. <el-button @click="dialogVisible1 = false">取 消</el-button>
  50. <el-button type="primary" @click="onSubmit">提交修改</el-button>
  51. </el-form-item>
  52. </el-form>
  53. </el-dialog>
  54. <el-dialog title="新增出票人" :visible.sync="dialogVisible2" width="500px">
  55. <el-form ref="form" :model="form" label-width="100px">
  56. <el-form-item label="出票人名称" style="width: 100%" prop="name">
  57. <el-input v-model="form.name"></el-input>
  58. </el-form-item>
  59. <el-form-item label="银行账号" style="width: 100%" prop="bankAccount">
  60. <el-input v-model="form.bankAccount"></el-input>
  61. </el-form-item>
  62. <el-form-item label="开户行名称" style="width: 100%" prop="bankName">
  63. <el-input v-model="form.bankName"></el-input>
  64. </el-form-item>
  65. <el-form-item style="display: flex">
  66. <el-button @click="dialogVisible2 = false">取 消</el-button>
  67. <el-button type="primary" @click="addTicketdrawer">确认添加</el-button>
  68. </el-form-item>
  69. </el-form>
  70. </el-dialog>
  71. <el-table
  72. :row-key="getRowKey"
  73. v-loading="listLoading"
  74. :data="temporaryList"
  75. element-loading-text="Loading"
  76. border
  77. fit
  78. highlight-current-row
  79. @select="handleSelectionChange"
  80. @select-all="handleAll"
  81. >
  82. <el-table-column
  83. align="center"
  84. type="selection"
  85. :reserve-selection="true"
  86. >
  87. </el-table-column>
  88. <el-table-column label="出票人名称" align="center" prop="name">
  89. </el-table-column>
  90. <el-table-column label="账号" align="center" prop="bankAccount">
  91. </el-table-column>
  92. <el-table-column align="center" prop="bankName" label="开户行名称">
  93. </el-table-column>
  94. <el-table-column align="center" prop="statusText" label="出票人状态">
  95. </el-table-column>
  96. <el-table-column align="center" prop="createdAt" label="时间">
  97. </el-table-column>
  98. <el-table-column
  99. align="center"
  100. prop="created_at"
  101. label="操作"
  102. width="250"
  103. >
  104. <template slot-scope="scope">
  105. <el-tag
  106. type="primary"
  107. style="cursor: pointer; margin-right: 15px"
  108. @click="modify(scope.row.id)"
  109. >修改
  110. </el-tag>
  111. <el-tag
  112. type="success"
  113. style="cursor: pointer; margin-right: 15px"
  114. @click="recover(scope.row.id)"
  115. v-if="scope.row.status == 1"
  116. >恢复
  117. </el-tag>
  118. <el-tag
  119. type="danger"
  120. style="cursor: pointer; margin-right: 15px"
  121. @click="deletestatus(scope.row.id)"
  122. v-if="scope.row.status == 0"
  123. >删除</el-tag
  124. >
  125. </template>
  126. </el-table-column>
  127. </el-table>
  128. <div class="pagesip">
  129. <el-button
  130. type="primary"
  131. size="small"
  132. style="background-color: #d8ab5a; border-color: #d8ab5a; margin: 0 20px"
  133. @click="jumpFirstPage"
  134. >首页
  135. </el-button>
  136. <el-pagination
  137. background
  138. @current-change="handleCurrentChange"
  139. layout="total,prev, pager, next"
  140. :total="total"
  141. :page-size="pagesize"
  142. :current-page="currentPage"
  143. prev-text="上一页"
  144. next-text="下一页"
  145. :hide-on-single-page="false"
  146. ref="pagination"
  147. >
  148. </el-pagination>
  149. <el-button
  150. type="primary"
  151. size="small"
  152. style="background-color: #d8ab5a; border-color: #d8ab5a; margin: 0 20px"
  153. @click="jumpLastPage"
  154. >尾页
  155. </el-button>
  156. </div>
  157. </div>
  158. </template>
  159. <script>
  160. import { dataConversionUtil } from "../../utils/Excel.js";
  161. import { getDrawerSearch } from "@/api/drawer";
  162. export default {
  163. filters: {
  164. statusFilter(status) {
  165. const statusMap = {
  166. published: "success",
  167. draft: "gray",
  168. deleted: "danger",
  169. };
  170. return statusMap[status];
  171. },
  172. },
  173. data() {
  174. return {
  175. // 弹窗显示
  176. dialogVisible1: false,
  177. dialogVisible2: false,
  178. // 表单数据
  179. formData: {
  180. startTime: "",
  181. endTime: "",
  182. name: "", // 出票人
  183. status: "", // 出票人状态
  184. },
  185. // 新增出票人数据
  186. form: {
  187. name: "",
  188. bankAccount: "",
  189. bankName: "",
  190. },
  191. oldTableData: "",
  192. // 修改出票人数据
  193. tableData: {
  194. name: "",
  195. bankAccount: "",
  196. bankName: "",
  197. id: "",
  198. createdAt: "",
  199. status: "",
  200. statusText: "",
  201. },
  202. /* 当前页数 */
  203. currentPage: 1,
  204. /* 每页显示个数 */
  205. pagesize: 10,
  206. /* 总条数 */
  207. total: 20,
  208. multipleSelection: [],
  209. srcList: [],
  210. list: [],
  211. temporaryList: [],
  212. listLoading: false,
  213. status: "",
  214. hpstatus: "",
  215. search: "",
  216. checked: "",
  217. pickerOptions: {
  218. shortcuts: [
  219. {
  220. text: "最近一周",
  221. onClick(picker) {
  222. const end = new Date();
  223. const start = new Date();
  224. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  225. picker.$emit("pick", [start, end]);
  226. },
  227. },
  228. {
  229. text: "最近一个月",
  230. onClick(picker) {
  231. const end = new Date();
  232. const start = new Date();
  233. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  234. picker.$emit("pick", [start, end]);
  235. },
  236. },
  237. {
  238. text: "最近三个月",
  239. onClick(picker) {
  240. const end = new Date();
  241. const start = new Date();
  242. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  243. picker.$emit("pick", [start, end]);
  244. },
  245. },
  246. ],
  247. },
  248. value1: "",
  249. value2: "",
  250. exportExcelData1: [], //列表缓存数据
  251. exportExcelData2: [],
  252. };
  253. },
  254. mounted() {
  255. this.checked = this.$store.state.user.checked;
  256. this.getAllList();
  257. },
  258. methods: {
  259. /* 获取列表数据 */
  260. getAllList(searchForm = {}) {
  261. const params = {
  262. pageIndex: this.currentPage,
  263. pageSize: this.pagesize,
  264. };
  265. getDrawerSearch({
  266. ...params,
  267. ...searchForm,
  268. }).then((res) => {
  269. const {
  270. data
  271. } = res;
  272. this.temporaryList = data.result;
  273. this.srcList = data.result;
  274. this.total = res.data.total;
  275. });
  276. },
  277. addTicketdrawer() {
  278. this.$router.push({
  279. path: "/form/addTicketdrawer",
  280. });
  281. },
  282. todetail(id) {
  283. console.log(id);
  284. this.$router.push({
  285. path: "/form/detail",
  286. query: {
  287. id: id,
  288. },
  289. });
  290. },
  291. // 批量恢复
  292. recovers() {
  293. let ids = Array.from(this.multipleSelection, ({
  294. id
  295. }) => id)
  296. let status=Array.from(this.multipleSelection,({status})=>status)
  297. console.log(status.includes('0'),"ss")
  298. if(!status.includes('0')){
  299. this.$message({
  300. type:'error',
  301. message:'不能恢复已是正常状态的账号'
  302. })
  303. }else{
  304. this.$request({
  305. url: "/api/Drawer/manager",
  306. method: "post",
  307. data: {
  308. ids: ids,
  309. operateType: 2,
  310. },
  311. }).then((res) => {
  312. if (res.code == 200) {
  313. this.$message({
  314. type: "success",
  315. message: "恢复成功",
  316. });
  317. this.getAllList();
  318. } else {
  319. this.$message({
  320. type: "danger",
  321. message: "恢复失败",
  322. });
  323. this.getAllList();
  324. }
  325. });
  326. }
  327. },
  328. recover(id) {
  329. this.$request({
  330. url: "/api/Drawer/manager",
  331. method: "post",
  332. data: {
  333. ids: [id],
  334. operateType: 2,
  335. },
  336. }).then((res) => {
  337. if (res.code == 200) {
  338. this.$message({
  339. type: "success",
  340. message: "恢复成功",
  341. });
  342. this.getAllList();
  343. } else {
  344. this.$message({
  345. type: "danger",
  346. message: "恢复失败",
  347. });
  348. this.getAllList();
  349. }
  350. });
  351. },
  352. deletestatuses() {
  353. let ids = Array.from(this.multipleSelection, ({
  354. id
  355. }) => id)
  356. let status=Array.from(this.multipleSelection,({status})=>status)
  357. console.log(status)
  358. if(!status.includes('0')){
  359. this.$message({
  360. type:'error',
  361. message:'不能删除已是删除状态的账号'
  362. })
  363. }else{
  364. this.$request({
  365. url: "/api/Drawer/manager",
  366. method: "post",
  367. data: {
  368. ids: ids,
  369. operateType: 1,
  370. },
  371. }).then((res) => {
  372. if (res.code == 200) {
  373. this.$message({
  374. type: "success",
  375. message: "删除成功",
  376. });
  377. this.getAllList();
  378. } else {
  379. this.$message({
  380. type: "danger",
  381. message: "删除失败",
  382. });
  383. this.getAllList();
  384. }
  385. });
  386. }
  387. },
  388. deletestatus(id) {
  389. this.$request({
  390. url: "/api/Drawer/manager",
  391. method: "post",
  392. data: {
  393. ids: [id],
  394. operateType: 1,
  395. },
  396. }).then((res) => {
  397. if (res.code == 200) {
  398. this.$message({
  399. type: "success",
  400. message: "删除成功",
  401. });
  402. this.getAllList();
  403. } else {
  404. this.$message({
  405. type: "danger",
  406. message: "删除失败",
  407. });
  408. this.getAllList();
  409. }
  410. });
  411. },
  412. // 修改信息弹窗
  413. modify(id) {
  414. this.dialogVisible1 = true;
  415. this.$request({
  416. url: "/api/Drawer/" + id,
  417. method: "get",
  418. }).then((res) => {
  419. this.tableData = res.data;
  420. this.oldTableData = {
  421. ...this.tableData
  422. }
  423. });
  424. },
  425. // 修改信息弹窗提交
  426. onSubmit() {
  427. if (JSON.stringify(this.oldTableData) === JSON.stringify(this.tableData)) {
  428. this.$message({
  429. type: 'error',
  430. message: '数据没有改变!'
  431. })
  432. }else if (this.tableData.bankAccount.length < 5 || this.tableData.bankAccount > 20) {
  433. this.$message({
  434. type: 'error',
  435. message: '银行账号必须为5~20位!'
  436. })
  437. } else {
  438. this.$request({
  439. url: "/api/Drawer/update",
  440. method: "post",
  441. data: this.tableData,
  442. }).then((res) => {
  443. if (res.code == 200) {
  444. this.$message({
  445. type: "success",
  446. message: "修改成功!",
  447. });
  448. this.getAllList();
  449. this.dialogVisible1 = false;
  450. } else {
  451. this.$message({
  452. type: "danger",
  453. message: "修改失败!",
  454. });
  455. }
  456. });
  457. }
  458. },
  459. // 新增出票人弹窗
  460. addTicketdrawer() {
  461. if (this.form.bankAccount.length < 5 || this.form.bankAccount > 20) {
  462. this.$message({
  463. type: 'error',
  464. message: '银行账号必须为5~20位!'
  465. })
  466. } else {
  467. this.$request({
  468. url: "/api/Drawer",
  469. method: "post",
  470. data: this.form,
  471. }).then((res) => {
  472. if (res.code === 200) {
  473. this.$message("添加成功!");
  474. this.getAllList();
  475. this.dialogVisible2 = false;
  476. } else {
  477. this.$message("提交失败");
  478. }
  479. });
  480. }
  481. },
  482. /* 输入出票人状态查询 */
  483. handleCommand(command) {
  484. this.status = command;
  485. if (command === "正常") {
  486. this.formData.status = 5;
  487. }
  488. if (command === "删除") {
  489. this.formData.status = 4;
  490. }
  491. if (command === "全部") {
  492. this.formData.status = "";
  493. }
  494. this.currentPage = 1;
  495. this.searchForm = {
  496. ...this.formData,
  497. };
  498. this.getAllList(this.searchForm);
  499. },
  500. /* 输入出票人名称查询 */
  501. Search() {
  502. this.currentPage = 1;
  503. this.searchForm = {
  504. ...this.formData,
  505. };
  506. this.getAllList(this.searchForm);
  507. },
  508. getRowKey(row) {
  509. return row.id;
  510. },
  511. /* 批量导出数据 */
  512. handleSelectionChange(data) {
  513. this.multipleSelection = data;
  514. },
  515. handleAll(data) {
  516. this.multipleSelection = data;
  517. },
  518. /* 批量导出 */
  519. batchExports() {
  520. if (this.multipleSelection == "") {
  521. this.Exports();
  522. } else {
  523. var tableHeader = [
  524. ["序号", "出票人名称", "账号", "开户行名称", "状态", "时间"],
  525. ];
  526. var dataList = [];
  527. this.multipleSelection.forEach((item, index) => {
  528. dataList.push([
  529. index + 1,
  530. item.name,
  531. item.bankAccount,
  532. item.bankName,
  533. item.statusText,
  534. item.createdAt,
  535. ]);
  536. });
  537. dataConversionUtil.dataToExcel("出票人列表", tableHeader, dataList);
  538. this.$message.success("导出成功!");
  539. }
  540. },
  541. /* 全部导出承兑人列表数据 */
  542. getContacts() {
  543. const data = {
  544. pageIndex: "",
  545. pageSize: -1,
  546. startTime: "",
  547. endTime: "",
  548. name: "",
  549. status: "",
  550. };
  551. getDrawerSearch({ ...data }).then((res) => {
  552. const { result } = res.data;
  553. this.multipleSelection = result;
  554. });
  555. },
  556. /* 全部导出 */
  557. Exports() {
  558. this.getContacts();
  559. setTimeout(() => {
  560. var tableHeader = [
  561. ["序号", "出票人名称", "账号", "开户行名称", "状态", "时间"],
  562. ];
  563. var dataList = [];
  564. this.multipleSelection.forEach((item, index) => {
  565. dataList.push([
  566. index + 1,
  567. item.name,
  568. item.bankAccount,
  569. item.bankName,
  570. item.statusText,
  571. item.createdAt,
  572. ]);
  573. });
  574. dataConversionUtil.dataToExcel("出票人列表", tableHeader, dataList);
  575. this.$message.success("导出成功!");
  576. }, 1000);
  577. },
  578. },
  579. };
  580. </script>
  581. <style lang="scss" scoped>
  582. .pulldown {
  583. width: 185px;
  584. height: 40px;
  585. border: 1px solid #e8e8e8;
  586. border-radius: 10px;
  587. display: flex;
  588. justify-content: center;
  589. align-items: center;
  590. justify-content: space-between;
  591. padding: 0 20px;
  592. color: #999999;
  593. }
  594. .pagesip {
  595. width: 100%;
  596. margin: 20px auto;
  597. display: flex;
  598. // align-items: center;
  599. justify-content: flex-end;
  600. }
  601. .el-pagination.is-background .el-pager li:not(.disabled).active {
  602. background-color: #d8ab5a;
  603. }
  604. .el-col {
  605. margin-bottom: 20px;
  606. }
  607. </style>