Browse Source

1、分润、代付、账单统计

billisme 4 years ago
parent
commit
a8d41259f3
32 changed files with 4950 additions and 38 deletions
  1. 50 0
      src/api/bonus/bonusgroup.js
  2. 50 0
      src/api/bonus/bonusgroupaccount.js
  3. 50 0
      src/api/bonus/bonusgroupbill.js
  4. 58 0
      src/api/bonus/bonusgroupdailystatic.js
  5. 50 0
      src/api/bonus/bonusgroupstrategy.js
  6. 50 0
      src/api/bonus/bonusgroupstrategyaccount.js
  7. 50 0
      src/api/bonus/bonusscene.js
  8. 50 0
      src/api/bussiness/bussinesspayorder.js
  9. 318 0
      src/views/billmng/bonusbill.vue
  10. 313 0
      src/views/billmng/paybill.vue
  11. 309 0
      src/views/billmng/rechargebill.vue
  12. 295 0
      src/views/billmng/transferbill.vue
  13. 452 0
      src/views/billmng/withdrawbill.vue
  14. 6 0
      src/views/billrecord/chongzhi.vue
  15. 271 0
      src/views/bonus/bonusgroup.vue
  16. 353 0
      src/views/bonus/bonusgroupaccount.vue
  17. 358 0
      src/views/bonus/bonusgroupbill.vue
  18. 288 0
      src/views/bonus/bonusgroupdailystatic.vue
  19. 330 0
      src/views/bonus/bonusgroupstrategy.vue
  20. 345 0
      src/views/bonus/bonusgroupstrategyaccount.vue
  21. 240 0
      src/views/bonus/bonusscene.vue
  22. 380 0
      src/views/bussiness/bussinesspayorder.vue
  23. 24 3
      src/views/bussinessmng/bussiness.vue
  24. 38 8
      src/views/bussinessmng/bussinesstransferorder.vue
  25. 104 4
      src/views/bussinessmng/bussinessuserinfo.vue
  26. 50 1
      src/views/bussinessmng/bussinessuserwithdraw.vue
  27. 10 10
      src/views/bussinessmng/comps/bussinessinfo-add.vue
  28. 12 5
      src/views/guosen/bussinessbonusaccount.vue
  29. 2 2
      src/views/guosen/bussinessbonusrecords.vue
  30. 0 1
      src/views/guosen/bussinessdebitrequest.vue
  31. 40 0
      src/views/guosen/withdraw.vue
  32. 4 4
      src/views/wel/purchase.vue

+ 50 - 0
src/api/bonus/bonusgroup.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-bonus-group/bonusgroup/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-bonus-group/bonusgroup/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-bonus-group/bonusgroup/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group/bonusgroup/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group/bonusgroup/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/bonus/bonusgroupaccount.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-bonus-group-account/bonusgroupaccount/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-bonus-group-account/bonusgroupaccount/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-bonus-group-account/bonusgroupaccount/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-account/bonusgroupaccount/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-account/bonusgroupaccount/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/bonus/bonusgroupbill.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-bonus-group-bill/bonusgroupbill/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-bonus-group-bill/bonusgroupbill/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-bonus-group-bill/bonusgroupbill/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-bill/bonusgroupbill/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-bill/bonusgroupbill/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 58 - 0
src/api/bonus/bonusgroupdailystatic.js

@@ -0,0 +1,58 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-bonus-group-daily-static/bonusgroupdailystatic/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-bonus-group-daily-static/bonusgroupdailystatic/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-bonus-group-daily-static/bonusgroupdailystatic/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-daily-static/bonusgroupdailystatic/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-daily-static/bonusgroupdailystatic/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const bonus = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-daily-static/bonusgroupdailystatic/bonus',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/bonus/bonusgroupstrategy.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-bonus-group-strategy/bonusgroupstrategy/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-bonus-group-strategy/bonusgroupstrategy/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-bonus-group-strategy/bonusgroupstrategy/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-strategy/bonusgroupstrategy/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-strategy/bonusgroupstrategy/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/bonus/bonusgroupstrategyaccount.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-bonus-group-strategy-account/bonusgroupstrategyaccount/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-bonus-group-strategy-account/bonusgroupstrategyaccount/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-bonus-group-strategy-account/bonusgroupstrategyaccount/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-strategy-account/bonusgroupstrategyaccount/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-group-strategy-account/bonusgroupstrategyaccount/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/bonus/bonusscene.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-bonus-scene/bonusscene/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-bonus-scene/bonusscene/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-bonus-scene/bonusscene/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-scene/bonusscene/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-bonus-scene/bonusscene/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/bussiness/bussinesspayorder.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-bussiness-pay-order/bussinesspayorder/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-bussiness-pay-order/bussinesspayorder/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-bussiness-pay-order/bussinesspayorder/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-bussiness-pay-order/bussinesspayorder/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-bussiness-pay-order/bussinesspayorder/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 318 - 0
src/views/billmng/bonusbill.vue

@@ -0,0 +1,318 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bussinesspayorder_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+      <template slot="payStatus" slot-scope="{row}">
+        <el-tag type="success" v-if="row.payStatus === 'SUCCESS'">成功</el-tag>
+        <el-tag type="warning" v-if="row.payStatus === 'REQUEST_RECEIVE:'">请求已接收</el-tag>
+        <el-tag type="warning" v-if="row.payStatus === 'REQUEST_ACCEPT'">请求已受理</el-tag>
+        <el-tag type="warning" v-if="row.payStatus === 'REMITING'">银行处理中</el-tag>
+        <el-tag type="danger" v-if="row.payStatus === 'FAIL'">失败</el-tag>
+        <el-tag type="danger" v-if="row.payStatus === 'ERROR'">系统异常</el-tag>
+        <el-tag type="primary" v-if="row.payStatus === 'WAITING'">待发起</el-tag>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bussiness/bussinesspayorder";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          menuWidth: 100,
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "商户请求号",
+              prop: "requestNo",
+            },
+            {
+              label: "平台商",
+              prop: "bussinessId",
+              type: "select",
+              searchFilterable: true,
+              dicUrl: "/api/cyzh-guosen/bussiness/getByBussinessType?bussinessType=10&registerStatus=200",
+              search: true,
+              props:{
+                label: "name",
+                value: "id"
+              },
+            },
+            {
+              label: "付款金额",
+              prop: "orderAmount",
+            },
+            {
+              label: "渠道手续费",
+              prop: "channelFee",
+            },
+            {
+              label: "扣款金额",
+              prop: "debitAmount",
+            },
+            {
+              label: "实收金额",
+              prop: "receiveAmount",
+            },
+            {
+              label: "付款状态",
+              prop: "payStatus",
+              type: "select",
+              dicData:[
+                {
+                  label:"成功",
+                  value:"SUCCESS"
+                },
+                {
+                  label:"失败",
+                  value:"FAIL"
+                },
+                {
+                  label:"待发起",
+                  value:"WAITING"
+                },
+                {
+                  label:"系统异常",
+                  value:"ERROR"
+                },
+                {
+                  label:"银行处理中",
+                  value: "REMITING"
+                },
+                {
+                  label:"请求已受理",
+                  value: "REQUEST_ACCEPT"
+                },
+                {
+                  label:"请求已接收",
+                  value: "REQUEST_RECEIVE"
+                }
+              ],
+              search:true,
+            },
+            {
+              label: "收款方开户名",
+              prop: "receiverAccountName",
+            },
+            {
+              label: "收款方帐户号",
+              prop: "receiverAccountNo",
+            },
+            {
+              label: "收款方开户行",
+              prop: "receiverBankCode",
+            },
+            {
+              label: "账户类型",
+              prop: "bankAccountType",
+              hide:true
+            },
+            {
+              label: "支行编号",
+              prop: "branchBankCode",
+              hide:true
+            },
+            {
+              label: "失败原因",
+              prop: "failReason",
+            },
+            {
+              label: "创建时间",
+              prop: "createTime",
+              type: "date",
+              search: true,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+            {
+              label: "更新时间",
+              prop: "updateTime",
+              type: "date",
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinesspayorder_add, false),
+          viewBtn: this.vaildData(this.permission.bussinesspayorder_view, false),
+          delBtn: this.vaildData(this.permission.bussinesspayorder_delete, false),
+          editBtn: this.vaildData(this.permission.bussinesspayorder_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        params.bizType = 2;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 313 - 0
src/views/billmng/paybill.vue

@@ -0,0 +1,313 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bussinesspayorder_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+      <template slot="payStatus" slot-scope="{row}">
+        <el-tag type="success" v-if="row.payStatus === 'SUCCESS'">成功</el-tag>
+        <el-tag type="warning" v-if="row.payStatus === 'REQUEST_RECEIVE'">请求已接收</el-tag>
+        <el-tag type="warning" v-if="row.payStatus === 'REQUEST_ACCEPT'">请求已受理</el-tag>
+        <el-tag type="warning" v-if="row.payStatus === 'REMITING'">银行处理中</el-tag>
+        <el-tag type="danger" v-if="row.payStatus === 'FAIL'">失败</el-tag>
+        <el-tag type="danger" v-if="row.payStatus === 'ERROR'">系统异常</el-tag>
+        <el-tag type="primary" v-if="row.payStatus === 'WAITING'">待发起</el-tag>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bussiness/bussinesspayorder";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "商户请求号",
+              prop: "requestNo",
+            },
+            {
+              label: "采购商订单号",
+              prop: "bussinessOrderId",
+            },
+            {
+              label: "采购商",
+              prop: "bussinessId",
+              type: "select",
+              searchFilterable: true,
+              dicUrl: "/api/cyzh-guosen/bussiness/listBussiness?size=500",
+              search: true,
+              props:{
+                label: "name",
+                value: "id"
+              },
+            },
+            {
+              label: "付款金额",
+              prop: "orderAmount",
+            },
+            {
+              label: "渠道手续费",
+              prop: "channelFee",
+            },
+            {
+              label: "付款状态",
+              prop: "payStatus",
+              type: "select",
+              dicData:[
+                {
+                  label:"成功",
+                  value:"SUCCESS"
+                },
+                {
+                  label:"失败",
+                  value:"FAIL"
+                },
+                {
+                  label:"待发起",
+                  value:"WAITING"
+                },
+                {
+                  label:"系统异常",
+                  value:"ERROR"
+                },
+                {
+                  label:"银行处理中",
+                  value: "REMITING"
+                },
+                {
+                  label:"请求已受理",
+                  value: "REQUEST_ACCEPT"
+                },
+                {
+                  label:"请求已接收",
+                  value: "REQUEST_RECEIVE"
+                }
+              ],
+              search:true,
+            },
+            {
+              label: "收款方开户名",
+              prop: "receiverAccountName",
+            },
+            {
+              label: "收款方帐户号",
+              prop: "receiverAccountNo",
+            },
+            {
+              label: "收款方开户行",
+              prop: "receiverBankCode",
+            },
+            {
+              label: "账户类型",
+              prop: "bankAccountType",
+              hide:true
+            },
+            {
+              label: "支行编号",
+              prop: "branchBankCode",
+              hide:true
+            },
+            {
+              label: "失败原因",
+              prop: "failReason",
+            },
+            {
+              label: "创建时间",
+              prop: "createTime",
+              type: "date",
+              search: true,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+            {
+              label: "更新时间",
+              prop: "updateTime",
+              type: "date",
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinesspayorder_add, false),
+          viewBtn: this.vaildData(this.permission.bussinesspayorder_view, false),
+          delBtn: this.vaildData(this.permission.bussinesspayorder_delete, false),
+          editBtn: this.vaildData(this.permission.bussinesspayorder_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        params.bizType = 1;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 309 - 0
src/views/billmng/rechargebill.vue

@@ -0,0 +1,309 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               ref="crud"
+               @row-del="rowDel"
+               v-model="form"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               :before-open="beforeOpen"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="warning"
+                   size="small"
+                   v-if="permission.chongzhi_stat && data.length > 0"
+                   @click="handleStat">
+          采购统计</el-button><span span style="color: red; font-weight:bold">{{chongZhiStat}}</span>
+      </template>
+      <template slot="menu" slot-scope="{row}">
+        <el-button type="text" size="small" icon="el-icon-zoom-in" @click="purchaseDetail(row)">采购明细
+        </el-button>
+      </template>
+      <template slot="payStatus" slot-scope="{row}">
+        <el-tag plain size="small" type="info" v-if="row.payStatus === 0">待付款</el-tag>
+        <el-tag plain size="small" type="success" v-if="row.payStatus === 1">付款成功</el-tag>
+        <el-tag plain size="small" type="danger" v-if="row.payStatus === 3">付款失败</el-tag>
+        <el-tag plain size="small" type="danger" v-if="row.payStatus === 4">系统异常</el-tag>
+        <el-tag plain size="small" type="warning" v-if="row.payStatus === 5">处理中</el-tag>
+        <el-tag plain size="small" type="danger" v-if="row.payStatus === 6">充值处理中-入账异常</el-tag>
+      </template>
+    </avue-crud>
+    <el-dialog :modal-append-to-body="false" :visible.sync="purchaseDetailVisible" title="采购明细页面" width="70%" center top="2vh" modal="true">
+        <bussinesspurchaserecord :bill-record-id="billRecordId" :bussiness-id="bussinessId" v-if="purchaseDetailVisible"></bussinesspurchaserecord>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+  import {getBussinessList as getList, billStat} from "@/api/billrecord/billrecord";
+  import {mapGetters} from "vuex";
+  import bussinesspurchaserecord from "../bussiness/bussinesspurchaserecord.vue"
+
+  export default {
+    components: {
+      bussinesspurchaserecord
+    },
+    data() {
+      return {
+        form: {},
+        query: {},
+        chongZhiStat: "",
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        billRecordId: null,
+        bussinessId: null,
+        purchaseDetailVisible: false,
+        selectionList: [],
+        option: {
+          // showHeader:false,
+          addBtn: false,
+          menu: true,
+          height: 'auto',
+          calcHeight: 30,
+          dialogWidth: 950,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: false,
+          editBtn: false,
+          delBtn: false,
+          addBtn: false,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "采购商",
+              prop: "userId",
+              type: "select",
+              dicUrl: "/api/cyzh-guosen/bussiness/list?size=500",
+              dicFormatter:(res)=>{
+                return res.data.records;
+              },
+              props:{
+                label: "name",
+                value: "id"
+              },
+              search: true,
+
+            },
+            {
+              label: "采购金额",
+              prop: "price",
+
+            },
+            {
+              label: "采购状态",
+              prop: "payStatus",
+              type: "select",
+              slot: true,
+              search: true,
+              dicData:[
+                {
+                  label:"待付款",
+                  value:0
+                },
+                {
+                  label:"付款成功",
+                  value: 1
+                },
+                {
+                  label:"付款失败",
+                  value: 3
+                },
+                {
+                  label:"系统异常",
+                  value: 4
+                },
+                {
+                  label:"处理中",
+                  value: 5
+                },
+              ]
+            },
+            {
+              label: "描述",
+              prop: "failReason",
+            },
+            {
+              label: "时间",
+              prop: "createTime",
+              type: "date",
+              search: true,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      purchaseDetail(row){
+        this.purchaseDetailVisible = true;
+        this.billRecordId = row.id;
+        this.bussinessId = row.userId;
+      },
+      handleStat(){
+        billStat(this.query).then(res =>{
+          this.chongZhiStat = "¥" + res.data.data;
+        })
+      },
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          window.console.log(error);
+          loading();
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          window.console.log(error);
+          loading();
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      searchReset() {
+        this.chongZhiStat = "";
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.chongZhiStat = "";
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getNotice(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      currentChange(currentPage) {
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize) {
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        const releaseTimeRange = this.query;
+        let values = {
+          ...params,
+        };
+        if (releaseTimeRange) {
+          values = {
+            ...params,
+            releaseTime_datege: releaseTimeRange[0],
+            releaseTime_datelt: releaseTimeRange[1],
+            ...this.query
+          };
+          values.releaseTimeRange = null;
+        }
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, values).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 295 - 0
src/views/billmng/transferbill.vue

@@ -0,0 +1,295 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+      </template>
+      <template slot="transferStatus" slot-scope="{row}">
+        <el-tag v-if="row.transferStatus === 18" plain type="info">待处理</el-tag>
+        <el-tag v-if="row.transferStatus === 19" plain type="warning">处理中</el-tag>
+        <el-tag v-if="row.transferStatus === 20" plain type="success">转账成功</el-tag>
+        <el-tag v-if="row.transferStatus === 21" plain type="danger">失败</el-tag>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bussinessmng/bussinesstransferorder";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          delBtn: false,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "商户请求号",
+              prop: "requestNo",
+            },
+            {
+              label: "转出方商户",
+              prop: "fromMerchantNo",
+              type: "select",
+              labelWidth: 120,
+              dicUrl: "/api/cyzh-guosen/bussiness/listBussiness?size=500&registerStatus=200",
+              props:{
+                label: "name",
+                value: "merchantNo"
+              },
+              addDisplay: false,
+              editDisplay: false,
+              viewDisplay: true
+            },
+            {
+              label: "转入方商户",
+              prop: "toMerchantNo",
+              type: "select",
+              labelWidth: 120,
+              dicUrl: "/api/cyzh-guosen/bussiness/listBussiness?size=500&registerStatus=200",
+              props:{
+                label: "name",
+                value: "merchantNo"
+              },
+              addDisplay: false,
+              editDisplay: false,
+              viewDisplay: true
+            },
+            {
+              label: "转账金额",
+              prop: "orderAmount",
+            },
+            {
+              label: "手续费",
+              prop: "fee",
+            },
+            {
+              label: "扣账金额",
+              prop: "debitAmount",
+            },
+            {
+              label: "入账金额	",
+              prop: "receiveAmount",
+            },
+            {
+              label: "完成时间",
+              prop: "finishTime",
+              width: 150,
+              search:true,
+            },
+            {
+              label: "转账状态",
+              prop: "transferStatus",
+              type: "select",
+              slot: true,
+              search: true,
+              dicData: [
+                {
+                  label: "待处理",
+                  value: 18
+                },
+                {
+                  label: "正在处理",
+                  value: 19
+                },
+                {
+                  label: "转账成功",
+                  value: 20
+                },
+                {
+                  label: "转账失败",
+                  value: 21
+                }
+              ],
+            },
+            {
+              label: "创建时间",
+              prop: "createTime",
+              type: "date",
+              addDisplay: false,
+              editDisplay: false,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+            {
+              label: "更新时间",
+              prop: "updateTime",
+              type: "date",
+              addDisplay: false,
+              editDisplay: false,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinesstransferorder_add, false),
+          viewBtn: this.vaildData(this.permission.bussinesstransferorder_view, false),
+          delBtn: this.vaildData(this.permission.bussinesstransferorder_delete, false),
+          editBtn: this.vaildData(this.permission.bussinesstransferorder_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 452 - 0
src/views/billmng/withdrawbill.vue

@@ -0,0 +1,452 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bussinessuserwithdraw_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+        <el-button type="success"
+                   size="small"
+                   plain
+                   icon="el-icon-download"
+                   v-if="permission.bussinessuserwithdraw_export"
+                   @click="handleExport">导出
+        </el-button>
+      </template>
+      <template slot="menu" slot-scope="{row}">
+        <el-button type="text" size="small" icon="el-icon-zoom-in" @click="handleDetail(row)">收款对象</el-button>
+      </template>
+      <template slot="menuLeft" v-if="data.length > 0">
+        <el-button type="warning"
+                   size="small"
+                   v-if="permission.bussinessuserwithdraw_stat"
+                   @click="handleStat">
+          代付统计</el-button><span style="color: red; font-weight:bold">{{withdrawStat}}</span>
+      </template>
+      <template slot="withdrawStatus" slot-scope="{row}">
+        <el-tag plain size="small" type="info" v-if="row.withdrawStatus === 10">待发起</el-tag>
+        <el-tag plain size="small" type="warning" v-if="row.withdrawStatus === 11">请求已接收(处理中)</el-tag>
+        <el-tag plain size="small" type="warning" v-if="row.withdrawStatus === 12">请求已受理(处理中)</el-tag>
+        <el-tag plain size="small" type="warning" v-if="row.withdrawStatus === 13">银行处理中(处理中)</el-tag>
+        <el-tag plain size="small" type="danger" v-if="row.withdrawStatus === 14">失败</el-tag>
+        <el-tag plain size="small" type="success" v-if="row.withdrawStatus === 15">成功</el-tag>
+      </template>
+    </avue-crud>
+    <el-dialog :modal-append-to-body="false" :visible.sync="withdrawDetailVisible" title="收款对象" width="40%">
+      <div>
+        <span style="margin:10px;">
+          <font size="3">收款账户名:</font>
+        </span>
+        <span style="margin:10px;">
+          {{withdrawObject.receiverAccountName}}
+        </span>
+      </div>
+      <div>
+        <span style="margin:10px;">
+          <font size="3">
+            银行卡编码:
+          </font>
+        </span>
+        <span style="margin:10px;">
+          {{withdrawObject.bankCode}}
+        </span>
+      </div>
+      <div>
+        <span style="margin:10px;">
+          <font size="3">
+            账户类型:
+          </font>
+        </span>
+        <span>
+          {{withdrawObject.receiveType}}
+        </span>
+      </div>
+      <div>
+        <span style="margin:10px;">
+          <font size="3">
+            银行卡号:
+          </font>
+        </span>
+        <span>
+          {{withdrawObject.bankAccountNo}}
+        </span>
+      </div>
+      <div>
+        <span style="margin:10px;">
+          <font size="3">
+            收款金额:
+          </font>
+        </span>
+        <span>
+          {{withdrawObject.orderAmount}}
+        </span>
+      </div>
+      <div>
+        <span style="margin:10px;">
+          <font size="3">
+            收款状态:
+          </font>
+        </span>
+        <span>
+          {{withdrawObject.$withdrawStatus}}
+        </span>
+      </div>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove, withdrawStat} from "@/api/bussinessmng/bussinessuserwithdraw";
+  import {mapGetters} from "vuex";
+  import website from '@/config/website';
+  import {getToken} from '@/util/auth';
+
+  export default {
+    props:{
+      userInfoId: null
+    },
+    data() {
+      return {
+        form: {},
+        search:{},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        withdrawStat:"",
+        withdrawObject:{},
+        withdrawDetailVisible: false,
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          editDisplay: false,
+          addDisplay: false,
+          delBtn: false,
+          menu: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "采购商",
+              prop: "bussinessId",
+              type: "select",
+              search: true,
+              filterable: true,
+              searchSpan: 4,
+              dicUrl: "/api/cyzh-guosen/bussiness/listBussiness?size=500",
+              props:{
+                label: "name",
+                value: "id"
+              },
+            },
+            {
+              label: "账号",
+              prop: "bankAccountNo",
+              hide: true
+            },
+            {
+              label: "到账类型",
+              prop: "receiveType",
+              type: "select",
+              hide: true,
+              dicData: [
+                {
+                  label: '实时',
+                  value: "REAL_TIME"
+                },
+                {
+                  label: '2小时到账',
+                  value: "TWO_HOUR"
+                },
+                {
+                  label: '次日到账',
+                  value: "NEXT_DAY"
+                }
+              ]
+            },
+            {
+              label: "收款金额(元)",
+              prop: "orderAmount",
+            },
+            {
+              label: "收款账户名",
+              prop: "userInfoId",
+              type: "select",
+              filterable: true,
+              dicUrl: "/api/cyzh-bussiness-user-info/bussinessuserinfo/listUserInfo",
+              props:{
+                label: "userName",
+                value: "id"
+              },
+            },
+            {
+              label: "收款状态",
+              prop: "withdrawStatus",
+              type: "select",
+              search: true,
+              searchSpan: 4,
+              slot:true,
+              dicData: [
+                {
+                  label: '待发起',
+                  value: 10
+                },
+                {
+                  label: '请求已接收(处理中)',
+                  value: 11
+                },
+                {
+                  label: '请求已受理(处理中)',
+                  value: 12
+                },
+                {
+                  label: '银行处理中(处理中)',
+                  value: 13
+                },
+                {
+                  label: '失败',
+                  value: 14
+                },
+                {
+                  label: '成功',
+                  value: 15
+                },
+              ]
+            },
+            {
+              label: "是否冲退",
+              prop: "isReversed",
+              dicData: [
+                {
+                  label: '是',
+                  value: 1
+                },
+                {
+                  label: '否',
+                  value: 0
+                },
+              ]
+            },
+            {
+              label: "失败原因",
+              prop: "failReason",
+            },
+            {
+              label: "采购商订单号",
+              prop: "bussinessOrderId",
+              searchLabelWidth: 110,
+              search:true
+            },
+            {
+              label: "时间",
+              prop: "createTime",
+              type: "date",
+              search: true,
+              valueFormat: "yyyy-MM-dd HH:mm:ss",
+              searchSpan: 4,
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinessuserwithdraw_add, false),
+          viewBtn: this.vaildData(this.permission.bussinessuserwithdraw_view, false),
+          delBtn: this.vaildData(this.permission.bussinessuserwithdraw_delete, false),
+          editBtn: this.vaildData(this.permission.bussinessuserwithdraw_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      handleExport(){
+        this.$confirm("是否导出数据?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          let createTimeStr = "";
+          let withdrawStatus = "";
+          if(this.query.createTime){
+            createTimeStr = this.query.createTime;
+          }
+          if(this.query.withdrawStatus){
+            withdrawStatus = this.query.withdrawStatus;
+          }
+          window.open(`/api/cyzh-bussiness-user-withdraw/bussinessuserwithdraw/export-withdraw?${this.website.tokenHeader}=${getToken()}&createTimeStr=${createTimeStr}&withdrawStatus=${withdrawStatus}`);
+        });
+      },
+      handleDetail(row){
+        this.withdrawDetailVisible = true;
+        this.withdrawObject = row;
+      },
+      handleStat(){
+        withdrawStat(this.query).then(res =>{
+          this.withdrawStat = "¥" + res.data.data;
+        })
+      },
+      searchReset() {
+        this.debtStat = "";
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+                .then(() => {
+                  return remove(row.id);
+                })
+                .then(() => {
+                  this.onLoad(this.page);
+                  this.$message({
+                    type: "success",
+                    message: "操作成功!"
+                  });
+                });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+                .then(() => {
+                  return remove(this.ids);
+                })
+                .then(() => {
+                  this.onLoad(this.page);
+                  this.$message({
+                    type: "success",
+                    message: "操作成功!"
+                  });
+                  this.$refs.crud.toggleSelection();
+                });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.withdrawStat = "";
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        if(this.userInfoId != null){
+          params['userInfoId'] = this.userInfoId;
+        }
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 6 - 0
src/views/billrecord/chongzhi.vue

@@ -33,6 +33,8 @@
         <el-tag plain size="small" type="success" v-if="row.payStatus === 1">付款成功</el-tag>
         <el-tag plain size="small" type="danger" v-if="row.payStatus === 3">付款失败</el-tag>
         <el-tag plain size="small" type="danger" v-if="row.payStatus === 4">系统异常</el-tag>
+        <el-tag plain size="small" type="warning" v-if="row.payStatus === 5">处理中</el-tag>
+        <el-tag plain size="small" type="danger" v-if="row.payStatus === 6">充值处理中-入账异常</el-tag>
       </template>
     </avue-crud>
     <el-dialog :modal-append-to-body="false" :visible.sync="purchaseDetailVisible" title="采购明细页面" width="70%" center top="2vh" modal="true">
@@ -127,6 +129,10 @@
                   label:"系统异常",
                   value: 4
                 },
+                {
+                  label:"处理中",
+                  value: 5
+                },
               ]
             },
             {

+ 271 - 0
src/views/bonus/bonusgroup.vue

@@ -0,0 +1,271 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bonusgroup_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bonus/bonusgroup";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      var validateRate = (rule, value, callback)=>{
+        if (value === '') {
+          callback(new Error('请输入分润比例'));
+        } else {
+          let pattern = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
+          if(pattern.test(value)){
+            callback();
+          }else{
+            callback(new Error('请正确填写分润比例,可保留两位小数'));
+          }
+          callback();
+        }
+      };
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "商户名称",
+              prop: "groupName",
+              rules: [{
+                required: true,
+                message: "请输入分润组",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "业务场景",
+              prop: "bounsSceneId",
+              type: "select",
+              dicUrl: "/api/cyzh-bonus-scene/bonusscene/listBonusScene?size=10",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              rules: [{
+                required: true,
+                message: "请选择业务场景",
+                trigger: "blur",
+              }]
+            },
+            {
+              label: "分润商户",
+              prop: "bussinessId",
+              type: "select",
+              dicUrl: "/api/cyzh-guosen/bussiness/listBussiness?size=500",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              rules: [{
+                required: true,
+                message: "请选择业务场景",
+                trigger: "blur",
+              }]
+            },
+            {
+              label: "服务费率(%)",
+              prop: "serviceRate",
+              rules: [{
+                required: true,
+                trigger: "blur",
+                validator: validateRate
+              }]
+            },
+            {
+              label: "描述",
+              prop: "groupDesc",
+              type: "textarea",
+              rules: [{
+                required: false,
+                message: "请输入分润组描述",
+                trigger: "blur",
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bonusgroup_add, false),
+          viewBtn: this.vaildData(this.permission.bonusgroup_view, false),
+          delBtn: this.vaildData(this.permission.bonusgroup_delete, false),
+          editBtn: this.vaildData(this.permission.bonusgroup_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 353 - 0
src/views/bonus/bonusgroupaccount.vue

@@ -0,0 +1,353 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bonusgroupaccount_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+      <template slot="isDefault", slot-scope="{row}">
+        <el-tag v-if="row.isDefault === 1" type="success">平台账户</el-tag>
+        <el-tag v-if="row.isDefault === 0" type="primary">商户账户</el-tag>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bonus/bonusgroupaccount";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      var validateRate = (rule, value, callback)=>{
+        if (value === '') {
+          callback(new Error('请输入分润比例'));
+        } else {
+          let pattern = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
+          if(pattern.test(value)){
+            callback();
+          }else{
+            callback(new Error('请正确填写分润比例,可保留两位小数'));
+          }
+          callback();
+        }
+      };
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "业务场景",
+              prop: "bonusSceneId",
+              type: "select",
+              filterable: true,
+              dicUrl: "/api/cyzh-bonus-scene/bonusscene/listBonusScene?size=10",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              rules: [{
+                required: false,
+                message: "请选择业务场景",
+                trigger: "blur",
+              }]
+            },
+            {
+              label: "分润商户",
+              prop: "bonusGroupId",
+              type: "select",
+              filterable: true,
+              dicUrl: "/api/cyzh-bonus-group/bonusgroup/listBonusGroup?size=500",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              rules: [{
+                required: false,
+                message: "请选择分润商户",
+                trigger: "blur",
+              }]
+            },
+            {
+              label: "收款账户名",
+              prop: "accountReceiverName",
+              labelWidth: 100,
+              rules: [{
+                required: true,
+                message: "请输入收款账户名称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "收款账户号码",
+              prop: "receiverAccountNo",
+              labelWidth: 110,
+              rules: [{
+                required: true,
+                message: "请输入收款账户号码",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "开户行",
+              prop: "receiverBankCode",
+              labelWidth: 110,
+              type: "select",
+              dicUrl: "/api/cyzh-guosen/bankcode/listBankCode?name={{key}}",
+              props:{
+                label: "name",
+                value: "code"
+              },
+              hide: true,
+              remote:true,
+              filterable: true,
+              placeholder:"输入关键字可搜索",
+              rules: [{
+                required: true,
+                message: "请输入开户总行编码",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "账户类型",
+              prop: "bankAccountType",
+              type: "select",
+              dicUrl: "/api/blade-system/dict-biz/dictionary?code=bank_account_type",
+              props:{
+                label: "dictValue",
+                value: "dictKey"
+              },
+              rules: [{
+                required: true,
+                message: "请输入分润比例",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "分润比例(%)",
+              prop: "rate",
+              labelWidth: 110,
+              rules: [{
+                required: true,
+                trigger: "blur",
+                validator: validateRate
+              }]
+            },
+            {
+              label: "是否平台账户",
+              prop: "isDefault",
+              labelWidth: 110,
+              type: "select",
+              dicData:[
+                {
+                  label:"否",
+                  value:0
+                },
+                {
+                  label:"是",
+                  value: 1
+                },
+              ],
+              slot: true,
+              rules: [{
+                required: true,
+                trigger: "blur",
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bonusgroupaccount_add, false),
+          viewBtn: this.vaildData(this.permission.bonusgroupaccount_view, false),
+          delBtn: this.vaildData(this.permission.bonusgroupaccount_delete, false),
+          editBtn: this.vaildData(this.permission.bonusgroupaccount_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        if(row.isDefault === 0){
+          if(row.bonusSceneId == null){
+            this.$message({
+              type: "error",
+              message: "非平台账户必须选择业务场景和归属商户"
+            });
+            return ;
+          }
+        }
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        if(row.isDefault === 0){
+          if(row.bonusSceneId == null){
+            this.$message({
+              type: "error",
+              message: "非平台账户必须选择业务场景和归属商户"
+            });
+            return ;
+          }
+        }
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 358 - 0
src/views/bonus/bonusgroupbill.vue

@@ -0,0 +1,358 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bonusgroupbill_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+      <template slot="bonusStatus" slot-scope="{row}">
+        <el-tag v-if="row.bonusStatus === 'REQUEST_RECEIVE'" type="warning">请求已接收</el-tag>
+        <el-tag v-if="row.bonusStatus === 'REQUEST_ACCEPT'" type="warning">请求已受理</el-tag>
+        <el-tag v-if="row.bonusStatus === 'REMITING'" type="warning">银行处理中</el-tag>
+        <el-tag v-if="row.bonusStatus === 'FAIL'" type="danger">失败</el-tag>
+        <el-tag v-if="row.bonusStatus === 'SUCCESS'" type="success">成功</el-tag>
+        <el-tag v-if="row.bonusStatus === 'ERROR'" type="danger">系统业务异常</el-tag>
+        <el-tag v-if="row.bonusStatus === 'WAITING'" type="primary">待发起</el-tag>
+      </template>
+      <template slot="accountIsDefault" slot-scope="{row}">
+        <el-tag v-if="row.accountIsDefault === 1" type="success">是</el-tag>
+        <el-tag v-if="row.accountIsDefault === 0" type="warning">否</el-tag>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bonus/bonusgroupbill";
+  import {mapGetters} from "vuex";
+
+  export default {
+    props:{
+      bonusSceneId: null,
+      bonusGroupId: null,
+      date: null
+    },
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "分润日期",
+              prop: "bonusDate",
+              type: "date",
+              format: "yyyy-MM-dd",
+              valueFormat: "yyyy-MM-dd HH:mm:ss",
+              search: true,
+            },
+            {
+              label: "分润金额(元)",
+              prop: "bonusAmt",
+              labelWidth: 120
+            },
+            {
+              label: "业务场景",
+              prop: "bonusSceneName",
+            },
+            {
+              label: "所属分润商户",
+              prop: "bonusGroupName",
+              labelWidth: 110
+            },
+            {
+              label: "所属分润策略",
+              prop: "bonusStrategyName",
+              labelWidth: 110
+            },
+            {
+              label: "收款账户名",
+              prop: "accountReceiverName",
+              search: true,
+              searchLabelWidth: 110,
+            },
+            {
+              label: "收款账户号码",
+              prop: "receiverAccountNo",
+              hide: true,
+              labelWidth: 110
+            },
+            {
+              label: "开户行编号",
+              prop: "receiverBankCode",
+              hide: true,
+            },
+            {
+              label: "账户类型",
+              prop: "bankAccountType",
+              hide: true,
+              type: "select",
+              dicData:[
+                {
+                  label:"借记卡",
+                  value: "DEBIT_CARD"
+                },
+                {
+                  label:"贷记卡",
+                  value: "CREDIT_CARD"
+                },
+                {
+                  label:"准贷卡",
+                  value: "QUASI_CREDIT_CARD"
+                },
+                {
+                  label:"存折",
+                  value: "PASSBOOK"
+                },
+                {
+                  label:"单位结算卡",
+                  value: "UNIT_SETTLE_CARD"
+                },
+                {
+                  label:"对公卡",
+                  value: "PUBLIC_CARD"
+                },
+              ]
+            },
+            {
+              label: "分润比例",
+              prop: "rate",
+              hide: true,
+            },
+            {
+              label: "分润状态",
+              prop: "bonusStatus",
+              type: "select",
+              search: true,
+              dicData:[
+                {
+                  label:"成功",
+                  value: "SUCCESS"
+                },
+                {
+                  label:"失败",
+                  value: "FAIL"
+                },
+                {
+                  label:"待发起",
+                  value: "WAITING"
+                },
+                {
+                  label:"请求已接收",
+                  value:"REQUEST_RECEIVE"
+                },
+                {
+                  label:"请求已受理",
+                  value: "REQUEST_ACCEPT"
+                },
+                {
+                  label:"银行处理中",
+                  value: "REMITING"
+                },
+                {
+                  label:"系统业务异常",
+                  value: "ERROR"
+                },
+              ]
+            },
+            {
+              label: "是否平台账户",
+              prop: "accountIsDefault",
+              type: "select",
+              labelWidth: 110,
+              dicData:[
+                {
+                  label:"否",
+                  value: 0
+                },
+                {
+                  label:"是",
+                  value: 1
+                }
+              ]
+            },
+            {
+              label: "更新时间",
+              prop: "updateTime",
+            }
+          ],
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bonusgroupbill_add, false),
+          viewBtn: this.vaildData(this.permission.bonusgroupbill_view, false),
+          delBtn: this.vaildData(this.permission.bonusgroupbill_delete, false),
+          editBtn: this.vaildData(this.permission.bonusgroupbill_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        params.bonusSceneId = this.bonusSceneId;
+        params.bonusGroupId = this.bonusGroupId;
+        params.date = this.date;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 288 - 0
src/views/bonus/bonusgroupdailystatic.vue

@@ -0,0 +1,288 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bonusgroupdaliystatic_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+      <template slot="menu" slot-scope="{row}">
+        <el-button type="text" size="small" @click="showBonusAccount(row)">账单明细</el-button>
+        <el-button type="text" size="small" @click="handleBonus(row)">分润</el-button>
+      </template>
+    </avue-crud>
+    <el-dialog :modal-append-to-body="false" :visible.sync="bonusAccountVisible" title="分润账单明细" width="80%" center top="2vh" modal="true" @close="closeAccountDialog">
+      <bonusgroupbill :bonus-scene-id="bonusSceneId" :bonus-group-id="bonusGroupId" :date="date" v-if="bonusAccountVisible"></bonusgroupbill>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove, bonus} from "@/api/bonus/bonusgroupdailystatic";
+  import {mapGetters} from "vuex";
+  import bonusgroupbill from "./bonusgroupbill.vue";
+
+  export default {
+    components: {
+      bonusgroupbill
+    },
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        bonusAccountVisible : false,
+        bonusSceneId : null,
+        bonusGroupId : null,
+        date : null,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "分润日期",
+              prop: "bonusDate",
+              type: "date",
+              search: true,
+              format: "yyyy-MM-dd",
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+            {
+              label: "业务场景",
+              prop: "bonusSceneId",
+              dicUrl: "/api/cyzh-bonus-scene/bonusscene/listBonusScene?size=10",
+              props:{
+                label: "name",
+                value: "id"
+              },
+            },
+            {
+              label: "分润商户",
+              prop: "bonusGroupId",
+              dicUrl: "/api/cyzh-bonus-group/bonusgroup/listBonusGroup?bonusSceneId={{bonusSceneId}}&size=500",
+              props:{
+                label: "name",
+                value: "id"
+              },
+            },
+            {
+              label: "总充值金额",
+              prop: "rechargeAmt",
+            },
+            {
+              label: "总充值服务费",
+              prop: "serviceFee",
+            },
+            {
+              label: "渠道手续费",
+              prop: "channelFee",
+            },
+            {
+              label: "充值笔数",
+              prop: "rechargeNum",
+            },
+            {
+              label: "可分润金额",
+              prop: "bonusAmt",
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bonusgroupdaliystatic_add, false),
+          viewBtn: this.vaildData(this.permission.bonusgroupdaliystatic_view, false),
+          delBtn: this.vaildData(this.permission.bonusgroupdaliystatic_delete, false),
+          editBtn: this.vaildData(this.permission.bonusgroupdaliystatic_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      handleBonus(row){
+        this.$confirm("确定对此报表进行分润?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          return bonus(row);
+        }).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+        });
+      },
+      showBonusAccount(row){
+        this.bonusAccountVisible = true;
+        this.bonusSceneId = row.bonusSceneId;
+        this.bonusGroupId = row.bonusGroupId;
+        this.date = row.date;
+      },
+      closeAccountDialog(){
+        this.bonusAccountVisible = false;
+        this.bonusSceneId = null;
+        this.bonusGroupId = null;
+        this.date = null;
+      },
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 330 - 0
src/views/bonus/bonusgroupstrategy.vue

@@ -0,0 +1,330 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bonusgroupstrategy_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+      <template slot="menu" slot-scope="{row}">
+        <el-button type="text" size="small" icon="el-icon-zoom-in" @click="showAccount(row)">关联账户</el-button>
+      </template>
+      <template slot="strategyType", slot-scope="{row}">
+        <el-tag v-if="row.strategyType === 1" type="success">平台策略</el-tag>
+        <el-tag v-if="row.strategyType === 2" type="primary">商户策略</el-tag>
+        <el-tag v-if="row.strategyType === 3" type="warning">其他策略</el-tag>
+      </template>
+    </avue-crud>
+    <el-dialog :modal-append-to-body="false" :visible.sync="strategyAccountVisible" title="策略关联账户" width="70%" center top="2vh" modal="true" @close="closeAccountDialog">
+      <bonusgroupstrategyaccount :bonus-scene-id="bonusSceneId" :bonus-group-id="bonusGroupId" :bonus-group-strategy-id="bonusGroupStrategyId" v-if="strategyAccountVisible"></bonusgroupstrategyaccount>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bonus/bonusgroupstrategy";
+  import bonusgroupstrategyaccount from "./bonusgroupstrategyaccount.vue"
+  import {mapGetters} from "vuex";
+
+  export default {
+    components: {
+      bonusgroupstrategyaccount
+    },
+    data() {
+      var validateRate = (rule, value, callback)=>{
+        if (value === '') {
+          callback(new Error('请输入分润比例'));
+        } else {
+          let pattern = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
+          if(pattern.test(value)){
+            callback();
+          }else{
+            callback(new Error('请正确填写分润比例,可保留两位小数'));
+          }
+          callback();
+        }
+      };
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        strategyAccountVisible: false,
+        bonusSceneId: null,
+        bonusGroupId: null,
+        bonusGroupStrategyId: null,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          menuWidth: 300,
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "策略名称",
+              prop: "strategyName",
+              rules: [{
+                required: true,
+                message: "请输入分润组策略名称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "业务场景",
+              prop: "bonusSceneId",
+              type: "select",
+              filterable: true,
+              dicUrl: "/api/cyzh-bonus-scene/bonusscene/listBonusScene?size=10",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              rules: [{
+                required: true,
+                message: "请选择业务场景",
+                trigger: "blur",
+              }]
+            },
+            {
+              label: "分润商户",
+              prop: "bonusGroupId",
+              type: "select",
+              filterable: true,
+              dicUrl: "/api/cyzh-bonus-group/bonusgroup/listBonusGroup?size=500",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              rules: [{
+                required: true,
+                message: "请选择分润商户",
+                trigger: "blur",
+              }]
+            },
+            {
+              label: "分成比例(%)",
+              prop: "rate",
+              labelWidth: 130,
+              rules: [{
+                required: true,
+                trigger: "blur",
+                validator: validateRate
+              }]
+            },
+            {
+              label: "类型",
+              prop: "strategyType",
+              type: "select",
+              rules: [{
+                required: true,
+                message: "请选择分润策略类型",
+                trigger: "blur"
+              }],
+              dicData:[
+                {
+                  label:"平台策略",
+                  value:1
+                },
+                {
+                  label:"商户策略",
+                  value: 2
+                },
+                {
+                  label:"其他策略",
+                  value: 3
+                },
+              ],
+            },
+            {
+              label: "策略描述",
+              prop: "strategyDesc",
+              type: "textarea",
+              rules: [{
+                required: false,
+                message: "请输入策略描述",
+                trigger: "blur"
+              }]
+            }
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bonusgroupstrategy_add, false),
+          viewBtn: this.vaildData(this.permission.bonusgroupstrategy_view, false),
+          delBtn: this.vaildData(this.permission.bonusgroupstrategy_delete, false),
+          editBtn: this.vaildData(this.permission.bonusgroupstrategy_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      showAccount(row){
+        this.bonusSceneId = row.bonusSceneId;
+        this.bonusGroupId = row.bonusGroupId;
+        this.bonusGroupStrategyId = row.id;
+        this.strategyAccountVisible = true;
+      },
+      closeAccountDialog(){
+        this.bonusSceneId = null;
+        this.bonusGroupId = null;
+        this.bonusGroupStrategyId = null;
+        this.strategyAccountVisible = false;
+      },
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 345 - 0
src/views/bonus/bonusgroupstrategyaccount.vue

@@ -0,0 +1,345 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bonusgroupstrategyaccount_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+      <template slot="isDefault", slot-scope="{row}">
+        <el-tag v-if="row.isDefault === 1" type="success">是</el-tag>
+        <el-tag v-if="row.isDefault === 0" type="info">否</el-tag>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bonus/bonusgroupstrategyaccount";
+  import {mapGetters} from "vuex";
+
+  export default {
+    props:{
+      bonusSceneId: null,
+      bonusGroupId: null,
+      bonusGroupStrategyId: null
+    },
+    data() {
+        var validateRate = (rule, value, callback)=>{
+            if (value === '') {
+                callback(new Error('请输入分润比例'));
+            } else {
+                let pattern = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
+                if(pattern.test(value)){
+                    callback();
+                }else{
+                    callback(new Error('请正确填写分润比例,可保留两位小数。总比例是100%'));
+                }
+                callback();
+            }
+        };
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          // dialogDirection:'rtl',
+          // dialogType:'drawer',
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "业务场景",
+              prop: "bonusSceneId",
+              type: "select",
+              rules: [{
+                required: true,
+                message: "请输入业务场景ID",
+                trigger: "blur"
+              }],
+              value: this.bonusSceneId,
+              cascaderItem: ['bonusGroupId', 'bonusGroupStrategyId', "bonusGroupAccountId"],
+              dicUrl: "/api/cyzh-bonus-scene/bonusscene/listBonusScene?size=10",
+              props:{
+                label: "name",
+                value: "id"
+              },
+            },
+            {
+              label: "分润商户",
+              prop: "bonusGroupId",
+              type: "select",
+              rules: [{
+                required: true,
+                message: "请输入分润商户组ID",
+                trigger: "blur"
+              }],
+                value: this.bonusGroupId,
+              dicUrl: "/api/cyzh-bonus-group/bonusgroup/listBonusGroup?bonusSceneId={{bonusSceneId}}&size=500",
+              props:{
+                label: "name",
+                value: "id"
+              },
+            },
+            {
+              label: "分润策略",
+              prop: "bonusGroupStrategyId",
+              type: "select",
+              rules: [{
+                required: true,
+                message: "请输入分润组策略ID",
+                trigger: "blur"
+              }],
+              value: this.bonusGroupStrategyId,
+              dicUrl: "/api/cyzh-bonus-group-strategy/bonusgroupstrategy/listBonusGroupStrategy?bonusSceneId={{bonusSceneId}}&bonusGroupId={{bonusGroupId}}&size=500",
+              props:{
+                label: "name",
+                value: "id"
+              },
+            },
+            {
+              label: "分润账户",
+              prop: "bonusGroupAccountId",
+              type: "select",
+              hide: true,
+              viewDisplay:false,
+              dicUrl: "/api/cyzh-bonus-group-account/bonusgroupaccount/listBonusGroupAccount?bonusSceneId={{bonusSceneId}}&bonusGroupId={{bonusGroupId}}&size=500",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              rules: [{
+                required: true,
+                message: "请选择分润组账户",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "账户名称",
+              prop: "accountName",
+              addDisplay:false,
+              editDisplay:false,
+            },
+            {
+              label: "银行账号",
+              prop: "accountNo",
+              addDisplay:false,
+              editDisplay:false,
+            },
+            {
+              label: "开户行",
+              prop: "bankName",
+              addDisplay:false,
+              editDisplay:false,
+            },
+            {
+              label: "是否平台账户",
+              prop: "isDefault",
+              labelWidth: 110,
+              type: "select",
+              slot: true,
+              display: false,
+              rules: [{
+                required: true,
+                message: "请输入是否是默认账户",
+                trigger: "blur"
+              }],
+              dicData:[
+                {
+                  label:"是",
+                  value:1
+                },
+                {
+                  label:"否",
+                  value: 0
+                },
+              ],
+            },
+            {
+              label: "分成比例(%)",
+              prop: "rate",
+              labelWidth: 130,
+              rules: [{
+                required: true,
+                message: "请输入分成比例(单位百分比)总比例是100%",
+                trigger: "blur",
+                validator: validateRate
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bonusgroupstrategyaccount_add, false),
+          viewBtn: this.vaildData(this.permission.bonusgroupstrategyaccount_view, false),
+          delBtn: this.vaildData(this.permission.bonusgroupstrategyaccount_delete, false),
+          editBtn: this.vaildData(this.permission.bonusgroupstrategyaccount_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        params["bonusSceneId"] = this.bonusSceneId;
+        params["bonusGroupId"] = this.bonusGroupId;
+        params["bonusGroupStrategyId"] = this.bonusGroupStrategyId;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 240 - 0
src/views/bonus/bonusscene.vue

@@ -0,0 +1,240 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bonusscene_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bonus/bonusscene";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "平台商",
+              prop: "platformBussinessId",
+              labelWidth: 100,
+              search: true,
+              searchLabelWidth: 100,
+              type: "select",
+              filterable: true,
+              dicUrl: "/api/cyzh-guosen/bussiness/getByBussinessType?bussinessType=10",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              rules: [{
+                required: true,
+                message: "请选择所属采购商",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "业务场景名称",
+              prop: "sceneName",
+              labelWidth:110,
+              rules: [{
+                required: true,
+                message: "请输入分润业务场景名称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "业务场景描述",
+              prop: "sceneDesc",
+              type: "textarea",
+              labelWidth: 110,
+              rules: [{
+                required: false,
+                message: "请输入分润业务场景描述",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bonusscene_add, false),
+          viewBtn: this.vaildData(this.permission.bonusscene_view, false),
+          delBtn: this.vaildData(this.permission.bonusscene_delete, false),
+          editBtn: this.vaildData(this.permission.bonusscene_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 380 - 0
src/views/bussiness/bussinesspayorder.vue

@@ -0,0 +1,380 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.bussinesspayorder_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bussiness/bussinesspayorder";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "商户请求号",
+              prop: "requestNo",
+              rules: [{
+                required: true,
+                message: "请输入商户请求号",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "第三方付款订单号",
+              prop: "thirdOrderNo",
+              rules: [{
+                required: true,
+                message: "请输入第三方付款订单号",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "采购商提供的订单号",
+              prop: "bussinessOrderId",
+              rules: [{
+                required: true,
+                message: "请输入采购商提供的订单号",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "采购商ID",
+              prop: "bussinessId",
+              rules: [{
+                required: true,
+                message: "请输入采购商ID",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "付款金额",
+              prop: "orderAmount",
+              rules: [{
+                required: true,
+                message: "请输入付款金额",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "业务类型,1:商户代付,2:平台分润",
+              prop: "bizType",
+              rules: [{
+                required: true,
+                message: "请输入业务类型,1:商户代付,2:平台分润",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "渠道手续费",
+              prop: "channelFee",
+              rules: [{
+                required: true,
+                message: "请输入渠道手续费",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "转账订单主键ID",
+              prop: "transferOrderId",
+              rules: [{
+                required: true,
+                message: "请输入转账订单主键ID",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "收款帐户的卡号:当type=1时有值",
+              prop: "receiverAccountNo",
+              rules: [{
+                required: true,
+                message: "请输入收款帐户的卡号:当type=1时有值",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "收款方开户名",
+              prop: "receiverAccountName",
+              rules: [{
+                required: true,
+                message: "请输入收款方开户名",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "收款方开户行",
+              prop: "receiverBankCode",
+              rules: [{
+                required: true,
+                message: "请输入收款方开户行",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "账户类型",
+              prop: "bankAccountType",
+              rules: [{
+                required: true,
+                message: "请输入账户类型",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "支行编号",
+              prop: "branchBankCode",
+              rules: [{
+                required: true,
+                message: "请输入支行编号",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "第三方支付日志",
+              prop: "thirdLog",
+              rules: [{
+                required: true,
+                message: "请输入第三方支付日志",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "失败原因",
+              prop: "failReason",
+              rules: [{
+                required: true,
+                message: "请输入失败原因",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "扣款方式,2:api对接,1:xml导入",
+              prop: "method",
+              rules: [{
+                required: true,
+                message: "请输入扣款方式,2:api对接,1:xml导入",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "冻结金额",
+              prop: "freeze",
+              rules: [{
+                required: true,
+                message: "请输入冻结金额",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "当前余额",
+              prop: "currentRemain",
+              rules: [{
+                required: true,
+                message: "请输入当前余额",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "采购商代付订阅地址",
+              prop: "payNotifyUrl",
+              rules: [{
+                required: true,
+                message: "请输入采购商代付订阅地址",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "请求IP",
+              prop: "requestIp",
+              rules: [{
+                required: true,
+                message: "请输入请求IP",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinesspayorder_add, false),
+          viewBtn: this.vaildData(this.permission.bussinesspayorder_view, false),
+          delBtn: this.vaildData(this.permission.bussinesspayorder_delete, false),
+          editBtn: this.vaildData(this.permission.bussinesspayorder_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 24 - 3
src/views/bussinessmng/bussiness.vue

@@ -167,8 +167,8 @@
             {
               label: "服务费率(千分比)",
               prop: "serviceRate",
-              labelWidth: 130,
-              width: 300,
+              labelWidth: 160,
+              // width: 300,
               span: 24,
               rules: [{
                 required: true,
@@ -230,6 +230,24 @@
                 trigger: "blur"
               }]
             },
+            {
+              label: "小微商户产品策略",
+              prop: "microRateStrategyId",
+              type: "select",
+              dicUrl: "/api/cyzh-product-rate-strategy/productratestrategy/listRateStrategy",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              display: false,
+              span: 24,
+              hide: true,
+              rules: [{
+                required: true,
+                message: "请选择产品策略",
+                trigger: "blur"
+              }]
+            },
             {
               label: "api文档",
               prop: "apiFilePath",
@@ -326,11 +344,14 @@
     methods: {
       bussinesssTypeChange(value, column){
         let parentBussinessIdCol = this.findObject(this.option.column, "parentBussinessId");
-        if (value === 10){
+        let microRateStrategyIdCol = this.findObject(this.option.column, "microRateStrategyId");
+        if (value === 10){ //平台商
           parentBussinessIdCol.rules[0].required = false;
+          microRateStrategyIdCol.display = true;
           this.form.parentBussinessId = null;
         }else{
           parentBussinessIdCol.rules[0].required = true;
+          microRateStrategyIdCol.display = false;
           if(this.parentBussiness.length > 0){
 
           }else{

+ 38 - 8
src/views/bussinessmng/bussinesstransferorder.vue

@@ -21,9 +21,10 @@
       <template slot="menuLeft">
       </template>
       <template slot="transferStatus" slot-scope="{row}">
-        <el-tag v-if="row.transferStatus === 'SUCCESS'" plain type="success">转账成功</el-tag>
-        <el-tag v-if="row.transferStatus === 'REQUEST_RECEIVE'" plain type="warning">处理中</el-tag>
-        <el-tag v-if="row.transferStatus === 'FAIL'" plain type="danger">失败</el-tag>
+        <el-tag v-if="row.transferStatus === 18" plain type="info">待处理</el-tag>
+        <el-tag v-if="row.transferStatus === 19" plain type="warning">处理中</el-tag>
+        <el-tag v-if="row.transferStatus === 20" plain type="success">转账成功</el-tag>
+        <el-tag v-if="row.transferStatus === 21" plain type="danger">失败</el-tag>
       </template>
     </avue-crud>
   </basic-container>
@@ -118,11 +119,40 @@
               type: "select",
               slot: true,
               search: true,
-              dicUrl: "/api/blade-system/dict-biz/dictionary?code=yee_transfer_order_status",
-              props:{
-                label: "dictValue",
-                value: "dictKey"
-              },
+              dicData: [
+                {
+                  label: "待处理",
+                  value: 18
+                },
+                {
+                  label: "正在处理",
+                  value: 19
+                },
+                {
+                  label: "转账成功",
+                  value: 20
+                },
+                {
+                  label: "转账失败",
+                  value: 21
+                }
+              ],
+            },
+            {
+              label: "创建时间",
+              prop: "createTime",
+              type: "date",
+              addDisplay: false,
+              editDisplay: false,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+            {
+              label: "更新时间",
+              prop: "updateTime",
+              type: "date",
+              addDisplay: false,
+              editDisplay: false,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
             },
           ]
         },

+ 104 - 4
src/views/bussinessmng/bussinessuserinfo.vue

@@ -26,6 +26,10 @@
                    v-if="permission.bussinessuserinfo_delete"
                    @click="handleDelete">删 除
         </el-button>
+        <el-button type="success"
+                   size="small"
+                   @click="handleBatchImport">批量导入
+        </el-button>
       </template>
       <template slot="registerStatus" slot-scope="{row}">
         <el-tag plain type="warning" size="small" v-if="row.registerStatus === 100">资料完善中</el-tag>
@@ -38,7 +42,7 @@
       <!-- 操作菜单 -->
         <template slot-scope="{row}" slot="menu">
           <div>
-              <el-button v-if="row.registerStatus !== 200" style="color:orange;"type="text" size="small" plain class="none-border" @click.stop="submitRegister(row.id)">提交申请</el-button>
+              <el-button v-if="row.registerStatus === 100 || row.registerStatus === 99 || row.registerStatus === 400" style="color:orange;"type="text" size="small" plain class="none-border" @click.stop="submitRegister(row.id)">提交申请</el-button>
               <el-button v-if="row.registerStatus === 200 && permission.bussinessuserinfo_withdraw" style="color:green;" type="text" size="small" plain class="none-border" @click.stop="showPay(row.id)">发起代付</el-button>
               <el-button v-if="row.registerStatus === 200 && permission.bussinessuserinfo_withdrawrecords" style="color:red;"type="text" size="small" plain class="none-border" @click.stop="handleWithdrawRecordsView(row.id)">账单记录</el-button>
           </div>
@@ -73,6 +77,13 @@
         </el-form-item>
       </el-form>
     </el-dialog>
+    <el-dialog title="用户数据导入"
+               append-to-body
+               :visible.sync="excelBox"
+               width="555px">
+      <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+      </avue-form>
+    </el-dialog>
   </basic-container>
 </template>
 
@@ -90,6 +101,7 @@
     },
     data() {
       return {
+        excelBox: false,
         form: {},
         query: {},
         loading: true,
@@ -98,6 +110,26 @@
           currentPage: 1,
           total: 0
         },
+        excelOption: {
+          submitBtn: false,
+          emptyBtn: false,
+          column: [
+            {
+              label: '模板上传',
+              prop: 'excelFile',
+              type: 'upload',
+              drag: true,
+              loadText: '模板上传中,请稍等',
+              span: 24,
+              propsHttp: {
+                res: 'data'
+              },
+              tip: '请上传 .xls,.xlsx 标准格式文件',
+              action: "/api/bussiness/pay/import-payToUser-excel"
+            },
+          ]
+        },
+        excelForm: {},
         userInfoId: null,
         registerRequestVisible: false,
         withdrawVisible: false,
@@ -135,6 +167,7 @@
                 {
                   label: "手机号",
                   prop: "userPhone",
+                  search: true,
                   rules: [{
                     required: true,
                     message: "请输入手机号",
@@ -159,6 +192,10 @@
                     {
                       label:"借记卡",
                       value:"DEBIT_CARD"
+                    },
+                    {
+                      label:"存折",
+                      value:"PASSBOOK"
                     }
                   ],
                   rules: [{
@@ -210,7 +247,7 @@
                 {
                   label: "身份证号",
                   prop: "userLicenceNo",
-                  span: 8,
+                  span: 12,
                   labelWidth: 100,
                   hide: true,
                   rules: [{
@@ -219,11 +256,49 @@
                     trigger: "blur"
                   }]
                 },
+                {
+                  label: "身份证类型",
+                  prop: "userLicenceType",
+                  type: "select",
+                  span: 12,
+                  labelWidth: 110,
+                  dicData:[
+                    {
+                      label:"身份证",
+                      value:"ID_CARD"
+                    },
+                    {
+                      label:"护照",
+                      value: "PASSPORT"
+                    },
+                    {
+                      label:"港澳居民往来内地通行证",
+                      value: "HM_VISITORPASS"
+                    },
+                    {
+                      label:"台胞证",
+                      value: "TAIWAN"
+                    },
+                    {
+                      label:"士兵证",
+                      value: "SOLDIER"
+                    },
+                    {
+                      label:"军官证",
+                      value: "OFFICERS"
+                    },
+                  ],
+                  rules: [{
+                    required: true,
+                    message: "请选择用户证件类型",
+                    trigger: "blur"
+                  }]
+                },
                 {
                   label: "身份证件正面照",
                   prop: "userCardFrontUrl",
                   type: "upload",
-                  span: 8,
+                  span: 12,
                   hide:true,
                   labelWidth: 130,
                   listType: "picture-img",
@@ -241,7 +316,7 @@
                   label: "身份证件反面照",
                   prop: "userCardBackUrl",
                   type: "upload",
-                  span: 8,
+                  span: 12,
                   hide:true,
                   labelWidth: 130,
                   listType: "picture-img",
@@ -312,6 +387,22 @@
                 trigger: "blur"
               }]
             },
+            {
+              label: "创建时间",
+              prop: "createTime",
+              type: "date",
+              addDisplay: false,
+              editDisplay: false,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+            {
+              label: "更新时间",
+              prop: "updateTime",
+              type: "date",
+              addDisplay: false,
+              editDisplay: false,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
           ]
         },
         data: [],
@@ -344,6 +435,15 @@
       }
     },
     methods: {
+      handleBatchImport(){
+        this.excelBox = true;
+      },
+      uploadAfter(res, done, loading, column) {
+        window.console.log(column);
+        this.excelBox = false;
+        this.refreshChange();
+        done();
+      },
       resetWithdrawOrderForm(formName){
         this.payForm.orderAmount = '';
       },

+ 50 - 1
src/views/bussinessmng/bussinessuserwithdraw.vue

@@ -27,6 +27,22 @@
                    @click="handleDelete">删 除
         </el-button>
       </template>
+<!--      <template slot="menu" slot-scope="{row}">-->
+<!--        <el-button type="danger"-->
+<!--                   size="small"-->
+<!--                   plain-->
+<!--                   v-if="row.withdrawStatus === 10 || row.withdrawStatus === 14"-->
+<!--                   @click="handleRepay(row.id)">重 发-->
+<!--        </el-button>-->
+<!--      </template>-->
+      <template slot="withdrawStatus" slot-scope="{row}">
+        <el-tag v-if="row.withdrawStatus === 10" type="info">待发起</el-tag>
+        <el-tag v-if="row.withdrawStatus === 11" type="warning">处理中</el-tag>
+        <el-tag v-if="row.withdrawStatus === 12" type="warning">处理中</el-tag>
+        <el-tag v-if="row.withdrawStatus === 13" type="warning">处理中</el-tag>
+        <el-tag v-if="row.withdrawStatus === 14" type="danger">失败</el-tag>
+        <el-tag v-if="row.withdrawStatus === 15" type="success">成功</el-tag>
+      </template>
     </avue-crud>
   </basic-container>
 </template>
@@ -63,7 +79,8 @@
           editDisplay: false,
           addDisplay: false,
           delBtn: false,
-          menu: false,
+          menu: true,
+          menuWidth: 140,
           dialogClickModal: false,
           column: [
             {
@@ -111,6 +128,7 @@
             {
               label: "收款状态",
               prop: "withdrawStatus",
+              slot: true,
               dicData: [
                 {
                   label: '待发起',
@@ -160,6 +178,22 @@
               label: "采购商订单号",
               prop: "bussinessOrderId",
             },
+            {
+              label: "创建时间",
+              prop: "createTime",
+              type: "date",
+              addDisplay: false,
+              editDisplay: false,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
+            {
+              label: "更新时间",
+              prop: "updateTime",
+              type: "date",
+              addDisplay: false,
+              editDisplay: false,
+              valueFormat: "yyyy-MM-dd HH:mm:ss"
+            },
           ]
         },
         data: []
@@ -184,6 +218,21 @@
       }
     },
     methods: {
+      handleRepay(rowId){
+        this.$confirm("确定重新发起付款吗?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+            return remove(row.id);
+          }).then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
       rowSave(row, done, loading) {
         add(row).then(() => {
           this.onLoad(this.page);

+ 10 - 10
src/views/bussinessmng/comps/bussinessinfo-add.vue

@@ -323,13 +323,13 @@
                         { required: true, message: '请输入开户许可证编号', trigger: 'blur' },
                     ],
                     licenceUrl: [
-                        { required: false, message: '请上传商户证件照片', trigger: 'blur' },
+                        { required: true, message: '请上传商户证件照片', trigger: 'blur' },
                     ],
                     openAccountLicenceUrl: [
-                        { required: false, message: '请上传开户许可证照片', trigger: 'change' },
+                        { required: true, message: '请上传开户许可证照片', trigger: 'change' },
                     ],
                     handLicenceUrl: [
-                        { required: false, message: '请上传手持营业执照在经营场所的照片', trigger: 'change' },
+                        { required: true, message: '请上传手持营业执照在经营场所的照片', trigger: 'change' },
                     ],
                 },
                 rules2:{
@@ -343,10 +343,10 @@
                         {required: true, message: '请输入法人证件号码', trigger: 'blur' },
                     ],
                     legalLicenceFrontUrl:[
-                        {required: false, message: '请上传法人证件正面照片', trigger: 'change' },
+                        {required: true, message: '请上传法人证件正面照片', trigger: 'change' },
                     ],
                     legalLicenceBackUrl:[
-                        {required: false, message: '请上传法人证件反面照片', trigger: 'change' },
+                        {required: true, message: '请上传法人证件反面照片', trigger: 'change' },
                     ]
                 },
                 rules3:{
@@ -363,10 +363,10 @@
 
                 rules4:{
                     agreementPhotoUrl:[
-                        {required: false, message: '请上传付款业务协议图片/附件', trigger: 'change' },
+                        {required: true, message: '请上传付款业务协议图片/附件', trigger: 'change' },
                     ],
                     systemScreenshotUrl: [
-                        { required: false, message: '请上传付款业务系统截图/附件', trigger: 'change' },
+                        { required: true, message: '请上传付款业务系统截图/附件', trigger: 'change' },
                     ],
                 },
                 //勋章配置
@@ -382,11 +382,11 @@
         },
         methods: {
             handlePreview(file){
-                let fileTag = document.createElement('a')
+                let fileTag = document.createElement('a');
                 let event = new MouseEvent('click');
-                fileTag.download = file.name
+                fileTag.download = file.name;
                 fileTag.href = file.response.data;
-                fileTag.dispatchEvent(event)
+                fileTag.dispatchEvent(event);
             },
             beforeUploadLicenceUrl(file){
                 if(file.size > 2621440){

+ 12 - 5
src/views/guosen/bussinessbonusaccount.vue

@@ -35,6 +35,7 @@
   import {getList, getDetail, add, update, remove} from "@/api/guosen/bussinessbonusaccount";
   import {getList as getBankCodeList} from "@/api/guosen/bankcode";
   import {getDetail as getUserInfoDetail} from "@/api/bussinessmng/bussinessuserinfo";
+  import {getByBussinessType} from "@/api/bussinessmng/bussiness";
   import {mapGetters} from "vuex";
 
   export default {
@@ -63,12 +64,12 @@
           dialogWidth: "30%",
           column: [
             {
-              label:"所属商户",
+              label:"所属平台商户",
               prop: "bussinessName",
               display:false
             },
             {
-              label:"签约户",
+              label:"签约户",
               prop: "userInfoName",
               display:false
             },
@@ -77,7 +78,7 @@
               prop: "bussinessId",
               type: "select",
               hide:true,
-              dicUrl: "/api/cyzh-guosen/bussiness/listBussiness?size=500&registerStatus=200",
+              dicUrl: "/api/cyzh-guosen/bussiness/getByBussinessType?bussinessType=10&registerStatus=200",
               props:{
                 label: "name",
                 value: "id"
@@ -167,7 +168,7 @@
               span: 24,
               rules: [{
                 required: true,
-                message: "请输入分润比例",
+                message: "请输入收款帐户的卡号",
                 trigger: "blur"
               }]
             },
@@ -177,7 +178,7 @@
               span: 24,
               rules: [{
                 required: true,
-                message: "请输入分润比例",
+                message: "请输入收款方开户名",
                 trigger: "blur"
               }]
             },
@@ -204,6 +205,12 @@
         return ids.join(",");
       }
     },
+    created(){
+      getByBussinessType(10).then(res=>{
+        let parentBussinessIdCol = this.findObject(this.option.column, "parentBussinessId");
+        parentBussinessIdCol.dicData = res.data.data;
+      })
+    },
     methods: {
       userChange(data){
         if(data.value){

+ 2 - 2
src/views/guosen/bussinessbonusrecords.vue

@@ -140,7 +140,7 @@
               }]
             },
             {
-              label: "分状态",
+              label: "分状态",
               prop: "bonusStatus",
               type: "select",
               search: true,
@@ -168,7 +168,7 @@
               ],
               rules: [{
                 required: true,
-                message: "请输入分成状态",
+                message: "请选择分润状态",
                 trigger: "blur"
               }]
             },

+ 0 - 1
src/views/guosen/bussinessdebitrequest.vue

@@ -27,7 +27,6 @@
                    size="small"
                    icon="el-icon-goods"
                    plain
-
                    @click="toBin">卡bin查询
         </el-button>
       </template>

+ 40 - 0
src/views/guosen/withdraw.vue

@@ -26,6 +26,13 @@
                    v-if="permission.bussinessuserwithdraw_delete"
                    @click="handleDelete">删 除
         </el-button>
+        <el-button type="success"
+                   size="small"
+                   plain
+                   icon="el-icon-download"
+                   v-if="permission.bussinessuserwithdraw_export"
+                   @click="handleExport">导出
+        </el-button>
       </template>
       <template slot="menu" slot-scope="{row}">
         <el-button type="text" size="small" icon="el-icon-zoom-in" @click="handleDetail(row)">收款对象</el-button>
@@ -37,6 +44,14 @@
                    @click="handleStat">
           代付统计</el-button><span style="color: red; font-weight:bold">{{withdrawStat}}</span>
       </template>
+      <template slot="withdrawStatus" slot-scope="{row}">
+        <el-tag plain size="small" type="info" v-if="row.withdrawStatus === 10">待发起</el-tag>
+        <el-tag plain size="small" type="warning" v-if="row.withdrawStatus === 11">请求已接收(处理中)</el-tag>
+        <el-tag plain size="small" type="warning" v-if="row.withdrawStatus === 12">请求已受理(处理中)</el-tag>
+        <el-tag plain size="small" type="warning" v-if="row.withdrawStatus === 13">银行处理中(处理中)</el-tag>
+        <el-tag plain size="small" type="danger" v-if="row.withdrawStatus === 14">失败</el-tag>
+        <el-tag plain size="small" type="success" v-if="row.withdrawStatus === 15">成功</el-tag>
+      </template>
     </avue-crud>
     <el-dialog :modal-append-to-body="false" :visible.sync="withdrawDetailVisible" title="收款对象" width="40%">
       <div>
@@ -104,6 +119,8 @@
 <script>
   import {getList, getDetail, add, update, remove, withdrawStat} from "@/api/bussinessmng/bussinessuserwithdraw";
   import {mapGetters} from "vuex";
+  import website from '@/config/website';
+  import {getToken} from '@/util/auth';
 
   export default {
     props:{
@@ -112,6 +129,7 @@
     data() {
       return {
         form: {},
+        search:{},
         query: {},
         loading: true,
         page: {
@@ -145,6 +163,7 @@
               type: "select",
               search: true,
               filterable: true,
+              searchSpan: 4,
               dicUrl: "/api/cyzh-guosen/bussiness/listBussiness?size=500",
               props:{
                 label: "name",
@@ -196,6 +215,8 @@
               prop: "withdrawStatus",
               type: "select",
               search: true,
+              searchSpan: 4,
+              slot:true,
               dicData: [
                 {
                   label: '待发起',
@@ -244,6 +265,8 @@
             {
               label: "采购商订单号",
               prop: "bussinessOrderId",
+              searchLabelWidth: 110,
+              search:true
             },
             {
               label: "时间",
@@ -277,6 +300,23 @@
       }
     },
     methods: {
+      handleExport(){
+        this.$confirm("是否导出数据?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          let createTimeStr = "";
+          let withdrawStatus = "";
+          if(this.query.createTime){
+            createTimeStr = this.query.createTime;
+          }
+          if(this.query.withdrawStatus){
+            withdrawStatus = this.query.withdrawStatus;
+          }
+          window.open(`/api/cyzh-bussiness-user-withdraw/bussinessuserwithdraw/export-withdraw?${this.website.tokenHeader}=${getToken()}&createTimeStr=${createTimeStr}&withdrawStatus=${withdrawStatus}`);
+        });
+      },
       handleDetail(row){
         this.withdrawDetailVisible = true;
         this.withdrawObject = row;

+ 4 - 4
src/views/wel/purchase.vue

@@ -193,13 +193,13 @@
         let that = this;
         let newMoney = 0.00;
         list.forEach(item => {
-          newMoney = newMoney + parseFloat(item['amount']).toFixed(2);
+          newMoney = parseFloat(newMoney) + parseFloat(parseFloat(item['amount']).toFixed(2));
         });
         that.money = newMoney;
         that.moneyChina = that.digitUppercase(that.money);
-        this.statDatas[1].value = (that.money * that.statDatas[0].value).toFixed(2)
-        this.statDatas[2].value = parseFloat(that.money).toFixed(2)
-        this.statDatas[3].value = (parseFloat(that.statDatas[2].value) - parseFloat(that.statDatas[1].value)).toFixed(2)
+        this.statDatas[1].value = (that.money * that.statDatas[0].value).toFixed(2);
+        this.statDatas[2].value = parseFloat(that.money).toFixed(2);
+        this.statDatas[3].value = (parseFloat(that.statDatas[2].value) - parseFloat(that.statDatas[1].value)).toFixed(2);
         if(row.purchaseNum == 0){
           that.purchaseMap.delete(row.id);
         }else if(row.purchaseNum > 0){