bussiness.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. <template>
  2. <basic-container>
  3. <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :permission="permissionList"
  4. :before-open="beforeOpen" v-model="form" ref="crud" @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel"
  5. @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
  6. @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
  7. <template slot="menuLeft">
  8. <el-button type="danger" size="small" icon="el-icon-delete" plain v-if="permission.bussiness_delete" @click="handleDelete">删 除
  9. </el-button>
  10. <el-button type="success" size="small" icon="el-icon-upload" plain v-if="permission.bussiness_generateapi" @click="generateDoc">
  11. 生成api文档
  12. </el-button>
  13. </template>
  14. <template slot="maxLimitForm" slot-scope="scope">
  15. <avue-input-number v-model="scope.row.maxLimit" precision="2" controls-position></avue-input-number>
  16. </template>
  17. <template slot="apiFilePath" slot-scope="scope">
  18. <el-tab v-if="scope.row.apiFilePath == null">无</el-tab>
  19. <el-tab v-if="scope.row.apiFilePath != null&&scope.row.apiFilePath != ''">有</el-tab>
  20. </template>
  21. <template slot="enable" slot-scope="scope">
  22. <el-tag type="primary" v-if="scope.row.enable == 0">启用</el-tag>
  23. <el-tag type="danger" v-if="scope.row.enable == 1">禁用</el-tag>
  24. </template>
  25. <template slot="menu" slot-scope="{row}">
  26. <el-button
  27. type ="text"
  28. size="mini"
  29. plain
  30. v-if="row.enable == 1 && permission.bussiness_enable"
  31. @click="handleEnable(row.id, 0)">启用
  32. </el-button>
  33. <el-button
  34. type ="text"
  35. size="mini"
  36. plain
  37. v-if="row.enable == 0 && permission.bussiness_enable"
  38. @click="handleEnable(row.id, 1)">禁用
  39. </el-button>
  40. </template>
  41. <template slot="registerStatus" slot-scope="{row}">
  42. <el-tag plain type="warning" size="small" v-if="row.registerStatus == 100">资料完善中</el-tag>
  43. <el-tag plain type="primary" size="small" v-if="row.registerStatus == 98">送审中</el-tag>
  44. <el-tag plain type="warning" size="small" v-if="row.registerStatus == 101">协议待签署</el-tag>
  45. <el-tag plain type="warning" size="small" v-if="row.registerStatus == 102">审核中</el-tag>
  46. <el-tag plain type="success" size="small" v-if="row.registerStatus == 200">审核成功</el-tag>
  47. <el-tag plain type="danger" size="small" v-if="row.registerStatus == 400">审核失败</el-tag>
  48. <el-tag plain type="danger" size="small" v-if="row.registerStatus == 99">送审失败</el-tag>
  49. </template>
  50. </avue-crud>
  51. </basic-container>
  52. </template>
  53. <script>
  54. import {
  55. getList,
  56. getDetail,
  57. add,
  58. update,
  59. remove,
  60. generateApi,
  61. enableBussiness
  62. } from "@/api/guosen/bussiness";
  63. import {
  64. mapGetters
  65. } from "vuex";
  66. import md5 from 'js-md5'
  67. import bussinessratestrategy from "../bussiness/bussinessratestrategy.vue";
  68. export default {
  69. components:{
  70. bussinessratestrategy
  71. },
  72. data() {
  73. return {
  74. form: {},
  75. query: {},
  76. loading: true,
  77. page: {
  78. pageSize: 10,
  79. currentPage: 1,
  80. total: 0
  81. },
  82. bussinessId: null,
  83. selectionList: [],
  84. option: {
  85. height: 'auto',
  86. calcHeight: 30,
  87. tip: false,
  88. searchShow: true,
  89. searchMenuSpan: 6,
  90. border: true,
  91. index: true,
  92. viewBtn: true,
  93. selection: true,
  94. delBtn: false,
  95. dialogClickModal: false,
  96. dialogWidth: "30%",
  97. column: [
  98. {
  99. label: "采购商名称",
  100. labelWidth: 130,
  101. prop: "name",
  102. span: 24,
  103. rules: [{
  104. required: true,
  105. message: "请输入采购商名称",
  106. trigger: "blur"
  107. }]
  108. },
  109. {
  110. label: "每日提现上限",
  111. labelWidth: 130,
  112. span: 24,
  113. prop: "maxLimit",
  114. formslot: true,
  115. rules: [{
  116. required: true,
  117. message: "请输入每日提现上限",
  118. trigger: "blur"
  119. }]
  120. },
  121. {
  122. label: "服务费率(千分比)",
  123. prop: "serviceRate",
  124. labelWidth: 130,
  125. width: 300,
  126. span: 24,
  127. rules: [{
  128. required: true,
  129. message: "请输入关联账号的名称",
  130. trigger: "blur"
  131. }]
  132. },
  133. {
  134. label: "账号",
  135. prop: "userName",
  136. labelWidth: 130,
  137. display: true,
  138. span: 24,
  139. rules: [{
  140. required: true,
  141. message: "请输入关联账号的名称",
  142. trigger: "blur"
  143. }]
  144. },
  145. {
  146. label: "密码",
  147. prop: "userPassword",
  148. labelWidth: 130,
  149. span: 24,
  150. display: true,
  151. hide: true,
  152. rules: [{
  153. required: true,
  154. message: "请输入关联账号的密码",
  155. trigger: "blur"
  156. }]
  157. },
  158. {
  159. label: "最低采购金额",
  160. prop: "leastPrice",
  161. labelWidth: 130,
  162. span: 24,
  163. hide: true,
  164. rules: [{
  165. required: true,
  166. message: "请输入最低采购金额",
  167. trigger: "blur"
  168. }]
  169. },
  170. {
  171. label: "api文档",
  172. prop: "apiFilePath",
  173. slot: true,
  174. display: false,
  175. hide: true
  176. },
  177. {
  178. label: "回调地址",
  179. prop: "recallUrl",
  180. labelWidth: 130,
  181. span: 24,
  182. hide: true,
  183. addDisplay: false,
  184. editDisplay: false,
  185. rules: [{
  186. required: false,
  187. message: "请输入回调地址,比如:http://xxx.xxx.xxx.xxx/xxx",
  188. trigger: "blur"
  189. }]
  190. },
  191. {
  192. label: "余额(元)",
  193. prop: "remain",
  194. display: false,
  195. rules: [{
  196. required: true,
  197. message: "请输入关联账号的id",
  198. trigger: "blur"
  199. }]
  200. },
  201. {
  202. label: "启用状态",
  203. prop: "enable",
  204. type: "select",
  205. slot: true,
  206. display: false,
  207. dicData: [
  208. {
  209. label: "禁用",
  210. value: 1
  211. },
  212. {
  213. label: "启用",
  214. value: 0
  215. },
  216. ],
  217. },
  218. {
  219. label: "进件状态",
  220. prop: "registerStatus",
  221. type: "select",
  222. display: false,
  223. slot: true,
  224. dicUrl: "/api/blade-system/dict-biz/dictionary?code=merchant_register_status",
  225. props:{
  226. label: "dictValue",
  227. value: "dictKey"
  228. },
  229. },
  230. ]
  231. },
  232. data: []
  233. };
  234. },
  235. computed: {
  236. ...mapGetters(["permission"]),
  237. permissionList() {
  238. return {
  239. addBtn: this.vaildData(this.permission.bussiness_add, false),
  240. viewBtn: this.vaildData(this.permission.bussiness_view, false),
  241. delBtn: this.vaildData(this.permission.bussiness_delete, false),
  242. editBtn: this.vaildData(this.permission.bussiness_edit, false)
  243. };
  244. },
  245. ids() {
  246. let ids = [];
  247. this.selectionList.forEach(ele => {
  248. ids.push(ele.id);
  249. });
  250. return ids.join(",");
  251. }
  252. },
  253. methods: {
  254. handleEnable(bussinessId, enable){
  255. if(enable == 1){
  256. this.$confirm("确定要禁用吗?", {
  257. confirmButtonText: "确定",
  258. cancelButtonText: "取消",
  259. type: "warning"
  260. }).then(() => {
  261. let params = {"bussinessId": bussinessId, "enable": enable}
  262. enableBussiness(params).then(() => {
  263. this.onLoad(this.page);
  264. this.$message({
  265. type: "success",
  266. message: "操作成功!"
  267. });
  268. })
  269. })
  270. }else{
  271. let params = {"bussinessId": bussinessId, "enable": enable}
  272. enableBussiness(params).then(() => {
  273. this.onLoad(this.page);
  274. this.$message({
  275. type: "success",
  276. message: "操作成功!"
  277. });
  278. })
  279. }
  280. },
  281. rowSave(row, done, loading) {
  282. row.userPassword = md5(row.userPassword)
  283. add(row).then(() => {
  284. this.onLoad(this.page);
  285. this.$message({
  286. type: "success",
  287. message: "操作成功!"
  288. });
  289. done();
  290. }, error => {
  291. loading();
  292. window.console.log(error);
  293. });
  294. },
  295. rowUpdate(row, index, done, loading) {
  296. if(row.userPassword){
  297. row.userPassword = md5(row.userPassword)
  298. }
  299. update(row).then(() => {
  300. this.onLoad(this.page);
  301. this.$message({
  302. type: "success",
  303. message: "操作成功!"
  304. });
  305. done();
  306. }, error => {
  307. loading();
  308. console.log(error);
  309. });
  310. },
  311. rowDel(row) {
  312. this.$confirm("确定将选择数据删除?", {
  313. confirmButtonText: "确定",
  314. cancelButtonText: "取消",
  315. type: "warning"
  316. })
  317. .then(() => {
  318. return remove(row.id);
  319. })
  320. .then(() => {
  321. this.onLoad(this.page);
  322. this.$message({
  323. type: "success",
  324. message: "操作成功!"
  325. });
  326. });
  327. },
  328. generateDoc(){
  329. if (this.selectionList.length === 0) {
  330. this.$message.warning("请选择至少一条数据");
  331. return;
  332. }
  333. this.$confirm("确定重新生成api文档吗?", {
  334. confirmButtonText: "确定",
  335. cancelButtonText: "取消",
  336. type: "warning"
  337. })
  338. .then(() => {
  339. return generateApi(this.ids);
  340. })
  341. .then(() => {
  342. this.onLoad(this.page);
  343. this.$message({
  344. type: "success",
  345. message: "操作成功!"
  346. });
  347. this.$refs.crud.toggleSelection();
  348. });
  349. },
  350. handleDelete() {
  351. if (this.selectionList.length === 0) {
  352. this.$message.warning("请选择至少一条数据");
  353. return;
  354. }
  355. this.$confirm("确定将选择数据删除?", {
  356. confirmButtonText: "确定",
  357. cancelButtonText: "取消",
  358. type: "warning"
  359. })
  360. .then(() => {
  361. return remove(this.ids);
  362. })
  363. .then(() => {
  364. this.onLoad(this.page);
  365. this.$message({
  366. type: "success",
  367. message: "操作成功!"
  368. });
  369. this.$refs.crud.toggleSelection();
  370. });
  371. },
  372. beforeOpen(done, type) {
  373. if (["edit", "view"].includes(type)) {
  374. let userPasswordProp = this.findObject(this.option.column, "userPassword");
  375. if(type == 'edit'){
  376. userPasswordProp.rules[0].required = false;
  377. }else{
  378. userPasswordProp.rules[0].required = true;
  379. }
  380. getDetail(this.form.id).then(res => {
  381. this.form = res.data.data;
  382. });
  383. }
  384. done();
  385. },
  386. searchReset() {
  387. this.query = {};
  388. this.onLoad(this.page);
  389. },
  390. searchChange(params, done) {
  391. this.query = params;
  392. this.page.currentPage = 1;
  393. this.onLoad(this.page, params);
  394. done();
  395. },
  396. selectionChange(list) {
  397. this.selectionList = list;
  398. },
  399. selectionClear() {
  400. this.selectionList = [];
  401. this.$refs.crud.toggleSelection();
  402. },
  403. currentChange(currentPage) {
  404. this.page.currentPage = currentPage;
  405. },
  406. sizeChange(pageSize) {
  407. this.page.pageSize = pageSize;
  408. },
  409. refreshChange() {
  410. this.onLoad(this.page, this.query);
  411. },
  412. onLoad(page, params = {}) {
  413. this.loading = true;
  414. getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  415. const data = res.data.data;
  416. this.page.total = data.total;
  417. this.data = data.records;
  418. this.loading = false;
  419. this.selectionClear();
  420. });
  421. }
  422. }
  423. };
  424. </script>
  425. <style>
  426. </style>