index.vue 17 KB

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