Parcourir la source

1、大改,重新对接

billisme il y a 4 ans
Parent
commit
7236354076

+ 1 - 1
public/index.html

@@ -20,7 +20,7 @@
   <script src="<%= BASE_URL %>cdn/xlsx/xlsx.full.min.js"></script>
   <link rel="icon" href="<%= BASE_URL %>favicon.png">
   <!-- <title>音乐之声</title> -->
-   <title>广告商管理系统</title>
+   <title>采购商管理系统</title>
   <style>
     html,
     body,

+ 60 - 0
src/api/bussiness/bussinesscontactinfo.js

@@ -0,0 +1,60 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-bussiness-contact-info/bussinesscontactinfo/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-bussiness-contact-info/bussinesscontactinfo/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-bussiness-contact-info/bussinesscontactinfo/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-bussiness-contact-info/bussinesscontactinfo/save',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-bussiness-contact-info/bussinesscontactinfo/update',
+    method: 'post',
+    data: row
+  })
+}
+
+export const getByTypeAndBussinessInfoId = (contactType, bussinessInfoId) => {
+  return request({
+    url: '/api/cyzh-bussiness-contact-info/bussinesscontactinfo/getByTypeAndBussinessInfoId',
+    method: 'get',
+    params: {
+      contactType,
+      bussinessInfoId
+    }
+  })
+}

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

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

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

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

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

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

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

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

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

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

+ 31 - 0
src/api/bussinessregion/bussinessregion.js

@@ -0,0 +1,31 @@
+import request from '@/router/axios';
+
+export const getProvinceList = (params) => {
+  return request({
+    url: '/api/cyzh-region/region/getProvinceList',
+    method: 'get',
+    params: {
+      ...params,
+    }
+  })
+}
+
+export const getCityList = (provinceCode) => {
+  return request({
+    url: '/api/cyzh-region/region/getCityList',
+    method: 'get',
+    params: {
+      provinceCode
+    }
+  })
+}
+
+export const getDistrictList = (cityCode) => {
+  return request({
+    url: '/api/cyzh-region/region/getDistrictList',
+    method: 'get',
+    params: {
+      cityCode
+    }
+  })
+}

+ 2 - 2
src/components/index/accountstatic.vue

@@ -43,14 +43,14 @@
               },
               count: this.statData.todayIn,
               decimals: 2,
-              title: '今日充值',
+              title: '今日采购',
 
             },
             {
               click: function() {},
               count: this.statData.historyIn,
               decimals: 2,
-              title: '历史充值',
+              title: '历史采购',
 
             }
           ]

+ 2 - 2
src/config/website.js

@@ -2,10 +2,10 @@
  * 全局配置文件
  */
 export default {
-  title: "广告商管理系统",
+  title: "采购商管理系统",
   logo: "S",
   key: 'saber',//配置主键,目前用于存储
-  indexTitle: '广告商管理系统',
+  indexTitle: '采购商管理系统',
   clientId: 'saber', // 客户端id
   clientSecret: 'saber_secret', // 客户端密钥
   tenantMode: true, // 是否开启租户模式

+ 2 - 2
src/lang/zh.js

@@ -1,6 +1,6 @@
 export default {
   tip: '提示',
-  title: '广告商管理系统',
+  title: '采购商管理系统',
   logoutTip: '退出系统, 是否继续?',
   submitText: '确定',
   cancelText: '取消',
@@ -67,7 +67,7 @@ export default {
   },
   login: {
     title: '登录 ',
-    info: '广告商管理系统',
+    info: '采购商管理系统',
     tenantId: '请输入租户ID',
     username: '请输入账号',
     password: '请输入密码',

+ 4 - 4
src/views/billrecord/chongzhi.vue

@@ -22,7 +22,7 @@
                    size="small"
                    v-if="permission.chongzhi_stat && data.length > 0"
                    @click="handleStat">
-          充值统计</el-button><span span style="color: red; font-weight:bold">{{chongZhiStat}}</span>
+          采购统计</el-button><span span style="color: red; font-weight:bold">{{chongZhiStat}}</span>
       </template>
     </avue-crud>
   </basic-container>
@@ -62,7 +62,7 @@
           dialogClickModal: false,
           column: [
             {
-              label: "广告商",
+              label: "采购商",
               prop: "userId",
               type: "select",
               dicUrl: "/api/cyzh-guosen/bussiness/list?size=500",
@@ -77,12 +77,12 @@
 
             },
             {
-              label: "充值金额",
+              label: "采购金额",
               prop: "price",
 
             },
             {
-              label: "充值状态",
+              label: "采购状态",
               prop: "payStatus",
               type: "select",
               search: true,

+ 281 - 0
src/views/bussiness/bussinesscontactinfo.vue

@@ -0,0 +1,281 @@
+<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.bussinesscontactinfo_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bussiness/bussinesscontactinfo";
+  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: "legalName",
+              rules: [{
+                required: true,
+                message: "请输入法人姓名",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "法人证件类型",
+              prop: "legalLicenceType",
+              rules: [{
+                required: true,
+                message: "请输入法人证件类型",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "法人证件号码",
+              prop: "legalLicenceNo",
+              rules: [{
+                required: true,
+                message: "请输入法人证件号码",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "法人证件正面照片",
+              prop: "legalLicenceFrontUrl",
+              rules: [{
+                required: true,
+                message: "请输入法人证件正面照片",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "法人证件反面照片",
+              prop: "legalLicenceBackUrl",
+              rules: [{
+                required: true,
+                message: "请输入法人证件反面照片",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "联系人姓名",
+              prop: "contactName",
+              rules: [{
+                required: true,
+                message: "请输入联系人姓名",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "联系人证件号码",
+              prop: "contactLicenceNo",
+              rules: [{
+                required: true,
+                message: "请输入商户联系人证件号码",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "联系人手机号",
+              prop: "contactMobile",
+              rules: [{
+                required: false,
+                message: "请输入商户联系人手机号",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "联系人邮箱",
+              prop: "contactEmail",
+              rules: [{
+                required: true,
+                message: "请输入联系人邮箱",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinesscontactinfo_add, false),
+          viewBtn: this.vaildData(this.permission.bussinesscontactinfo_view, false),
+          delBtn: this.vaildData(this.permission.bussinesscontactinfo_delete, false),
+          editBtn: this.vaildData(this.permission.bussinesscontactinfo_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>

+ 294 - 0
src/views/bussiness/bussinessgoods.vue

@@ -0,0 +1,294 @@
+<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.bussinessgoods_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bussiness/bussinessgoods";
+  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: "goodsNo",
+              rules: [{
+                required: false,
+                message: "请输入商品编号",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商品名称",
+              prop: "goodsName",
+              rules: [{
+                required: true,
+                message: "请输入商品名称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商品类型",
+              prop: "goodsType",
+              rules: [{
+                required: false,
+                message: "请输入商品类型",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商品介绍",
+              prop: "goodsDesc",
+              rules: [{
+                required: false,
+                message: "请输入商品介绍",
+                trigger: "blur"
+              }],
+              hide: true
+            },
+            {
+              label: "商品单价",
+              prop: "goodsPrice",
+              rules: [{
+                required: true,
+                message: "请输入商品单价",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商品备注",
+              prop: "goodsRemark",
+              rules: [{
+                required: false,
+                message: "请输入商品备注",
+                trigger: "blur"
+              }],
+              hide: true
+            },
+            {
+              label: "关联采购商",
+              prop: "bussinessId",
+              type: "select",
+              filterable: true,
+              dicUrl: "/api/cyzh-guosen/bussiness/listBussiness?size=500",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              hide: true,
+              addDisplay: true,
+              editDisplay: true,
+              viewDisplay: false
+            },
+            {
+              label: "关联采购商",
+              prop: "bussinessName",
+              addDisplay: false,
+              editDisplay: false,
+              viewDisplay: true
+            },
+            {
+              label: "商品图片",
+              prop: "goodsPic",
+              type: "upload",
+              listType: "picture-img",
+              action: '/api/putObject',
+              propsHttp: {
+                url: 'data'
+              },
+              rules: [{
+                required: false,
+                message: "请上传商品图片",
+                trigger: "blur"
+              }],
+              hide: true
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinessgoods_add, false),
+          viewBtn: this.vaildData(this.permission.bussinessgoods_view, false),
+          delBtn: this.vaildData(this.permission.bussinessgoods_delete, false),
+          editBtn: this.vaildData(this.permission.bussinessgoods_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>

+ 507 - 0
src/views/bussiness/bussinessinfo.vue

@@ -0,0 +1,507 @@
+<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="menuLeft">
+        <el-button type="primary" size="small" icon="el-icon-delete" v-if="permission.bussinessinfo_add && data.length <= 0"
+                   @click="showAdd">新增
+        </el-button>
+      </template>
+
+
+      <!-- 操作菜单 -->
+      <template slot-scope="{row}" slot="menu">
+        <el-button type="text" size="small" icon="el-icon-view" plain class="none-border"
+                   @click.stop="handleView(row)">查看
+        </el-button>
+        <el-button v-if="row.registerStatus == 100 || row.registerStatus == 400 || row.registerStatus == 99" type="text" size="small" icon="el-icon-edit" plain class="none-border"
+                   @click.stop="handleEdit(row)">编辑
+        </el-button>
+<!--        <el-button type="text" size="small" icon="el-icon-delete" plain class="none-border"-->
+<!--                   @click.stop="rowDel(scope.row,scope.index)">删除-->
+<!--        </el-button>-->
+      </template>
+      <template slot="registerStatus" slot-scope="{row}">
+        <el-tag plain type="warning" size="small" v-if="row.registerStatus == 100">资料完善中</el-tag>
+        <el-tag plain type="primary" size="small" v-if="row.registerStatus == 98">送审中</el-tag>
+        <el-tag plain type="warning" size="small" v-if="row.registerStatus == 101">协议待签署</el-tag>
+        <el-tag plain type="warning" size="small" v-if="row.registerStatus == 102">审核中</el-tag>
+        <el-tag plain type="success" size="small" v-if="row.registerStatus == 200">审核成功</el-tag>
+        <el-tag plain type="danger" size="small" v-if="row.registerStatus == 400">审核失败</el-tag>
+        <el-tag plain type="danger" size="small" v-if="row.registerStatus == 99">送审失败</el-tag>
+      </template>
+    </avue-crud>
+
+    <bussinessinfo-add @submit="submit" :form1="data1" :form2="data2" :form3="data3" :curEvent="currentEvent" ref="addDialog" @closeDialog="closeDialog"></bussinessinfo-add>
+    <bussinessinfo-detail :form1="detailData" ref="detailDialog"></bussinessinfo-detail>
+  </basic-container>
+</template>
+
+<script>
+  import bussinessinfoAdd from "../bussiness/comps/bussinessinfo-add.vue"
+  import bussinessinfoDetail from "../bussiness/comps/bussinessinfo-detail.vue"
+  import {
+    getList,
+    getDetail,
+    add,
+    update,
+    remove
+  } from "@/api/bussiness/bussinessinfo";
+  import {add as merchantRegister} from "@/api/bussiness/bussinessregisterrequest";
+  import {getByTypeAndBussinessInfoId} from "@/api/bussiness/bussinesscontactinfo";
+  import {
+    mapGetters
+  } from "vuex";
+
+  export default {
+    components: {
+      bussinessinfoAdd,bussinessinfoDetail
+    },
+    data() {
+      return {
+        //编辑
+        currentEvent: "add",
+        data1: {
+          id:'',
+          signType: '',
+          licenceNo: '',
+          openAccountLicenceNo: '',
+          signName: '',
+          shortName: '',
+          province: '',
+          city: '',
+          district: '',
+          address: '',
+          licenceUrl: '',
+          handLicenceUrl: '',
+          openAccountLicenceUrl: '',
+        },
+        data2: {
+          id: '',
+          bussinessInfoId: '',
+          legalName: "",
+          legalLicenceType: '',
+          legalLicenceNo: '',
+          legalLicenceFrontUrl: '',
+          legalLicenceBackUrl: ''
+        },
+        data3: {
+          bussinessInfoId: '',
+          contactName: '',
+          contactLicenceNo: '',
+          contactMobile: '',
+          contactEmail: '',
+        },
+        //详情
+        detailData:{},
+
+        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: false,
+          editBtn: false,
+          addBtn: false,
+          delBtn: false,
+          selection: true,
+          dialogClickModal: false,
+          labelWidth: 150,
+          column: [
+            {
+              label: "商户签约类型",
+              prop: "signType",
+              type: "select",
+              dicUrl: "/api/blade-system/dict-biz/dictionary?code=business_sign_type",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              },
+            },
+            {
+              label: "商户证件编号",
+              prop: "licenceNo",
+              placeholder: "统一社会信用代码证编号、事业单位法人证书编号、社会团体证书编号等,与商户签约类型匹配",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入商户证件编号,",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户证件照片",
+              prop: "licenceUrl",
+              type: "upload",
+              hide:true,
+              listType: "picture-img",
+              action: '/api/putObject',
+              propsHttp: {
+                url: 'data'
+              },
+              rules: [{
+                required: true,
+                message: "请上传商户证件照片",
+                trigger: "blur"
+              }],
+            },
+            {
+              label: "商户签约名称",
+              prop: "signName",
+              placeholder: "与商户证件主体名称一致",
+              rules: [{
+                required: true,
+                message: "请输入商户签约名称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户简称",
+              prop: "shortName",
+              rules: [{
+                required: true,
+                message: "请输入商户简称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户实际经营地所在省",
+              prop: "province",
+              placeholder: "要求按照商户实际经营地址选择对应的省编号",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入商户实际经营地所在省",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户实际经营地所在市",
+              prop: "city",
+              placeholder: "要求按照商户实际经营地址选择对应的市编号",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入商户实际经营地所在市",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户实际经营地所在区",
+              prop: "district",
+              placeholder: "要求按照商户实际经营地址选择对应的区编号",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入商户实际经营地所在区",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "经营地址",
+              prop: "address",
+              placeholder: "经营地址不需要再次上送省市区",
+              rules: [{
+                required: true,
+                message: "请输入经营地址",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "开户许可证编号",
+              prop: "openAccountLicenceNo",
+              placeholder: "如无开户许可证编号,可传基本存款账户编号",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入开户许可证编号",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "开户许可证照片",
+              prop: "openAccountLicenceUrl",
+              placeholder: "如无开户许可证,请上传基本存款账户信息表照片",
+              hide:true,
+              listType: "picture-img",
+              action: '/api/putObject',
+              propsHttp: {
+                url: 'data'
+              },
+              rules: [{
+                required: true,
+                message: "请上传开户许可证照片",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "手持营业执照在经营场所的照片",
+              prop: "handLicenceUrl",
+              hide:true,
+              listType: "picture-img",
+              action: '/api/putObject',
+              propsHttp: {
+                url: 'data'
+              },
+              rules: [{
+                required: true,
+                message: "请上传手持营业执照在经营场所的照片",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "进件状态",
+              prop: "registerStatus",
+              type: "select",
+              slot: true,
+              dicUrl: "/api/blade-system/dict-biz/dictionary?code=merchant_register_status",
+              props:{
+                label: "dictValue",
+                value: "dictKey"
+              },
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinessinfo_add, false),
+          viewBtn: this.vaildData(this.permission.bussinessinfo_view, false),
+          delBtn: this.vaildData(this.permission.bussinessinfo_delete, false),
+          editBtn: this.vaildData(this.permission.bussinessinfo_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      handleView(item){
+        let that = this;
+        getDetail(item.id).then(res=>{
+          that.detailData = res.data.data
+          that.$refs.detailDialog.open()
+        })
+      },
+      showAdd(){
+        if (!this.$isEmpty(this.data1.id)) {
+          this.resetData()
+        }
+        this.currentEvent = "add";
+        this.$refs.addDialog.open()
+      },
+      //编辑
+      handleEdit(item) {
+        this.currentEvent = "edit";
+        let that = this;
+        this.data1= {
+          id:item.id,
+          signType: item.signType,
+          licenceNo: item.licenceNo,
+          openAccountLicenceNo: item.openAccountLicenceNo,
+          signName: item.signName,
+          shortName: item.shortName,
+          province: item.province,
+          registerStatus: item.registerStatus,
+          city: item.city,
+          district: item.district,
+          address: item.address,
+          licenceUrl: item.licenceUrl,
+          handLicenceUrl: item.handLicenceUrl,
+          openAccountLicenceUrl: item.openAccountLicenceUrl,
+        }
+        getByTypeAndBussinessInfoId(10, item.id).then(res =>{
+          that.data2 = res.data.data;
+          // that.data2= {
+          //   id: res.data.data.id,
+          //   contactType: 10,
+          //   bussinessInfoId: item.id,
+          //   legalName: res.data.data.legalName,
+          //   legalLicenceType: res.data.data.legalLicenceType,
+          //   legalLicenceNo: res.data.data.legalLicenceNo,
+          //   legalLicenceFrontUrl: res.data.data.legalLicenceFrontUrl,
+          //   legalLicenceBackUrl: res.data.data.legalLicenceBackUrl
+          // }
+        }),
+        getByTypeAndBussinessInfoId(11, item.id).then(res => {
+          that.data3= res.data.data;
+          // {
+          //   id: res.data.data.id,
+          //   contactType: 11,
+          //   bussinessInfoId: item.id,
+          //   contactName: res.data.data.contactName,
+          //   contactLicenceNo: res.data.data.contactLicenceNo,
+          //   contactMobile: res.data.data.contactMobile,
+          //   contactEmail: res.data.data.contactEmail,
+          // }
+        })
+        that.$refs.addDialog.open()
+      },
+      closeDialog(){
+        this.onLoad(this.page);
+        this.resetData();
+      },
+      resetData(){
+        this.data1= {
+
+        }
+        this.data2= {
+
+        }
+        this.data3= {
+
+        }
+      },
+      submit(item) {
+        merchantRegister(item).then(() => {
+          this.onLoad(this.page);
+          this.resetData()
+          this.$refs.addDialog.close()
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+        }, error => {
+          window.console.log(error);
+        });
+      },
+      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>

+ 221 - 0
src/views/bussiness/bussinesspurchaserecord.vue

@@ -0,0 +1,221 @@
+<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.bussinesspurchaserecord_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bussiness/bussinesspurchaserecord";
+  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,
+          display: false,
+          column: [
+            {
+              label: "商品编号",
+              prop: "goodsNo"
+            },
+            {
+              label: "商品单价",
+              prop: "goodsPrice",
+            },
+            {
+              label: "采购数量",
+              prop: "purchaseNum",
+            },
+            {
+              label: "采购总额",
+              prop: "purchaseAmount",
+            },
+            {
+              label: "采购商",
+              prop: "bussinessName",
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinesspurchaserecord_add, false),
+          viewBtn: this.vaildData(this.permission.bussinesspurchaserecord_view, false),
+          delBtn: this.vaildData(this.permission.bussinesspurchaserecord_delete, false),
+          editBtn: this.vaildData(this.permission.bussinesspurchaserecord_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>

+ 265 - 0
src/views/bussiness/bussinessratestrategy.vue

@@ -0,0 +1,265 @@
+<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.bussinessratestrategy_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bussiness/bussinessratestrategy";
+  import {mapGetters} from "vuex";
+
+  export default {
+    props:{
+      bussinessId: 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: "bussinessId",
+              dicUrl: "/api/cyzh-guosen/bussiness/list?size=500",
+              labelPosition: "top",
+              filterable: true,
+              type: "select",
+              dicFormatter:(res)=>{
+                return res.data.records;
+              },
+              props:{
+                label: "name",
+                value: "id"
+              },
+              rules: [{
+                required: true,
+                message: "请选择采购商",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "开通产品",
+              prop: "productCode",
+              type: "select",
+              labelPosition: "top",
+              dicUrl: "/api/blade-system/dict-biz/dictionary?code=yee_product_rate",
+              props:{
+                label: "dictValue",
+                value: "dictKey"
+              },
+              rules: [{
+                required: true,
+                message: "请选择开通产品",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "平台服务费率(千分比):不包含支付手续费率",
+              prop: "percentRate",
+              labelPosition: "top",
+              rules: [{
+                required: true,
+                message: "请输入单笔费率",
+                trigger: "blur"
+              }]
+            }
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinessratestrategy_add, false),
+          viewBtn: this.vaildData(this.permission.bussinessratestrategy_view, false),
+          delBtn: this.vaildData(this.permission.bussinessratestrategy_delete, false),
+          editBtn: this.vaildData(this.permission.bussinessratestrategy_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(this.bussinessId != null){
+          this.form.bussinessId =  this.bussinessId;
+        }
+        let bussinessIdColumn = this.findObject(this.option.column, "bussinessId");
+        if (["edit", "view"].includes(type)) {
+          if(type == 'edit'){
+            bussinessIdColumn.disabled = true;
+          }
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }else{
+          if(this.bussinessId != null){
+            bussinessIdColumn.disabled = true;
+          }else{
+            bussinessIdColumn.disabled = false;
+          }
+        }
+        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 = {}) {
+        if(this.bussinessId != null){
+          params.bussinessId = this.bussinessId;
+        }
+        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>

+ 335 - 0
src/views/bussiness/bussinessregisterrequest.vue

@@ -0,0 +1,335 @@
+<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.bussinessregisterrequest_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/bussiness/bussinessregisterrequest";
+  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: "入网请求号	示例值:YBRWQQH20210622XXXXXX",
+              prop: "requestNo",
+              rules: [{
+                required: true,
+                message: "请输入入网请求号	示例值:YBRWQQH20210622XXXXXX",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户主体ID",
+              prop: "bussinessInfoId",
+              rules: [{
+                required: true,
+                message: "请输入商户主体ID",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "入网商户的业务角色:	SETTLED_MERCHANT:入驻商户;	SHARE_MERCHANT:分账接收方(仅允许开通结算产品,到银行账户)		非必填,不填默认为入驻商户		a. 入驻商户:	1、只能入驻到特定平台商的下级;2、目前仅支持事业单位/社会团体/企业/个体工商户的签约类型商户;	b. 分账接收方:	1、只能作为特定平台商的下级商户;2、目前仅支持事业单位/社会团体/企业/个体工商户的签约类型商户。	示例值:SETTLED_MERCHANT",
+              prop: "businessRole",
+              rules: [{
+                required: true,
+                message: "请输入入网商户的业务角色:	SETTLED_MERCHANT:入驻商户;	SHARE_MERCHANT:分账接收方(仅允许开通结算产品,到银行账户)		非必填,不填默认为入驻商户		a. 入驻商户:	1、只能入驻到特定平台商的下级;2、目前仅支持事业单位/社会团体/企业/个体工商户的签约类型商户;	b. 分账接收方:	1、只能作为特定平台商的下级商户;2、目前仅支持事业单位/社会团体/企业/个体工商户的签约类型商户。	示例值:SETTLED_MERCHANT",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户主体信息",
+              prop: "merchantSubjectInfo",
+              rules: [{
+                required: true,
+                message: "请输入商户主体信息",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户法人信息",
+              prop: "merchantCorporationInfo",
+              rules: [{
+                required: true,
+                message: "请输入商户法人信息",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户联系人信息",
+              prop: "merchantContactInfo",
+              rules: [{
+                required: true,
+                message: "请输入商户联系人信息",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "经营地址",
+              prop: "businessAddressInfo",
+              rules: [{
+                required: true,
+                message: "请输入经营地址",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "1、用于接收电子签章地址,完成协议签署;	2、用于接收审核已驳回状态下的原因;	3、用于接收入网完成的通知。",
+              prop: "notifyUrl",
+              rules: [{
+                required: true,
+                message: "请输入1、用于接收电子签章地址,完成协议签署;	2、用于接收审核已驳回状态下的原因;	3、用于接收入网完成的通知。",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "入网申请单号",
+              prop: "applicationNo",
+              rules: [{
+                required: true,
+                message: "请输入入网申请单号",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "第三方生成的入网商户编号",
+              prop: "merchantNo",
+              rules: [{
+                required: true,
+                message: "请输入第三方生成的入网商户编号",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "申请状态,10驳回,20协议待签署,30申请已完成",
+              prop: "applicationStatus",
+              rules: [{
+                required: true,
+                message: "请输入申请状态,10驳回,20协议待签署,30申请已完成",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "签约地址",
+              prop: "agreementSignUrl",
+              rules: [{
+                required: true,
+                message: "请输入签约地址",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "审核意见",
+              prop: "auditOpinion",
+              rules: [{
+                required: true,
+                message: "请输入审核意见",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "响应描述",
+              prop: "returnMsg",
+              rules: [{
+                required: true,
+                message: "请输入响应描述",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "回调日志",
+              prop: "thirdLog",
+              rules: [{
+                required: true,
+                message: "请输入回调日志",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinessregisterrequest_add, false),
+          viewBtn: this.vaildData(this.permission.bussinessregisterrequest_view, false),
+          delBtn: this.vaildData(this.permission.bussinessregisterrequest_delete, false),
+          editBtn: this.vaildData(this.permission.bussinessregisterrequest_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>

+ 544 - 0
src/views/bussiness/comps/bussinessinfo-add.vue

@@ -0,0 +1,544 @@
+<template>
+    <basic-container>
+        <el-dialog title="商户进件信息" :append-to-body="true" :visible.sync="dialogFormVisible" top="1vh" @close="dialogClose" @open="openDialog">
+            <!-- 步骤条 -->
+            <div class="steps">
+                <el-steps :active="active" process-status="finish" align-center>
+                    <el-step title="商户主体信息"></el-step>
+                    <el-step title="商户法人信息"></el-step>
+                    <el-step title="商户联系人信息"></el-step>
+                </el-steps>
+            </div>
+            <!-- 商户主体信息 -->
+            <el-card style="margin-top: 40px;" v-if="active==0">
+                <div style="margin-top:10px;">
+                    <el-form  :model="form1" :rules="rules1" ref="form1" label-width="120px" label-position="right" size="small">
+                        <el-form-item label="商户类型" prop="signType">
+                            <el-select v-model="form1.signType" placeholder="请输入商户类型" clearable="true">
+                                <el-option v-for="item in signTypeOptions" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="商户证件编号" prop="licenceNo">
+                            <el-input v-model="form1.licenceNo" placeholder="请输入商户证件编号"></el-input>
+                        </el-form-item>
+                        <el-form-item label="开户许可证编号" prop="openAccountLicenceNo">
+                            <el-input v-model="form1.openAccountLicenceNo" placeholder="请输入开户许可证编号"></el-input>
+                        </el-form-item>
+                        <el-form-item label="商户签约名称" prop="signName">
+                            <el-input v-model="form1.signName" placeholder="请输入商户签约名称"></el-input>
+                        </el-form-item>
+                        <el-form-item label="商户简称" prop="shortName">
+                            <el-input v-model="form1.shortName" placeholder="请输入商户简称"></el-input>
+                        </el-form-item>
+                        <el-row>
+                            <el-col span="8">
+                                <el-form-item label="经营地所在省" prop="province">
+                                    <el-select v-model="form1.province" placeholder="请选择经营地所在省" clearable @change="loadCity">
+                                        <el-option
+                                                v-for="item in provinceOptions"
+                                                :key="item.provinceCode"
+                                                :label="item.provinceName"
+                                                :value="item.provinceCode">
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="8">
+                                <el-form-item label="经营地所在市" prop="city">
+                                    <el-select v-model="form1.city" placeholder="请选择经营地所在市" clearable @change="loadDistrict">
+                                        <el-option
+                                                v-for="item in cityOptions"
+                                                :key="item.cityCode"
+                                                :label="item.cityName"
+                                                :value="item.cityCode">
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="8">
+                                <el-form-item label="经营地所在区" prop="district">
+                                    <el-select v-model="form1.district" placeholder="请选择经营地所在区" clearable>
+                                        <el-option
+                                                v-for="item in districtOptions"
+                                                :key="item.districtCode"
+                                                :label="item.districtName"
+                                                :value="item.districtCode">
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-form-item label="经营地址" prop="address">
+                            <el-input v-model="form1.address" placeholder="请输入经营地址"></el-input>
+                        </el-form-item>
+                        <el-row>
+                            <el-col span="12">
+                                <el-form-item prop="licenceUrl" label="商户证件照片" style="width: 45%;">
+                                    <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
+                                               :on-success="uploadLicenceUrl">
+                                        <img v-if="form1.licenceUrl" :src="form1.licenceUrl" class="avatar">
+                                        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                                    </el-upload>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="12">
+                                <el-form-item prop="handLicenceUrl" label="手持营业执照在经营场所的照片" style="width: 45%;">
+                                    <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
+                                               :on-success="uploadHandLicenceUrl">
+                                        <img v-if="form1.handLicenceUrl" :src="form1.handLicenceUrl" class="avatar">
+                                        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                                    </el-upload>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-form-item prop="openAccountLicenceUrl" label="开户许可证照片" style="width: 45%;">
+                            <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
+                                       :on-success="uploadOpenAccountLicenceUrl">
+                                <img v-if="form1.openAccountLicenceUrl" :src="form1.openAccountLicenceUrl" class="avatar">
+                                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                            </el-upload>
+                        </el-form-item>
+                        <span style="color: red">如无开户许可证,请上传基本存款账户信息表照片</span>
+                    </el-form>
+                </div>
+            </el-card>
+
+            <!-- 商户法人信息 -->
+            <div style="margin-top: 40px;" v-if="active==1">
+                <el-card style="margin-top: 10px;">
+                    <el-form ref="form2"  :model="form2" :rules="rules2">
+                        <el-form-item label="法人姓名" prop="legalName">
+                            <el-input v-model="form2.legalName" placeholder="请输入法人姓名"></el-input>
+                        </el-form-item>
+                        <el-row>
+                            <el-col span="8">
+                                <el-form-item label="法人证件类型" prop="legalLicenceType">
+                                    <el-select v-model="form2.legalLicenceType" placeholder="请输入法人证件类型" clearable="true">
+                                        <el-option v-for="item in legalLicenceTypeOptions" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="16">
+                                <el-form-item label="法人证件号码" prop="legalLicenceNo">
+                                    <el-input v-model="form2.legalLicenceNo" placeholder="请输入法人证件号码"></el-input>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-row>
+                            <el-col span="12">
+                                <el-form-item prop="legalLicenceFrontUrl" label="请上传法人证件正面照片" style="width: 45%;">
+                                    <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
+                                               :on-success="uploadLegalLicenceFrontUrl">
+                                        <img v-if="form2.legalLicenceFrontUrl" :src="form2.legalLicenceFrontUrl" class="avatar">
+                                        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                                    </el-upload>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="12">
+                                <el-form-item prop="legalLicenceBackUrl" label="法人证件反面照片" style="width: 45%;">
+                                    <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
+                                               :on-success="uploadLegalLicenceBackUrl">
+                                        <img v-if="form2.legalLicenceBackUrl" :src="form2.legalLicenceBackUrl" class="avatar">
+                                        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                                    </el-upload>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                    </el-form>
+                </el-card>
+            </div>
+
+            <!-- 商户联系人信息 -->
+            <div style="margin-top: 40px;" v-if="active==2">
+                <el-card style="margin-top: 10px;">
+                    <el-form ref="form3" :model="form3" :rules="rules3"  label-width="120px">
+                        <el-form-item label="联系人姓名" prop="contactName">
+                            <el-input v-model="form3.contactName" placeholder="请输入联系人姓名"></el-input>
+                        </el-form-item>
+                        <el-form-item label="联系人证件号" prop="contactLicenceNo">
+                            <el-input v-model="form3.contactLicenceNo" placeholder="请输入联系人证件号码"></el-input>
+                        </el-form-item>
+                        <el-form-item label="联系人手机号" prop="contactMobile">
+                            <el-input v-model="form3.contactMobile" placeholder="请输入联系人手机号"></el-input>
+                        </el-form-item>
+                        <el-form-item label="联系人邮箱" prop="contactEmail">
+                            <el-input v-model="form3.contactEmail" placeholder="请输入联系人邮箱"></el-input>
+                        </el-form-item>
+                    </el-form>
+                </el-card>
+            </div>
+
+            <div slot="footer" class="dialog-footer">
+                <div v-if="curEvent === 'add'">
+                    <el-button v-if="active!=0" @click="active--">上一步</el-button>
+                    <el-button v-if="active!=2" type="primary" @click="next">保存</el-button>
+                    <el-button v-if="active==2" type="primary" @click="submit()">提交申请</el-button>
+                </div>
+                <div v-if="curEvent === 'edit'">
+                    <el-button v-if="active!=0" @click="active--">上一步</el-button>
+                    <el-button type="primary" @click="handelNext">下一步</el-button>
+                    <el-button type="primary" @click="next">保存</el-button>
+                    <el-button v-if="active==2" type="primary" @click="submit()">提交申请</el-button>
+                </div>
+            </div>
+        </el-dialog>
+    </basic-container>
+</template>
+
+
+<script>
+    import {
+        getProvinceList,
+        getCityList,
+        getDistrictList
+    } from "@/api/bussinessregion/bussinessregion";
+    import {getDictionary} from "@/api/system/dictbiz";
+    import {add as saveBussInfo, update as updateBussInfo} from "@/api/bussiness/bussinessinfo"
+    import {add as saveContactInfo, update as updateContactInfo} from "@/api/bussiness/bussinesscontactinfo"
+    import {isvalidatemobile, isEmail} from "@/util/validate"
+    export default {
+        props:{
+            form1:Object,
+            form2:Object,
+            form3:Object,
+            curEvent: 'add'
+        },
+        data() {
+            var validatemobile = (rule, value, callback) => {
+                let isPhone = /^0\d{2,3}-?\d{7,8}$/;
+                if (value.length == 11) {
+                    if (isPhone.test(value)) {
+                        callback(new Error('手机号码格式不正确'));
+                    } else {
+                        callback();
+                    }
+                } else {
+                    callback(new Error('手机号码长度不为11位'));
+                }
+
+            };
+            var validateEmail = (rule, value, callback) => {
+                let result = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(value)
+                if(!result){
+                    callback(new Error("邮箱为空或邮箱格式有误!"));
+                }else{
+                    callback();
+                }
+            };
+            return {
+                form:{bussinessInfoId: null},
+                provinceOptions:[],
+                cityOptions:[],
+                districtOptions:[],
+                provinceProps: {
+                    lazy: true,
+                    label: 'provinceName',
+                    value: 'provinceCode',
+                },
+                cityProps: {
+                    label: 'cityName',
+                    value: 'cityCode',
+                    children: 'children'
+                },
+                districtProps: {
+                    label: 'cityName',
+                    value: 'cityCode',
+                },
+                signTypeOptions: [],
+                legalLicenceTypeOptions: [],
+                dialogFormVisible: false,
+                //步骤条
+                active: 0,
+                //表单
+                rules1:{
+                    signType: [
+                        { required: true, message: '请输入商户类型', trigger: 'blur' },
+                    ],
+                    licenceNo: [
+                        { required: true, message: '请输入商户证件编号', trigger: 'blur' },
+                    ],
+                    signName: [
+                        { required: true, message: '请输入商户签约名称', trigger: 'blur' },
+                    ],
+                    shortName: [
+                        { required: true, message: '请输入商户简称', trigger: 'blur' },
+                    ],
+                    province: [
+                        { required: true, message: '请选择商户实际经营地所在省', trigger: 'blur' },
+                    ],
+                    city: [
+                        { required: true, message: '请选择商户实际经营地所在市', trigger: 'blur' },
+                    ],
+                    district: [
+                        { required: true, message: '请选择商户实际经营地所在区', trigger: 'blur' },
+                    ],
+                    address: [
+                        { required: true, message: '请输入经营地址', trigger: 'blur' },
+                    ],
+                    openAccountLicenceNo: [
+                        { required: true, message: '请输入开户许可证编号', trigger: 'blur' },
+                    ],
+                    licenceUrl: [
+                        { required: false, message: '请上传商户证件照片', trigger: 'blur' },
+                    ],
+                    openAccountLicenceUrl: [
+                        { required: false, message: '请上传法人证件照正面照片', trigger: 'blur' },
+                    ],
+                    handLicenceUrl: [
+                        { required: false, message: '请上传法人证件照反面照片', trigger: 'blur' },
+                    ],
+                },
+                rules2:{
+                    legalName:[
+                        {required: true, message: '请输入法人姓名', trigger: 'blur' },
+                    ],
+                    legalLicenceType:[
+                        {required: true, message: '请选择法人证件类型', trigger: 'blur' },
+                    ],
+                    legalLicenceNo:[
+                        {required: true, message: '请输入法人证件号码', trigger: 'blur' },
+                    ],
+                    legalLicenceFrontUrl:[
+                        {required: false, message: '请上传法人证件正面照片', trigger: 'blur' },
+                    ],
+                    legalLicenceBackUrl:[
+                        {required: false, message: '请上传法人证件反面照片', trigger: 'blur' },
+                    ]
+                },
+                rules3:{
+                    contactName:[
+                        {required: true, message: '请输入联系人姓名', trigger: 'blur' },
+                    ],
+                    contactMobile: [
+                        { required: true, trigger: 'blur', validator: validatemobile, min: 11, max: 11},
+                    ],
+                    contactEmail:[
+                        {required: true, trigger: 'blur', validator: validateEmail },
+                    ]
+                },
+                //勋章配置
+                medalList:[],
+            }
+        },
+        created() {
+            this.loadProvince();
+            this.loadSignTypeList("business_sign_type");
+            this.loadLegalLicenceTypeList("legal_licence_type");
+        },
+        methods: {
+            openDialog(){
+                if(this.curEvent == 'edit'){
+                    this.loadCity(this.form1.province);
+                    this.loadDistrict(this.form1.city);
+                }
+            },
+            loadSignTypeList(code){
+                getDictionary({"code":code}).then(res =>{
+                    this.signTypeOptions = res.data.data;
+                })
+            },
+            loadLegalLicenceTypeList(code){
+                getDictionary({"code":code}).then(res =>{
+                    this.legalLicenceTypeOptions = res.data.data;
+                })
+            },
+            loadProvince(){
+                getProvinceList().then(res =>{
+                    this.provinceOptions = res.data.data;
+                })
+            },
+            loadCity(provinceCode){
+                getCityList(provinceCode).then(res =>{
+                    this.cityOptions = res.data.data;
+                })
+            },
+            loadDistrict(cityCode){
+                getDistrictList(cityCode).then(res =>{
+                    this.districtOptions = res.data.data;
+                })
+            },
+            open() {
+                this.dialogFormVisible = true
+            },
+            close() {
+                this.dialogFormVisible = false;
+                this.active = 0;
+            },
+            // confirm() {
+            //     let validForm3 = this.validForm('form3');
+            //     if(validForm3){
+            //         let contactBody = {};
+            //         saveContactInfo(Object.assign(contactBody, this.form2, this.form3)).then(res =>{
+            //             this.handelNext();
+            //         })
+            //     }
+            // },
+            //上传商户证件照片
+            uploadLicenceUrl(res) {
+                this.form1.licenceUrl=res.data
+            },
+            //上传手持照片
+            uploadHandLicenceUrl(res){
+                this.form1.handLicenceUrl=res.data
+            },
+            //上传开户凭证图片
+            uploadOpenAccountLicenceUrl(res){
+                this.form1.openAccountLicenceUrl=res.data
+            },
+            //上传法人证件正面照片
+            uploadLegalLicenceFrontUrl(res) {
+                this.form2.legalLicenceFrontUrl = res.data
+            },
+            //上传法人证件反面照片
+            uploadLegalLicenceBackUrl(res) {
+                this.form2.legalLegalLicenceBackUrl = res.data
+            },
+            next(){
+                switch (this.active){
+                    case 0:
+                        let validForm1 = this.validForm('form1');
+                        if(validForm1){
+                            if(this.curEvent == "add"){
+                                saveBussInfo(this.form1).then(res => {
+                                    this.$message({
+                                        type: "success",
+                                        message: res.data.msg
+                                    });
+                                    this.form.bussinessInfoId = res.data.data.id;
+                                    this.form2.bussinessInfoId = res.data.data.id;
+                                    this.form3.bussinessInfoId = res.data.data.id;
+                                    this.handelNext()
+                                });
+                            }else if(this.curEvent == "edit" && this.form1.id != null){
+                                updateBussInfo(this.form1).then(res => {
+                                    this.$message({
+                                        type: "success",
+                                        message: res.data.msg
+                                    });
+                                    this.form.bussinessInfoId = res.data.data.id;
+                                    this.form2.bussinessInfoId = res.data.data.id;
+                                    this.form3.bussinessInfoId = res.data.data.id;
+                                    this.handelNext()
+                                });
+                            }
+                        }
+                        break;
+                    case 1:
+                        let validForm2 = this.validForm('form2');
+                        if(validForm2){
+                            if(this.curEvent == "add"){
+                                this.form2.contactType = 10;
+                                saveContactInfo(this.form2).then(res => {
+                                    this.$message({
+                                        type: "success",
+                                        message: res.data.msg
+                                    });
+                                    this.form2.id = res.data.data.id;
+                                    this.handelNext()
+                                });
+                            }else if(this.curEvent == "edit" && this.form2.id != null){
+                                this.form2.contactType = 10;
+                                updateContactInfo(this.form2).then(res => {
+                                    this.$message({
+                                        type: "success",
+                                        message: res.data.msg
+                                    });
+                                    this.form2.id = res.data.data.id;
+                                    this.handelNext()
+                                });
+                            }
+                        }
+                        break;
+                    case 2:
+                        let validForm3 = this.validForm('form3');
+                        if(validForm3){
+                            if(this.curEvent == "add"){
+                                this.form3.contactType = 11;
+                                saveContactInfo(this.form3).then(res => {
+                                    this.$message({
+                                        type: "success",
+                                        message: res.data.msg
+                                    });
+                                    this.form3.id = res.data.data.id;
+                                    this.handelNext()
+                                });
+                            }else if(this.curEvent == "edit" && this.form3.id != null){
+                                this.form3.contactType = 11;
+                                updateContactInfo(this.form3).then(res => {
+                                    this.$message({
+                                        type: "success",
+                                        message: res.data.msg
+                                    });
+                                    this.form3.id = res.data.data.id;
+                                    this.handelNext()
+                                });
+                            }
+                        }
+                        break;
+                    default:
+                        break;
+                }
+            },
+            validForm(formName) {
+                let result = false;
+                this.$refs[formName].validate((valid) => {
+                    if (!valid) {
+                        result = false;
+                        return false;
+                    }else{
+                        result = true;
+                        return true;
+                    }
+                });
+                return result;
+            },
+            handelNext(){
+                if (this.active==2) {
+
+                }else{
+                    this.active++
+                }
+            },
+            submit(){
+                this.form.bussinessInfoId = this.form1.id;
+                this.$emit('submit', this.form)
+                this.active = 0;
+            },
+            dialogClose(){
+                this.active = 0;
+                this.dialogFormVisible = false;
+                this.$emit('closeDialog', null)
+            }
+        }
+
+    }
+</script>
+
+<style lang="scss">
+    .avatar-uploader .el-upload {
+        border: 1px dashed #d9d9d9;
+        border-radius: 6px;
+        cursor: pointer;
+        position: relative;
+        overflow: hidden;
+    }
+
+    .avatar-uploader .el-upload:hover {
+        border-color: #409EFF;
+    }
+
+    .avatar-uploader-icon {
+        font-size: 28px;
+        color: #8c939d;
+        width: 178px;
+        height: 178px;
+        line-height: 178px;
+        text-align: center;
+    }
+
+    .avatar {
+        width: 178px;
+        height: 178px;
+        display: block;
+    }
+</style>

+ 238 - 0
src/views/bussiness/comps/bussinessinfo-detail.vue

@@ -0,0 +1,238 @@
+<template>
+    <basic-container>
+        <el-dialog title="礼物详情" :append-to-body="true" :visible.sync="dialogFormVisible" top="1vh" @open="openDialog">
+            <el-tabs type="border-card">
+                <el-tab-pane label="商户主体信息">
+                    <el-form :model="form1" ref="form" label-width="120px" label-position="right" size="small">
+                        <el-form-item label="商户类型" prop="signType">
+                            <el-select v-model="form1.signType" placeholder="请输入商户类型" clearable="true" disabled>
+                                <el-option v-for="item in signTypeOptions" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="商户证件编号" prop="licenceNo">
+                            <el-input disabled v-model="form1.licenceNo" placeholder="请输入商户证件编号"></el-input>
+                        </el-form-item>
+                        <el-form-item label="开户许可证编号" prop="openAccountLicenceNo">
+                            <el-input disabled v-model="form1.openAccountLicenceNo" placeholder="请输入开户许可证编号"></el-input>
+                        </el-form-item>
+                        <el-form-item label="商户签约名称" prop="signName">
+                            <el-input disabled v-model="form1.signName" placeholder="请输入商户签约名称"></el-input>
+                        </el-form-item>
+                        <el-form-item label="商户简称" prop="shortName">
+                            <el-input disabled v-model="form1.shortName" placeholder="请输入商户简称"></el-input>
+                        </el-form-item>
+                        <el-row>
+                            <el-col span="8">
+                                <el-form-item label="经营地所在省" prop="province">
+                                    <el-select disabled v-model="form1.province" placeholder="请选择经营地所在省" clearable>
+                                        <el-option
+                                                v-for="item in provinceOptions"
+                                                :key="item.provinceCode"
+                                                :label="item.provinceName"
+                                                :value="item.provinceCode">
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="8">
+                                <el-form-item label="经营地所在市" prop="city">
+                                    <el-select disabled v-model="form1.city" placeholder="请选择经营地所在市" clearable>
+                                        <el-option
+                                                v-for="item in cityOptions"
+                                                :key="item.cityCode"
+                                                :label="item.cityName"
+                                                :value="item.cityCode">
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="8">
+                                <el-form-item label="经营地所在区" prop="district">
+                                    <el-select disabled v-model="form1.district" placeholder="请选择经营地所在区" clearable>
+                                        <el-option
+                                                v-for="item in districtOptions"
+                                                :key="item.districtCode"
+                                                :label="item.districtName"
+                                                :value="item.districtCode">
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-form-item label="经营地址" prop="address">
+                            <el-input disabled v-model="form1.address" placeholder="请输入经营地址"></el-input>
+                        </el-form-item>
+                        <el-row>
+                            <el-col span="12">
+                                <el-form-item prop="licenceUrl" label="商户证件照片" style="width: 45%;">
+                                    <img v-if="form1.licenceUrl" :src="form1.licenceUrl" class="avatar">
+                                    <span v-else>暂无图片</span>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="12">
+                                <el-form-item prop="handLicenceUrl" label="手持营业执照在经营场所的照片" style="width: 45%;">
+                                    <img v-if="form1.handLicenceUrl" :src="form1.handLicenceUrl" class="avatar">
+                                    <span v-else>暂无图片</span>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-form-item prop="openAccountLicenceUrl" label="开户许可证照片" style="width: 45%;">
+                            <img v-if="form1.openAccountLicenceUrl" :src="form1.openAccountLicenceUrl" class="avatar">
+                            <span v-else>暂无图片</span>
+                        </el-form-item>
+                        <span style="color: red">如无开户许可证,请上传基本存款账户信息表照片</span>
+                    </el-form>
+                </el-tab-pane>
+                <el-tab-pane label="法人信息">
+                    <el-form ref="form2" :model="form2">
+                        <el-form-item label="法人姓名" prop="legalName">
+                            <el-input disabled v-model="form2.legalName" placeholder="请输入法人姓名"></el-input>
+                        </el-form-item>
+                        <el-row>
+                            <el-col span="8">
+                                <el-form-item label="法人证件类型" prop="legalLicenceType">
+                                    <el-select disabled v-model="form2.legalLicenceType" placeholder="请输入法人证件类型" clearable="true">
+                                        <el-option v-for="item in legalLicenceTypeOptions" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="16">
+                                <el-form-item label="法人证件号码" prop="legalLicenceNo">
+                                    <el-input disabled v-model="form2.legalLicenceNo" placeholder="请输入法人证件号码"></el-input>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-row>
+                            <el-col span="12">
+                                <el-form-item prop="legalLicenceFrontUrl" label="请上传法人证件正面照片" style="width: 45%;">
+                                    <img v-if="form2.legalLicenceFrontUrl" :src="form2.legalLicenceFrontUrl" class="avatar">
+                                    <span v-else>暂无图片</span>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="12">
+                                <el-form-item prop="legalLicenceBackUrl" label="法人证件反面照片" style="width: 45%;">
+                                    <img v-if="form2.legalLicenceBackUrl" :src="form2.legalLicenceBackUrl" class="avatar">
+                                    <span v-else>暂无图片</span>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                    </el-form>
+                </el-tab-pane>
+                <el-tab-pane label="联系人信息">
+                    <el-form ref="form3" :model="form3" label-width="100px">
+                        <el-form-item label="联系人姓名" prop="contactName">
+                            <el-input disabled v-model="form3.contactName" placeholder="请输入联系人姓名"></el-input>
+                        </el-form-item>
+                        <el-form-item label="联系人证件号" prop="contactLicenceNo">
+                            <el-input disabled v-model="form3.contactLicenceNo" placeholder="请输入联系人证件号码"></el-input>
+                        </el-form-item>
+                        <el-form-item label="联系人手机号" prop="contactMobile">
+                            <el-input disabled v-model="form3.contactMobile" placeholder="请输入联系人手机号"></el-input>
+                        </el-form-item>
+                        <el-form-item label="联系人邮箱" prop="contactEmail">
+                            <el-input disabled v-model="form3.contactEmail" placeholder="请输入联系人邮箱"></el-input>
+                        </el-form-item>
+                    </el-form>
+                </el-tab-pane>
+            </el-tabs>
+        </el-dialog>
+    </basic-container>
+</template>
+
+<script>
+    import {
+        getProvinceList,
+        getCityList,
+        getDistrictList
+    } from "@/api/bussinessregion/bussinessregion";
+    import {getDictionary} from "@/api/system/dictbiz";
+    import {getByTypeAndBussinessInfoId} from "@/api/bussiness/bussinesscontactinfo";
+    export default {
+        props:{
+            form1:Object
+        },
+        data() {
+            return {
+                form2: {},
+                form3: {},
+                provinceOptions:[],
+                cityOptions:[],
+                districtOptions:[],
+                provinceProps: {
+                    lazy: true,
+                    label: 'provinceName',
+                    value: 'provinceCode',
+                },
+                cityProps: {
+                    label: 'cityName',
+                    value: 'cityCode',
+                    children: 'children'
+                },
+                districtProps: {
+                    label: 'cityName',
+                    value: 'cityCode',
+                },
+                signTypeOptions: [],
+                legalLicenceTypeOptions: [],
+                dialogFormVisible: false
+            }
+        },
+        created() {
+            this.loadProvince();
+            this.loadSignTypeList("business_sign_type");
+            this.loadLegalLicenceTypeList("legal_licence_type");
+        },
+        methods: {
+            openDialog(){
+                this.loadCity(this.form1.province);
+                this.loadDistrict(this.form1.city);
+            },
+            loadLegalLicenceTypeList(code){
+                getDictionary({"code":code}).then(res =>{
+                    this.legalLicenceTypeOptions = res.data.data;
+                })
+            },
+            loadSignTypeList(code){
+                getDictionary({"code":code}).then(res =>{
+                    this.signTypeOptions = res.data.data;
+                })
+            },
+            loadProvince(){
+                getProvinceList().then(res =>{
+                    this.provinceOptions = res.data.data;
+                })
+            },
+            loadCity(provinceCode){
+                getCityList(provinceCode).then(res =>{
+                    this.cityOptions = res.data.data;
+                })
+            },
+            loadDistrict(cityCode){
+                getDistrictList(cityCode).then(res =>{
+                    this.districtOptions = res.data.data;
+                })
+            },
+            open() {
+                this.loadLegalDetail();
+                this.loadContactDetail();
+                this.dialogFormVisible = true;
+            },
+            close() {
+                this.dialogFormVisible = false
+            },
+            loadLegalDetail(){
+                getByTypeAndBussinessInfoId(10, this.form1.id).then(res =>{
+                    this.form2 = res.data.data;
+                })
+            },
+            loadContactDetail(){
+                getByTypeAndBussinessInfoId(11, this.form1.id).then(res =>{
+                    this.form3 = res.data.data;
+                })
+            },
+        }
+    }
+</script>
+
+<style>
+</style>

+ 1 - 1
src/views/bussiness/order.vue

@@ -27,7 +27,7 @@
         option: {
           column: [{
             icon: 'el-icon-info',
-            label: '充值明细',
+            label: '采购明细',
             prop: 'tab1',
           }, {
             icon: 'el-icon-warning',

+ 34 - 11
src/views/guosen/bussiness.vue

@@ -5,8 +5,7 @@
       @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.bussiness_delete" @click="handleDelete">删
-          除
+        <el-button type="danger" size="small" icon="el-icon-delete" plain v-if="permission.bussiness_delete" @click="handleDelete">删 除
         </el-button>
        <el-button type="success" size="small" icon="el-icon-upload" plain v-if="permission.bussiness_generateapi" @click="generateDoc">
           生成api文档
@@ -23,23 +22,32 @@
         <el-tag type="primary" v-if="scope.row.enable == 0">启用</el-tag>
         <el-tag type="danger" v-if="scope.row.enable == 1">禁用</el-tag>
       </template>
-      <template slot="menu" slot-scope="scope">
+      <template slot="menu" slot-scope="{row}">
         <el-button
                 type ="text"
                 size="mini"
                 plain
-                v-if="scope.row.enable == 1 && permission.bussiness_enable"
-                @click="handleEnable(scope.row.id, 0)">启用
+                @click="handleProduct(row.id)">编辑费率
         </el-button>
         <el-button
                 type ="text"
                 size="mini"
                 plain
-                v-if="scope.row.enable == 0 && permission.bussiness_enable"
-                @click="handleEnable(scope.row.id, 1)">禁用
+                v-if="row.enable == 1 && permission.bussiness_enable"
+                @click="handleEnable(row.id, 0)">启用
+        </el-button>
+        <el-button
+                type ="text"
+                size="mini"
+                plain
+                v-if="row.enable == 0 && permission.bussiness_enable"
+                @click="handleEnable(row.id, 1)">禁用
         </el-button>
       </template>
     </avue-crud>
+    <el-dialog :modal-append-to-body="false" title="采购商服务费率配置页面" append-to-body center top="2vh" :visible.sync="rateStrategyVisible" @close="closeRateStrategyDialog">
+      <bussinessratestrategy :bussinessId="bussinessId" v-if="rateStrategyVisible"></bussinessratestrategy>
+    </el-dialog>
   </basic-container>
 </template>
 
@@ -57,9 +65,12 @@
     mapGetters
   } from "vuex";
   import md5 from 'js-md5'
-  import error from "../monitor/log/error";
+  import bussinessratestrategy from "../bussiness/bussinessratestrategy.vue";
 
   export default {
+    components:{
+      bussinessratestrategy
+    },
     data() {
       return {
         form: {},
@@ -70,6 +81,8 @@
           currentPage: 1,
           total: 0
         },
+        bussinessId: null,
+        rateStrategyVisible: false,
         selectionList: [],
         option: {
           height: 'auto',
@@ -81,9 +94,11 @@
           index: true,
           viewBtn: true,
           selection: true,
+          delBtn: false,
           dialogClickModal: false,
           dialogWidth: "30%",
-          column: [{
+          column: [
+           {
               label: "商户号名称",
               labelWidth: 130,
               prop: "name",
@@ -144,14 +159,14 @@
               }]
             },
             {
-              label: "最低充值金额",
+              label: "最低采购金额",
               prop: "leastPrice",
               labelWidth: 130,
               span: 24,
               hide: true,
               rules: [{
                 required: true,
-                message: "请输入最低充值金额",
+                message: "请输入最低采购金额",
                 trigger: "blur"
               }]
             },
@@ -239,6 +254,14 @@
       }
     },
     methods: {
+      handleProduct(bussinessId){
+        this.rateStrategyVisible = true;
+        this.bussinessId = bussinessId;
+      },
+      closeRateStrategyDialog(){
+        this.rateStrategyVisible = false;
+        this.bussinessId = null;
+      },
       handleEnable(bussinessId, enable){
         if(enable == 1){
           this.$confirm("确定要禁用吗?", {

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

@@ -116,7 +116,7 @@
             //   // },
             //   rules: [{
             //     required: true,
-            //     message: "请输入广告充值红利账号名称",
+            //     message: "请输入广告采购红利账号名称",
             //     trigger: "blur"
             //   }]
             // },
@@ -195,7 +195,7 @@
           span: 6,
           data: [{
               count: 1000000,
-              title: '充值金额',
+              title: '采购金额',
               decimals: 2
             },
 

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

@@ -69,11 +69,11 @@
               }]
             },
             {
-              label: "总充值",
+              label: "总采购",
               prop: "totalAmt",
               rules: [{
                 required: true,
-                message: "请输入总充值",
+                message: "请输入总采购",
                 trigger: "blur"
               }]
             },

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

@@ -93,13 +93,13 @@
           dialogClickModal: false,
           column: [
             {
-              label: "广告商id",
+              label: "采购商id",
               prop: "bussinessId",
               hide: true,
               display: false,
               rules: [{
                 required: true,
-                message: "请输入广告商id",
+                message: "请输入采购商id",
                 trigger: "blur"
               }]
             },

+ 1 - 1
src/views/guosen/debit.vue

@@ -143,7 +143,7 @@
           dialogClickModal: false,
           column: [
             {
-              label: "广告商",
+              label: "采购商",
               prop: "bussinessId",
               type: "select",
               dicUrl: "/api/cyzh-guosen/bussiness/list?size=500",

+ 38 - 29
src/views/wel/index.vue

@@ -6,23 +6,27 @@
 
       </avue-form>
     </el-dialog>
-    <el-dialog :modal-append-to-body="false" :visible.sync="chongzhiVisible" title="网银支付" width="30%">
-      ,<div align="center" style="font-size: 20px;color: #0099FF;margin-bottom: 20px;">充值金额</div>
+    <el-dialog :modal-append-to-body="false" :visible.sync="chongzhiVisible" title="采购页面" width="50%" center top="5vh" modal="true">
+      <div v-if="chongzhiVisible">
+        <purchase :serviceRate="bussiness.serviceRate" v-if="chongzhiVisible" @finishSubmit="finishSubmit"></purchase>
+      </div>
+    </el-dialog>
+
+    <!--<el-dialog :modal-append-to-body="false" :visible.sync="chongzhiVisible" title="采购页面" width="30%" fullscreen="true">
+      <div align="center" style="font-size: 20px;color: #0099FF;margin-bottom: 20px;">采购金额</div>
       <div align="center">
         <span>
-          <!-- <el-input-number  size="large" placeholder="请输入充值金额" v-model="money" min="1">
-          </el-input-number> -->
           <el-input placeholder="请输入内容" v-model="money" type="number" :min="1">
             <template slot="prepend">RMB</template>
           </el-input>
         </span>
-        <div align="left" style="margin: 10px;">充值金额(大写):{{moneyChina}}</div>
+        <div align="left" style="margin: 10px;">采购金额(大写):{{moneyChina}}</div>
         <div align="center" style="margin: 20px;">
           <el-button type="success" size="mini" @click="chongzhiConfirm('YJZF')">快捷支付</el-button>
           <el-button type="success" size="mini" @click="chongzhiConfirm('EBANK')">网银支付</el-button>
         </div>
         <el-divider></el-divider>
-        <div>说明:充值后账户余额 = 本次充值金额 - 技术服务费 - 手续费
+        <div>说明:采购后账户余额 = 本次采购金额 - 技术服务费 - 手续费
           <div>
             <table style="width: 100%;" border="1" class="myTable">
               <tr v-for="(item,i) in statDatas" :key="i">
@@ -33,9 +37,7 @@
           </div>
         </div>
       </div>
-
-
-    </el-dialog>
+    </el-dialog>-->
 
     <el-card>
       <el-row :gutter="50">
@@ -52,7 +54,7 @@
             <div id="userStatistics" :style="{ width: '100%', height: '450px' }"></div>
           </el-card>-->
 <!--          <accountstatic head="用户财务账本" :data="useraccountData" v-if="permission.account_static"></accountstatic>-->
-          <accountstatic head="广告商财务账本" :statData="bussinessaccountData" v-if="permission.account_static"></accountstatic>
+          <accountstatic head="采购商财务账本" :statData="bussinessaccountData" v-if="permission.account_static"></accountstatic>
 <!--          <accountstatic head="代理商财务账本" :data="agenteraccountData" v-if="permission.account_static"></accountstatic>-->
           <!--<el-card header="音乐之声-佣金结算统计" v-if="permission.ordercommission_static">
 
@@ -155,7 +157,7 @@
                   <div style="background-color: #4d4dff;border-radius: 30px;" align="center" @click="chongzhi">
                     <img style="margin:10px;" float="center" :size="30" src="/img/bg/qb.png" />
                     <div style="color: white;padding-bottom: 10px;">
-                      账户充值
+                      账户采购
                     </div>
                   </div>
                 </el-col>
@@ -217,7 +219,8 @@
   import request from '@/router/axios';
   import echarts from "echarts";
   import accountstatic from "@/components/index/accountstatic.vue"
-  import {
+  import purchase from "./purchase.vue"
+  /*import {
     getList as getParams,
     detail as getParamDetail
   } from "@/api/system/param";
@@ -225,7 +228,7 @@
     add as addBillrecord,
     gatewayPay,
 
-  } from "@/api/billrecord/billrecord";
+  } from "@/api/billrecord/billrecord";*/
   import {
     getByAccount,
     update
@@ -235,7 +238,7 @@
   } from "vuex";
   export default {
     components: {
-      accountstatic
+      accountstatic,purchase
     },
 
     data() {
@@ -252,7 +255,8 @@
         editBussinessVisible: false,
         moneyChina: "壹拾万元整",
         bussiness: {},
-        statDatas: [{
+        statDatas: [
+          {
             key: "技术服务费率",
             value: 0
           },
@@ -261,7 +265,7 @@
             value: 0
           },
           {
-            key: "充值金额",
+            key: "采购金额",
             value: 0
           },
           {
@@ -329,7 +333,7 @@
               alert(JSON.stringify(item));
             },
             count: '150',
-            title: '充值',
+            title: '采购',
             icon: 'el-icon-warning',
             color: 'rgb(49, 180, 141)'
           }, {
@@ -556,7 +560,7 @@
               },
               {
                 value: 0,
-                name: '广告商'
+                name: '采购商'
               },
               {
                 value: 0,
@@ -601,7 +605,7 @@
               },
               {
                 value: 0,
-                name: '广告商'
+                name: '采购商'
               },
               {
                 value: 0,
@@ -646,7 +650,7 @@
               },
               {
                 value: 0,
-                name: '广告商'
+                name: '采购商'
               },
 
             ],
@@ -683,7 +687,7 @@
               },
               {
                 value: 0,
-                name: '广告商'
+                name: '采购商'
               },
 
             ],
@@ -876,12 +880,12 @@
       chongzhi() {
         this.chongzhiVisible = true;
       },
-      chongzhiConfirm(directPayType) {
+      /*chongzhiConfirm(directPayType) {
 
         this.billrecord.price = this.money;
         this.billrecord.bussinessFee = this.statDatas[1].value
         this.yibaoOrder.orderAmount = this.money;
-        this.yibaoOrder.goodsName = "充值"
+        this.yibaoOrder.goodsName = "采购"
         this.yibaoOrder.notifyUrl = ",,,"
         this.yibaoOrder.directPayType = directPayType
         this.yibaoOrder.redirectUrl = "https://music.nanyue6688.com/cyzhtest/#/wel/index";
@@ -902,7 +906,7 @@
             })
           }
         })
-      },
+      },*/
       //按日
       handleDay() {
         this.buttonDay = "primary";
@@ -949,7 +953,7 @@
           // this.optionHistoryOut.series[0].data[4].value = historyOut.sponsorOut;
           // this.option.data[1].count = historyOut.total;
 
-          //今日充值
+          //今日采购
           let todayIn = res.data.data.todayIn;
           that.useraccountData.todayIn = todayIn.userIn;
           that.agenteraccountData.todayIn = todayIn.proxyIn;
@@ -992,12 +996,17 @@
           method: "get"
         }).then(res => {
           const resData = res.data.data;
-          this.optionMusic.data[0].count = resData.userCount;
-          this.optionMusic.data[1].count = resData.agenterCount;
-          this.optionMusic.data[2].count = resData.activityCount;
-          this.optionMusic.data[3].count = resData.shopCount;
+          if(!resData.userCount){
+            this.optionMusic.data[0].count = resData.userCount;
+            this.optionMusic.data[1].count = resData.agenterCount;
+            this.optionMusic.data[2].count = resData.activityCount;
+            this.optionMusic.data[3].count = resData.shopCount;
+          }
         })
       },
+      finishSubmit(){
+        this.chongzhiVisible = false;
+      },
       handleStatic() {
         this.getOrderCommissionData();
       },

+ 271 - 0
src/views/wel/purchase.vue

@@ -0,0 +1,271 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               v-model="form"
+               ref="crud"
+               @on-load="onLoad">
+      <template slot="purchaseNum" slot-scope="{row}" >
+        <el-input v-model="row.purchaseNum" type="number" min="0" @change="calAmount(row)" @keydown.native="channelInputLimit"></el-input>
+      </template>
+    </avue-crud>
+    <el-divider></el-divider>
+    <div align="left" style="margin: 10px;">采购金额(大写):{{moneyChina}}</div>
+    <template>
+      <div align="center" style="font-size: 20px;color: #0099FF;margin-bottom: 20px;">采购金额</div>
+      <div align="center">
+        <div>说明:采购后账户余额 = 本次采购金额 - 技术服务费 - 手续费
+          <div>
+            <table style="width: 100%;" border="1" class="myTable">
+              <tr v-for="(item,i) in statDatas" :key="i">
+                <td class="column">{{ item.key }}</td>
+                <td class="column">{{ item.value }}</td>
+              </tr>
+            </table>
+          </div>
+        </div>
+        <div align="center" style="margin: 20px;">
+          <el-button type="success" size="mini" @click="purchaseConfirm('YJZF')">快捷支付</el-button>
+          <el-button type="success" size="mini" @click="purchaseConfirm('EBANK')">网银支付</el-button>
+        </div>
+      </div>
+    </template>
+  </basic-container>
+</template>
+
+<script>
+  import {getList} from "@/api/bussiness/bussinessgoods";
+  import {mapGetters} from "vuex";
+  import {
+    detail as getParamDetail
+  } from "@/api/system/param";
+  import {
+    add as addBillrecord,
+    gatewayPay,
+  } from "@/api/billrecord/billrecord";
+
+  export default {
+    props:{
+      serviceRate: ""
+    },
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        chongzhiVisible:true,
+        money: 0.00,
+        purchaseList:[],
+        moneyChina: "",
+        billrecord: {
+          payStatus: 0,
+          type: 5
+        },
+        yibaoOrder: {
+
+        },
+        purchaseMap: new Map(),
+        statDatas: [
+          {
+            key: "技术服务费率",
+            value: this.serviceRate / 1000
+          },
+          {
+            key: "技术服务费",
+            value: 0
+          },
+          {
+            key: "采购金额",
+            value: 0
+          },
+          {
+            key: "可用余额",
+            value: 0
+          }
+
+        ],
+        page: {
+          pageSize: 100,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'300',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: false,
+          viewBtn: true,
+          selection: false,
+          dialogClickModal: false,
+          refreshBtn: false,
+          columnBtn: false,
+          menu:false,
+          addBtn: false,
+          column: [
+            {
+              label: "商品编号",
+              prop: "goodsNo",
+            },
+            {
+              label: "商品名称",
+              prop: "goodsName",
+            },
+            {
+              label: "商品图片",
+              prop: "goodsPic",
+              type: 'img'
+            },
+            {
+              label: "商品单价",
+              prop: "goodsPrice",
+            },
+            {
+              label: "商品数量",
+              prop: "purchaseNum",
+            },
+            {
+              label: "小计",
+              prop: "amount",
+              type: "number"
+            },
+          ],
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.bussinessgoods_add, false),
+          viewBtn: this.vaildData(this.permission.bussinessgoods_view, false),
+          delBtn: this.vaildData(this.permission.bussinessgoods_delete, false),
+          editBtn: this.vaildData(this.permission.bussinessgoods_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      channelInputLimit (e) {
+        let key = e.key
+        // 不允许输入'e'和'.'
+        if (key === 'e' || key === '.') {
+          e.returnValue = false
+          return false
+        }
+        return true
+      },
+      calAmount(row){
+        row.amount = (row.purchaseNum * row.goodsPrice).toFixed(2);
+        this.$set(row);
+        let list = this.data;
+        let that = this;
+        let newMoney = 0.00;
+        list.forEach(item => {
+          newMoney = newMoney + parseFloat(item['amount']);
+        });
+        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)
+        if(row.purchaseNum == 0){
+          that.purchaseMap.delete(row.id);
+        }else if(row.purchaseNum > 0){
+          that.purchaseMap.set(row.id, row);
+        }
+      },
+      purchaseConfirm(directPayType) {
+        this.billrecord.price = this.money;
+        this.billrecord.bussinessFee = this.statDatas[1].value;
+        this.yibaoOrder.orderAmount = this.money;
+        this.yibaoOrder.goodsName = "采购"
+        this.yibaoOrder.notifyUrl = ",,,"
+        this.yibaoOrder.directPayType = directPayType
+        this.yibaoOrder.redirectUrl = "https://music.nanyue6688.com/cyzhtest/#/wel/index";
+        this.billrecord.purchaseList = Array.from(this.purchaseMap.values());
+        getParamDetail({"paramKey":"maintain"}).then(res => {
+          let systemParam = res.data.data;
+          let paramValue = systemParam.paramValue;
+          if(paramValue == "0"){
+            this.$message({
+              type: "fail",
+              message: "系统维护时间为每天晚上22:00-凌晨07:00"
+            });
+            this.$emit('finishSubmit', null);
+          }else{
+            addBillrecord(this.billrecord).then(res => {
+              this.yibaoOrder.orderId = res.data.data.orderId;
+              /*gatewayPay(this.yibaoOrder).then(res => {
+                location.href = res.data.data.payUrl;
+              })*/
+              this.chongzhiVisible = false;
+              this.$emit('finishSubmit', null);
+              this.$message({
+                type: "success",
+                message: "操作成功"
+              });
+            })
+          }
+        })
+      },
+      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;
+          data.records.forEach(item => {item.amount = 0.00; item.purchaseNum = 0})
+          this.data = data.records;
+          this.loading = false;
+        });
+      },
+      //金额大写
+      digitUppercase(money){
+        let fraction = ['角', '分'];
+        let digit = [
+          '零', '壹', '贰', '叁', '肆',
+          '伍', '陆', '柒', '捌', '玖'
+        ];
+        let unit = [
+          ['元', '万', '亿'],
+          ['', '拾', '佰', '仟']
+        ];
+        let head = money < 0 ? '欠' : '';
+        money = Math.abs(money);
+        let s = '';
+        for (let i = 0; i < fraction.length; i++) {
+          s += (digit[Math.floor(money * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
+        }
+        s = s || '整';
+        money = Math.floor(money);
+        for (let i = 0; i < unit[0].length && money > 0; i++) {
+          let p = '';
+          for (let j = 0; j < unit[1].length && money > 0; j++) {
+            p = digit[money % 10] + unit[1][j] + p;
+            money = Math.floor(money / 10);
+          }
+          s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
+        }
+        return head + s.replace(/(零.)*零元/, '元')
+                .replace(/(零.)+/g, '零')
+                .replace(/^整$/, '零元整');
+      }
+    }
+  };
+</script>
+
+<style>
+</style>