update: 官网开店驳回处理,还差两个字段名

This commit is contained in:
mixtan 2025-05-29 19:05:07 +08:00
parent 849a0bae4f
commit 4b6c1f8b53
3 changed files with 314 additions and 337 deletions

1
components.d.ts vendored
View File

@ -25,6 +25,7 @@ declare module 'vue' {
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElResult: typeof import('element-plus/es')['ElResult']
ElRow: typeof import('element-plus/es')['ElRow']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSelectV2: typeof import('element-plus/es')['ElSelectV2']

View File

@ -1,22 +1,41 @@
<template>
<div class="signUp-container">
<!-- 步骤条 -->
<div class="steps-container">
<div class="tit" style="margin-bottom: 0">免费开店资料填写</div>
<div class="tit">
<el-result
:icon="approval_status==2 ? 'success' : [3,5].includes(approval_status) ? 'primary' : 'error' "
:title="auditInfo?.approval_remark"
:sub-title="approval_status==2 ? '现在去商家端看看吧~' : [3,5].includes(approval_status) ? '请耐心等一些时间' : '请按下面资料填写提交审核' "
>
</el-result>
</div>
</div>
<div class="form-submit">
<el-form
:model="applyFormData"
label-width="160px"
style="max-width: 600px"
v-loading.fullscreen.lock="loading"
element-loading-text="数据加载中..."
element-loading-background="rgba(0,0,0,.75)"
:model="applyFormData"
ref="formRef"
label-width="160px"
style="max-width: 600px"
v-loading.fullscreen.lock="loading"
element-loading-text="数据加载中..."
element-loading-background="rgba(0,0,0,.75)"
>
<el-form-item
:label="item.label"
:prop="item.key"
v-for="(item, index) in formItemData"
:key="index"
>
<template v-if="auditInfo.approval_invalid_col.includes('mapAddress') || auditInfo.approval_invalid_col.includes('store_address')">
<el-form-item label="店铺所在地区" prop="map_address">
<el-input
v-if="item.type == 'input'"
v-model="applyFormData[item.key]"
:placeholder="item.placeholder"
/>
<template v-if="item.type == 'select' && item.key=='mapAddress'">
<el-cascader
style="marginright: 5px"
v-model="applyFormData.map_address"
@ -44,60 +63,86 @@
</div>
</template>
</el-autocomplete>
</el-form-item>
<el-form-item
label="店铺详细地址"
prop="store_address"
v-if="applyFormData.map_address"
>
<el-input
v-model="applyFormData.store_address"
placeholder="请输入详细地址"
/>
</el-form-item>
</template>
<el-form-item
:label="item.label"
prop="contact_name"
v-for="(item, index) in formItemData"
:key="index"
>
<el-input
v-if="item.type == 'input'"
v-model="applyFormData[item.key]"
:placeholder="item.placeholder"
/>
<el-select-v2
v-if="(item.type == 'select' && item.key=='bank_name') || item.key=='bank_branch_name'"
clearable
filterable
remote
:remote-method="bankListRemoteMethod"
@change="bankListChange"
v-model="applyFormData[item.key]"
placeholder="搜索银行名称"
placement="top-start"
:options="bankList2"
>
<template #prefix>
<el-icon>
<Search />
</el-icon>
</template>
</el-select-v2>
<el-cascader
v-if="item.type == 'select' && item.key=='biz_category'"
v-model="applyFormData[item]"
v-model="applyFormData[item.key]"
:placeholder="item.placeholder"
:options="cascaderOptions"
:show-all-levels="false"
@change="handleChangeBizCategory"
clearable
/>
</el-form-item>
<template v-if="auditInfo.approval_invalid_col.includes('bank_name') || auditInfo.approval_invalid_col.includes('bank_branch_name')">
<el-form-item label="开户银行" prop="bank_branch_name">
<el-select-v2
<el-select
v-if="item.type == 'select' && item.key=='license_type'"
v-model="applyFormData[item.key]"
placeholder="请选择类型"
clearable
filterable
remote
@change="bankListChange"
:remote-method="bankListRemoteMethod"
v-model="applyFormData.bank_branch_name"
placeholder="搜索银行名称"
placement="top-start"
style="width: 350px"
:options="bankList2"
>
</el-select-v2>
</el-form-item>
</template>
<el-option
v-for="item in optionsPermitType"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-upload
v-if="item.type == 'upload'"
ref="uploadRef"
:limit="1"
list-type="picture-card"
:auto-upload="true"
:on-preview="handlePictureCardPreview"
v-model="applyFormData[item.key]"
:on-remove="
(file, fileList) =>
handleRemove(file, fileList, item.key)
"
:on-success="
(response, file, fileList) =>
handleUploadSuccess(
response,
file,
fileList,
item.key
)
"
:on-error="handleUploadError"
:before-upload="beforeUpload"
:action="uploadUrl"
name="upfile"
:class="{
'upload-hidden': isUploadHidden(item.key),
}"
>
<el-icon class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
</el-form-item>
<!-- <el-form-item label="联系人" prop="contact_name">
<el-input
@ -343,9 +388,9 @@
>
<el-option
v-for="item in optionsPermitType"
:key="item.value2"
:key="item.value"
:label="item.label"
:value="item.value2"
:value="item.value"
>
</el-option>
</el-select>
@ -653,11 +698,13 @@
<script lang="ts" setup>
import { ref, reactive, onMounted, watch } from "vue";
import { ElMessage } from "element-plus";
import { Plus,Search } from "@element-plus/icons-vue";
import cityData from "../../stores/cityData";
import type { CityDataStructure } from "../../stores/cityData";
import { ElMessage } from "element-plus";
import { useUserStore } from "@/stores/userStore";
import { Plus } from "@element-plus/icons-vue";
import {
GetStoreCategories,
transformStoreCategories,
@ -666,11 +713,10 @@ import {
merchApply,
re_apply,
GetAppDistrict,
GetAuditInfo,
GetAuditInfo
} from "@/api/login";
import config from "./formConfig";
import { batchNoApi, imgOcrResultApi } from "@/api/upload";
import config from "./formConfig";
interface Bank {
id: number;
@ -730,7 +776,7 @@ const bankList2 = ref([]);
let orcTimeout = 0;
let currentFile = ref(null);
let currentBbatchNo = ref("");
let currentBbatchNo = ref('');
const handleChangeBizCategory = (value) => {
if (value && value.length === 2) {
@ -739,7 +785,6 @@ const handleChangeBizCategory = (value) => {
applyFormData.biz_second_category = bizSecondCategoryId;
}
};
const formConfig = reactive(JSON.parse(JSON.stringify(config.formConfig)));
const currentBankItem = reactive(null);
const applyFormData = reactive({
bank_name: "",
@ -771,8 +816,8 @@ const applyFormData = reactive({
legal_person_name: "",
license_image: [],
license_number: "",
license_type: "1",
login_mobile: localStorage.getItem("mobilePhone"),
license_type: "",
login_mobile: "",
province_id: null,
store_address: "",
map_address: "",
@ -786,24 +831,18 @@ const applyFormData = reactive({
user_status: "",
bank_image: "",
});
const formItemData = ref([]);
let auditInfo = reactive({
approval_status: 3,
created_at: "2099-02-17 09:25:53",
approval_remark: "",
approval_invalid_col: [],
});
const license_type = ref('1')
const optionsPermitType = [
{
value2: "1",
value: "1",
label: "无需特殊资质",
},
{
value2: "2",
value: "2",
label: "需许可证资质",
},
{
value2: "3",
value: "3",
label: "需特许证件资质",
},
];
@ -865,9 +904,6 @@ const rules = reactive({
individual_id_images2: [
{ required: true, message: "请上传个人身份证反面", trigger: "change" },
],
bank_image: [
{ required: true, message: "请上传银行卡正面", trigger: "change" },
],
bank_branch_name: [
{ required: true, message: "请选择银行", trigger: "change" },
],
@ -879,11 +915,14 @@ const rules = reactive({
{ required: true, message: "请输入开户名称", trigger: "blur" },
],
});
const ignoreFormItem = (item)=>{
return !['mapAddress', 'store_address', 'bank_name', 'bank_branch_name'].includes(item.key)
}
const formItemData = ref([]);
let auditInfo = ref({
approval_status: 3,
created_at: "2099-02-17 09:25:53",
approval_remark: "",
approval_invalid_col: [],
});
const formConfig = reactive(JSON.parse(JSON.stringify(config.formConfig)));
const handleGetAuditInfo = async () => {
const res = (await GetAuditInfo({
@ -893,96 +932,19 @@ const handleGetAuditInfo = async () => {
let arr = JSON.parse(res.data.approval_invalid_col);
const arr2 = formConfig.reduce((acc, item) => {
if (arr.includes(item.key)) {
applyFormData[item.key] = "";
// if(item.key=='storefrontImg' || item.key=='surroundingsImg' ){
// applyFormData[item.key] = "";
// }
acc.push(item);
}
return acc;
}, []);
auditInfo = { ...res.data, approval_invalid_col: arr };
formItemData.value = arr2.filter(item=> (ignoreFormItem(item)));
};
handleGetAuditInfo();
const handleReApply = async () => {
const {
bank_name,
bank_district,
bank_area,
openning_bank_code,
clearing_bank_code,
account_number,
account_holder_name,
biz_category,
biz_license_company,
biz_license_image,
biz_license_number,
biz_second_category,
city_id,
contact_name,
county_id,
entity_type,
environment_image,
front_facade_image,
individual_id_images,
individual_id_images2,
individual_id_number,
legal_person_id_images,
legal_person_id_images2,
legal_person_id_number,
legal_person_mobile,
legal_person_name,
license_image,
license_number,
license_type,
login_mobile,
province_id,
store_address,
store_latitude,
store_longitude,
store_name,
store_area,
} = applyFormData;
const res = await re_apply({
id: 15,
bank_name,
bank_district,
bank_area,
openning_bank_code,
clearing_bank_code,
account_number,
account_holder_name,
biz_category,
biz_license_company,
biz_license_image,
biz_license_number,
biz_second_category,
city_id,
contact_name,
county_id,
entity_type,
environment_image,
front_facade_image,
individual_id_images,
individual_id_images2,
individual_id_number,
legal_person_id_images,
legal_person_id_images2,
legal_person_id_number,
legal_person_mobile,
legal_person_name,
license_image,
license_number,
license_type,
login_mobile,
province_id,
store_address: store_area.replace(/\//g, "") + store_address,
store_latitude,
store_longitude,
store_name,
store_area,
});
auditInfo.value = { ...res.data, approval_invalid_col: arr };
formItemData.value = arr2.sort((a,b)=>(a.sort-b.sort));
console.log("formItemData", formItemData.value);
console.log("auditInfo", auditInfo);
};
const handleMerchApply = async () => {
@ -1024,7 +986,7 @@ const handleMerchApply = async () => {
store_name,
store_area,
} = applyFormData;
const res = await merchApply({
const res = await re_apply({
bank_name,
bank_district,
bank_area,
@ -1069,9 +1031,13 @@ const checkForm = async () => {
return valid;
});
if(applyFormData.entity_type==2 && !applyFormData.bank_image){
ElMessage.error("请上传银行卡")
return
}
if (isValid) {
handleReApply();
// handleMerchApply
handleMerchApply()
}
};
@ -1124,7 +1090,7 @@ const showAll = () => {
const merchToApply = async () => {
console.log("formdata", applyFormData);
showAll();
// showAll();
checkForm();
};
@ -1197,7 +1163,7 @@ const handleChange = (value) => {
applyFormData.mapAddressLabel = str;
applyFormData.store_area = str;
// formRef.value.validate();
formRef.value.validate();
};
const autocompleteOptions = ref([]);
@ -1244,7 +1210,7 @@ const handleSelect = (item) => {
applyFormData.store_address = item.value;
applyFormData.store_latitude = item.lat;
applyFormData.store_longitude = item.lng;
// formRef.value.validate();
formRef.value.validate();
};
const beforeUpload = (file) => {
@ -1345,10 +1311,7 @@ const handleOcrText = async (batchNo, imgType) => {
switch (imgType) {
case "biz_license_image":
var res = (await getOcrText(
batchNo,
orcImgTypeConf.BUSINESS_LICENCE
)) as any;
var res = (await getOcrText(batchNo, orcImgTypeConf.BUSINESS_LICENCE)) as any;
console.log("biz_license_image", res);
applyFormData.biz_license_company = res.bizLicenseCompanyName;
@ -1357,10 +1320,7 @@ const handleOcrText = async (batchNo, imgType) => {
applyFormData.account_holder_name = res.bizLicenseCompanyName;
break;
case "legal_person_id_images":
var res = (await getOcrText(
batchNo,
orcImgTypeConf.ID_CARD_FRONT
)) as any;
var res = (await getOcrText(batchNo, orcImgTypeConf.ID_CARD_FRONT)) as any;
console.log("legal_person_id_images", res);
applyFormData.legal_person_id_number = res.idNumber;
@ -1373,7 +1333,7 @@ const handleOcrText = async (batchNo, imgType) => {
}
loading.value = false;
// formRef.value.validate();
formRef.value.validate()
};
const handleUploadSuccess = async (response, file, fileList, field) => {
@ -1392,18 +1352,18 @@ const handleUploadSuccess = async (response, file, fileList, field) => {
switch (field) {
case "biz_license_image":
var res = await getBatchNo(file.raw, orcImgTypeConf.BUSINESS_LICENCE);
currentBbatchNo.value = res.batchNo;
handleOcrText(res.batchNo, field);
currentBbatchNo.value = res.batchNo
handleOcrText(res.batchNo, field)
break;
case "legal_person_id_images":
var res = await getBatchNo(file.raw, orcImgTypeConf.ID_CARD_FRONT);
currentBbatchNo.value = res.batchNo;
handleOcrText(res.batchNo, field);
currentBbatchNo.value = res.batchNo
handleOcrText(res.batchNo, field)
break;
case "bank_image":
var res = await getBatchNo(file.raw, orcImgTypeConf.BANK_CARD);
currentBbatchNo.value = res.batchNo;
handleOcrText(res.batchNo, field);
currentBbatchNo.value = res.batchNo
handleOcrText(res.batchNo, field)
break;
}
} else {
@ -1415,7 +1375,7 @@ const handleUploadSuccess = async (response, file, fileList, field) => {
loading.value = false;
}
// formRef.value.validate();
formRef.value.validate()
};
const handleUploadError = (error, file) => {
@ -1445,6 +1405,10 @@ const clearOtherFields = () => {
};
onMounted(() => {
// bankListRemoteMethod();
handleGetAuditInfo();
GetStoreCategories()
.then((res) => {
if (res.code === 0 && res.status === 200) {
@ -1476,6 +1440,10 @@ onMounted(() => {
:deep(.el-upload-list__item) {
width: 96px;
height: 96px;
text-align: center;
flex-direction: column;
color: #666;
line-height: 20px;
}
.signUp-container {
@ -1489,6 +1457,9 @@ onMounted(() => {
.tit {
font-size: 16px;
margin-bottom: 15px;
:deep(.el-result){
padding: 0;
}
}
.steps-container {
@ -1506,9 +1477,13 @@ onMounted(() => {
.form-submit {
width: 50%;
padding: 15px;
margin: 0 0 12px;
border-radius: 5px;
background: #fff;
margin-bottom: 12px;
:deep(.el-form) {
max-width: 100% !important;
}
.from_box {
width: 100%;

View File

@ -1,200 +1,201 @@
const formConfig = [
const formConfig = [
{
type:"input",
key:'contact_name',
label:'联系人',
placeholder:'请输入联系人',
type: "input",
key: "contact_name",
label: "联系人",
placeholder: "请输入联系人",
sort: 1,
},
{
type:"select",
key:'biz_category',
label:'经营品类',
isReadonly:true,
style:"pointer-events: none",
placeholder:'请选择经营品类',
type: "input",
key: "legal_person_mobile",
label: "法人手机号",
placeholder: "请输入法人手机号",
sort: 1,
},
{
type:"input",
key:'store_name',
label:'门店名称',
placeholder:'请输入门店名称',
type: "select",
key: "biz_category",
label: "经营品类",
isReadonly: true,
style: "pointer-events: none",
placeholder: "请选择经营品类",
sort: 2,
},
{
type:"select",
key:'mapAddress',
label:'店铺所在地区',
isReadonly:true,
style:"pointer-events: none",
placeholder:'请在地图上选择门店地址',
type: "input",
key: "store_name",
label: "门店名称",
placeholder: "请输入门店名称",
sort: 3,
},
{
type:"input",
key:'store_address',
label:'店铺详细地址',
placeholder:'请输入店铺详细地址',
type: "select",
key: "mapAddress",
label: "所在地区",
isReadonly: true,
style: "pointer-events: none",
placeholder: "请在地图上选择门店地址",
sort: 4,
},
{
type:'upload',
key:'storefrontImg',
label:'门脸图片',
class:"upload-1",
placeholder:'',
imgUrlArr:[],
imgWidth:270,
imgHeight:150
type: "input",
key: "store_address",
label: "详细地址",
placeholder: "请输入店铺详细地址",
sort: 5,
},
{
type:'upload',
key:'surroundingsImg',
class:"upload-2",
label:'环境图片',
placeholder:'',
imgUrlArr:[],
imgWidth:270,
imgHeight:150
type: "upload",
key: "front_facade_image",
label: "门脸图片",
placeholder: "请上传门脸图片",
sort: 6,
},
{
type:"input",
key:'license_number',
label:'许可证编号',
placeholder:'请输入许可证编号',
type: "upload",
key: "environment_image",
label: "环境图片",
placeholder: "请上传门脸图片",
sort: 7,
},
{
type:"input",
key:'biz_license_number',
label:'注册号',
placeholder:'请输入注册号',
type: "upload",
key: "biz_license_image",
label: "营业执照",
placeholder: "",
sort: 8,
},
{
type:"input",
key:'biz_license_company',
label:'公司名称',
placeholder:'请输入公司名称',
type: "input",
key: "biz_license_company",
label: "公司名称",
placeholder: "请输入公司名称",
sort: 9,
},
{
type:"input",
key:'legal_person_name',
label:'法人姓名',
placeholder:'请输入法人姓名',
type: "input",
key: "legal_person_name",
label: "法人姓名",
placeholder: "请输入法人姓名",
sort: 10,
},
{
type:"input",
key:'legal_person_mobile',
label:'法人手机号',
placeholder:'请输入法人手机号',
type: "input",
key: "biz_license_number",
label: "注册号",
placeholder: "请输入注册号",
sort: 11,
},
{
type:"input",
key:'legal_person_id_number',
label:'法人身份证号码',
placeholder:'请输入法人身份证号',
type: "select",
key: "license_type",
label: "许可证类型",
isReadonly: true,
style: "pointer-events: none",
placeholder: "请选择许可证类型",
sort: 12,
},
{
type:'upload',
key:'biz_license_image',
class:"upload-3",
label:'营业执照图片',
placeholder:'',
imgUrlArr:[],
imgWidth:125,
imgHeight:88
type: "upload",
key: "license_image",
label: "许可证图片",
class: "upload-4",
placeholder: "",
imgUrlArr: [],
imgWidth: 125,
imgHeight: 88,
imgUpMaxCount: 5,
sort: 13,
},
{
type:"select",
key:'license_type',
label:'许可证类型',
isReadonly:true,
style:"pointer-events: none",
placeholder:'请选择许可证类型',
type: "input",
key: "license_number",
label: "许可证编号",
placeholder: "请输入许可证编号",
sort: 14,
},
{
type:"input",
key:'license_number',
label:'许可证编号',
placeholder:'',
type: "upload",
key: "individual_id_images",
label: "个人身份证正面图片",
class: "upload-5",
placeholder: "",
imgUrlArr: [],
sort: 15,
},
{
type:"input",
type:'upload',
key:'license_image',
label:'许可证图片',
class:"upload-4",
placeholder:'',
imgUrlArr:[],
imgWidth:125,
imgHeight:88,
imgUpMaxCount:5
type: "upload",
key: "individual_id_images2",
label: "个人身份证反面图片",
class: "upload-5",
placeholder: "",
imgUrlArr: [],
sort: 15,
},
{
type:'upload',
key:'legal_person_id_images',
label:'法人身份证正面图片',
class:"upload-5",
placeholder:'',
imgUrlArr:[],
imgWidth:180,
imgHeight:110
type: "input",
key: "individual_id_number",
label: "个人身份证号码",
placeholder: "请输入个人身份证号码",
sort: 16,
},
{
type:'upload',
key:'legal_person_id_images2',
label:'法人身份证反面图片',
class:"upload-6",
placeholder:'',
imgUrlArr:[],
imgWidth:180,
imgHeight:110
type: "upload",
key: "legal_person_id_images",
label: "法人身份证正面图片",
class: "upload-5",
placeholder: "",
imgUrlArr: [],
imgWidth: 180,
imgHeight: 110,
sort: 15,
},
{
type:"select",
key:'bank_name',
label:'开户银行',
isReadonly:true,
style:"pointer-events: none",
placeholder:'请选择开户银行',
type: "upload",
key: "legal_person_id_images2",
label: "法人身份证反面图片",
class: "upload-6",
placeholder: "",
imgUrlArr: [],
imgWidth: 180,
imgHeight: 110,
sort: 15,
},
{
key:'bank_branch_name',
label:'开户支行',
placeholder:'请输入开户支行名称',
type: "input",
key: "legal_person_id_number",
label: "法人身份证号码",
placeholder: "请输入法人身份证号",
sort: 16,
},
{
type:"input",
key:'account_number',
label:'银行卡号',
placeholder:'请输入银行卡号',
type: "input",
key: "account_holder_name",
label: "开户名称",
placeholder: "请输入开户名称",
sort: 17,
},
{
type:"input",
key:'account_holder_name',
label:'开户名称',
placeholder:'请输入开户名称',
type: "input",
key: "account_number",
label: "银行卡号",
placeholder: "请输入银行卡号",
sort: 18,
},
{
type:"input",
key:'individual_id_number',
label:'个人身份证号码',
placeholder:'请输入个人身份证号码',
type: "select",
key: "bank_name",
label: "开户银行",
isReadonly: true,
style: "pointer-events: none",
placeholder: "请选择开户银行",
sort: 19,
},
{
type:'upload',
key:'individual_id_images',
label:'个人身份证正面图片',
class:"upload-5",
placeholder:'',
imgUrlArr:[]
},
{
type:'upload',
key:'individual_id_images2',
label:'个人身份证反面图片',
class:"upload-5",
placeholder:'',
imgUrlArr:[]
},
]
];
export default {
formConfig,
}
formConfig,
};