Forráskód Böngészése

Merge remote-tracking branch 'origin/dev' into dev

hmp 4 éve
szülő
commit
5471cbc615

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 231 - 231
package-lock.json


+ 1 - 0
package.json

@@ -30,6 +30,7 @@
     "vue": "^2.6.10",
     "vue-axios": "^2.1.2",
     "vue-i18n": "^8.7.0",
+    "vue-infinite-loading": "^2.4.5",
     "vue-router": "^3.0.1",
     "vuex": "^3.1.1"
   },

+ 17 - 0
src/api/desk/artificial-invite-micro.js

@@ -0,0 +1,17 @@
+import request from '@/router/axios';
+
+export const inviteMicro = (row) => {
+  return request({
+    url: '/api/ldt_shop/shop/inviteMicro',
+    method: 'post',
+    data: row
+  })
+}
+
+export const invite = (row) => {
+  return request({
+    url: '/api/ldt_shop/shop/invite',
+    method: 'post',
+    data: row
+  })
+}

+ 33 - 0
src/api/ldt_bills/billtrace.js

@@ -0,0 +1,33 @@
+import request from '@/router/axios';
+
+export const getDetail = (billId) => {
+  return request({
+    url: '/api/web/billTrace',
+    method: 'get',
+    params: {
+      billId
+    }
+  })
+}
+
+export const getBills = (current, size, params) => {
+  return request({
+    url: '/api/web/billTrace/getBills',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getBillById = (billId) => {
+  return request({
+    url: '/api/web/billTrace/getBillById',
+    method: 'get',
+    params: {
+      billId
+    }
+  })
+}

+ 63 - 0
src/api/ldt_bills/frozenrec.js

@@ -0,0 +1,63 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/ldt_bills/frozenrec/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/ldt_bills/frozenrec/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/ldt_bills/frozenrec/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/ldt_bills/frozenrec/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/ldt_bills/frozenrec/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const generateList = (current, size, params) => {
+  return request({
+    url: '/api/ldt_bills/frozenrec/generateList',
+    method: 'post',
+    responseType:"blob",
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+

+ 10 - 0
src/api/ldt_mall/mall.js

@@ -105,3 +105,13 @@ export const getProductFeeByMall = () => {
     method: 'get',
   })
 }
+
+export const getMallDetail = (id) => {
+  return request({
+    url: '/api/ldt_mall/mall/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}

+ 5 - 5
src/api/ldt_notice/notice.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getList = (current, size, params) => {
   return request({
-    url: '/api/ldt_notice/notice/list',
+    url: '/api/ldt_notice/noticecontent/list',
     method: 'get',
     params: {
       ...params,
@@ -14,7 +14,7 @@ export const getList = (current, size, params) => {
 
 export const getDetail = (id) => {
   return request({
-    url: '/api/ldt_notice/notice/detail',
+    url: '/api/ldt_notice/noticecontent/detail',
     method: 'get',
     params: {
       id
@@ -24,7 +24,7 @@ export const getDetail = (id) => {
 
 export const remove = (ids) => {
   return request({
-    url: '/api/ldt_notice/notice/remove',
+    url: '/api/ldt_notice/noticecontent/remove',
     method: 'post',
     params: {
       ids,
@@ -34,7 +34,7 @@ export const remove = (ids) => {
 
 export const add = (row) => {
   return request({
-    url: '/api/ldt_notice/notice/submit',
+    url: '/api/ldt_notice/noticecontent/submitAndPush',
     method: 'post',
     data: row
   })
@@ -42,7 +42,7 @@ export const add = (row) => {
 
 export const update = (row) => {
   return request({
-    url: '/api/ldt_notice/notice/submit',
+    url: '/api/ldt_notice/noticecontent/submit',
     method: 'post',
     data: row
   })

+ 50 - 0
src/api/ldt_notice/noticereceiver.js

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

+ 10 - 0
src/api/ldt_shop/shop.js

@@ -146,3 +146,13 @@ export const getProductFeeByShop = () => {
     method: 'get',
   })
 }
+
+export const getShopDetail = (id) => {
+  return request({
+    url: '/api/ldt_shop/shop/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}

+ 1 - 1
src/config/env.js

@@ -1,5 +1,5 @@
 // 阿里矢量图标库配置
-let iconfontVersion = ['2880418_9kghzf387b'];
+let iconfontVersion = ['2880418_gbztx2ldgr5'];
 let iconfontUrl = `//at.alicdn.com/t/font_$key.css`;
 
 let baseUrl = '';

+ 1 - 0
src/config/iconList.js

@@ -72,6 +72,7 @@ export default [
       "iconfont icon-zhangdan_o",
       "iconfont icon-shangpinguanli",
       "iconfont icon-gaojing",
+      "iconfont icon-shijianyuzhuisu",
     ]
   },
   {

+ 1 - 1
src/page/login/index.vue

@@ -93,7 +93,7 @@
             this.type = "shop"
             break;
           case "http://ldt-mall.guosen-fumao.cn":
-            this.type = "mall"
+            this.type = "shop"
             break;
           case "http://ldt-agent.guosen-fumao.cn":
             this.type = "agent"

+ 210 - 206
src/page/login/userlogin.vue

@@ -57,7 +57,7 @@
       <el-button type="primary"
                  size="small"
                  @click.native.prevent="handleLogin"
-                 class="login-submit">{{$t('login.submit')}}
+                 class="login-submit">{{ $t('login.submit') }}
       </el-button>
     </el-form-item>
     <el-dialog title="用户信息选择"
@@ -70,222 +70,226 @@
 </template>
 
 <script>
-  import {mapGetters} from "vuex";
-  import {info} from "@/api/system/tenant";
-  import {getCaptcha} from "@/api/user";
-  import {getTopUrl} from "@/util/util";
+import {mapGetters} from "vuex";
+import {info} from "@/api/system/tenant";
+import {getCaptcha} from "@/api/user";
+import {getTopUrl} from "@/util/util";
 
-  export default {
-    name: "userlogin",
-    data() {
-      return {
-        tenantMode: this.website.tenantMode,
-        type:"",
-        loginForm: {
-          //租户ID
-          tenantId: "",
-          //部门ID
-          deptId: "",
-          //角色ID
-          roleId: "",
-          //用户名
-          username: "",
-          //密码
-          password: "",
-          //账号类型
-          type: "account",
-          //验证码的值
-          code: "",
-          //验证码的索引
-          key: "",
-          //预加载白色背景
-          image: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
-        },
-        loginRules: {
-          tenantId: [
-            {required: false, message: "请输入租户ID", trigger: "blur"}
-          ],
-          username: [
-            {required: true, message: "请输入用户名", trigger: "blur"}
-          ],
-          password: [
-            {required: true, message: "请输入密码", trigger: "blur"},
-            {min: 1, message: "密码长度最少为6位", trigger: "blur"}
-          ]
-        },
-        passwordType: "password",
-        userBox: false,
-        userForm: {
-          deptId: '',
-          roleId: ''
-        },
-        userOption: {
-          labelWidth: 70,
-          submitBtn: true,
-          emptyBtn: false,
-          submitText: '登录',
-          column: [
-            {
-              label: '部门',
-              prop: 'deptId',
-              type: 'select',
-              props: {
-                label: 'deptName',
-                value: 'id'
-              },
-              dicUrl: '/api/blade-system/dept/select',
-              span: 24,
-              display: false,
-              rules: [{
-                required: true,
-                message: "请选择部门",
-                trigger: "blur"
-              }],
+export default {
+  name: "userlogin",
+  data() {
+    return {
+      tenantMode: this.website.tenantMode,
+      type: "",
+      loginForm: {
+        //租户ID
+        tenantId: "",
+        //部门ID
+        deptId: "",
+        //角色ID
+        roleId: "",
+        //用户名
+        username: "",
+        //密码
+        password: "",
+        //账号类型
+        type: "account",
+        //验证码的值
+        code: "",
+        //验证码的索引
+        key: "",
+        //预加载白色背景
+        image: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
+      },
+      loginRules: {
+        tenantId: [
+          {required: false, message: "请输入租户ID", trigger: "blur"}
+        ],
+        username: [
+          {required: true, message: "请输入用户名", trigger: "blur"}
+        ],
+        password: [
+          {required: true, message: "请输入密码", trigger: "blur"},
+          {min: 1, message: "密码长度最少为6位", trigger: "blur"}
+        ]
+      },
+      passwordType: "password",
+      userBox: false,
+      userForm: {
+        deptId: '',
+        roleId: ''
+      },
+      userOption: {
+        labelWidth: 70,
+        submitBtn: true,
+        emptyBtn: false,
+        submitText: '登录',
+        column: [
+          {
+            label: '部门',
+            prop: 'deptId',
+            type: 'select',
+            props: {
+              label: 'deptName',
+              value: 'id'
             },
-            {
-              label: '角色',
-              prop: 'roleId',
-              type: 'select',
-              props: {
-                label: 'roleName',
-                value: 'id'
-              },
-              dicUrl: '/api/blade-system/role/select',
-              span: 24,
-              display: false,
-              rules: [{
-                required: true,
-                message: "请选择角色",
-                trigger: "blur"
-              }],
+            dicUrl: '/api/blade-system/dept/select',
+            span: 24,
+            display: false,
+            rules: [{
+              required: true,
+              message: "请选择部门",
+              trigger: "blur"
+            }],
+          },
+          {
+            label: '角色',
+            prop: 'roleId',
+            type: 'select',
+            props: {
+              label: 'roleName',
+              value: 'id'
             },
-          ]
-        }
-      };
-    },
-    created() {
-      // this.getTenant();
-      this.refreshCode();
-    },
-    mounted() {
-      //let domain = "http://ldt-mall.guosen-fumao.cn";
-      let domain = getTopUrl();
-      switch (domain) {
-        case "http://ldt.guosen-fumao.cn":
-          this.type = "ldt"
-          this.loginForm.tenantId = "000000";
-          this.loginForm.username = "admin";
-          break;
-        case "http://ldt-shop.guosen-fumao.cn":
-          this.type = "shop"
-          break;
-        case "http://ldt-mall.guosen-fumao.cn":
-          this.type = "mall"
-          break;
-        case "http://ldt-agent.guosen-fumao.cn":
-          this.type = "agent"
-          break;
-        default:
-          this.type = "shop"
-          this.loginForm.tenantId = "000000";
-          this.loginForm.username = "admin";
-          break;
+            dicUrl: '/api/blade-system/role/select',
+            span: 24,
+            display: false,
+            rules: [{
+              required: true,
+              message: "请选择角色",
+              trigger: "blur"
+            }],
+          },
+        ]
+      }
+    };
+  },
+  created() {
+    // this.getTenant();
+    this.refreshCode();
+  },
+  mounted() {
+    //let domain = "http://ldt-mall.guosen-fumao.cn";
+    let domain = getTopUrl();
+    switch (domain) {
+      case "http://ldt.guosen-fumao.cn":
+        this.type = "ldt"
+        this.loginForm.tenantId = "000000";
+        this.loginForm.username = "admin";
+        break;
+      case "http://ldt-shop.guosen-fumao.cn":
+        this.type = "shop"
+        break;
+      case "http://ldt-mall.guosen-fumao.cn":
+        this.type = "shop"
+        break;
+      case "http://ldt-agent.guosen-fumao.cn":
+        this.type = "agent"
+        break;
+      default:
+        this.type = "shop"
+        this.loginForm.tenantId = "000000";
+        this.loginForm.username = "admin";
+        break;
+    }
+  },
+  watch: {
+    'loginForm.deptId'() {
+      const column = this.findObject(this.userOption.column, "deptId");
+      if (this.loginForm.deptId.includes(",")) {
+        column.dicUrl = `/api/blade-system/dept/select?deptId=${this.loginForm.deptId}`;
+        column.display = true;
+      } else {
+        column.dicUrl = '';
       }
     },
-    watch: {
-      'loginForm.deptId'() {
-        const column = this.findObject(this.userOption.column, "deptId");
-        if (this.loginForm.deptId.includes(",")) {
-          column.dicUrl = `/api/blade-system/dept/select?deptId=${this.loginForm.deptId}`;
-          column.display = true;
-        } else {
-          column.dicUrl = '';
-        }
-      },
-      'loginForm.roleId'() {
-        const column = this.findObject(this.userOption.column, "roleId");
-        if (this.loginForm.roleId.includes(",")) {
-          column.dicUrl = `/api/blade-system/role/select?roleId=${this.loginForm.roleId}`;
-          column.display = true;
-        } else {
-          column.dicUrl = '';
-        }
+    'loginForm.roleId'() {
+      const column = this.findObject(this.userOption.column, "roleId");
+      if (this.loginForm.roleId.includes(",")) {
+        column.dicUrl = `/api/blade-system/role/select?roleId=${this.loginForm.roleId}`;
+        column.display = true;
+      } else {
+        column.dicUrl = '';
+      }
+    }
+  },
+  computed: {
+    ...mapGetters(["tagWel", "userInfo"])
+  },
+  props: [],
+  methods: {
+    refreshCode() {
+      if (this.website.captchaMode) {
+        getCaptcha().then(res => {
+          const data = res.data;
+          this.loginForm.key = data.key;
+          this.loginForm.image = data.image;
+        })
       }
     },
-    computed: {
-      ...mapGetters(["tagWel", "userInfo"])
+    showPassword() {
+      this.passwordType === ""
+        ? (this.passwordType = "password")
+        : (this.passwordType = "");
     },
-    props: [],
-    methods: {
-      refreshCode() {
-        if (this.website.captchaMode) {
-          getCaptcha().then(res => {
-            const data = res.data;
-            this.loginForm.key = data.key;
-            this.loginForm.image = data.image;
-          })
-        }
-      },
-      showPassword() {
-        this.passwordType === ""
-          ? (this.passwordType = "password")
-          : (this.passwordType = "");
-      },
-      submitLogin (form, done) {
-        if (form.deptId !== '') {
-          this.loginForm.deptId = form.deptId;
+    submitLogin(form, done) {
+      if (form.deptId !== '') {
+        this.loginForm.deptId = form.deptId;
+      }
+      if (form.roleId !== '') {
+        this.loginForm.roleId = form.roleId;
+      }
+      this.handleLogin();
+      done();
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate(valid => {
+        if (valid) {
+          const loading = this.$loading({
+            lock: true,
+            text: '登录中,请稍后。。。',
+            spinner: "el-icon-loading"
+          });
+          this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
+            if (this.website.switchMode) {
+              const deptId = this.userInfo.dept_id;
+              const roleId = this.userInfo.role_id;
+              if (deptId.includes(",") || roleId.includes(",")) {
+                this.loginForm.deptId = deptId;
+                this.loginForm.roleId = roleId;
+                this.userBox = true;
+                loading.close();
+                return false;
+              }
+            }
+            this.$router.push({path: this.tagWel.value});
+            loading.close();
+          }).catch(() => {
+            loading.close();
+            this.refreshCode();
+          });
         }
-        if (form.roleId !== '') {
-          this.loginForm.roleId = form.roleId;
+      });
+    },
+    getTenant() {
+      let domain = getTopUrl();
+      // 临时指定域名,方便测试
+      // domain = "https://bladex.vip";
+      info(domain).then(res => {
+        const data = res.data;
+        if (data.success && data.data.tenantId) {
+          this.tenantMode = false;
+          this.loginForm.tenantId = data.data.tenantId;
+          this.$parent.$refs.login.style.backgroundImage = `url(${data.data.backgroundUrl})`;
         }
-        this.handleLogin();
-        done();
-      },
-      handleLogin() {
-        this.$refs.loginForm.validate(valid => {
-          if (valid) {
-            const loading = this.$loading({
-              lock: true,
-              text: '登录中,请稍后。。。',
-              spinner: "el-icon-loading"
-            });
-            this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
-              if (this.website.switchMode) {
-                const deptId = this.userInfo.dept_id;
-                const roleId = this.userInfo.role_id;
-                if (deptId.includes(",") || roleId.includes(",")) {
-                  this.loginForm.deptId = deptId;
-                  this.loginForm.roleId = roleId;
-                  this.userBox = true;
-                  loading.close();
-                  return false;
-                }
-              }
-              this.$router.push({path: this.tagWel.value});
-              loading.close();
-            }).catch(() => {
-              loading.close();
-              this.refreshCode();
-            });
-          }
-        });
-      },
-      getTenant() {
-        let domain = getTopUrl();
-        // 临时指定域名,方便测试
-        // domain = "https://bladex.vip";
-        info(domain).then(res => {
-          const data = res.data;
-          if (data.success && data.data.tenantId) {
-            this.tenantMode = false;
-            this.loginForm.tenantId = data.data.tenantId;
-            this.$parent.$refs.login.style.backgroundImage = `url(${data.data.backgroundUrl})`;
-          }
-        })
-      }
+      })
     }
-  };
+  }
+};
 </script>
 
-<style>
+<style lang="scss">
+@import "./style/login-shop.scss";
+@import "./style/login-ldt.scss";
+@import "./style/login-agent.scss";
 </style>
+

+ 13 - 0
src/router/views/index.js

@@ -178,6 +178,19 @@ export default [{
         import( /* webpackChunkName: "views" */ '@/views/ldt_activity/handleActivityAudit')
     }]
   },
+  {
+    path: '/work/process/billtrace',
+    component: Layout,
+    children: [{
+      path: 'handle',
+      name: '账单信息',
+      meta: {
+        i18n: 'work'
+      },
+      component: () =>
+        import( /* webpackChunkName: "views" */ '@/views/ldt_bills/comps/billTraceInfo')
+    }]
+  },
   {
     path: '/work/process/leave',
     component: Layout,

+ 668 - 0
src/views/desk/artificial-invite-micro.vue

@@ -0,0 +1,668 @@
+<template>
+  <basic-container>
+    <div>
+      <el-steps :active="active" align-center>
+        <el-step title="商户法人信息"></el-step>
+        <el-step title="商户主体信息"></el-step>
+        <el-step title="商户经营地址"></el-step>
+        <el-step title="结算银行卡"></el-step>
+        <el-step v-if="totalStep==5" title="产品信息"></el-step>
+      </el-steps>
+
+
+      <div v-show="active==1" style="margin-top: 50px;">
+        <el-form :model="merchantCorporationForm" :rules="merchantCorporationRules" ref="merchantCorporationForm"
+                 label-width="170px" class="demo-ruleForm">
+          <el-form-item prop="legalLicenceFrontUrl" label="法人身份证件正面照片" style="width: 45%;">
+            <el-upload :headers="headers" name="image" class="avatar-uploader" action="/api/ocr/idcard"
+                       :show-file-list="false" :on-success="handleUploadLegalLicenceFront">
+              <img v-if="merchantCorporationForm.legalLicenceFrontUrl" :src="merchantCorporationForm.legalLicenceFrontUrl" class="avatar">
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+          <el-form-item prop="legalLicenceBackUrl" label="法人身份证件反面照片" style="width: 45%;">
+            <el-upload :headers="headers" name="image" class="avatar-uploader" action="/api/ocr/idcard"
+                       :show-file-list="false" :on-success="handleUploadLegalLicenceBack">
+              <img v-if="merchantCorporationForm.legalLicenceBackUrl" :src="merchantCorporationForm.legalLicenceBackUrl"
+                   class="avatar">
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+
+          <el-form-item :required="true" label="法人姓名" prop="legalName">
+            <el-input v-model="merchantCorporationForm.legalName"></el-input>
+          </el-form-item>
+          <el-form-item :required="true" label="法人证件号码" prop="legalLicenceNo">
+            <el-input v-model="merchantCorporationForm.legalLicenceNo"></el-input>
+          </el-form-item>
+          <el-form-item :required="true" label="法人电话" prop="mobile">
+            <el-input v-model="merchantCorporationForm.mobile"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <div v-show="active==2" style="margin-top: 50px;">
+        <el-form :model="merchantSubjectInfo" :rules="merchantSubjectRules" ref="merchantSubjectInfo"
+                 label-width="150px"
+                 class="demo-ruleForm">
+          <el-form-item :required="true" label="商场全称" prop="signName">
+            <el-input v-model="merchantSubjectInfo.signName"></el-input>
+          </el-form-item>
+          <el-form-item :required="true" label="商场简称" prop="shortName">
+            <el-input v-model="merchantSubjectInfo.shortName"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <div v-show="active==3" style="margin-top: 50px;">
+        <el-form :model="businessAddressForm" :rules="businessAddressRules" ref="businessAddressForm"
+                 label-width="150px"
+                 class="demo-ruleForm">
+          <el-form-item label="省份" :required="true" prop="province">
+            <el-select v-model="businessAddressForm.province" placeholder="请选择省份">
+              <el-option v-for="(item,index) in province" :key="index" :label="item.label"
+                         :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="市区" :required="true" prop="city">
+            <el-select v-model="businessAddressForm.city" placeholder="请选择市区">
+              <el-option v-for="(item,index) in city" :key="index" :label="item.label"
+                         :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="区省" :required="true" prop="district">
+            <el-select v-model="businessAddressForm.district" placeholder="请选择区县">
+              <el-option v-for="(item,index) in district" :key="index" :label="item.label"
+                         :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item :required="true" label="详情地址" prop="address">
+            <el-input v-model="businessAddressForm.address"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <div v-show="active==4" style="margin-top: 50px;">
+        <el-form :model="accountInfoForm" :rules="accountInfoRules" ref="accountInfoForm"
+                 label-width="150px">
+          <el-form-item :required="true" label="银行账户号码" prop="bankCardNo">
+            <el-input v-model="accountInfoForm.bankCardNo"></el-input>
+          </el-form-item>
+          <el-form-item label="银行账户类型">
+            <el-select @change="bankAccountTypeChange" v-model="accountInfoForm.bankAccountTypeLabel"
+                       placeholder="请选择银行账户类型">
+              <el-option v-for="(item,index) in bankAccountTypeList" :key="index" :label="item.label"
+                         :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="银行账户开户总行">
+            <el-select filterable remote :remote-method="remoteMethod" @change="bankCodeChange"
+                       v-model="accountInfoForm.bankCodeLabel" placeholder="请选择银行账户开户总行">
+              <el-option v-for="(item,index) in bankCodeList" :key="index" :label="item.label" :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-form>
+
+      </div>
+
+      <div v-show="active==5" style="margin-top: 50px;">
+        <el-form :model="productInfoForm" :rules="productInfoRules" ref="productInfoForm"
+                 label-width="150px">
+          <el-tooltip placement="right" effect="light">
+            <div slot="content">
+              例如:<br/>
+              <pre>{{ this.tooltip }}</pre>
+            </div>
+            <el-form-item :required="true" label="开通产品信息json" prop="productInfo" style="width: 800px;">
+              <el-input type="textarea" :rows="6" v-model="productInfoForm.productInfo"></el-input>
+            </el-form-item>
+          </el-tooltip>
+        </el-form>
+
+      </div>
+
+      <div style="display: flex;justify-content: flex-end;margin-top: 50px">
+        <el-button v-if="active!=1" @click="active--">上一步</el-button>
+        <el-button v-if="active!=totalStep" type="primary" @click="next">下一步</el-button>
+        <el-button :disabled="confirm" v-else type="primary" @click="next">确认</el-button>
+      </div>
+
+    </div>
+  </basic-container>
+</template>
+
+<script>
+import {dictionaryPage} from "../../api/system/dictbiz.js";
+import {getLazyTree} from "../../api/base/region";
+import {inviteMicro} from "../../api/desk/artificial-invite-micro";
+
+export default {
+  data() {
+    return {
+      active: 1,
+      confirm: false,
+      totalStep: 5,
+      mallDetail: {},
+      province: [],
+      city: [],
+      district: [],
+      //商户法人信息
+      merchantCorporationForm: {
+        /**
+         * 法人姓名【legalName】
+         */
+        legalName: "",
+        /**
+         * 法人证件类型
+         */
+        legalLicenceType: "ID_CARD",
+        /**
+         * 法人证件号码
+         */
+        legalLicenceNo: "",
+        /**
+         * 身份证-正面【legalLicenceFrontUrl】
+         */
+        legalLicenceFrontUrl: "",
+        /**
+         * 身份证-反面【legalLicenceBackUrl】
+         */
+        legalLicenceBackUrl: "",
+        /**
+         * 性别
+         */
+        gender: "",
+        /**
+         * 住址
+         */
+        addr: "",
+        /**
+         * 民族
+         */
+        nationality: "",
+        /**
+         * 有效日期
+         */
+        validDate: "",
+        /**
+         * 法人电话
+         */
+        mobile: "",
+      },
+
+      /**
+       * 商户主体信息
+       */
+      merchantSubjectInfo: {
+        /**
+         * 商户签约名称
+         */
+        signName: "",
+        /**
+         * 商户简称
+         */
+        shortName: "",
+      },
+
+      /**
+       * 商城经营地址
+       */
+      businessAddressForm: {
+        /**
+         * 省
+         */
+        province: "",
+        /**
+         * 市
+         */
+        city: "",
+        /**
+         * 区
+         */
+        district: "",
+        /**
+         * 详情地址
+         */
+        address: "",
+      },
+
+      /**
+       * 结算账户信息
+       */
+      accountInfoForm: {
+        /**
+         * 结算方向
+         */
+        settlementDirection: "",
+        /**
+         * 银行账户类型
+         */
+        bankAccountType: "",
+        bankAccountTypeLabel: "",
+        /**
+         * 银行账户号码
+         */
+        bankCardNo: "",
+        /**
+         * 银行账户开户总行编码
+         */
+        bankCode: "",
+        bankCodeLabel: ""
+      },
+      /**
+       * 产品信息
+       */
+      productInfoForm: {
+        productInfo: "",
+      },
+
+      //银行账户开户总行编码
+      bankCodeList: [],
+      //账户类型
+      bankAccountTypeList: [{label: "借记卡", value: "DEBIT_CARD"}],
+
+      merchantCorporationRules: {
+        legalLicenceFrontUrl: [{
+          required: true,
+          message: '请上传法人身份证件正面照片',
+          trigger: 'blur'
+        }],
+        legalLicenceBackUrl: [{
+          required: true,
+          message: '请上传法人身份证件反面照片',
+          trigger: 'blur'
+        }],
+        legalName: [{
+          required: true,
+          message: '请输入法人姓名',
+          trigger: 'blur'
+        }],
+        legalLicenceNo: [{
+          required: true,
+          message: '请输入法人证件号码',
+          trigger: 'blur'
+        }],
+        mobile: [{
+          required: true,
+          message: '请输入法人手机号码',
+          trigger: 'blur'
+        }],
+      },
+      businessAddressRules: {
+        province: [{
+          required: true,
+          message: '请输入省',
+          trigger: 'blur'
+        }],
+        city: [{
+          required: true,
+          message: '请输入市',
+          trigger: 'blur'
+        }],
+        district: [{
+          required: true,
+          message: '请输入区',
+          trigger: 'blur'
+        }],
+        address: [{
+          required: true,
+          message: '请输入详情地址',
+          trigger: 'blur'
+        }],
+      },
+      merchantSubjectRules: {
+        signName: [{
+          required: true,
+          message: '请输入商场全称',
+          trigger: 'blur'
+        }],
+        shortName: [{
+          required: true,
+          message: '请输入商场简称',
+          trigger: 'blur'
+        }],
+      },
+      accountInfoRules: {
+        bankAccountType: [{
+          required: true,
+          message: '请选择银行账户类型',
+          trigger: 'blur'
+        }],
+        bankCardNo: [{
+          required: true,
+          message: '请输入银行账户号码',
+          trigger: 'blur'
+        }],
+        bankCode: [{
+          required: true,
+          message: '请选择银行账户开户总行',
+          trigger: 'blur'
+        }],
+      },
+      productInfoRules: {
+        productInfo: [{
+          required: true,
+          message: "请输入产品信息json",
+          trigger: 'blur',
+        }]
+      },
+      headers: {},
+      tooltip: "",
+    };
+  },
+  created() {
+    this.init()
+  },
+  watch: {
+    "businessAddressForm.province": {
+      handler(value) {
+        let parentCode = this.province.find(ele => {
+          return ele.title === value;
+        });
+        if (parentCode == null) {
+          return;
+        }
+        parentCode = parentCode.key;
+        this.cascadeMenuChange(parentCode, this.city);
+      }
+    },
+    "businessAddressForm.city": {
+      handler(value) {
+        let parentCode = this.city.find(ele => {
+          return ele.title === value;
+        });
+        if (parentCode == null) {
+          return;
+        }
+        parentCode = parentCode.key;
+        this.cascadeMenuChange(parentCode, this.district);
+      }
+    }
+  },
+  methods: {
+    init() {
+      this.headers = {
+        "Authorization": "Basic c2FiZXI6c2FiZXJfc2VjcmV0",
+        "Blade-Auth": JSON.parse(localStorage.getItem("saber-token")).content
+      }
+      this.getBankCode();
+      this.cascadeMenuChange("00", this.province);
+
+      this.accountInfoForm.bankCode = this.bankAccountTypeList[0].value
+      this.accountInfoForm.bankCodeLabel = this.bankAccountTypeList[0].label
+      const jsonData = "[\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"0.28\",\n" +
+        "          \"productCode\":\"USER_SCAN_WECHAT_OFFLINE\",\n" +
+        "          \"rateType\":\"SINGLE_PERCENT\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"0.28\",\n" +
+        "          \"productCode\":\"USER_SCAN_ALIPAY_OFFLINE\",\n" +
+        "          \"rateType\":\"SINGLE_PERCENT\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"0.28\",\n" +
+        "          \"productCode\":\"WECHAT_OFFIACCOUNT_WECHAT_OFFLINE\",\n" +
+        "          \"rateType\":\"SINGLE_PERCENT\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"0.28\",\n" +
+        "          \"productCode\":\"MINI_PROGRAM_WECHAT_OFFLINE\",\n" +
+        "          \"rateType\":\"SINGLE_PERCENT\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"0.28\",\n" +
+        "          \"productCode\":\"MINI_PROGRAM_ALIPAY_OFFLINE\",\n" +
+        "          \"rateType\":\"SINGLE_PERCENT\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"1\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"\",\n" +
+        "          \"productCode\":\"D1_MANUAL\",\n" +
+        "          \"rateType\":\"SINGLE_FIXED\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"1\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"1\",\n" +
+        "          \"productCode\":\"ENTERPRISE_WITHDRAW_STANDARD_REALTIME\",\n" +
+        "          \"rateType\":\"SINGLE_FIXED\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      }\n" +
+        "    ]";
+      this.tooltip = JSON.stringify(JSON.parse(jsonData), null, 4);
+    },
+
+    /**
+     *
+     * 省市区级联菜单改变
+     * @param parentId
+     * @param index
+     */
+    cascadeMenuChange(parentCode, dic) {
+      getLazyTree(parentCode).then((res) => {
+        dic.length = 0;
+        res.data.data.forEach(ele => {
+          ele.label = ele.title;
+          ele.value = ele.title;
+          dic.push(ele);
+        })
+      });
+    },
+
+    //银行信息 begin
+    getBankCode(keyword) {
+      let params = {
+        current: 1,
+        size: 300,
+        code: 'bank_type',
+        keyword
+      }
+      dictionaryPage(params).then(res => {
+        let list = res.data.data.records
+        if (this.$isEmpty(keyword)) {
+          list.shift()
+        }
+        list.forEach((item, index) => {
+          let obj = {
+            label: JSON.parse(item.dictValue).name,
+            value: item.dictKey
+          }
+          this.bankCodeList.push(obj)
+        })
+        if (this.$isNotEmpty(this.bankCodeList)) {
+          this.accountInfoForm.bankCode = this.bankCodeList[0].value
+          this.accountInfoForm.bankCodeLabel = this.bankCodeList[0].label
+        }
+      })
+    },
+    getBankAccountType() {
+      let params = {
+        current: 1,
+        size: 10,
+        code: 'bank_account_type',
+      }
+      dictionaryPage(params).then(res => {
+        let list = res.data.data.records
+        list.shift()
+        list.forEach((item, index) => {
+          let obj = {
+            label: item.dictValue,
+            value: item.dictKey
+          }
+          this.bankAccountTypeList.push(obj)
+        })
+        if (this.$isNotEmpty(this.bankAccountTypeList)) {
+          this.accountInfoForm.bankAccountType = this.bankAccountTypeList[0].value
+          this.accountInfoForm.bankAccountTypeLabel = this.bankAccountTypeList[0].label
+        }
+      })
+    },
+    bankAccountTypeChange(e) {
+      let list = this.bankAccountTypeList.filter(item => item.value == e)
+      this.accountInfoForm.bankAccountTypeLabel = list[0].label
+      this.accountInfoForm.bankAccountType = list[0].value
+      this.$forceUpdate()
+    },
+    bankCodeChange(e) {
+      let list = this.bankCodeList.filter(item => item.value == e)
+      this.accountInfoForm.bankCodeLabel = list[0].label
+      this.accountInfoForm.bankCode = list[0].value
+      this.$forceUpdate()
+    },
+    remoteMethod(query) {
+      console.log(query);
+      this.bankCodeList = []
+      this.getBankCode(query)
+    },
+
+
+    preview() {
+      this.active--
+    },
+    //下一步
+    next() {
+      switch (this.active) {
+        case 1:
+          this.validForm('merchantCorporationForm')
+          break;
+        case 2:
+          this.validForm('merchantSubjectInfo')
+          break;
+        case 3:
+          this.validForm('businessAddressForm')
+          break;
+        case 4:
+          this.validForm('accountInfoForm')
+          break;
+        case 5:
+          this.validForm('productInfoForm')
+          break;
+        default:
+          break;
+      }
+    },
+    validForm(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (!valid) {
+          return false;
+        }
+        if (this.active == this.totalStep) {
+          this.submit()
+        } else {
+          this.active++
+        }
+      });
+    },
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+    async submit() {
+      this.confirm = true;
+
+      const auditForm = {};
+      auditForm.merchantCorporationInfo = this.merchantCorporationForm;
+      auditForm.merchantSubjectInfo = this.merchantSubjectInfo;
+      auditForm.businessAddressInfo = this.businessAddressForm;
+      auditForm.accountInfo = this.accountInfoForm;
+      auditForm.productInfo = JSON.parse(this.productInfoForm.productInfo);
+      inviteMicro(auditForm).then(res => {
+        this.$message({
+          type: "success",
+          message: "提交成功!",
+          data: res.data.data
+        });
+      })
+      this.$emit("finish", {});
+    },
+    /**
+     * 上传法人身份证正面照
+     * @param {Object} e
+     */
+    handleUploadLegalLicenceFront(e) {
+      let source = e.data[0]
+      if (source.errmsg != "ok") {
+        this.$message.error('非法证件照');
+        return
+      }
+      //商场法人信息
+      this.merchantCorporationForm = {
+        legalName: source.name,
+        legalLicenceType: "ID_CARD",
+        legalLicenceNo: source.id,
+        legalLicenceFrontUrl: e.data[1].link,
+        legalLicenceBackUrl: "",
+        gender: source.gender,
+        addr: source.addr,
+        nationality: source.nationality,
+        validDate: source.validDate,
+      }
+    },
+
+    /**
+     * 上传法人身份证反面
+     * @param {Object} e
+     */
+    handleUploadLegalLicenceBack(e) {
+      if (e.data[0].errmsg != "ok") {
+        this.$message.error('非法证件照');
+        return
+      }
+      this.merchantCorporationForm.validDate = e.data[0].validDate
+      this.merchantCorporationForm.legalLicenceBackUrl = e.data[1].link
+    },
+  }
+};
+</script>
+
+<style>
+.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>

+ 899 - 0
src/views/desk/artificial-invite.vue

@@ -0,0 +1,899 @@
+<template>
+  <basic-container>
+    <div>
+      <el-steps :active="active" align-center>
+        <el-step title="商场法人信息"></el-step>
+        <el-step title="商场联系人信息"></el-step>
+        <el-step title="商场主体信息"></el-step>
+        <el-step title="结算银行卡"></el-step>
+        <el-step title="商户经营地址"></el-step>
+        <el-step v-if="totalStep==6" title="产品信息"></el-step>
+      </el-steps>
+
+
+      <div v-show="active==1" style="margin-top: 50px;">
+        <el-form :model="merchantCorporationForm" :rules="merchantCorporationRules" ref="merchantCorporationForm"
+                 label-width="170px" class="demo-ruleForm">
+          <el-form-item prop="legalLicenceFrontUrl" label="法人身份证件正面照片" style="width: 45%;">
+            <el-upload :headers="headers" name="image" class="avatar-uploader" action="/api/ocr/idcard"
+                       :show-file-list="false" :on-success="handleUploadLegalLicenceFront">
+              <img v-if="merchantCorporationForm.legalLicenceFrontUrl" :src="merchantCorporationForm.legalLicenceFrontUrl" class="avatar">
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+          <el-form-item prop="legalLicenceBackUrl" label="法人身份证件反面照片" style="width: 45%;">
+            <el-upload :headers="headers" name="image" class="avatar-uploader" action="/api/ocr/idcard"
+                       :show-file-list="false" :on-success="handleUploadLegalLicenceBack">
+              <img v-if="merchantCorporationForm.legalLicenceBackUrl" :src="merchantCorporationForm.legalLicenceBackUrl"
+                   class="avatar">
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+
+          <el-form-item :required="true" label="法人姓名" prop="legalName">
+            <el-input v-model="merchantCorporationForm.legalName"></el-input>
+          </el-form-item>
+          <el-form-item :required="true" label="法人证件号码" prop="legalLicenceNo">
+            <el-input v-model="merchantCorporationForm.legalLicenceNo"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <div v-show="active==2" style="margin-top: 50px;">
+        <el-form :model="merchantContactForm" :rules="merchantContactRules" ref="merchantContactForm"
+                 label-width="150px"
+                 class="demo-ruleForm">
+          <el-form-item :required="true" label="商场联系人姓名" prop="contactName">
+            <el-input v-model="merchantContactForm.contactName"></el-input>
+          </el-form-item>
+          <el-form-item :required="true" label="商户联系人证件号码" prop="contactLicenceNo">
+            <el-input v-model="merchantContactForm.contactLicenceNo"></el-input>
+          </el-form-item>
+          <el-form-item :required="true" label="商户联系人手机号" prop="contactMobile">
+            <el-input v-model="merchantContactForm.contactMobile"></el-input>
+          </el-form-item>
+          <el-form-item :required="true" label="商场联系人邮箱" prop="contactEmail">
+            <el-input v-model="merchantContactForm.contactEmail"></el-input>
+          </el-form-item>
+          <el-form-item label="客服电话" prop="servicePhone">
+            <el-input v-model="merchantContactForm.servicePhone"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <div v-show="active==3" style="margin-top: 50px;">
+        <el-form :model="merchantSubjectForm" :rules="merchantSubjectRules" ref="merchantSubjectForm"
+                 label-width="150px"
+                 class="demo-ruleForm">
+          <el-form-item prop="businessLicense" label="商场营业执照" style="width: 45%;">
+            <el-upload :headers="headers" name="image" class="avatar-uploader" action="/api/ocr/bizilicense"
+                       :show-file-list="false" :on-success="handleUploadBusinessLicense" :before-upload="compressImg">
+              <img v-if="merchantSubjectForm.businessLicense" :src="merchantSubjectForm.businessLicense" class="avatar">
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+          <el-form-item :required="true" label="商场全称" prop="signName">
+            <el-input v-model="merchantSubjectForm.signName"></el-input>
+          </el-form-item>
+          <el-form-item :required="true" label="营业执照编号" prop="licenceNo">
+            <el-input v-model="merchantSubjectForm.licenceNo"></el-input>
+          </el-form-item>
+          <el-form-item :required="true" label="商场简称" prop="shortName">
+            <el-input v-model="merchantSubjectForm.shortName"></el-input>
+          </el-form-item>
+          <el-form-item :required="true" label="开户许可证编号" prop="openAccountLicenceNo">
+            <el-input v-model="merchantSubjectForm.openAccountLicenceNo"></el-input>
+          </el-form-item>
+          <el-form-item prop="openAccountLicenceUrl" label="开户许可证照片" style="width: 45%;">
+            <el-upload :headers="headers" class="avatar-uploader" action="/api/blade-resource/oss/endpoint/put-file"
+                       :show-file-list="false" :on-success="handleUploadOpenAccountLicence"
+                       :before-upload="compressImg">
+              <img v-if="merchantSubjectForm.openAccountLicenceUrl" :src="merchantSubjectForm.openAccountLicenceUrl"
+                   class="avatar">
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+          <el-form-item prop="handLicenceUrl" label="手持营业执照在经营场所的照片" style="width: 45%;">
+            <el-upload :headers="headers" class="avatar-uploader" action="/api/blade-resource/oss/endpoint/put-file"
+                       ref="compressImgHandLicenceUrl"
+                       :show-file-list="false" :on-success="handleUploadHandLicenceUrl" :before-upload="compressImg">
+              <img v-if="merchantSubjectForm.handLicenceUrl" :src="merchantSubjectForm.handLicenceUrl" class="avatar">
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <div v-show="active==4" style="margin-top: 50px;">
+        <el-form :model="settlementAccountForm" :rules="settlementAccountRules" ref="settlementAccountForm"
+                 label-width="150px">
+          <el-form-item :required="true" label="银行账户号码" prop="bankCardNo">
+            <el-input v-model="settlementAccountForm.bankCardNo"></el-input>
+          </el-form-item>
+          <el-form-item label="银行账户类型">
+            <el-select @change="bankAccountTypeChange" v-model="settlementAccountForm.bankAccountTypeLabel"
+                       placeholder="请选择银行账户类型">
+              <el-option v-for="(item,index) in bankAccountTypeList" :key="index" :label="item.label"
+                         :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="银行账户开户总行">
+            <el-select filterable remote :remote-method="remoteMethod" @change="bankCodeChange"
+                       v-model="settlementAccountForm.bankCodeLabel" placeholder="请选择银行账户开户总行">
+              <el-option v-for="(item,index) in bankCodeList" :key="index" :label="item.label" :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <div v-show="active==5" style="margin-top: 50px;">
+        <el-form :model="businessAddressForm" :rules="businessAddressRules" ref="businessAddressForm"
+                 label-width="150px"
+                 class="demo-ruleForm">
+          <el-form-item label="省份" :required="true" prop="province">
+            <el-select v-model="businessAddressForm.province" placeholder="请选择省份">
+              <el-option v-for="(item,index) in province" :key="index" :label="item.label"
+                         :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="市区" :required="true" prop="city">
+            <el-select v-model="businessAddressForm.city" placeholder="请选择市区">
+              <el-option v-for="(item,index) in city" :key="index" :label="item.label"
+                         :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="区省" :required="true" prop="district">
+            <el-select v-model="businessAddressForm.district" placeholder="请选择区县">
+              <el-option v-for="(item,index) in district" :key="index" :label="item.label"
+                         :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item :required="true" label="详情地址" prop="address">
+            <el-input v-model="businessAddressForm.address"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <div v-show="active==6" style="margin-top: 50px;">
+        <el-form :model="productInfoForm" :rules="productInfoRules" ref="productInfoForm"
+                 label-width="150px">
+          <el-tooltip placement="right" effect="light">
+            <div slot="content">
+              例如:<br/>
+              <pre>{{ this.tooltip }}</pre>
+            </div>
+            <el-form-item :required="true" label="开通产品信息json" prop="productInfo" style="width: 800px;">
+              <el-input type="textarea" :rows="6" v-model="productInfoForm.productInfo"></el-input>
+            </el-form-item>
+          </el-tooltip>
+        </el-form>
+      </div>
+
+      <div style="display: flex;justify-content: flex-end;margin-top: 50px">
+        <el-button v-if="active!=1" @click="active--">上一步</el-button>
+        <el-button v-if="active!=totalStep" type="primary" @click="next">下一步</el-button>
+        <el-button :disabled="confirm" v-else type="primary" @click="next">确认</el-button>
+      </div>
+
+    </div>
+  </basic-container>
+</template>
+
+<script>
+import {dictionaryPage} from "../../api/system/dictbiz.js";
+import {compress} from "../../util/compress";
+import {getLazyTree} from "../../api/base/region";
+import {invite} from "../../api/desk/artificial-invite-micro";
+
+export default {
+  data() {
+    return {
+      active: 1,
+      confirm: false,
+      totalStep: 6,
+      mallDetail: {},
+      province: [],
+      city: [],
+      district: [],
+      //商场法人信息
+      merchantCorporationForm: {
+        /**
+         * 法人姓名【legalName】
+         */
+        legalName: "",
+        /**
+         * 法人证件类型
+         */
+        legalLicenceType: "ID_CARD",
+        /**
+         * 法人证件号码
+         */
+        legalLicenceNo: "",
+        /**
+         * 身份证-正面【legalLicenceFrontUrl】
+         */
+        legalLicenceFrontUrl: "",
+        /**
+         * 身份证-反面【legalLicenceBackUrl】
+         */
+        legalLicenceBackUrl: "",
+        /**
+         * 性别
+         */
+        gender: "",
+        /**
+         * 住址
+         */
+        addr: "",
+        /**
+         * 民族
+         */
+        nationality: "",
+        /**
+         * 有效日期
+         */
+        validDate: "",
+      },
+
+      //商场联系人信息
+      merchantContactForm: {
+        /**
+         * 商户联系人姓名
+         */
+        contactName: "",
+        /**
+         * 商户联系人证件号码
+         */
+        contactLicenceNo: "",
+        /**
+         * 商户联系人手机号
+         */
+        contactMobile: "",
+        /**
+         * 商户联系人邮箱
+         */
+        contactEmail: "",
+        /**
+         * 客服电话
+         */
+        servicePhone: "",
+      },
+      /**
+       * 商场主体信息
+       */
+      merchantSubjectForm: {
+        /**
+         * 商户签约类型
+         */
+        signType: "ENTERPRISE",
+        /**
+         * 企业名称【商户全称】
+         */
+        enterpriseName: "",
+        /**
+         * 组成形式
+         */
+        typeOfOrganization: "",
+        /**
+         * 企业类型
+         */
+        typeOfEnterprise: "",
+        /**
+         * 经营范围
+         */
+        businessScope: "",
+        /**
+         * 注册资本
+         */
+        registeredCapital: "",
+        /**
+         * 实收资本
+         */
+        paidInCapital: "",
+        /**
+         * 营业期限
+         */
+        validPeriod: "",
+        /**
+         * 成立日期
+         */
+        registeredDate: "",
+        /**
+         * 注册号
+         */
+        regNum: "",
+        /**
+         * 商户证件编号
+         */
+        licenceNo: "",
+        /**
+         * 营业执照【易宝:商户证件照片】
+         */
+        businessLicense: "",
+        /**
+         * 商户签约名称
+         */
+        signName: "",
+        /**
+         * 商户简称
+         */
+        shortName: "",
+        /**
+         * 开户许可证编号
+         */
+        openAccountLicenceNo: "",
+        /**
+         * 开户许可证照片
+         */
+        openAccountLicenceUrl: "",
+        /**
+         * 手持营业执照在经营场所的照片
+         */
+        handLicenceUrl: "",
+      },
+
+      /**
+       * 商城经营地址
+       */
+      businessAddressForm: {},
+
+      /**
+       * 结算账户信息
+       */
+      settlementAccountForm: {
+        /**
+         * 结算方向
+         */
+        settlementDirection: "",
+        /**
+         * 银行账户类型
+         */
+        bankAccountType: "",
+        bankAccountTypeLabel: "",
+        /**
+         * 银行账户号码
+         */
+        bankCardNo: "",
+        /**
+         * 银行账户开户总行编码
+         */
+        bankCode: "",
+        bankCodeLabel: ""
+      },
+
+      /**
+       * 商城经营地址
+       */
+      businessAddressForm: {
+        /**
+         * 省
+         */
+        province: "",
+        /**
+         * 市
+         */
+        city: "",
+        /**
+         * 区
+         */
+        district: "",
+        /**
+         * 详情地址
+         */
+        address: "",
+      },
+
+      /**
+       * 产品信息
+       */
+      productInfoForm: {
+        productInfo: "",
+      },
+
+      //银行账户开户总行编码
+      bankCodeList: [],
+      //账户类型
+      bankAccountTypeList: [{label: "企业对公账户", value: "ENTERPRISE_ACCOUNT"}],
+
+      merchantCorporationRules: {
+        legalLicenceFrontUrl: [{
+          required: true,
+          message: '请上传法人身份证件正面照片',
+          trigger: 'blur'
+        }],
+        legalLicenceBackUrl: [{
+          required: true,
+          message: '请上传法人身份证件反面照片',
+          trigger: 'blur'
+        }],
+        legalName: [{
+          required: true,
+          message: '请输入法人姓名',
+          trigger: 'blur'
+        }],
+        legalLicenceNo: [{
+          required: true,
+          message: '请输入法人证件号码',
+          trigger: 'blur'
+        }],
+      },
+      merchantContactRules: {
+        contactName: [{
+          required: true,
+          message: '请输入商场联系人姓名',
+          trigger: 'blur'
+        }],
+        contactLicenceNo: [{
+          required: true,
+          message: '请输入商场联系人证件号码',
+          trigger: 'blur'
+        }],
+        contactMobile: [{
+          required: true,
+          message: '请输入商场联系人手机号',
+          trigger: 'blur'
+        }],
+        contactEmail: [{
+          required: true,
+          message: '请输入商场联系人邮箱',
+          trigger: 'blur'
+        }],
+      },
+      merchantSubjectRules: {
+        businessLicense: [{
+          required: true,
+          message: '请上传商场营业执照',
+          trigger: 'blur'
+        }],
+        signName: [{
+          required: true,
+          message: '请输入商场全称',
+          trigger: 'blur'
+        }],
+        licenceNo: [{
+          required: true,
+          message: '请输入营业执照编号',
+          trigger: 'blur'
+        }],
+        shortName: [{
+          required: true,
+          message: '请输入商场简称',
+          trigger: 'blur'
+        }],
+        openAccountLicenceNo: [{
+          required: true,
+          message: '请输入开户许可证编号',
+          trigger: 'blur'
+        }],
+        openAccountLicenceUrl: [{
+          required: true,
+          message: '请上传开户许可证照',
+          trigger: 'blur'
+        }],
+        handLicenceUrl: [{
+          required: true,
+          message: '请上传手持营业执照在经营场所的照片',
+          trigger: 'blur'
+        }],
+      },
+      settlementAccountRules: {
+        bankAccountType: [{
+          required: true,
+          message: '请选择银行账户类型',
+          trigger: 'blur'
+        }],
+        bankCardNo: [{
+          required: true,
+          message: '请输入银行账户号码',
+          trigger: 'blur'
+        }],
+        bankCode: [{
+          required: true,
+          message: '请选择银行账户开户总行',
+          trigger: 'blur'
+        }],
+      },
+      businessAddressRules: {
+        province: [{
+          required: true,
+          message: '请输入省',
+          trigger: 'blur'
+        }],
+        city: [{
+          required: true,
+          message: '请输入市',
+          trigger: 'blur'
+        }],
+        district: [{
+          required: true,
+          message: '请输入区',
+          trigger: 'blur'
+        }],
+        address: [{
+          required: true,
+          message: '请输入详情地址',
+          trigger: 'blur'
+        }],
+      },
+      productInfoRules: {
+        productInfo: [{
+          required: true,
+          message: "请输入产品信息json",
+          trigger: 'blur',
+        }]
+      },
+      headers: {}
+    };
+  },
+  created() {
+    this.init()
+  },
+  watch: {
+    "businessAddressForm.province": {
+      handler(value) {
+        let parentCode = this.province.find(ele => {
+          return ele.title === value;
+        });
+        if (parentCode == null) {
+          return;
+        }
+        parentCode = parentCode.key;
+        this.cascadeMenuChange(parentCode, this.city);
+      }
+    },
+    "businessAddressForm.city": {
+      handler(value) {
+        let parentCode = this.city.find(ele => {
+          return ele.title === value;
+        });
+        if (parentCode == null) {
+          return;
+        }
+        parentCode = parentCode.key;
+        this.cascadeMenuChange(parentCode, this.district);
+      }
+    }
+  },
+  methods: {
+    init() {
+      this.headers = {
+        "Authorization": "Basic c2FiZXI6c2FiZXJfc2VjcmV0",
+        "Blade-Auth": JSON.parse(localStorage.getItem("saber-token")).content
+      }
+      this.getBankCode()
+      this.cascadeMenuChange("00", this.province);
+
+      this.settlementAccountForm.bankCode = this.bankAccountTypeList[0].value
+      this.settlementAccountForm.bankCodeLabel = this.bankAccountTypeList[0].label
+
+      const jsonData = "[\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"0.28\",\n" +
+        "          \"productCode\":\"USER_SCAN_WECHAT_OFFLINE\",\n" +
+        "          \"rateType\":\"SINGLE_PERCENT\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"0.28\",\n" +
+        "          \"productCode\":\"USER_SCAN_ALIPAY_OFFLINE\",\n" +
+        "          \"rateType\":\"SINGLE_PERCENT\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"0.28\",\n" +
+        "          \"productCode\":\"WECHAT_OFFIACCOUNT_WECHAT_OFFLINE\",\n" +
+        "          \"rateType\":\"SINGLE_PERCENT\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"0.28\",\n" +
+        "          \"productCode\":\"MINI_PROGRAM_WECHAT_OFFLINE\",\n" +
+        "          \"rateType\":\"SINGLE_PERCENT\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"0.28\",\n" +
+        "          \"productCode\":\"MINI_PROGRAM_ALIPAY_OFFLINE\",\n" +
+        "          \"rateType\":\"SINGLE_PERCENT\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"1\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"\",\n" +
+        "          \"productCode\":\"D1_MANUAL\",\n" +
+        "          \"rateType\":\"SINGLE_FIXED\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "          \"fixedRate\":\"1\",\n" +
+        "          \"paymentMethod\":\"REAL_TIME\",\n" +
+        "          \"percentRate\":\"1\",\n" +
+        "          \"productCode\":\"ENTERPRISE_WITHDRAW_STANDARD_REALTIME\",\n" +
+        "          \"rateType\":\"SINGLE_FIXED\",\n" +
+        "          \"undertaker\":\"SETTLED_MERCHANT\"\n" +
+        "      }\n" +
+        "    ]";
+      this.tooltip = JSON.stringify(JSON.parse(jsonData), null, 4);
+    },
+
+    /**
+     *
+     * 省市区级联菜单改变
+     * @param parentId
+     * @param index
+     */
+    cascadeMenuChange(parentCode, dic) {
+      getLazyTree(parentCode).then((res) => {
+        dic.length = 0;
+        res.data.data.forEach(ele => {
+          ele.label = ele.title;
+          ele.value = ele.title;
+          dic.push(ele);
+        })
+      });
+    },
+
+    //银行信息 begin
+    getBankCode(keyword) {
+      let params = {
+        current: 1,
+        size: 300,
+        code: 'bank_type',
+        keyword
+      }
+      dictionaryPage(params).then(res => {
+        let list = res.data.data.records
+        if (this.$isEmpty(keyword)) {
+          list.shift()
+        }
+        list.forEach((item, index) => {
+          let obj = {
+            label: JSON.parse(item.dictValue).name,
+            value: item.dictKey
+          }
+          this.bankCodeList.push(obj)
+        })
+        if (this.$isNotEmpty(this.bankCodeList)) {
+          this.settlementAccountForm.bankCode = this.bankCodeList[0].value
+          this.settlementAccountForm.bankCodeLabel = this.bankCodeList[0].label
+        }
+      })
+    },
+    getBankAccountType() {
+      let params = {
+        current: 1,
+        size: 10,
+        code: 'bank_account_type',
+      }
+      dictionaryPage(params).then(res => {
+        let list = res.data.data.records
+        list.shift()
+        list.forEach((item, index) => {
+          let obj = {
+            label: item.dictValue,
+            value: item.dictKey
+          }
+          this.bankAccountTypeList.push(obj)
+        })
+        if (this.$isNotEmpty(this.bankAccountTypeList)) {
+          this.settlementAccountForm.bankAccountType = this.bankAccountTypeList[0].value
+          this.settlementAccountForm.bankAccountTypeLabel = this.bankAccountTypeList[0].label
+        }
+      })
+    },
+    bankAccountTypeChange(e) {
+      let list = this.bankAccountTypeList.filter(item => item.value == e)
+      this.settlementAccountForm.bankAccountTypeLabel = list[0].label
+      this.settlementAccountForm.bankAccountType = list[0].value
+      this.$forceUpdate()
+    },
+    bankCodeChange(e) {
+      let list = this.bankCodeList.filter(item => item.value == e)
+      this.settlementAccountForm.bankCodeLabel = list[0].label
+      this.settlementAccountForm.bankCode = list[0].value
+      this.$forceUpdate()
+    },
+    remoteMethod(query) {
+      console.log(query);
+      this.bankCodeList = []
+      this.getBankCode(query)
+    },
+
+    preview() {
+      this.active--
+    },
+    //下一步
+    next() {
+      switch (this.active) {
+        case 1:
+          this.validForm('merchantCorporationForm')
+          break;
+        case 2:
+          this.validForm('merchantContactForm')
+          break;
+        case 3:
+          this.validForm('merchantSubjectForm')
+          break;
+        case 4:
+          this.validForm('settlementAccountForm')
+          break;
+        case 5:
+          this.validForm('businessAddressForm')
+          break;
+        case 6:
+          this.validForm('productInfoForm')
+          break;
+        default:
+          break;
+      }
+    },
+    validForm(formName) {
+      console.log(formName);
+      this.$refs[formName].validate((valid) => {
+        if (!valid) {
+          return false;
+        }
+        if (this.active == this.totalStep) {
+          this.submit()
+        } else {
+          this.active++
+        }
+      });
+    },
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+    async submit() {
+      this.confirm = true;
+
+      const auditForm = {};
+      auditForm.merchantSubjectInfo = this.merchantSubjectForm;
+      auditForm.merchantCorporationInfo = this.merchantCorporationForm;
+      auditForm.merchantContactInfo = this.merchantContactForm;
+      auditForm.businessAddressInfo = this.businessAddressForm;
+      auditForm.settlementAccountInfo = this.settlementAccountForm;
+      auditForm.productInfo = JSON.parse(this.productInfoForm.productInfo);
+
+      invite(auditForm).then(res => {
+        this.$message({
+          type: "success",
+          message: "修改成功!"
+        });
+      })
+      this.$emit("finish", {});
+
+    },
+    /**
+     * 上传法人身份证正面照
+     * @param {Object} e
+     */
+    handleUploadLegalLicenceFront(e) {
+      let source = e.data[0]
+      if (source.errmsg != "ok") {
+        this.$message.error('非法证件照');
+        return
+      }
+      //商场法人信息
+      this.merchantCorporationForm = {
+        legalName: source.name,
+        legalLicenceType: "ID_CARD",
+        legalLicenceNo: source.id,
+        legalLicenceFrontUrl: e.data[1].link,
+        legalLicenceBackUrl: "",
+        gender: source.gender,
+        addr: source.addr,
+        nationality: source.nationality,
+        validDate: source.validDate,
+      }
+      this.initMerchantContactForm()
+    },
+    initMerchantContactForm() {
+      this.merchantContactForm.contactLicenceNo = this.merchantCorporationForm.legalLicenceNo
+      this.merchantContactForm.contactName = this.mallDetail.personName
+      this.merchantContactForm.contactMobile = this.mallDetail.personTel
+      this.merchantContactForm.servicePhone = this.mallDetail.personTel
+    },
+    /**
+     * 上传法人身份证反面
+     * @param {Object} e
+     */
+    handleUploadLegalLicenceBack(e) {
+      if (e.data[0].errmsg != "ok") {
+        this.$message.error('非法证件照');
+        return
+      }
+      this.merchantCorporationForm.validDate = e.data[0].validDate
+      this.merchantCorporationForm.legalLicenceBackUrl = e.data[1].link
+    },
+    /**
+     * 上传营业执照
+     * @param {Object} e
+     */
+    handleUploadBusinessLicense(e) {
+      let source = e.data[0]
+      if (source.errmsg != "ok") {
+        this.$message.error('非法证件照');
+        return
+      }
+      Object.keys(this.merchantSubjectForm).forEach(key => {
+        this.merchantSubjectForm[key] = source[key]
+      })
+      this.merchantSubjectForm.signType = "ENTERPRISE"
+      this.merchantSubjectForm.signName = this.merchantSubjectForm.enterpriseName
+      this.merchantSubjectForm.shortName = this.mallDetail.mallName
+      this.merchantSubjectForm.licenceNo = source.regNum
+      this.merchantSubjectForm.businessLicense = e.data[1].link
+      console.log(this.merchantSubjectForm);
+    },
+    /**
+     * 上传开户证件照
+     * @param {Object} e
+     */
+    handleUploadOpenAccountLicence(e) {
+      this.merchantSubjectForm.openAccountLicenceUrl = e.data.link
+    },
+
+    /**
+     * 上传手持营业执照的照片
+     * @param {Object} e
+     */
+    handleUploadHandLicenceUrl(e) {
+      this.merchantSubjectForm.handLicenceUrl = e.data.link
+    },
+    compressImg(file) {
+      return new Promise((resolve, reject) => {
+        compress(file, 400).then((res) => {
+          //console.log(res);
+          resolve(res.compressFile);
+        }, (err) => {
+        });
+      })
+    },
+  }
+};
+</script>
+
+<style>
+.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>

+ 0 - 4
src/views/ldt_agent/agentleaguerecord.vue

@@ -89,10 +89,6 @@ export default {
               trigger: "blur"
             }]
           },
-          {
-            label: "缴费状态",
-            prop: "payStatus"
-          },
           {
             label: "appId",
             prop: "appId",

+ 170 - 0
src/views/ldt_bills/billtrace.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="avue-searchs"
+       @click.self="handleEsc">
+    <div class="avue-searchs__title">账单追溯</div>
+    <div class="avue-searchs__content">
+      <div class="avue-searchs__form">
+        <el-input placeholder="请输入账单号进行查询" v-model="value" @input="searchBill">
+          <el-button slot="append" icon="el-icon-search" @click="searchBill"></el-button>
+        </el-input>
+      </div>
+      <div class="avue-searchs__list">
+        <div class="avue-searchs__scrollbar">
+          <div class="avue-searchs__item"
+               v-for="(item,index) in billList"
+               :key="index"
+               @click="handleSelect(item.id)">
+            <i class="avue-searchs__item-icon"></i>
+            <span class="avue-searchs__item-title">订单号:{{ item.id }}</span>
+            <div class="avue-searchs__item-path">
+              <span style="margin-left: 10px">{{ item.title }}</span>
+              <span style="margin-left: 20px">金额:{{ item.cost }}元</span>
+            </div>
+          </div>
+          <infinite-loading @infinite="infiniteHandler">
+            <span slot="no-more">
+              No more
+            </span>
+          </infinite-loading>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import InfiniteLoading from 'vue-infinite-loading';
+import {getBills} from "../../api/ldt_bills/billtrace";
+
+export default {
+  components: {
+    InfiniteLoading,
+  },
+  data() {
+    return {
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      value: "",
+      bills: [],
+      billList: [],
+    }
+  },
+  // watch: {
+  //   value() {
+  //     this.querySearch();
+  //   },
+  // },
+  methods: {
+    searchBill() {
+      getBills(1, this.page.pageSize, {id: this.value}).then((res) => {
+        const data = res.data.data;
+        this.billList = data.records;
+      })
+    },
+    handleSelect(billId) {
+      this.$router.push(`/work/process/billtrace/handle?billId=${billId}`)
+    },
+    infiniteHandler($state) {
+      getBills(this.page.currentPage, this.page.pageSize, {id: this.value}).then((res) => {
+        const data = res.data.data;
+        if (data.records.length) {
+          this.bills = this.bills.concat(data.records);
+          this.billList = this.bills;
+          $state.loaded();
+          if (data.records.length === 0) {
+            $state.complete();
+          }
+          this.page.currentPage++;
+        } else {
+          $state.complete();
+        }
+      });
+    },
+    // querySearch() {
+    //   var restaurants = this.bills;
+    //   var queryString = this.value
+    //   this.billList = queryString ? this.bills.filter(this.createFilter(queryString)) : restaurants;
+    // },
+    // createFilter(queryString) {
+    //   return restaurant => {
+    //     return (
+    //       restaurant.id.indexOf(queryString) !== -1
+    //     );
+    //   };
+    // },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.avue-searchs {
+  padding-top: 50px;
+  width: 100%;
+  height: 100%;
+  background-color: #fff;
+  z-index: 1024;
+
+  &__title {
+    padding-top: 30px;
+    margin-bottom: 40px;
+    text-align: center;
+    font-size: 42px;
+    font-weight: bold;
+    letter-spacing: 2px;
+    text-indent: 2px;
+  }
+
+  &__form {
+    margin: 0 auto 50px auto;
+    width: 50%;
+    text-align: center;
+
+    p {
+      margin-top: 20px;
+    }
+  }
+
+  &__scrollbar {
+    height: 600px;
+    overflow: auto;
+  }
+
+  &__list {
+    box-sizing: border-box;
+    padding: 20px 30px;
+    margin: 0 auto;
+    width: 70%;
+    border-radius: 4px;
+    border: 1px solid #ebeef5;
+    background-color: #fff;
+    overflow: hidden;
+    color: #303133;
+    transition: 0.3s;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  }
+
+  &__item {
+    padding: 5px 0;
+    border-bottom: 1px dashed #eee;
+
+    &-icon {
+      margin-right: 5px;
+      font-size: 18px;
+    }
+
+    &-title {
+      font-size: 20px;
+      font-weight: 500;
+      color: #333;
+    }
+
+    &-path {
+      line-height: 30px;
+      color: #666;
+    }
+  }
+}
+</style>

+ 596 - 0
src/views/ldt_bills/comps/billTraceInfo.vue

@@ -0,0 +1,596 @@
+<template>
+  <el-row>
+    <basic-container v-for="item in options">
+      <el-col :span="24">
+        <avue-form :option="item" v-model="item.data">
+        </avue-form>
+      </el-col>
+    </basic-container>
+  </el-row>
+</template>
+
+<script>
+import {getDetail} from "@/api/ldt_bills/billtrace"
+
+export default {
+  data() {
+    return {
+      options: [],
+    }
+  },
+  created() {
+    this.init();
+  },
+  methods: {
+    init() {
+      const billId = this.$route.query.billId;
+
+      getDetail(billId).then((res) => {
+          const data = res.data.data;
+          for (const name in data) {
+            const option = {
+              detail: true,
+              data: {},
+              span: 8,
+              labelPosition: "left",
+              group: [
+                {
+                  label: '',
+                  prop: '',
+                  icon: '',
+                  column: [],
+                }
+              ],
+            }
+            option.group[0].prop = name;
+            if (name === "bills") {
+              option.group[0].label = '付款流水';
+              option.group[0].icon = 'icon-quanefukuan';
+              option.group[0].column = option.group[0].column.concat(
+                [
+                  {
+                    label: '订单号',
+                    prop: 'id',
+                  },
+                  {
+                    label: "付款方ID",
+                    prop: "payId",
+                  },
+                  {
+                    label: "付款方",
+                    prop: "payerName",
+                  },
+                  {
+                    label: "收款方ID",
+                    prop: "receiveId",
+                  },
+                  {
+                    label: "收款方",
+                    prop: "receiverName",
+                  },
+                  {
+                    label: "总金额",
+                    prop: "totalPrice",
+                  },
+                  {
+                    label: "金额原价",
+                    prop: "cost",
+                  },
+                  {
+                    label: "折扣",
+                    prop: "discount",
+                  },
+                  {
+                    label: "实付金额",
+                    prop: "price",
+                  },
+                  {
+                    label: "收取的服务费",
+                    prop: "fee",
+                    labelWidth: 100,
+                  },
+                  {
+                    label: "积分交易费",
+                    prop: "pointFee",
+                  },
+                  {
+                    label: "交易类型",
+                    prop: "type",
+                    type: "select",
+                    dicData: [{
+                      label: "用户付款",
+                      value: "USER_PAY"
+                    }, {
+                      label: "代理充值",
+                      value: "AGENT_CHARGE"
+                    }, {
+                      label: "微信充值",
+                      value: "WECHAT_PAY"
+                    }, {
+                      label: "商家充值",
+                      value: "MALL_RECHARGE"
+                    }]
+                  },
+                  {
+                    label: "第三方平台订单号",
+                    prop: "thirdOrderId",
+                    labelWidth: 130,
+                  },
+                  {
+                    label: "支付状态",
+                    prop: "payStatus",
+                    type: "select",
+                    dicData: [{
+                      label: "待付款",
+                      value: "待付款"
+                    }, {
+                      label: "付款成功",
+                      value: "付款成功"
+                    }, {
+                      label: "已完结",
+                      value: "已完结"
+                    }, {
+                      label: "取消付款",
+                      value: "取消付款"
+                    }]
+                  },
+                  {
+                    label: "交易时间",
+                    prop: "createTime",
+                    type: "datetime",
+                  },
+                ]
+              );
+            } else if (name === "platformBills") {
+              option.group[0].label = '平台流水';
+              option.group[0].icon = 'icon-shujupingtai';
+              if (data.platformBills !== null) {
+                option.group[0].column = option.group[0].column.concat(
+                  [
+                    {
+                      label: '订单号',
+                      prop: 'id',
+                    },
+                    {
+                      label: "支付方ID",
+                      prop: "payer",
+                    },
+                    {
+                      label: "支付方",
+                      prop: "payerName",
+                    },
+                    {
+                      label: "收款方ID",
+                      prop: "receiver",
+                    },
+                    {
+                      label: "收款方",
+                      prop: "receiverName",
+                    },
+                    {
+                      label: "交易类型",
+                      prop: "type",
+                      type: "select",
+                      dicData: [{
+                        label: "用户付款",
+                        value: "USER_PAY"
+                      }, {
+                        label: "代理充值",
+                        value: "AGENT_CHARGE"
+                      }, {
+                        label: "微信充值",
+                        value: "WECHAT_PAY"
+                      }, {
+                        label: "商家充值",
+                        value: "PAY_CONSUMER"
+                      }]
+                    },
+                    {
+                      label: "手续费",
+                      prop: "fee",
+                    },
+                    {
+                      label: "交易金额",
+                      prop: "price",
+                    },
+                    {
+                      label: "交易时间",
+                      prop: "createTime",
+                      type: "datetime",
+                    },
+                  ]
+                );
+              } else {
+                continue;
+              }
+            } else if (name === "pointBills") {
+              option.group[0].label = '积分流水';
+              option.group[0].icon = 'icon-jifen';
+              if (data.pointBills !== null) {
+                option.group[0].column = option.group[0].column.concat(
+                  [
+                    {
+                      label: '订单号',
+                      prop: 'id',
+                    },
+                    {
+                      label: "付款方ID",
+                      prop: "payId",
+                    },
+                    {
+                      label: "付款方",
+                      prop: "payerName",
+                    },
+                    {
+                      label: "收款方ID",
+                      prop: "receiveId",
+                    },
+                    {
+                      label: "收款方",
+                      prop: "receiverName",
+                    },
+                    {
+                      label: "交易状态",
+                      prop: "payStatus",
+                      type: "select",
+                      dicData: [{
+                        label: "待付款",
+                        value: "待付款"
+                      }, {
+                        label: "付款成功",
+                        value: "付款成功"
+                      }, {
+                        label: "已完结",
+                        value: "已完结"
+                      }, {
+                        label: "取消付款",
+                        value: "取消付款"
+                      }],
+                    },
+                    {
+                      label: "手续费",
+                      prop: "fee",
+                    },
+                    {
+                      label: "交易金额",
+                      prop: "price",
+                    },
+                    {
+                      label: "交易类型",
+                      prop: "type",
+                      type: "select",
+                      dicData: [{
+                        label: "用户付款",
+                        value: "PAY_CONSUMER"
+                      }, {
+                        label: "商场交易",
+                        value: "MALL_SEND"
+                      }, {
+                        label: "商户交易",
+                        value: "SHOP_SEND"
+                      }],
+                    },
+                    {
+                      label: "渠道名称",
+                      prop: "channelName",
+                    },
+                    {
+                      label: "渠道积分兑率",
+                      prop: "channelPointRate",
+                      labelWidth: "120",
+                    },
+                    {
+                      label: "是否核销",
+                      prop: "isCheak",
+                      type: "select",
+                      dicData: [
+                        {
+                          label: "否",
+                          value: 0
+                        },
+                        {
+                          label: "是",
+                          value: 1
+                        }
+                      ],
+                    },
+                    {
+                      label: "交易时间",
+                      prop: "createTime",
+                      type: "datetime",
+                    },
+                  ]
+                );
+              } else {
+                continue;
+              }
+            } else if (name === "balanceBills") {
+              option.group[0].label = '余额流水';
+              option.group[0].icon = 'icon-yue';
+              if (data.balanceBills !== null) {
+                option.group[0].column = option.group[0].column.concat(
+                  [
+                    {
+                      label: '订单号',
+                      prop: 'id',
+                    },
+                    {
+                      label: "付款方ID",
+                      prop: "payId",
+                    },
+                    {
+                      label: "付款方",
+                      prop: "payerName",
+                    },
+                    {
+                      label: "收款方ID",
+                      prop: "receiveId",
+                    },
+                    {
+                      label: "收款方",
+                      prop: "receiverName",
+                    },
+                    {
+                      label: "手续费",
+                      prop: "fee",
+                    },
+                    {
+                      label: "交易金额",
+                      prop: "price",
+                    },
+                    {
+                      label: "交易总金额",
+                      prop: "totalPrice",
+                    },
+                    {
+                      label: "交易状态",
+                      prop: "payStatus",
+                      type: "select",
+                      dicData: [{
+                        label: "待付款",
+                        value: "待付款"
+                      }, {
+                        label: "付款成功",
+                        value: "付款成功"
+                      }, {
+                        label: "已完结",
+                        value: "已完结"
+                      }, {
+                        label: "取消付款",
+                        value: "取消付款"
+                      }]
+                    },
+                    {
+                      label: "交易类型",
+                      prop: "type",
+                      type: "select",
+                      dicData: [{
+                        label: "用户付款",
+                        value: "PAY_CONSUMER"
+                      }, {
+                        label: "商场交易",
+                        value: "MALL_SEND"
+                      }, {
+                        label: "商户交易",
+                        value: "SHOP_SEND"
+                      }]
+                    },
+                    {
+                      label: "交易时间",
+                      prop: "createTime",
+                      type: "datetime",
+                    },
+                  ]
+                );
+              } else {
+                continue;
+              }
+            } else if (name === "frozenRec") {
+              option.group[0].label = '冻结流水';
+              option.group[0].icon = 'icon-suoding';
+              if (data.frozenRec !== null) {
+                option.group[0].column = option.group[0].column.concat(
+                  [
+                    {
+                      label: '订单号',
+                      prop: 'id',
+                    },
+                    {
+                      label: "冻结用户",
+                      prop: "userName",
+                    },
+                    {
+                      label: "账户类型",
+                      prop: "frozenType",
+                      type: "select",
+                      dicData: [
+                        {
+                          label: "渠道积分",
+                          value: "POINT"
+                        },
+                        {
+                          label: "普通积分",
+                          value: "BALANCE"
+                        }
+                      ]
+                    },
+                    {
+                      label: "冻结前金额",
+                      prop: "beforeNum",
+                    },
+                    {
+                      label: "冻结金额",
+                      prop: "frozenNum",
+                    },
+                    {
+                      label: "冻结状态",
+                      prop: "frozenSatus",
+                      type: "select",
+                      dicData: [
+                        {
+                          label: "已完成",
+                          value: "SUCCEED_FROZEN"
+                        },
+                        {
+                          label: "已退回",
+                          value: "RETURNED_FROZEN"
+                        }
+                      ],
+                    },
+                    {
+                      label: "交易时间",
+                      prop: "createTime",
+                      type: "datetime",
+                    },
+                  ]
+                );
+              } else {
+                continue;
+              }
+            } else if (name === "agentLeagueRecord") {
+              option.group[0].label = '代理缴费';
+              option.group[0].icon = 'el-icon-s-custom';
+              if (data.agentLeagueRecord !== null) {
+                option.group[0].column = option.group[0].column.concat(
+                  [
+                    {
+                      label: '订单号',
+                      prop: 'id',
+                    },
+                    {
+                      label: "用户",
+                      prop: "userName",
+                      rules: [{
+                        required: true,
+                        message: "请输入用户id",
+                        trigger: "blur"
+                      }]
+                    },
+                    {
+                      label: "代理记录",
+                      prop: "agentId",
+                    },
+                    {
+                      label: "加盟费(W)",
+                      prop: "league",
+                    },
+                    {
+                      label: "缴费状态",
+                      prop: "payStatus"
+                    },
+                    {
+                      label: "缴费时间",
+                      prop: "createTime",
+                    },
+                  ])
+              } else {
+                continue;
+              }
+            } else if (name === "goodsBills") {
+              option.group[0].label = '外卖流水';
+              option.group[0].icon = 'icon-shangpin';
+              if (data.goodsBills !== null) {
+                option.group[0].column = option.group[0].column.concat(
+                  [
+                    {
+                      label: '订单号',
+                      prop: 'id',
+                    },
+                    {
+                      label: "接收人",
+                      prop: "taker",
+                    },
+                    {
+                      label: "付款人",
+                      prop: "payer",
+                    },
+                    {
+                      label: "账单id",
+                      prop: "billsId",
+                    },
+                    {
+                      label: "订单状态",
+                      prop: "orderStatus",
+                      type: "select",
+                      dicData: [{
+                        label: "待付款",
+                        value: "待付款"
+                      }, {
+                        label: "付款成功",
+                        value: "付款成功"
+                      }, {
+                        label: "取消付款",
+                        value: "取消付款"
+                      }],
+                    },
+                    {
+                      label: "取餐方式",
+                      prop: "takeType",
+                    },
+                    {
+                      label: "商品总数",
+                      prop: "goodsTotalNum",
+                      type: 'number',
+                    },
+                    {
+                      label: "商品总价格",
+                      prop: "totalPrice",
+                      labelWidth: "120",
+                      precision: 2,
+                      type: 'number',
+                    },
+                    {
+                      label: "包装费",
+                      prop: "packingPrice",
+                      precision: 2,
+                      type: 'number',
+                    },
+                    {
+                      label: "配送费",
+                      prop: "sendingPrice",
+                      precision: 2,
+                      type: 'number',
+                    },
+                    {
+                      label: "取单号",
+                      prop: "verifyNum",
+                    },
+                    {
+                      label: "支付时间",
+                      prop: "payTime",
+                      type: "datetime",
+                    },
+                    {
+                      label: "订单完成时间",
+                      prop: "finishTime",
+                      type: "datetime",
+                      labelWidth: "120",
+                    },
+                    {
+                      label: "用户联系电话",
+                      prop: "userPhone",
+                      labelWidth: "120",
+                    },
+                    {
+                      label: "取餐人",
+                      prop: "receiver",
+                    },
+                  ])
+              } else {
+                continue;
+              }
+            }
+            option.data = data[name] != null ? data[name] : {};
+            this.options.push(option);
+          }
+        }
+      )
+      ;
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 460 - 0
src/views/ldt_bills/frozenrec.vue

@@ -0,0 +1,460 @@
+<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-scope="{type,size}" slot="createTimeSearch">
+        <el-radio-group v-model="query.createTime" :size="size" style="float: left">
+          <el-radio-button @click="searchStateChange" :label="-1">全部</el-radio-button>
+          <el-radio-button @click="searchStateChange" :label="1">今天</el-radio-button>
+          <el-radio-button @click="searchStateChange" :label="2">昨天</el-radio-button>
+          <el-radio-button @click="searchStateChange" :label="3">最近七天</el-radio-button>
+          <el-radio-button @click="searchStateChange" :label="4">最近30天</el-radio-button>
+          <el-radio-button @click="searchStateChange" :label="5">本月</el-radio-button>
+          <el-radio-button @click="searchStateChange" :label="6">本年</el-radio-button>
+        </el-radio-group>
+        <avue-date v-model="query.createTimeRange" type="datetimerange" format="yyyy年MM月dd日 hh:mm:ss"
+                   value-format="yyyy-MM-dd hh:mm:ss" placeholder="请选择日期"
+                   :size="size"
+                   @change="searchStateChange"
+                   style="width: 280px;margin-left:5px;float: left"
+                   range-separator="-"
+                   start-placeholder="开始日期"
+                   end-placeholder="结束日期"></avue-date>
+      </template>
+      <template slot-scope="{type,size}" slot="frozenTypeSearch">
+        <el-radio-group v-model="query.frozenType" :size="size" @change="searchStateChange">
+          <el-radio-button :label="select.value" v-for="(select,index) in option.column.find(ele=>{
+            return ele.prop==='frozenType';
+          }).dicData" :key="index">{{ select.label }}
+          </el-radio-button>
+        </el-radio-group>
+      </template>
+      <template slot-scope="{type,size}" slot="frozenSatusSearch">
+        <el-radio-group v-model="query.frozenSatus" :size="size" @change="searchStateChange">
+          <el-radio-button :label="select.value" v-for="(select,index) in option.column.find(ele=>{
+            return ele.prop==='frozenSatus';
+          }).dicData" :key="index">{{ select.label }}
+          </el-radio-button>
+        </el-radio-group>
+      </template>
+      <template slot-scope="{type,size}" slot="keySearch">
+        <el-input type="text" placeholder="订单ID" v-model="query.key" :size="size"
+                  style="width: 300px;margin: 1px 5px 1px 0;">
+          <el-button type="primary" :size="size" icon="el-icon-search" slot="append"
+                     @click="searchStateChange"></el-button>
+        </el-input>
+        <el-button type="primary" :size="size" icon="el-icon-top" @click="generateListAndDownload">生成列表</el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+import {add, generateList, getDetail, getList, remove, update} from "@/api/ldt_bills/frozenrec";
+import {mapGetters} from "vuex";
+import moment from "moment";
+import FileUtil from "@/util/fileUtil";
+
+export default {
+  data() {
+    return {
+      form: {},
+      query: {
+        createTime: -1,
+        createTimeRange: [],
+        frozenType: -1,
+        frozenSatus: -1,
+      },
+      loading: true,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      selectionList: [],
+      option: {
+        height: 'auto',
+        calcHeight: 30,
+        tip: false,
+        searchShow: true,
+        searchMenuSpan: 6,
+        span: 8,
+        border: true,
+        index: true,
+        viewBtn: true,
+        addBtn: false,
+        editBtn: false,
+        delBtn: false,
+        selection: true,
+        searchBtn: false,
+        emptyBtn: false,
+        dialogClickModal: false,
+        column: [
+          {
+            label: "冻结记录号",
+            prop: "id",
+            rules: [{
+              required: true,
+              message: "请输入订单号",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "冻结用户",
+            prop: "userName",
+            rules: [{
+              required: true,
+              message: "请输入冻结用户",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "账户类型",
+            prop: "frozenType",
+            labelWidth: 100,
+            search: true,
+            type: "select",
+            searchSpan: 24,
+            searchOrder: 1,
+            dicData: [
+              {
+                label: "全部",
+                value: -1
+              },
+              {
+                label: "渠道积分",
+                value: "POINT"
+              },
+              {
+                label: "普通积分",
+                value: "BALANCE"
+              }
+            ],
+            rules: [{
+              required: true,
+              message: "请输入冻结账户类型",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "冻结金额",
+            prop: "frozenNum",
+            rules: [{
+              required: true,
+              message: "请输入冻结金额",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "冻结前金额",
+            prop: "beforeNum",
+            rules: [{
+              required: true,
+              message: "请输入冻结前金额",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "冻结状态",
+            prop: "frozenSatus",
+            search: true,
+            type: "select",
+            searchSpan: 24,
+            searchOrder: 2,
+            dicData: [
+              {
+                label: "全部",
+                value: -1
+              },
+              {
+                label: "已完成",
+                value: "SUCCEED_FROZEN"
+              },
+              {
+                label: "已退回",
+                value: "RETURNED_FROZEN"
+              }
+            ],
+            rules: [{
+              required: true,
+              message: "请输入冻结状态",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "交易时间",
+            prop: "createTime",
+            type: "datetime",
+            format: "yyyy-MM-dd hh:mm:ss",
+            valueFormat: "yyyy-MM-dd hh:mm:ss",
+            searchRange: true,
+            addDisplay: false,
+            editDisplay: false,
+            search: true,
+            searchSpan: 24,
+            searchOrder: 0,
+            searchslot: true,
+          },
+          {
+            label: "关键字",
+            prop: "key",
+            hide: true,
+            search: true,
+            searchslot: true,
+            searchOrder: 3,
+            searchSpan: 24,
+            editDisplay: false,
+          },
+        ]
+      },
+      data: []
+    };
+  },
+  computed: {
+    ...mapGetters(["permission"]),
+    permissionList() {
+      return {
+        addBtn: this.vaildData(this.permission.frozenrec_add, false),
+        viewBtn: this.vaildData(this.permission.frozenrec_view, false),
+        delBtn: this.vaildData(this.permission.frozenrec_delete, false),
+        editBtn: this.vaildData(this.permission.frozenrec_edit, false)
+      };
+    },
+    ids() {
+      let ids = [];
+      this.selectionList.forEach(ele => {
+        ids.push(ele.id);
+      });
+      return ids.join(",");
+    }
+  },
+  watch: {
+    //监听创建时间变化
+    "query.createTime": {
+      handler(value) {
+        //防止重复调用
+        if (value !== undefined) {
+          this.query.createTimeRange = [];
+          switch (value) {
+            case -1:
+              this.query.createTimeStart = undefined;
+              this.query.createTimeEnd = undefined;
+              break;
+            case 1: //今天
+              this.query.createTimeStart = moment().format("yyyy-MM-DD 00:00:00");
+              this.query.createTimeEnd = moment().format("yyyy-MM-DD HH:mm:ss");
+              break;
+            case 2: //昨天
+              this.query.createTimeStart = moment().subtract(1, 'days').format("yyyy-MM-DD 00:00:00");
+              this.query.createTimeEnd = moment().subtract(1, 'days').format("yyyy-MM-DD 23:59:59");
+              break;
+            case 3: //近7天
+              this.query.createTimeStart = moment().subtract(7, 'days').format("yyyy-MM-DD HH:mm:ss");
+              this.query.createTimeEnd = moment().format("yyyy-MM-DD HH:mm:ss");
+              break;
+            case 4: //近30天
+              this.query.createTimeStart = moment().subtract(30, 'days').format("yyyy-MM-DD HH:mm:ss");
+              this.query.createTimeEnd = moment().format("yyyy-MM-DD HH:mm:ss");
+              break;
+            case 5: //本月
+              this.query.createTimeStart = moment().format("yyyy-MM-01 00:00:00");
+              this.query.createTimeEnd = moment().format(`yyyy-MM-DD HH:mm:ss`);
+              break;
+            case 6: //本年
+              this.query.createTimeStart = moment().format("yyyy-01-01 00:00:00");
+              this.query.createTimeEnd = moment().format(`yyyy-MM-DD HH:mm:ss`);
+              break;
+            default:
+              break;
+          }
+        }
+      }
+    },
+    //监听创建时间变化
+    "query.createTimeRange": {
+      handler(value) {
+        //防止重复调用
+        if (value != null && value.length === 2) {
+          this.query.createTimeStart = value[0];
+          this.query.createTimeEnd = value[1];
+          this.query.createTime = undefined;
+        }
+      }
+    },
+  },
+  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 = {}) {
+      let values = {
+        ...params,
+      };
+      values.createTime = null;
+      values.createTimeRange = null;
+      this.loading = true;
+      getList(page.currentPage, page.pageSize, values).then(res => {
+        const data = res.data.data;
+        this.page.total = data.total;
+        this.data = data.records;
+        this.loading = false;
+        this.selectionClear();
+      });
+    },
+    //搜索状态改变
+    searchStateChange() {
+      setTimeout(() => {
+        const newQuery = {};
+        this.page.currentPage = 1;
+        for (const item in this.query) {
+          if (this.query[item] !== undefined && this.query[item] !== -1) {
+            newQuery[item] = this.query[item];
+          }
+        }
+        this.onLoad(this.page, newQuery);
+      }, 100);
+    },
+    //生成列表并到处
+    generateListAndDownload() {
+      const newQuery = {};
+      for (const item in this.query) {
+        if (this.query[item] !== undefined && this.query[item] !== -1) {
+          newQuery[item] = this.query[item];
+        }
+      }
+      newQuery.createTime = null;
+      newQuery.createTimeRange = null;
+      //获取列表键值对
+      newQuery.keyValue = {};
+      this.option.column.forEach(ele => {
+        newQuery.keyValue[ele.prop] = ele.label;
+      });
+      newQuery.keyValue = JSON.stringify(newQuery.keyValue);
+      this.loading = true;
+      //生成列表
+      generateList(this.page.currentPage, this.page.pageSize, newQuery).then(res => {
+        FileUtil.download(res.data, {
+          type: "application/vnd.ms-excel"
+        }, `生成冻结记录-${moment().format("yyyy-MM-DD HH:mm:ss")}.xls`);
+      }).finally(() => {
+        this.loading = false;
+      });
+    },
+  }
+};
+</script>
+
+<style>
+</style>

+ 10 - 1
src/views/ldt_mall/comps/mall-product-fee.vue

@@ -1,5 +1,10 @@
 <template>
   <div>
+    <el-dialog @close="dialogShow=false" append-to-body :close-on-click-modal="false" :visible.sync="dialogShow"
+               :destroy-on-close="false"
+               title="产品费率更改历史" width="80%">
+      <productfee ref="refName" :businessId="this.operateId" type="mall"></productfee>
+    </el-dialog>
     <avue-crud :data="data" v-model="form" :option="option" @on-load="onLoad">
       <template slot-scope="{type,size}" slot="menuLeft">
         <el-popover
@@ -44,14 +49,17 @@ import {
   modifyProductFee,
   productFeeTip
 } from "@/api/ldt_mall/mall";
+import productfee from "@/views/ldt_product_fee/productfee";
 
 export default {
   props: {
     operateId: String,
     merchantNo: String,
   },
+  components:{productfee},
   data() {
     return {
+      dialogShow: false,
       dialog: {
         loading: false,
         state: false,
@@ -263,7 +271,8 @@ export default {
       });
     },
     viewUpdateHistory() {
-      this.$router.push({path: `/ldt_product_fee/productfee/handle/mall/${this.operateId}`})
+      this.dialogShow = true;
+      // this.$router.push({path: `/ldt_product_fee/productfee/handle/mall/${this.operateId}`})
     },
     updateProductFee() {
       Object.assign(this.dialog.data, this.data);

+ 162 - 0
src/views/ldt_notice/notice-receiver.vue

@@ -0,0 +1,162 @@
+<template>
+  <div>
+    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" v-model="form"
+               ref="crud" @search-change="searchChange" @search-reset="searchReset" @current-change="currentChange"
+               @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+
+    </avue-crud>
+  </div>
+</template>
+
+<script>
+import {getList} from "@/api/ldt_notice/noticereceiver";
+import {mapGetters} from "vuex";
+
+export default {
+  props: {
+    operateId: String
+  },
+  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,
+        selection: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        addBtn: false,
+        refreshBtn: true,
+        columnBtn: false,
+        dialogClickModal: false,
+        menu: false,
+        column: [
+          {
+            label: "接收人",
+            prop: "receiver",
+            addDisplay: false,
+            rules: [{
+              required: true,
+              message: "请输入接收人",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "身份",
+            labelWidth: 100,
+            prop: "receiverType",
+            type: "checkbox",
+            search: true,
+            searchLabelWidth: 90,
+            span: 24,
+            dicData: [],
+            rules: [{
+              required: true,
+              message: "接受者类型",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "是否已读",
+            prop: "isRead",
+            type: "switch",
+            search: true,
+            addDisplay: false,
+            dicData: [
+              {
+                label: "未读",
+                value: false
+              },
+              {
+                label: "已读",
+                value: true
+              }
+            ],
+            value: false,
+            rules: [{
+              required: true,
+              message: "请输入是否已读",
+              trigger: "blur"
+            }],
+          }
+        ]
+      }
+    }
+  },
+  computed: {
+    ...mapGetters(["userInfo"]),
+  },
+  created() {
+    const receiverType = this.option.column.find(ele => {
+      return ele.prop === "receiverType";
+    });
+    receiverType.dicData = this.receiverTypeDicDataFun();
+  },
+  methods: {
+    searchReset() {
+      this.query = {};
+      this.onLoad(this.page);
+    },
+    searchChange(params, done) {
+      this.query = params;
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    currentChange(currentPage) {
+      this.page.currentPage = currentPage;
+    },
+    sizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.query);
+    },
+    receiverTypeDicDataFun() {
+      const data =
+        [
+          {label: "商家", value: "SHOP"}
+        ];
+      if (this.userInfo.tenant_id === '000000') {
+        data.push({label: "商场", value: "MALL"});
+        data.push({label: "用户", value: "CONSUMER"});
+      } else {
+        data.push({label: "会员", value: "MEMBER"});
+      }
+      return data;
+    },
+    selectionClear() {
+      this.selectionList = [];
+      this.$refs.crud.toggleSelection();
+    },
+    onLoad(page, params = {}) {
+      this.query.contentId = this.operateId;
+      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>

+ 68 - 68
src/views/ldt_notice/notice.vue

@@ -1,5 +1,12 @@
 <template>
   <basic-container>
+    <el-dialog @close="dialogShow=false" append-to-body :close-on-click-modal="false" :visible.sync="dialogShow"
+               :destroy-on-close="true"
+               :title="dialogTitle" width="60%">
+      <notice-receiver v-if="dialogTitle==='接收列表'&& dialogShow" ref="refName" :operateId="operateId"
+                       :isResubmit="isResubmit" @finish="dialogShow=false"></notice-receiver>
+    </el-dialog>
+
     <avue-crud :option="option"
                :table-loading="loading"
                :data="data"
@@ -20,10 +27,17 @@
                @on-load="onLoad">
 
       <template slot-scope="scope" slot="menu">
+        <el-button class="el-button el-button--text el-button--small" icon="el-icon-edit"
+                   v-if="(userInfo.tenant_id === '000000' && scope.row.senderType === 'PLATFORM')||(userInfo.tenant_id !== '000000' && scope.row.senderType === 'MALL')"
+                   @click="rowEdit(scope.row,scope.index)">编辑
+        </el-button>
         <el-button class="el-button el-button--text el-button--small" icon="el-icon-delete"
-                   v-if="(userInfo.tenant_id === '000000' && scope.row.senderType === '平台')||(userInfo.tenant_id !== '000000' && scope.row.senderType === '商场')"
+                   v-if="(userInfo.tenant_id === '000000' && scope.row.senderType === 'PLATFORM')||(userInfo.tenant_id !== '000000' && scope.row.senderType === 'MALL')"
                    @click="rowDel(scope.row)">删除
         </el-button>
+        <el-button type="text" size="small" icon="icon-navicon-xxjsr" plain class="none-border"
+                   @click.stop="openDialog(scope.row.id,'接收列表')">接收列表
+        </el-button>
       </template>
     </avue-crud>
   </basic-container>
@@ -32,10 +46,15 @@
 <script>
 import {add, getDetail, getList, remove, update} from "@/api/ldt_notice/notice";
 import {mapGetters} from "vuex";
+import NoticeReceiver from "./notice-receiver";
 
 export default {
+  components: {NoticeReceiver},
   data() {
     return {
+      dialogShow: false,
+      operateId: '',
+      dialogTitle: '',
       form: {},
       query: {},
       loading: true,
@@ -55,9 +74,8 @@ export default {
         index: true,
         viewBtn: true,
         selection: true,
-        addBtn: true,
-        editBtn: false,
         delBtn: false,
+        editBtn: false,
         dialogClickModal: false,
         column: [
           {
@@ -72,23 +90,13 @@ export default {
           {
             label: "发送人",
             prop: "sender",
-            addDisplay: false,
+            display: false,
             rules: [{
               required: true,
               message: "请输入发送人",
               trigger: "blur"
             }]
           },
-          {
-            label: "接收人",
-            prop: "receiver",
-            addDisplay: false,
-            rules: [{
-              required: true,
-              message: "请输入接收人",
-              trigger: "blur"
-            }]
-          },
           {
             label: "发送者类型",
             labelWidth: 100,
@@ -96,8 +104,7 @@ export default {
             type: "select",
             search: true,
             searchLabelWidth: 90,
-            searchslot: true,
-            addDisplay: false,
+            display: false,
             dicData: [],
             rules: [{
               required: true,
@@ -108,42 +115,20 @@ export default {
           {
             label: "接收者类型",
             labelWidth: 100,
-            prop: "receiverType",
+            prop: "receiverTypes",
             type: "checkbox",
-            search: true,
             searchLabelWidth: 90,
-            searchslot: true,
+            hide: true,
+            editDisplay: false,
+            viewDisplay: false,
             span: 24,
             dicData: [],
             rules: [{
               required: true,
-              message: "接者类型",
+              message: "接者类型",
               trigger: "blur"
             }]
           },
-          {
-            label: "是否已读",
-            prop: "isRead",
-            type: "switch",
-            search: true,
-            addDisplay: false,
-            dicData: [
-              {
-                label: "未读",
-                value: false
-              },
-              {
-                label: "已读",
-                value: true
-              }
-            ],
-            value: false,
-            rules: [{
-              required: true,
-              message: "请输入是否已读",
-              trigger: "blur"
-            }],
-          },
           {
             label: "内容",
             prop: "content",
@@ -164,6 +149,12 @@ export default {
               trigger: "blur"
             }]
           },
+          {
+            label: "创建时间",
+            prop: "createTime",
+            addDisplay: false,
+            editDisplay: false,
+          },
         ]
       },
       data: []
@@ -188,29 +179,23 @@ export default {
     }
   },
   created() {
-    const receiverType = this.option.column.find(ele => {
-      return ele.prop === "receiverType";
-    });
-    receiverType.dicData = this.receiverTypeDicDataFun();
-
     const senderType = this.option.column.find(ele => {
       return ele.prop === "senderType";
     });
     senderType.dicData = this.senderTypeDicDataFun();
 
-    if (this.userInfo.tenant_id === '000000') {
-      this.form.senderType = 'PLATFORM';
-    } else {
-      this.form.senderType = 'MALL';
-    }
+    const receiverTypes = this.option.column.find(ele => {
+      return ele.prop === "receiverTypes";
+    });
+    receiverTypes.dicData = this.receiverTypesDicDataFun();
   },
   methods: {
-    rowDel(row, index) {
-      this.$refs.crud.rowDel(row, index)
+    rowEdit(row, index) {
+      this.$refs.crud.rowEdit(row, index);
     },
     rowSave(row, done, loading) {
-      row.receiverTypes = row.receiverType;
-      row.receiverType = null;
+      const content = encodeURIComponent(row.content);
+      row.content = content;
       add(row).then(() => {
         this.onLoad(this.page);
         this.$message({
@@ -224,6 +209,8 @@ export default {
       });
     },
     rowUpdate(row, index, done, loading) {
+      const content = encodeURIComponent(row.content);
+      row.content = content;
       update(row).then(() => {
         this.onLoad(this.page);
         this.$message({
@@ -278,14 +265,14 @@ export default {
     beforeOpen(done, type) {
       if (["edit", "view"].includes(type)) {
         getDetail(this.form.id).then(res => {
+          const content = res.data.data.content;
+          res.data.data.content = decodeURIComponent(content);
           this.form = res.data.data;
         });
       }
       done();
     },
     searchReset() {
-      //this.senderTypeValue = "";
-      //this.receiverTypeValue = "";
       this.query = {};
       this.onLoad(this.page);
     },
@@ -311,31 +298,43 @@ export default {
     refreshChange() {
       this.onLoad(this.page, this.query);
     },
-    receiverTypeDicDataFun() {
+    senderTypeDicDataFun() {
       const data =
         [
+          {label: "商场", value: "MALL"},
           {label: "商家", value: "SHOP"}
         ];
       if (this.userInfo.tenant_id === '000000') {
-        data.push({label: "商场", value: "MALL"});
-        data.push({label: "用户", value: "CONSUMER"});
-      } else {
-        data.push({label: "会员", value: "MEMBER"});
+        data.push({label: "平台", value: "PLATFORM"});
       }
-
       return data;
     },
-    senderTypeDicDataFun() {
+    receiverTypesDicDataFun() {
       const data =
         [
-          {label: "商场", value: "MALL"},
           {label: "商家", value: "SHOP"}
         ];
       if (this.userInfo.tenant_id === '000000') {
-        data.push({label: "平台", value: "PLATFORM"});
+        data.push({label: "商场", value: "MALL"});
+        data.push({label: "用户", value: "CONSUMER"});
+      } else {
+        data.push({label: "会员", value: "MEMBER"});
       }
       return data;
     },
+    openDialog(id, name) {
+      this.dialogTitle = name
+      this.operateId = id
+      this.dialogShow = true
+      this.canReset = true
+    },
+    handleSenderType() {
+      if (this.userInfo.tenant_id === '000000') {
+        this.form.senderType = 'PLATFORM';
+      } else {
+        this.form.senderType = 'MALL';
+      }
+    },
     onLoad(page, params = {}) {
       this.loading = true;
       getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
@@ -344,6 +343,7 @@ export default {
         this.data = data.records;
         this.loading = false;
         this.selectionClear();
+        this.handleSenderType();
       });
     }
   }

+ 12 - 4
src/views/ldt_product_fee/productfee.vue

@@ -62,7 +62,7 @@
       </template>
     </avue-crud>
     <el-dialog
-      title="修改产品费率"
+      title="查询产品费率修改"
       :visible.sync="dialog.state"
       :close-on-click-modal="false"
       :append-to-body="true"
@@ -80,6 +80,14 @@
 
   export default {
     components:{ProductFee},
+    props:{
+      businessId:{
+        type: "String"
+      },
+      type:{
+        type: "String"
+      }
+    },
     data() {
       return {
         dialog:{
@@ -359,10 +367,10 @@
       },
       onLoad(page, params = {}) {
         this.loading = true;
-        if(this.$route.params.type==="mall"){
-          params.mallId = this.$route.params.id;
+        if((this.$route.params.type || this.type)==="mall"){
+          params.mallId = this.$route.params.id || this.businessId;
         }else{
-          params.shopId = this.$route.params.id;
+          params.shopId = this.$route.params.id || this.businessId;
         }
         getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
           const data = res.data.data;

+ 20 - 2
src/views/ldt_shop/audit.vue

@@ -1,5 +1,11 @@
 <template>
   <basic-container>
+    <el-dialog @close="dialogShow=false" append-to-body :close-on-click-modal="false" :visible.sync="dialogShow"
+               :destroy-on-close="true"
+               :title="dialogTitle" fullscreen>
+      <handle-mini-c-r-o-shop-audit v-if="dialogTitle=='小微审核'" ref="refName" :operateId="operateId" :processInstanceId="processInstanceId"></handle-mini-c-r-o-shop-audit>
+      <handle-shop-audit v-if="dialogTitle=='商户审核'" ref="refName" :operateId="operateId" :processInstanceId="processInstanceId"></handle-shop-audit>
+    </el-dialog>
     <avue-crud :option="option"
                :table-loading="loading"
                :data="data"
@@ -29,10 +35,17 @@
 <script>
   import {getList, getDetail, add, update, remove} from "@/api/ldt_shop/audit";
   import {mapGetters} from "vuex";
+  import handleMiniCROShopAudit from "./handleMiniCROShopAudit";
+  import handleShopAudit from "./handleShopAudit";
 
   export default {
+    components:{handleMiniCROShopAudit,handleShopAudit},
     data() {
       return {
+        dialogShow: false,
+        dialogTitle: "",
+        operateId: "",
+        processInstanceId: "",
         form: {},
         query: {},
         loading: true,
@@ -132,10 +145,15 @@
     },
     methods: {
       handleAudit(row){
+        this.dialogShow = true;
+        this.processInstanceId = row.processInstanceId;
+        this.operateId = row.id;
         if(row.typeOfEnterprise==="MINICRO"){
-          this.$router.push(`/work/process/shop/miniCRO/handle/${row.processInstanceId}/${row.id}`);
+          this.dialogTitle = "小微审核";
+          // this.$router.push(`/work/process/shop/miniCRO/handle/${row.processInstanceId}/${row.id}`);
         }else{
-          this.$router.push(`/work/process/shop/handle/${row.processInstanceId}/${row.id}`);
+          this.dialogTitle = "商户审核";
+          // this.$router.push(`/work/process/shop/handle/${row.processInstanceId}/${row.id}`);
         }
       },
       rowSave(row, done, loading) {

+ 10 - 1
src/views/ldt_shop/comps/shop-product-fee.vue

@@ -1,5 +1,10 @@
 <template>
   <div>
+    <el-dialog @close="dialogShow=false" append-to-body :close-on-click-modal="false" :visible.sync="dialogShow"
+               :destroy-on-close="false"
+               title="产品费率更改历史" width="80%">
+      <productfee ref="refName" :businessId="this.operateId" type="shop"></productfee>
+    </el-dialog>
     <avue-crud :data="data" v-model="form" :option="option" @on-load="onLoad">
       <template slot-scope="{type,size}" slot="menuLeft">
         <el-popover
@@ -44,14 +49,17 @@ import {
   modifyProductFee,
   productFeeTip
 } from "@/api/ldt_shop/shop";
+import productfee from "@/views/ldt_product_fee/productfee";
 
 export default {
   props: {
     operateId: String,
     merchantNo: String,
   },
+  components:{productfee},
   data() {
     return {
+      dialogShow: false,
       dialog: {
         loading: false,
         state: false,
@@ -263,7 +271,8 @@ export default {
       });
     },
     viewUpdateHistory() {
-      this.$router.push({path: `/ldt_product_fee/productfee/handle/shop/${this.operateId}`})
+      this.dialogShow = true;
+      // this.$router.push({path: `/ldt_product_fee/productfee/handle/shop/${this.operateId}`})
     },
     updateProductFee() {
       Object.assign(this.dialog.data, this.data);

+ 1 - 1
src/views/ldt_shop/comps/shop-wechat-config.vue

@@ -105,7 +105,7 @@ export default {
   },
   methods: {
     init() {
-      this.businessId = this.$route.params.businessId;
+      // this.businessId = this.$route.params.businessId;
       getWechatConfigQuery(this.businessId).then(res => {
         this.parentData = res.data.data;
       });

+ 150 - 66
src/views/ldt_shop/handleMiniCROShopAudit.vue

@@ -9,10 +9,13 @@
         </el-row>
         <el-row type="flex" class="row-bg" justify="end">
           <el-form-item>
-            <el-button v-if="form.auditStatus == 'WAITING_PLATFORM'" type="primary" @click="handleAgree" :loading="loading">同意</el-button>
-            <el-button v-if="form.auditStatus == 'WAITING_PLATFORM'" type="danger" @click="handleDisagree" :loading="loading">驳回
+            <el-button v-if="form.auditStatus == 'WAITING_PLATFORM'" type="primary" @click="handleAgree"
+                       :loading="loading">同意
             </el-button>
-            <el-button @click="handleCancel">关闭</el-button>
+            <el-button v-if="form.auditStatus == 'WAITING_PLATFORM'" type="danger" @click="handleDisagree"
+                       :loading="loading">驳回
+            </el-button>
+<!--            <el-button @click="handleCancel">关闭</el-button>-->
           </el-form-item>
         </el-row>
       </el-card>
@@ -21,7 +24,7 @@
           <el-collapse-item title="易宝信息" name="yeepay">
             <el-card shadow="hover" style="margin-top: 20px;">
               <div v-for="(fee,index) in yeePayData.data" :key="index">
-                <h4 style="padding-left: 50px">{{fee.productName}}</h4>
+                <h4 style="padding-left: 50px">{{ fee.productName }}</h4>
                 <avue-form :option="yeePayData.option[index]" v-model="yeePayData.data[index]"></avue-form>
                 <el-divider/>
               </div>
@@ -56,7 +59,7 @@
 
 <script>
 import {getDetail} from "@/api/ldt_shop/audit"
-import {getProductFeeByShop} from "@/api/ldt_shop/shop"
+import {getProductFeeByShop, getShopDetail} from "@/api/ldt_shop/shop"
 import {historyFlowList} from "@/api/work/process";
 import {completeTask, todoList} from "@/api/work/work";
 
@@ -64,31 +67,47 @@ export default {
   mounted() {
     this.init();
   },
+  props:{
+    operateId:{
+      type: "String"
+    },
+    processInstanceId:{
+      type: "String"
+    }
+  },
   data() {
     return {
       businessId: null,
       form: {},
       task: {},
-      yeePayData:{
-        option:[],
-        data:[]
+      yeePayData: {
+        option: [],
+        data: []
       },
       loading: false,
       option: {
         emptyBtn: false,
         submitBtn: false,
-        labelPosition:"left",
+        labelPosition: "left",
         column: [
           {
             label: "商户名称",
             prop: "shopName",
-            span: 24,
+            span: 8,
+            disabled: true,
+          },
+          {
+            label: "商户联系人姓名",
+            prop: "contactName",
             disabled: true,
+            labelWidth: 120,
+            span: 8
           },
           {
             label: "身份证号",
             prop: "idCard",
             disabled: true,
+            span: 8,
             rules: [{
               required: true,
               message: "请输入身份证号",
@@ -99,6 +118,7 @@ export default {
             label: "具体地址",
             prop: "address",
             disabled: true,
+            span: 8,
             rules: [{
               required: true,
               message: "请输入具体地址",
@@ -108,43 +128,37 @@ export default {
           {
             label: "住址",
             prop: "addr",
-            disabled: true
-          },
-          {
-            label: "商户实际经营地所在省",
-            prop: "province",
             disabled: true,
-            labelWidth: 160,
-            span: 8
-          },
-          {
-            label: "商户实际经营地所在市",
-            prop: "district",
-            disabled: true,
-            labelWidth: 160,
-            span: 8
-          },
-          {
-            label: "商户实际经营地所在区",
-            prop: "contactMobile",
-            disabled: true,
-            labelWidth: 160,
-            span: 8
-          },
-          {
-            label: "商户联系人姓名",
-            prop: "contactName",
-            disabled: true,
-            labelWidth: 120,
-            span: 8
-          },
-          {
-            label: "商户联系人证件号码",
-            prop: "contactLicenceNo",
-            disabled: true,
-            labelWidth: 160,
-            span: 8
+            span: 8,
           },
+          // {
+          //   label: "商户实际经营地所在省",
+          //   prop: "province",
+          //   disabled: true,
+          //   labelWidth: 160,
+          //   span: 8
+          // },
+          // {
+          //   label: "商户实际经营地所在市",
+          //   prop: "city",
+          //   disabled: true,
+          //   labelWidth: 160,
+          //   span: 8
+          // },
+          // {
+          //   label: "商户实际经营地所在区",
+          //   prop: "district",
+          //   disabled: true,
+          //   labelWidth: 160,
+          //   span: 8
+          // },
+          // {
+          //   label: "商户联系人证件号码",
+          //   prop: "contactLicenceNo",
+          //   disabled: true,
+          //   labelWidth: 160,
+          //   span: 8
+          // },
           {
             label: "商户联系人手机号",
             prop: "contactMobile",
@@ -181,13 +195,74 @@ export default {
             span: 8
           },
           {
-            label: "商户logo",
-            prop: "shopLogo",
-            type: 'upload',
+            label: "位置编码",
+            prop: "locationCode",
+            disabled: true,
+            span: 12
+          },
+          {
+            label: "位置",
+            prop: "location",
             disabled: true,
+            span: 12
+          },
+          // {
+          //   label: "商户logo",
+          //   prop: "shopLogo",
+          //   type: 'upload',
+          //   disabled: true,
+          //   listType: 'picture-img',
+          //   span: 8,
+          //   labelWidth: 120,
+          //   propsHttp: {
+          //     res: 'data',
+          //     url: 'link'
+          //   },
+          //   canvasOption: {
+          //     text: 'avue',
+          //     ratio: 0.1
+          //   },
+          //   tip: '只能上传jpg/png文件,且不超过500kb',
+          //   action: '/api/blade-resource/oss/endpoint/put-file',
+          //   /*rules: [{
+          //     required: true,
+          //     message: "请输入身份证-正面",
+          //     trigger: "blur"
+          //   }]*/
+          // },
+          {
+            label: "商店封面",
+            prop: "cover",
+            disabled: true,
+            type: 'upload',
+            dataType: "string",
             listType: 'picture-img',
-            span: 12,
+            span: 8,
+            propsHttp: {
+              res: 'data',
+              url: 'link'
+            },
+            canvasOption: {
+              text: 'avue',
+              ratio: 0.1
+            },
+            tip: '只能上传jpg/png文件,且不超过500kb',
+            action: '/api/blade-resource/oss/endpoint/put-file',
+            rules: [{
+              required: true,
+              message: "请上传商店封面",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "店铺实况",
+            prop: "shopPic",
+            type: 'upload',
+            disabled: true,
+            dataType: 'string',
+            listType: 'picture-card',
             labelWidth: 120,
+            span: 16,
             propsHttp: {
               res: 'data',
               url: 'link'
@@ -198,11 +273,11 @@ export default {
             },
             tip: '只能上传jpg/png文件,且不超过500kb',
             action: '/api/blade-resource/oss/endpoint/put-file',
-            /*rules: [{
+            rules: [{
               required: true,
-              message: "请输入身份证-正面",
+              message: "请上传店铺图片",
               trigger: "blur"
-            }]*/
+            }]
           },
           {
             label: "身份证-正面",
@@ -210,7 +285,7 @@ export default {
             type: 'upload',
             disabled: true,
             listType: 'picture-img',
-            span: 12,
+            span: 8,
             labelWidth: 120,
             propsHttp: {
               res: 'data',
@@ -234,7 +309,7 @@ export default {
             disabled: true,
             type: 'upload',
             listType: 'picture-img',
-            span: 12,
+            span: 8,
             labelWidth: 120,
             propsHttp: {
               res: 'data',
@@ -246,17 +321,18 @@ export default {
             },
             tip: '只能上传jpg/png文件,且不超过500kb',
             action: '/api/blade-resource/oss/endpoint/put-file',
-           /* rules: [{
-              required: true,
-              message: "请输入身份证-反面",
-              trigger: "blur"
-            }]*/
+            /* rules: [{
+               required: true,
+               message: "请输入身份证-反面",
+               trigger: "blur"
+             }]*/
           },
           {
             label: "经营范围",
             prop: "businessScope",
             disabled: true,
-            type: "textarea"
+            type: "textarea",
+            span: 24,
           },
         ]
       },
@@ -293,7 +369,7 @@ export default {
         } else {
           this.$message.error(data.msg || '提交失败');
         }
-      }).finally(()=>{
+      }).finally(() => {
         this.loading = false;
       });
     },
@@ -321,7 +397,7 @@ export default {
         } else {
           this.$message.error(data.msg || '提交失败');
         }
-      }).finally(()=>{
+      }).finally(() => {
         this.loading = false;
       });
     },
@@ -329,10 +405,18 @@ export default {
       this.activeNames = name;
     },
     init() {
-      this.businessId = this.$route.params.businessId;
-      this.processInstanceId = this.$route.params.processInstanceId;
+      // this.businessId = this.$route.params.businessId;
+      // this.processInstanceId = this.$route.params.processInstanceId;
+      this.businessId = this.operateId;
+      this.processInstanceId = this.processInstanceId;
       getDetail(this.businessId).then(res => {
         this.form = res.data.data;
+        getShopDetail(res.data.data.entityId).then(res => {
+          this.form.locationCode = res.data.data.locationCode;
+          this.form.location = res.data.data.location;
+          this.form.shopPic = res.data.data.shopPic;
+          this.form.cover = res.data.data.cover;
+        });
       });
       todoList(1, 10, {
         assignee: "LDT_PLATFORM",
@@ -345,14 +429,14 @@ export default {
         this.flowList = res.data.data;
         console.log(this.flowList)
       })
-      getProductFeeByShop().then(res=>{
+      getProductFeeByShop().then(res => {
         this.updateProductFee(res.data.data);
       });
     },
     updateProductFee(data) {
       this.yeePayData.data = data;
       this.yeePayData.option = [];
-      for(let i=0;i<this.yeePayData.data.length;i++){
+      for (let i = 0; i < this.yeePayData.data.length; i++) {
         const productFeeOption = {
           labelWidth: 150,
           emptyBtn: false,

+ 78 - 46
src/views/ldt_shop/handleShopAudit.vue

@@ -9,10 +9,13 @@
         </el-row>
         <el-row type="flex" class="row-bg" justify="end">
           <el-form-item>
-            <el-button v-if="form.auditStatus == 'WAITING_PLATFORM'"  type="primary" @click="handleAgree" :loading="loading">同意</el-button>
-            <el-button v-if="form.auditStatus == 'WAITING_PLATFORM'"  type="danger" @click="handleDisagree" :loading="loading">驳回
+            <el-button v-if="form.auditStatus == 'WAITING_PLATFORM'" type="primary" @click="handleAgree"
+                       :loading="loading">同意
             </el-button>
-            <el-button @click="handleCancel">关闭</el-button>
+            <el-button v-if="form.auditStatus == 'WAITING_PLATFORM'" type="danger" @click="handleDisagree"
+                       :loading="loading">驳回
+            </el-button>
+<!--            <el-button @click="handleCancel">关闭</el-button>-->
           </el-form-item>
         </el-row>
       </el-card>
@@ -21,7 +24,7 @@
           <el-collapse-item title="易宝信息" name="yeepay">
             <el-card shadow="hover" style="margin-top: 20px;">
               <div v-for="(fee,index) in yeePayData.data" :key="index">
-                <h4 style="padding-left: 50px">{{fee.productName}}</h4>
+                <h4 style="padding-left: 50px">{{ fee.productName }}</h4>
                 <avue-form :option="yeePayData.option[index]" v-model="yeePayData.data[index]"></avue-form>
                 <el-divider/>
               </div>
@@ -56,7 +59,7 @@
 
 <script>
 import {getDetail} from "@/api/ldt_shop/audit"
-import {getProductFeeByMall} from "@/api/ldt_mall/mall"
+import {getShopDetail, getProductFeeByShop} from "@/api/ldt_shop/shop"
 import {historyFlowList} from "@/api/work/process";
 import {completeTask, todoList} from "@/api/work/work";
 
@@ -64,37 +67,47 @@ export default {
   mounted() {
     this.init();
   },
+  props:{
+    operateId:{
+      type: "String"
+    },
+    processInstanceId:{
+      type: "String"
+    }
+  },
   data() {
     return {
       businessId: null,
       form: {},
       loading: false,
-      yeePayData:{
-        option:[],
-        data:[]
+      yeePayData: {
+        option: [],
+        data: []
       },
       task: {},
       option: {
         emptyBtn: false,
         submitBtn: false,
-        labelPosition:"left",
+        labelPosition: "left",
         column: [
           {
             label: "商户名称",
             prop: "shopName",
-            span: 24,
+            span: 8,
             disabled: true,
           },
           {
             label: "企业名称【商户全称】",
             prop: "enterpriseName",
             disabled: true,
-            labelWidth: 160
+            labelWidth: 160,
+            span: 8,
           },
           {
             label: "主体信息",
             disabled: true,
             prop: "entity",
+            span: 8,
             rules: [{
               required: true,
               message: "请输入主体信息",
@@ -105,6 +118,7 @@ export default {
             label: "法人姓名",
             prop: "legalPerson",
             disabled: true,
+            span: 8,
             rules: [{
               required: true,
               message: "请输入法人姓名",
@@ -116,6 +130,7 @@ export default {
             prop: "legalLicenceType",
             disabled: true,
             labelWidth: 120,
+            span: 8,
             rules: [{
               required: true,
               message: "请输入法人证件类型",
@@ -127,22 +142,23 @@ export default {
             prop: "legalLicenceNo",
             disabled: true,
             labelWidth: 120,
+            span: 8,
             rules: [{
               required: true,
               message: "请输入法人证件号码",
               trigger: "blur"
             }]
           },
-          {
-            label: "身份证号",
-            prop: "idCard",
-            disabled: true,
-            rules: [{
-              required: true,
-              message: "请输入身份证号",
-              trigger: "blur"
-            }]
-          },
+          // {
+          //   label: "身份证号",
+          //   prop: "idCard",
+          //   disabled: true,
+          //   rules: [{
+          //     required: true,
+          //     message: "请输入身份证号",
+          //     trigger: "blur"
+          //   }]
+          // },
           {
             label: "具体地址",
             prop: "address",
@@ -158,7 +174,7 @@ export default {
             prop: "addr",
             disabled: true
           },
-          {
+          /*{
             label: "商户实际经营地所在省",
             prop: "province",
             disabled: true,
@@ -167,18 +183,18 @@ export default {
           },
           {
             label: "商户实际经营地所在市",
-            prop: "district",
+            prop: "city",
             disabled: true,
             labelWidth: 160,
             span: 8
           },
           {
             label: "商户实际经营地所在区",
-            prop: "contactMobile",
+            prop: "district",
             disabled: true,
             labelWidth: 160,
             span: 8
-          },
+          },*/
           {
             label: "成立时间",
             prop: "registeredDate",
@@ -204,13 +220,13 @@ export default {
             labelWidth: 120,
             span: 8
           },
-          {
-            label: "商户联系人证件号码",
-            prop: "contactLicenceNo",
-            disabled: true,
-            labelWidth: 160,
-            span: 8
-          },
+          // {
+          //   label: "商户联系人证件号码",
+          //   prop: "contactLicenceNo",
+          //   disabled: true,
+          //   labelWidth: 160,
+          //   span: 8
+          // },
           {
             label: "商户联系人手机号",
             prop: "contactMobile",
@@ -223,7 +239,7 @@ export default {
             prop: "openAccountLicenceNo",
             disabled: true,
             labelWidth: 120,
-            span:24
+            span: 8,
           },
           {
             label: "银行账户类型",
@@ -246,6 +262,18 @@ export default {
             labelWidth: 120,
             span: 8
           },
+          {
+            label: "位置编码",
+            prop: "locationCode",
+            disabled: true,
+            span: 8
+          },
+          {
+            label: "位置",
+            prop: "location",
+            disabled: true,
+            span: 8
+          },
           {
             label: "开户许可证照片",
             prop: "openAccountLicenceUrl",
@@ -334,11 +362,11 @@ export default {
             },
             tip: '只能上传jpg/png文件,且不超过500kb',
             action: '/api/blade-resource/oss/endpoint/put-file',
-           /* rules: [{
-              required: true,
-              message: "请输入身份证-反面",
-              trigger: "blur"
-            }]*/
+            /* rules: [{
+               required: true,
+               message: "请输入身份证-反面",
+               trigger: "blur"
+             }]*/
           },
           {
             label: "营业执照",
@@ -404,7 +432,7 @@ export default {
         } else {
           this.$message.error(data.msg || '提交失败');
         }
-      }).finally(()=>{
+      }).finally(() => {
         this.loading = false;
       });
     },
@@ -432,7 +460,7 @@ export default {
         } else {
           this.$message.error(data.msg || '提交失败');
         }
-      }).finally(()=>{
+      }).finally(() => {
         this.loading = false;
       })
     },
@@ -440,9 +468,15 @@ export default {
       this.activeNames = name;
     },
     init() {
-      this.businessId = this.$route.params.businessId;
-      this.processInstanceId = this.$route.params.processInstanceId;
+      // this.businessId = this.$route.params.businessId;
+      // this.processInstanceId = this.$route.params.processInstanceId;
+      this.businessId = this.operateId;
+      this.processInstanceId = this.processInstanceId;
       getDetail(this.businessId).then(res => {
+        getShopDetail(res.data.data.entityId).then(res => {
+          this.form.locationCode = res.data.data.locationCode;
+          this.form.location = res.data.data.location;
+        });
         this.form = res.data.data;
       });
       todoList(1, 10, {
@@ -450,20 +484,18 @@ export default {
         processInstanceId: this.processInstanceId
       }).then(res => {
         this.task = res.data.data.records[0];
-        console.log(this.task);
       })
       historyFlowList(this.processInstanceId).then(res => {
         this.flowList = res.data.data;
-        console.log(this.flowList)
       })
-      getProductFeeByMall().then(res=>{
+      getProductFeeByShop().then(res => {
         this.updateProductFee(res.data.data);
       });
     },
     updateProductFee(data) {
       this.yeePayData.data = data;
       this.yeePayData.option = [];
-      for(let i=0;i<this.yeePayData.data.length;i++){
+      for (let i = 0; i < this.yeePayData.data.length; i++) {
         const productFeeOption = {
           labelWidth: 150,
           emptyBtn: false,

+ 9 - 2
src/views/ldt_shop/shop-info.vue

@@ -10,6 +10,7 @@
           <shop-joinrecord v-if="dialogTitle==='参加的活动'" ref="refName" :operateId="businessId"></shop-joinrecord>
           <shop-withdrawrec v-if="dialogTitle==='提现记录'" ref="refName" :operateId="businessId"></shop-withdrawrec>
           <shop-product-fee v-if="dialogTitle==='产品费率'" ref="refName" :operateId="businessId"></shop-product-fee>
+          <shop-wechat-config v-if="dialogTitle==='公众号配置'" ref="refName" :businessId="businessId"></shop-wechat-config>
           <shop-auth-state v-if="dialogTitle==='易宝商户授权'" ref="refName" :operateId="businessId"></shop-auth-state>
         </el-dialog>
         <el-col style="padding: 10px 0 10px 0;">
@@ -22,7 +23,7 @@
                      :disabled="$isEmpty(this.merchantNo)">产品费率
           </el-button>
           <el-button size="small" plain icon="el-icon-chat-dot-round"
-                     @click.stop="handleWechatConfig" :disabled="$isEmpty(this.merchantNo)">公众号配置
+                     @click.stop="openDialog('公众号配置')" :disabled="$isEmpty(this.merchantNo)">公众号配置
           </el-button>
           <el-button size="small" plain icon="el-icon-s-check"
                      @click.stop="openDialog('易宝商户授权')" :disabled="$isEmpty(this.merchantNo)">易宝商户授权
@@ -97,6 +98,11 @@ export default {
     ShopWechatConfig,
     shopMember, shopBills, shopJoinrecord, shopWithdrawrec, shopProductFee
   },
+  props:{
+    operateId:{
+      type: "String"
+    }
+  },
   data() {
     return {
       merchant: {
@@ -394,7 +400,8 @@ export default {
   },
   methods: {
     init() {
-      this.businessId = this.$route.params.businessId;
+      this.businessId = this.operateId;
+      // this.businessId = this.$route.params.businessId;
       this.merchantNo = this.$route.params.no;
       this.getAccountInfo();
       this.getDetail();

+ 8 - 3
src/views/ldt_shop/shop.vue

@@ -2,7 +2,7 @@
   <basic-container>
     <el-dialog @close="dialogShow=false" append-to-body :close-on-click-modal="false" :visible.sync="dialogShow"
                :destroy-on-close="true"
-               :title="dialogTitle" width="80%">
+               :title="dialogTitle" fullscreen>
       <shop-member v-if="dialogTitle=='店铺会员'" ref="refName" :operateId="operateId"></shop-member>
       <shop-bills v-if="dialogTitle=='账单流水'" ref="refName" :operateId="operateId"></shop-bills>
       <shop-joinrecord v-if="dialogTitle=='参加的活动'" ref="refName" :operateId="operateId"></shop-joinrecord>
@@ -566,7 +566,7 @@ export default {
                 value: "PASS"
               },
               {
-                label: "审核通过",
+                label: "审核失败",
                 value: "FAIL"
               },
               {
@@ -745,7 +745,12 @@ export default {
   },
   methods: {
     handleShopInfo(row) {
-      this.$router.push(`/work/process/shopInfo/handle/${row.id}`);
+      //跳链接方式
+      // this.$router.push(`/work/process/shopInfo/handle/${row.id}`);
+      this.dialogShow  = true;
+      this.dialogTitle  = "商户信息";
+      this.operateId  = row.id;
+      this.dialogTitle = "查看";
     },
     openDialog(id, name) {
       this.dialogTitle = name

+ 2 - 2
vue.config.js

@@ -26,8 +26,8 @@ module.exports = {
     proxy: {
       '/api': {
         //本地服务接口地址
-        // target: 'http://localhost:2366',
-        target: 'http://139.159.240.119:2366/',
+        target: 'http://localhost:2366',
+        // target: 'http://139.159.240.119:2366/',
         // target: 'https://ldt.guosen-fumao.cn/api',
         //远程演示服务地址,可用于直接启动项目
         //target: 'https://saber.bladex.vip/api',

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott