billisme 4 年之前
父节点
当前提交
df6f720ec6

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

@@ -55,3 +55,19 @@ export const agreeSign = () => {
   })
 }
 
+export const platformAdd = (row) => {
+  return request({
+    url: '/api/cyzh-bussiness-info/bussinessinfo/platformSave',
+    method: 'post',
+    data: row
+  })
+}
+
+export const platformUpdate = (row) => {
+  return request({
+    url: '/api/cyzh-bussiness-info/bussinessinfo/platformUpdate',
+    method: 'post',
+    data: row
+  })
+}
+

+ 10 - 0
src/api/bussinessmng/bussiness.js

@@ -93,3 +93,13 @@ export const queryPlatformBalance = () => {
     method: 'get',
   })
 }
+
+export const listBussiness = (params) => {
+  return request({
+    url: '/api/cyzh-guosen/bussiness/listBussiness',
+    method: 'get',
+    params: {
+      ...params
+    }
+  })
+}

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

@@ -134,7 +134,7 @@
               label: "账号",
               prop: "userName",
               labelWidth: 130,
-              display: true,
+              editDisplay: false,
               span: 24,
               rules: [{
                 required: true,

+ 11 - 10
src/views/bussinessmng/bussinessinfo.vue

@@ -323,6 +323,7 @@
           viewBtn: this.vaildData(this.permission.bussinessinfo_view, false),
           delBtn: this.vaildData(this.permission.bussinessinfo_delete, false),
           editBtn: this.vaildData(this.permission.bussinessinfo_edit, false),
+          submitBtn: this.vaildData(this.permission.bussinessinfo_submit, false),
         };
       },
       ids() {
@@ -404,19 +405,19 @@
         }
       },
       submit(item) {
-        merchantRegister(item).then(() => {
+          merchantRegister(item).then(() => {
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
           this.$message({
             type: "success",
-            message: "操作成功!"
+            message: "操作成功,请等待结果"
           });
-        });
-        this.$message({
-          type: "success",
-          message: "操作成功,请等待结果"
-        });
-        this.onLoad(this.page);
-        this.$refs.addDialog.close();
-        this.resetData();
+          this.onLoad(this.page);
+          this.$refs.addDialog.close();
+          this.resetData();
       },
       rowSave(row, done, loading) {
         add(row).then(() => {

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

@@ -172,7 +172,7 @@
                 <div v-if="curEvent === 'add'">
                     <el-button v-if="active!=0" @click="active--">上一步</el-button>
                     <el-button type="primary" @click="handelNext" v-if="this.form1.id != null && this.form1.id.length > 0">下一步</el-button>
-                    <el-button v-if="active!=2" type="primary" @click="next">保存</el-button>
+                    <el-button type="primary" @click="next">保存</el-button>
                     <el-button v-if="active==2" type="primary" @click="submit()">提交申请</el-button>
                 </div>
                 <div v-if="curEvent === 'edit'">

+ 624 - 0
src/views/bussinessmng/comps/platform-bussinessinfo-add.vue

@@ -0,0 +1,624 @@
+<template>
+    <basic-container>
+        <el-dialog title="商户进件信息" :append-to-body="true" :visible.sync="dialogFormVisible" top="1vh" @close="dialogClose" @open="openDialog" :close-on-click-modal="false">
+            <!-- 步骤条 -->
+            <div class="steps">
+                <el-steps :active="active" process-status="finish" align-center>
+                    <el-step title="商户主体信息"></el-step>
+                    <el-step title="商户法人信息"></el-step>
+                    <el-step title="商户联系人信息"></el-step>
+                    <el-step title="商户产品资质信息"></el-step>
+                </el-steps>
+            </div>
+            <!-- 商户主体信息 -->
+            <el-card style="margin-top: 40px;" v-if="active==0">
+                <div style="margin-top:10px;">
+                    <el-form  :model="form1" :rules="rules1" ref="form1" label-width="120px" label-position="right" size="small">
+                        <el-form-item label="所属商户" prop="bussinessId">
+                            <el-select v-model="form1.bussinessId" placeholder="请选择商户角色" clearable="true">
+                                <el-option v-for="item in bussinessOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="商户角色" prop="signType">
+                            <el-select v-model="form1.bussinessRole" placeholder="请选择商户角色" clearable="true">
+                                <el-option v-for="item in bussinessRoleOptions" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="商户签约类型" prop="signType">
+                            <el-select v-model="form1.signType" placeholder="请输入商户类型" clearable="true">
+                                <el-option v-for="item in signTypeOptions" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="商户证件编号" prop="licenceNo">
+                            <el-input v-model="form1.licenceNo" placeholder="请输入商户证件编号"></el-input>
+                        </el-form-item>
+                        <el-form-item label="开户许可证编号" prop="openAccountLicenceNo">
+                            <el-input v-model="form1.openAccountLicenceNo" placeholder="如无开户许可证编号,可传基本存款账户编号"></el-input>
+                        </el-form-item>
+                        <el-form-item label="商户签约名称" prop="signName">
+                            <el-input v-model="form1.signName" placeholder="请输入商户签约名称"></el-input>
+                        </el-form-item>
+                        <el-form-item label="商户简称" prop="shortName">
+                            <el-input v-model="form1.shortName" placeholder="请输入商户简称"></el-input>
+                        </el-form-item>
+                        <el-row>
+                            <el-col span="8">
+                                <el-form-item label="经营地所在省" prop="province">
+                                    <el-select v-model="form1.province" placeholder="请选择经营地所在省" clearable @change="loadCity">
+                                        <el-option
+                                                v-for="item in provinceOptions"
+                                                :key="item.provinceCode"
+                                                :label="item.provinceName"
+                                                :value="item.provinceCode">
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="8">
+                                <el-form-item label="经营地所在市" prop="city">
+                                    <el-select v-model="form1.city" placeholder="请选择经营地所在市" clearable @change="loadDistrict">
+                                        <el-option
+                                                v-for="item in cityOptions"
+                                                :key="item.cityCode"
+                                                :label="item.cityName"
+                                                :value="item.cityCode">
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="8">
+                                <el-form-item label="经营地所在区" prop="district">
+                                    <el-select v-model="form1.district" placeholder="请选择经营地所在区" clearable>
+                                        <el-option
+                                                v-for="item in districtOptions"
+                                                :key="item.districtCode"
+                                                :label="item.districtName"
+                                                :value="item.districtCode">
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-form-item label="经营地址" prop="address">
+                            <el-input v-model="form1.address" placeholder="请输入经营地址"></el-input>
+                        </el-form-item>
+                        <el-row>
+                            <el-col span="12">
+                                <el-form-item prop="licenceUrl" label="商户证件照片" style="width: 45%;">
+                                    <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
+                                               :on-success="uploadLicenceUrl" :before-upload="beforeUploadLicenceUrl">
+                                        <img v-if="form1.licenceUrl" :src="form1.licenceUrl" class="avatar">
+                                        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                                    </el-upload>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="12">
+                                <el-form-item prop="handLicenceUrl" label="手持营业执照在经营场所的照片" style="width: 45%;">
+                                    <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
+                                               :on-success="uploadHandLicenceUrl" :before-upload="beforeUploadLicenceUrl">
+                                        <img v-if="form1.handLicenceUrl" :src="form1.handLicenceUrl" class="avatar">
+                                        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                                    </el-upload>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-form-item prop="openAccountLicenceUrl" label="开户许可证照片" style="width: 45%;">
+                            <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
+                                       :on-success="uploadOpenAccountLicenceUrl" :before-upload="beforeUploadLicenceUrl">
+                                <img v-if="form1.openAccountLicenceUrl" :src="form1.openAccountLicenceUrl" class="avatar">
+                                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                            </el-upload>
+                        </el-form-item>
+                        <span style="color: red">如无开户许可证,请上传基本存款账户信息表照片</span>
+                    </el-form>
+                </div>
+            </el-card>
+
+            <!-- 商户法人信息 -->
+            <div style="margin-top: 40px;" v-if="active==1">
+                <el-card style="margin-top: 10px;">
+                    <el-form ref="form2"  :model="form2" :rules="rules2">
+                        <el-form-item label="法人姓名" prop="legalName">
+                            <el-input v-model="form2.legalName" placeholder="请输入法人姓名"></el-input>
+                        </el-form-item>
+                        <el-row>
+                            <el-col span="8">
+                                <el-form-item label="法人证件类型" prop="legalLicenceType">
+                                    <el-select v-model="form2.legalLicenceType" placeholder="请输入法人证件类型" clearable="true">
+                                        <el-option v-for="item in legalLicenceTypeOptions" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="16">
+                                <el-form-item label="法人证件号码" prop="legalLicenceNo">
+                                    <el-input v-model="form2.legalLicenceNo" placeholder="请输入法人证件号码"></el-input>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-row>
+                            <el-col span="12">
+                                <el-form-item prop="legalLicenceFrontUrl" label="请上传法人证件正面照片" style="width: 45%;">
+                                    <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
+                                               :on-success="uploadLegalLicenceFrontUrl" :before-upload="beforeUploadContactUrl">
+                                        <img v-if="form2.legalLicenceFrontUrl" :src="form2.legalLicenceFrontUrl" class="avatar">
+                                        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                                    </el-upload>
+                                </el-form-item>
+                            </el-col>
+                            <el-col span="12">
+                                <el-form-item prop="legalLicenceBackUrl" label="法人证件反面照片" style="width: 45%;">
+                                    <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
+                                               :on-success="uploadLegalLicenceBackUrl" :before-upload="beforeUploadContactUrl">
+                                        <img v-if="form2.legalLicenceBackUrl" :src="form2.legalLicenceBackUrl" class="avatar">
+                                        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                                    </el-upload>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                    </el-form>
+                </el-card>
+            </div>
+
+            <!-- 商户联系人信息 -->
+            <div style="margin-top: 40px;" v-if="active==2">
+                <el-card style="margin-top: 10px;">
+                    <el-form ref="form3" :model="form3" :rules="rules3"  label-width="120px">
+                        <el-form-item label="联系人姓名" prop="contactName">
+                            <el-input v-model="form3.contactName" placeholder="请输入联系人姓名"></el-input>
+                        </el-form-item>
+                        <el-form-item label="联系人证件号" prop="contactLicenceNo">
+                            <el-input v-model="form3.contactLicenceNo" placeholder="请输入联系人证件号码"></el-input>
+                        </el-form-item>
+                        <el-form-item label="联系人手机号" prop="contactMobile">
+                            <el-input v-model="form3.contactMobile" placeholder="请输入联系人手机号"></el-input>
+                        </el-form-item>
+                        <el-form-item label="联系人邮箱" prop="contactEmail">
+                            <el-input v-model="form3.contactEmail" placeholder="请输入联系人邮箱"></el-input>
+                        </el-form-item>
+                    </el-form>
+                </el-card>
+            </div>
+
+            <!-- 商户产品资质信息 -->
+            <div style="margin-top: 40px;" v-if="active==3">
+                <el-card style="margin-top: 10px;">
+                    <el-form ref="form4" :model="form4" :rules="rules4"  label-width="120px">
+                        <el-form-item label="付款场景" prop="paymentScene">
+                            <el-select v-model="form4.paymentScene" placeholder="请选择付款场景" clearable="true">
+                                <el-option v-for="item in bussinessPaymentSceneOptions" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-col span="12">
+                            <el-form-item prop="agreementPhotoUrl" label="付款业务协议图片/附件" style="width: 45%;">
+                                <el-upload class="avatar-uploader" action="/api/putObject" :limit="1"
+                                           :on-preview="handlePreview" :file-list="form4.agreementPhotoUrlArray" :on-success="uploadLegalLicenceBackUrl" :before-upload="beforeUploadContactUrl">
+                                    <el-button size="small" type="primary">点击上传</el-button>
+                                </el-upload>
+                            </el-form-item>
+                        </el-col>
+                        <el-col span="12">
+                            <el-form-item prop="systemScreenshotUrl" label="付款业务系统截图/附件" style="width: 45%;">
+                                <el-upload class="avatar-uploader" action="/api/putObject" :limit="1"
+                                           :on-preview="handlePreview" :file-list="form4.systemScreenshotUrlArray" :on-success="uploadLegalLicenceBackUrl" :before-upload="beforeUploadContactUrl">
+                                    <el-button size="small" type="primary">点击上传</el-button>
+                                </el-upload>
+                            </el-form-item>
+                        </el-col>
+                        <el-col span="12">
+                            <el-form-item prop="specialPermitProcessUrl" label="特批开通流程/截图" style="width: 45%;">
+                                <el-upload class="avatar-uploader" action="/api/putObject" :limit="1"
+                                           :on-preview="handlePreview" :file-list="form4.specialPermitProcessUrlArray" :on-success="uploadLegalLicenceBackUrl" :before-upload="beforeUploadContactUrl">
+                                    <el-button size="small" type="primary">点击上传</el-button>
+                                </el-upload>
+                            </el-form-item>
+                        </el-col>
+                    </el-form>
+                </el-card>
+            </div>
+
+            <div slot="footer" class="dialog-footer">
+                <div v-if="curEvent === 'add'">
+                    <el-button v-if="active!=0" @click="active--">上一步</el-button>
+                    <el-button type="primary" @click="handelNext" v-if="this.form1.id != null && this.form1.id.length > 0">下一步</el-button>
+                    <el-button v-if="active!=3" type="primary" @click="next">保存</el-button>
+                    <el-button v-if="active==3" type="primary" @click="submit()">提交申请</el-button>
+                </div>
+                <div v-if="curEvent === 'edit'">
+                    <el-button v-if="active!=0" @click="active--">上一步</el-button>
+                    <el-button type="primary" @click="handelNext">下一步</el-button>
+                    <el-button type="primary" @click="next">保存</el-button>
+                    <el-button v-if="active==3" type="primary" @click="submit()">提交申请</el-button>
+                </div>
+            </div>
+        </el-dialog>
+    </basic-container>
+</template>
+
+
+<script>
+    import {
+        getProvinceList,
+        getCityList,
+        getDistrictList
+    } from "@/api/bussinessregion/bussinessregion";
+    import {getDictionary} from "@/api/system/dictbiz";
+    import {platformAdd as savePlatformBussInfo, platformUpdate as updatePlatformBussInfo} from "@/api/bussinessmng/bussinessinfo"
+    import {add as saveContactInfo} from "@/api/bussinessmng/bussinesscontactinfo"
+    import {listBussiness} from "@/api/bussinessmng/bussiness"
+    export default {
+        props:{
+            form1:Object,
+            form2:Object,
+            form3:Object,
+            form4:Object,
+            curEvent: 'add',
+        },
+        data() {
+            var validatemobile = (rule, value, callback) => {
+                let isPhone = /^0\d{2,3}-?\d{7,8}$/;
+                if (value.length == 11) {
+                    if (isPhone.test(value)) {
+                        callback(new Error('手机号码格式不正确'));
+                    } else {
+                        callback();
+                    }
+                } else {
+                    callback(new Error('手机号码长度不为11位'));
+                }
+
+            };
+            var validateEmail = (rule, value, callback) => {
+                let result = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(value)
+                if(!result){
+                    callback(new Error("邮箱为空或邮箱格式有误!"));
+                }else{
+                    callback();
+                }
+            };
+            return {
+                form:{bussinessInfoId: null},
+                provinceOptions:[],
+                bussinessOptions:[],
+                cityOptions:[],
+                districtOptions:[],
+                provinceProps: {
+                    lazy: true,
+                    label: 'provinceName',
+                    value: 'provinceCode',
+                },
+                cityProps: {
+                    label: 'cityName',
+                    value: 'cityCode',
+                    children: 'children'
+                },
+                districtProps: {
+                    label: 'cityName',
+                    value: 'cityCode',
+                },
+                bussinessRoleOptions: [],
+                signTypeOptions: [],
+                legalLicenceTypeOptions: [],
+                bussinessPaymentSceneOptions: [],
+                agreementPhotoUrlArray: [],
+                systemScreenshotUrlArray: [],
+                specialPermitProcessUrlArray: [],
+                dialogFormVisible: false,
+                //步骤条
+                active: 0,
+                //表单
+                rules1:{
+                    bussinessId: [
+                        { required: true, message: '请选择所属商户', trigger: 'blur' },
+                    ],
+                    signType: [
+                        { required: true, message: '请输入商户类型', trigger: 'blur' },
+                    ],
+                    licenceNo: [
+                        { required: true, message: '请输入商户证件编号', trigger: 'blur' },
+                    ],
+                    signName: [
+                        { required: true, message: '请输入商户签约名称', trigger: 'blur' },
+                    ],
+                    shortName: [
+                        { required: true, message: '请输入商户简称', trigger: 'blur' },
+                    ],
+                    province: [
+                        { required: true, message: '请选择商户实际经营地所在省', trigger: 'blur' },
+                    ],
+                    city: [
+                        { required: true, message: '请选择商户实际经营地所在市', trigger: 'blur' },
+                    ],
+                    district: [
+                        { required: true, message: '请选择商户实际经营地所在区', trigger: 'blur' },
+                    ],
+                    address: [
+                        { required: true, message: '请输入经营地址', trigger: 'blur' },
+                    ],
+                    openAccountLicenceNo: [
+                        { required: true, message: '请输入开户许可证编号', trigger: 'blur' },
+                    ],
+                    licenceUrl: [
+                        { required: false, message: '请上传商户证件照片', trigger: 'blur' },
+                    ],
+                    openAccountLicenceUrl: [
+                        { required: false, message: '请上传法人证件照正面照片', trigger: 'blur' },
+                    ],
+                    handLicenceUrl: [
+                        { required: false, message: '请上传法人证件照反面照片', trigger: 'blur' },
+                    ],
+                },
+                rules2:{
+                    legalName:[
+                        {required: true, message: '请输入法人姓名', trigger: 'blur' },
+                    ],
+                    legalLicenceType:[
+                        {required: true, message: '请选择法人证件类型', trigger: 'blur' },
+                    ],
+                    legalLicenceNo:[
+                        {required: true, message: '请输入法人证件号码', trigger: 'blur' },
+                    ],
+                    legalLicenceFrontUrl:[
+                        {required: false, message: '请上传法人证件正面照片', trigger: 'blur' },
+                    ],
+                    legalLicenceBackUrl:[
+                        {required: false, message: '请上传法人证件反面照片', trigger: 'blur' },
+                    ]
+                },
+                rules3:{
+                    contactName:[
+                        {required: true, message: '请输入联系人姓名', trigger: 'blur' },
+                    ],
+                    contactMobile: [
+                        { required: true, trigger: 'blur', validator: validatemobile, min: 11, max: 11},
+                    ],
+                    contactEmail:[
+                        {required: true, trigger: 'blur', validator: validateEmail },
+                    ]
+                },
+                //勋章配置
+                medalList:[],
+            }
+        },
+        created() {
+            this.loadProvince();
+            this.loadDict("business_sign_type");
+            this.loadDict("legal_licence_type");
+            this.loadDict("yee_business_role");
+            this.loadDict("yee_payment_scene_code");
+            this.loadBussinessList();
+        },
+        methods: {
+            loadBussinessList(){
+                listBussiness({}).then(res => {
+                    this.bussinessOptions = res.data.data;
+                })
+            },
+            handlePreview(file){
+                let fileTag = document.createElement('a')
+                let event = new MouseEvent('click');
+                fileTag.download = file.name
+                fileTag.href = file.response.data;
+                fileTag.dispatchEvent(event)
+            },
+            beforeUploadLicenceUrl(file){
+                if(file.size > 5242880){
+                    this.$message.error("图片大小不能超过2.5M");
+                    return false;
+                }else{
+                    return true;
+                }
+            },
+            beforeUploadContactUrl(file){
+                if(file.size > 1048576){
+                    this.$message.error("图片大小不能超过1M");
+                    return false;
+                }else{
+                    return true;
+                }
+            },
+            openDialog(){
+                if(this.curEvent == 'edit'){
+                    this.loadCity(this.form1.province);
+                    this.loadDistrict(this.form1.city);
+                }
+            },
+            loadDict(code){
+                getDictionary({"code":code}).then(res =>{
+                    if(code === 'business_sign_type'){
+                        this.signTypeOptions = res.data.data;
+                    }else if(code === 'legal_licence_type'){
+                        this.legalLicenceTypeOptions = res.data.data;
+                    }else if(code === 'yee_business_role'){
+                        this.bussinessRoleOptions = res.data.data;
+                    }else if(code === 'yee_payment_scene_code'){
+                        this.bussinessPaymentSceneOptions = res.data.data;
+                    }
+                })
+            },
+            loadProvince(){
+                getProvinceList().then(res =>{
+                    this.provinceOptions = res.data.data;
+                })
+            },
+            loadCity(provinceCode){
+                getCityList(provinceCode).then(res =>{
+                    this.cityOptions = res.data.data;
+                })
+            },
+            loadDistrict(cityCode){
+                getDistrictList(cityCode).then(res =>{
+                    this.districtOptions = res.data.data;
+                })
+            },
+            open() {
+                this.dialogFormVisible = true
+            },
+            close() {
+                this.dialogFormVisible = false;
+                this.active = 0;
+            },
+            // confirm() {
+            //     let validForm3 = this.validForm('form3');
+            //     if(validForm3){
+            //         let contactBody = {};
+            //         saveContactInfo(Object.assign(contactBody, this.form2, this.form3)).then(res =>{
+            //             this.handelNext();
+            //         })
+            //     }
+            // },
+            //上传商户证件照片
+            uploadLicenceUrl(res) {
+                this.form1.licenceUrl=res.data
+            },
+            //上传手持照片
+            uploadHandLicenceUrl(res){
+                this.form1.handLicenceUrl=res.data
+            },
+            //上传开户凭证图片
+            uploadOpenAccountLicenceUrl(res){
+                this.form1.openAccountLicenceUrl=res.data
+            },
+            //上传法人证件正面照片
+            uploadLegalLicenceFrontUrl(res) {
+                this.form2.legalLicenceFrontUrl = res.data
+            },
+            //上传法人证件反面照片
+            uploadLegalLicenceBackUrl(res) {
+                this.form2.legalLicenceBackUrl = res.data
+            },
+            next(){
+                switch (this.active){
+                    case 0: {
+                        let validForm1 = this.validForm('form1');
+                        if(validForm1){
+                            if(this.curEvent == "add"){
+                                savePlatformBussInfo(this.form1).then(res => {
+                                    this.$message({
+                                        type: "success",
+                                        message: res.data.msg
+                                    });
+                                    this.form1.id = res.data.data.id;
+                                    this.form.bussinessInfoId = res.data.data.id;
+                                    this.form2.bussinessInfoId = res.data.data.id;
+                                    this.form3.bussinessInfoId = res.data.data.id;
+                                    this.handelNext()
+                                });
+                            }else if(this.curEvent == "edit" && this.form1.id != null){
+                                updatePlatformBussInfo(this.form1).then(res => {
+                                    this.$message({
+                                        type: "success",
+                                        message: res.data.msg
+                                    });
+                                    this.form.bussinessInfoId = res.data.data.id;
+                                    this.form2.bussinessInfoId = res.data.data.id;
+                                    this.form3.bussinessInfoId = res.data.data.id;
+                                    this.handelNext()
+                                });
+                            }
+                        }
+                        break;
+                    }
+                    case 1: {
+                        let validForm2 = this.validForm('form2');
+                        if(validForm2){
+                            this.form2.contactType = 10;
+                            this.form2.bussinessInfoId = this.form1.id
+                            saveContactInfo(this.form2).then(res => {
+                                this.$message({
+                                    type: "success",
+                                    message: res.data.msg
+                                });
+                                this.form2.id = res.data.data.id;
+                                this.handelNext()
+                            });
+                        }
+                        break;
+                    }
+                    case 2:{
+                        let validForm3 = this.validForm('form3');
+                        if(validForm3){
+                            this.form3.contactType = 11;
+                            this.form3.bussinessInfoId = this.form1.id
+                            this.form3.servicePhone = this.form3.contactMobile;
+                            saveContactInfo(this.form3).then(res => {
+                                this.$message({
+                                    type: "success",
+                                    message: res.data.msg
+                                });
+                                this.form3.id = res.data.data.id;
+                                this.handelNext()
+                            });
+                        }
+                        break;
+                    }
+                    default:
+                        break;
+                }
+            },
+            validForm(formName) {
+                let result = false;
+                this.$refs[formName].validate((valid) => {
+                    if (!valid) {
+                        result = false;
+                        return false;
+                    }else{
+                        result = true;
+                        return true;
+                    }
+                });
+                return result;
+            },
+            handelNext(){
+                if (this.active !=3) {
+                    this.active++
+                }
+            },
+            submit(){
+                this.$confirm("确定提交进件申请吗?如果需要修改,请先点击保存后再提交申请", {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    type: "warning"
+                }).then(() => {
+                    this.form.bussinessInfoId = this.form1.id;
+                    this.$emit('submit', this.form)
+                    this.active = 0;
+                });
+            },
+            dialogClose(){
+                this.active = 0;
+                this.dialogFormVisible = false;
+                this.$emit('closeDialog', null)
+            }
+        }
+
+    }
+</script>
+
+<style lang="scss">
+    .avatar-uploader .el-upload {
+        border: 1px dashed #d9d9d9;
+        border-radius: 6px;
+        cursor: pointer;
+        position: relative;
+        overflow: hidden;
+    }
+
+    .avatar-uploader .el-upload:hover {
+        border-color: #409EFF;
+    }
+
+    .avatar-uploader-icon {
+        font-size: 28px;
+        color: #8c939d;
+        width: 178px;
+        height: 178px;
+        line-height: 178px;
+        text-align: center;
+    }
+
+    .avatar {
+        width: 178px;
+        height: 178px;
+        display: block;
+    }
+</style>

+ 543 - 0
src/views/bussinessmng/platformbussinessinfo.vue

@@ -0,0 +1,543 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :permission="permissionList"
+               :before-open="beforeOpen" v-model="form" ref="crud" @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel"
+               @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+               @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+      <template slot="menuLeft">
+      </template>
+
+      <template slot="menuLeft">
+        <el-button type="primary" size="small" icon="el-icon-delete"
+                   @click="showAdd">新增
+        </el-button>
+      </template>
+
+      <!-- 操作菜单 -->
+      <template slot-scope="{row}" slot="menu">
+        <el-button type="text" size="small" icon="el-icon-view" plain class="none-border"
+                   @click.stop="handleView(row)">查看
+        </el-button>
+        <el-button v-if="row.registerStatus === 100 || row.registerStatus === 400 || row.registerStatus === 99" type="text" size="small" icon="el-icon-edit" plain class="none-border"
+                   @click.stop="handleEdit(row)">编辑
+        </el-button>
+        <el-button v-if="row.registerStatus === 101" type="text" size="small" icon="el-icon-edit" plain class="none-border"
+                   @click.stop="handleSign(row)">签署协议
+        </el-button>
+        <el-button v-if="row.registerStatus != null && row.registerStatus !== 100" type="text" size="small" icon="el-icon-view" plain class="none-border"
+                   @click.stop="handleRegisterRequestView(row.id)">进件记录
+        </el-button>
+      </template>
+      <template slot="registerStatus" slot-scope="{row}">
+        <el-tag plain type="warning" size="small" v-if="row.registerStatus === 100">资料完善中</el-tag>
+        <el-tag plain type="primary" size="small" v-if="row.registerStatus === 98">送审中</el-tag>
+        <el-tag plain type="warning" size="small" v-if="row.registerStatus === 101">协议待签署</el-tag>
+        <el-tag plain type="warning" size="small" v-if="row.registerStatus === 102">审核中</el-tag>
+        <el-tag plain type="success" size="small" v-if="row.registerStatus === 200">审核成功</el-tag>
+        <el-tag plain type="danger" size="small" v-if="row.registerStatus === 400">审核失败</el-tag>
+        <el-tag plain type="danger" size="small" v-if="row.registerStatus === 99">送审失败</el-tag>
+      </template>
+    </avue-crud>
+
+    <platformbussinessinfoAdd v-show="addVisible" @submit="submit" :form1="data1" :form2="data2" :form3="data3" :form4="data4" :curEvent="currentEvent" ref="platformAddDialog" @closeDialog="closeDialog"></platformbussinessinfoAdd>
+    <bussinessinfo-detail v-show="detailVisible" :form1="detailData" ref="detailDialog"></bussinessinfo-detail>
+    <el-dialog title="平台商户进件申请记录" :append-to-body="true" :visible.sync="registerRequestVisible" top="1vh" @close="closeRequestDialog" :close-on-click-modal="false">
+      <bussiness-register-request :bussiness-info-id="bussinessInfoId" v-if="registerRequestVisible"></bussiness-register-request>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+  import platformbussinessinfoAdd from "../bussinessmng/comps/platform-bussinessinfo-add.vue"
+  import bussinessinfoDetail from "../bussinessmng/comps/bussinessinfo-detail.vue"
+  import bussinessRegisterRequest from "../bussinessmng/bussinessregisterrequest.vue"
+  import {
+    getList,
+    getDetail,
+    add,
+    update,
+    remove,
+    agreeSign
+  } from "@/api/bussinessmng/bussinessinfo";
+  import {add as merchantRegister} from "@/api/bussinessmng/bussinessregisterrequest";
+  import {getByTypeAndBussinessInfoId} from "@/api/bussinessmng/bussinesscontactinfo";
+  import {
+    mapGetters
+  } from "vuex";
+
+  export default {
+    components: {
+      bussinessinfoDetail,bussinessRegisterRequest,platformbussinessinfoAdd
+    },
+    data() {
+      return {
+        bussinessInfoId: null,
+        currentEvent: "add",
+        data1: {
+          id:'',
+          signType: '',
+          licenceNo: '',
+          openAccountLicenceNo: '',
+          signName: '',
+          shortName: '',
+          province: '',
+          city: '',
+          district: '',
+          address: '',
+          licenceUrl: '',
+          handLicenceUrl: '',
+          openAccountLicenceUrl: '',
+          bussinessRole:''
+        },
+        data2: {
+          id: '',
+          bussinessInfoId: '',
+          legalName: "",
+          legalLicenceType: '',
+          legalLicenceNo: '',
+          legalLicenceFrontUrl: '',
+          legalLicenceBackUrl: ''
+        },
+        data3: {
+          bussinessInfoId: '',
+          contactName: '',
+          contactLicenceNo: '',
+          contactMobile: '',
+          contactEmail: '',
+          servicePhone: ''
+        },
+        data4:{
+          paymentScene: null,
+          agreementPhotoUrl: null,
+          systemScreenshotUrl: null,
+          specialPermitProcessUrl: null,
+        },
+        //详情
+        detailData:{},
+        detailVisible: false,
+        addVisible: false,
+        registerRequestVisible: false,
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height: 'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: false,
+          editBtn: false,
+          addBtn: false,
+          delBtn: false,
+          selection: true,
+          dialogClickModal: false,
+          labelWidth: 150,
+          column: [
+            {
+              label: "采购商",
+              prop: "bussinessId",
+              type: "select",
+              filterable: true,
+              dicUrl: "/api/cyzh-guosen/bussiness/listBussiness?size=500",
+              props:{
+                label: "name",
+                value: "id"
+              },
+              addDisplay: false,
+              editDisplay: false,
+              viewDisplay: true
+            },
+            {
+              label: "商户签约类型",
+              prop: "signType",
+              type: "select",
+              dicUrl: "/api/blade-system/dict-biz/dictionary?code=business_sign_type",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              },
+            },
+            {
+              label: "商户证件编号",
+              prop: "licenceNo",
+              placeholder: "统一社会信用代码证编号、事业单位法人证书编号、社会团体证书编号等,与商户签约类型匹配",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入商户证件编号,",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户证件照片",
+              prop: "licenceUrl",
+              type: "upload",
+              hide:true,
+              listType: "picture-img",
+              action: '/api/putObject',
+              propsHttp: {
+                url: 'data'
+              },
+              rules: [{
+                required: true,
+                message: "请上传商户证件照片",
+                trigger: "blur"
+              }],
+            },
+            {
+              label: "商户签约名称",
+              prop: "signName",
+              labelWidth: 110,
+              searchLabelWidth: 110,
+              search:true,
+              placeholder: "与商户证件主体名称一致",
+              rules: [{
+                required: true,
+                message: "请输入商户签约名称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户简称",
+              prop: "shortName",
+              rules: [{
+                required: true,
+                message: "请输入商户简称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户实际经营地所在省",
+              prop: "province",
+              placeholder: "要求按照商户实际经营地址选择对应的省编号",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入商户实际经营地所在省",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户实际经营地所在市",
+              prop: "city",
+              placeholder: "要求按照商户实际经营地址选择对应的市编号",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入商户实际经营地所在市",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户实际经营地所在区",
+              prop: "district",
+              placeholder: "要求按照商户实际经营地址选择对应的区编号",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入商户实际经营地所在区",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "经营地址",
+              prop: "address",
+              placeholder: "经营地址不需要再次上送省市区",
+              rules: [{
+                required: true,
+                message: "请输入经营地址",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "开户许可证编号",
+              prop: "openAccountLicenceNo",
+              placeholder: "如无开户许可证编号,可传基本存款账户编号",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入开户许可证编号",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "开户许可证照片",
+              prop: "openAccountLicenceUrl",
+              placeholder: "如无开户许可证,请上传基本存款账户信息表照片",
+              hide:true,
+              listType: "picture-img",
+              action: '/api/putObject',
+              propsHttp: {
+                url: 'data'
+              },
+              rules: [{
+                required: true,
+                message: "请上传开户许可证照片",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "手持营业执照在经营场所的照片",
+              prop: "handLicenceUrl",
+              hide:true,
+              listType: "picture-img",
+              action: '/api/putObject',
+              propsHttp: {
+                url: 'data'
+              },
+              rules: [{
+                required: true,
+                message: "请上传手持营业执照在经营场所的照片",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "进件状态",
+              prop: "registerStatus",
+              type: "select",
+              search: true,
+              slot: true,
+              dicUrl: "/api/blade-system/dict-biz/dictionary?code=merchant_register_status",
+              display: false,
+              props:{
+                label: "dictValue",
+                value: "dictKey"
+              },
+            },
+            {
+              label: "审核意见",
+              prop: "auditOpinion",
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.platformbussinessinfo_add, false),
+          viewBtn: this.vaildData(this.permission.platformbussinessinfo_view, false),
+          delBtn: this.vaildData(this.permission.platformbussinessinfo_delete, false),
+          editBtn: this.vaildData(this.permission.platformbussinessinfo_edit, false),
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      handleRegisterRequestView(bussinessInfoId){
+        this.bussinessInfoId = bussinessInfoId;
+        this.registerRequestVisible = true;
+      },
+      handleView(item){
+        let that = this;
+        getDetail(item.id).then(res=>{
+          that.detailData = res.data.data
+          that.$refs.detailDialog.open()
+        })
+      },
+      showAdd(){
+        if (!this.$isEmpty(this.data1.id)) {
+          this.resetData()
+        }
+        this.currentEvent = "add";
+        this.$refs.platformAddDialog.open()
+      },
+      //编辑
+      handleEdit(item) {
+        this.currentEvent = "edit";
+        let that = this;
+        this.data1= {
+          id:item.id,
+          bussinessId: item.bussinessId,
+          signType: item.signType,
+          licenceNo: item.licenceNo,
+          openAccountLicenceNo: item.openAccountLicenceNo,
+          signName: item.signName,
+          shortName: item.shortName,
+          province: item.province,
+          registerStatus: item.registerStatus,
+          city: item.city,
+          district: item.district,
+          address: item.address,
+          licenceUrl: item.licenceUrl,
+          handLicenceUrl: item.handLicenceUrl,
+          openAccountLicenceUrl: item.openAccountLicenceUrl,
+        }
+        getByTypeAndBussinessInfoId(10, item.id).then(res =>{
+          that.data2 = res.data.data;
+        }),
+        getByTypeAndBussinessInfoId(11, item.id).then(res => {
+          that.data3= res.data.data;
+        })
+        that.$refs.platformAddDialog.open()
+      },
+      handleSign(){
+        agreeSign().then(res =>{
+          window.open(res.data.data, '_blank');
+        });
+      },
+      closeDialog(){
+        this.onLoad(this.page);
+        this.resetData();
+      },
+      closeRequestDialog(){
+        this.registerRequestVisible = false;
+      },
+      resetData(){
+        this.data1= {
+
+        }
+        this.data2= {
+
+        }
+        this.data3= {
+
+        }
+      },
+      submit(item) {
+        merchantRegister(item).then(() => {
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+        });
+        this.$message({
+          type: "success",
+          message: "操作成功,请等待结果"
+        });
+        this.onLoad(this.page);
+        this.$refs.platformAddDialog.close();
+        this.resetData();
+      },
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+                .then(() => {
+                  return remove(row.id);
+                })
+                .then(() => {
+                  this.onLoad(this.page);
+                  this.$message({
+                    type: "success",
+                    message: "操作成功!"
+                  });
+                });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+                .then(() => {
+                  return remove(this.ids);
+                })
+                .then(() => {
+                  this.onLoad(this.page);
+                  this.$message({
+                    type: "success",
+                    message: "操作成功!"
+                  });
+                  this.$refs.crud.toggleSelection();
+                });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage) {
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize) {
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

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

@@ -93,6 +93,7 @@
         <el-tag plain size="small" type="info" v-if="row.status === 1">待确认</el-tag>
         <el-tag plain size="small" type="success" v-if="row.status === 2">确认成功</el-tag>
         <el-tag plain size="small" type="danger" v-if="row.status === 3">确认失败</el-tag>
+        <el-tag plain size="small" type="danger" v-if="row.status === 4">系统异常</el-tag>
       </template>
     </avue-crud>
   </basic-container>

+ 2 - 1
src/views/resource/attach.vue

@@ -160,7 +160,8 @@
               propsHttp: {
                 res: 'data'
               },
-              action: "/api/blade-resource/oss/endpoint/put-file-attach"
+              // action: "/api/blade-resource/oss/endpoint/put-file-attach"
+              action: '/api/putObject'
             }
           ]
         }

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

@@ -60,7 +60,7 @@
                     {{bussiness.remain}}
                   </span>
                 </div>
-                <div style="margin-left: 20px;margin-top:30px;">
+                <!--<div style="margin-left: 20px;margin-top:30px;">
                   <span style="color: white;">在途金额</span>
                 </div>
                 <div style="margin-left: 20px;margin-top:10px;padding-bottom: 20px;">
@@ -70,19 +70,19 @@
                   <span style="font-size:60px;margin-left:20px;margin-bottom: 20px;color:white;">
                     {{bussiness.freeze}}
                   </span>
-                </div>
+                </div>-->
               </div>
             </el-col>
             <el-col span="12" height="400px">
               <el-row :gutter="50">
-                <el-col span="12">
+                <!--<el-col span="12">
                   <div style="background-color: #4d4dff;border-radius: 30px;" align="center" @click="chongzhi">
                     <img style="margin:10px;" float="center" :size="30" src="/img/bg/qb.png" />
                     <div style="color: white;padding-bottom: 10px;">
                       账户采购
                     </div>
                   </div>
-                </el-col>
+                </el-col>-->
                 <el-col span="12">
                   <div style="background-color: #ff5050;border-radius: 30px;" align="center" @click="toMyOrder">
                     <img style="margin:10px;" float="center" :size="30" src="/img/bg/zd.png" />

+ 8 - 2
src/views/wel/purchase.vue

@@ -35,7 +35,7 @@
           </el-select>
         </div>
         <div align="center" style="margin: 20px;">
-          <el-button type="success" size="mini" @click="purchaseConfirm">确认采购</el-button>
+          <el-button type="success" size="mini" @click="purchaseConfirm" :loading="isLoading">确认采购</el-button>
         </div>
       </div>
     </template>
@@ -67,6 +67,7 @@
         money: 0.00,
         purchaseList:[],
         moneyChina: "",
+        isLoading: false,
         billrecord: {
           payStatus: 0,
           type: 5,
@@ -206,6 +207,7 @@
         }
       },
       purchaseConfirm() {
+        this.isLoading = true;
         this.billrecord.price = this.money;
         this.billrecord.bussinessFee = this.statDatas[1].value;
         this.billrecord.purchaseList = Array.from(this.purchaseMap.values());
@@ -221,6 +223,7 @@
           let systemParam = res.data.data;
           let paramValue = systemParam.paramValue;
           if(paramValue == "0"){
+            this.isLoading = false;
             this.$message({
               type: "fail",
               message: "系统维护时间为每天晚上22:00-凌晨07:00"
@@ -228,13 +231,16 @@
             this.$emit('finishSubmit', null);
           }else{
             addBillrecord(this.billrecord).then((res) => {
+              this.isLoading = false;
               this.chongzhiVisible = false;
               this.$emit('finishSubmit', null);
               window.open(res.data.data);
+            }).catch(err => {
+              this.isLoading = false;
             })
           }
         })
-      },
+    },
       onLoad(page, params = {}) {
         this.loading = true;
         getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {

+ 2 - 2
vue.config.js

@@ -22,11 +22,11 @@ module.exports = {
   },
   //开发模式反向代理配置,生产模式请使用Nginx部署并配置反向代理
   devServer: {
-    port: 1888,
+    port: 1777,
     proxy: {
       '/api': {
         //本地服务接口地址
-        target: 'http://localhost:9612',
+        target: 'http://192.168.1.160:9612',
         //远程演示服务地址,可用于直接启动项目
         //target: 'https://saber.bladex.vip/api',
         ws: true,