进件代码调整,增加进件列表页面和筛选
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<view class="min-page bg-f7 u-font-28 color-333">
|
||||
<steps v-model="step" />
|
||||
<steps v-model="step" @itemClick="stepItemClick" />
|
||||
<view class="u-m-t-32">
|
||||
<basicInfo v-if="step==0" :data="form.merchantBaseInfo" :maxSize="maxSize"
|
||||
@update="update($event,'merchantBaseInfo')">
|
||||
@@ -30,6 +30,17 @@
|
||||
import settlementInfo from './components/settlement-info.vue'
|
||||
import bottomBtnGroup from './components/bottom-btn-group.vue'
|
||||
import dayjs from 'dayjs'
|
||||
import {
|
||||
onLoad
|
||||
} from '@dcloudio/uni-app'
|
||||
import {
|
||||
rules,
|
||||
isEmptyValue,
|
||||
returnKey,
|
||||
getNestedValue,
|
||||
verifyValue,
|
||||
verifyData
|
||||
} from './data.js'
|
||||
import {
|
||||
reactive,
|
||||
ref,
|
||||
@@ -38,8 +49,8 @@
|
||||
computed
|
||||
} from 'vue';
|
||||
const form = reactive({
|
||||
"shopId": 0,
|
||||
"merchantCode": "",
|
||||
"shopId": '',
|
||||
"merchantCode": '',
|
||||
"merchantBaseInfo": {
|
||||
"userType": "0",
|
||||
"shortName": "",
|
||||
@@ -128,10 +139,10 @@
|
||||
}
|
||||
},
|
||||
"settlementInfo": {
|
||||
"settlementType": "",
|
||||
"settlementType": "0",
|
||||
"noLegalName": "",
|
||||
"noLegalId": "",
|
||||
"settlementCardType": "",
|
||||
"settlementCardType": "21",
|
||||
"settlementCardNo": "",
|
||||
"settlementName": "",
|
||||
"bankMobile": "",
|
||||
@@ -183,268 +194,257 @@
|
||||
}
|
||||
}
|
||||
})
|
||||
const maxSize = ref(2)
|
||||
const step = ref(1)
|
||||
|
||||
|
||||
import {
|
||||
addEntryManager
|
||||
addEntryManager,
|
||||
getEntryManager
|
||||
} from '@/http/api/order/entryManager.js'
|
||||
onLoad((opt) => {
|
||||
if (opt.licenceNo && opt.shopId) {
|
||||
getEntryManager(opt).then(res => {
|
||||
|
||||
const rules = {
|
||||
merchantBaseInfo: {
|
||||
userType: {
|
||||
required: true,
|
||||
errorMsg: '请选择商户类型',
|
||||
},
|
||||
shortName: {
|
||||
required: true,
|
||||
errorMsg: '请填写商户简称',
|
||||
},
|
||||
mccCode: {
|
||||
required: true,
|
||||
errorMsg: '请选择行业类目',
|
||||
},
|
||||
alipayAccount: {
|
||||
required: true,
|
||||
errorMsg: '请填写支付宝账号',
|
||||
}
|
||||
},
|
||||
legalPersonInfo: {
|
||||
'idCardHandPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传身份证手持图片',
|
||||
},
|
||||
'idCardFrontPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传身份证正面图片',
|
||||
},
|
||||
'idCardBackPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传身份证反面图片',
|
||||
},
|
||||
legalPersonName: {
|
||||
required: true,
|
||||
errorMsg: '请填写法人姓名',
|
||||
},
|
||||
legalPersonId: {
|
||||
required: true,
|
||||
errorMsg: '请填写法人身份证号',
|
||||
},
|
||||
legalIdPersonStartDate: {
|
||||
required: true,
|
||||
errorMsg: '请填写法人身份证开始日期',
|
||||
},
|
||||
legalPersonIdEndDate: {
|
||||
required: true,
|
||||
errorMsg: '请填写法人身份证到期日期',
|
||||
},
|
||||
legalPersonPhone: {
|
||||
required: true,
|
||||
errorMsg: '请填写法人电话',
|
||||
},
|
||||
legalPersonEmail: {
|
||||
required: true,
|
||||
errorMsg: '请填写法人邮箱',
|
||||
},
|
||||
legalGender: {
|
||||
required: true,
|
||||
errorMsg: '请填写法人性别',
|
||||
},
|
||||
legalAddress: {
|
||||
required: true,
|
||||
errorMsg: '请填写法人地址',
|
||||
},
|
||||
res.merchantBaseInfo.contactPersonIdEndDate = dayjs(res.merchantBaseInfo
|
||||
.contactPersonIdEndDate).valueOf()
|
||||
res.merchantBaseInfo.contactPersonIdStartDate = dayjs(res.merchantBaseInfo
|
||||
.contactPersonIdStartDate).valueOf()
|
||||
|
||||
},
|
||||
storeInfo: {
|
||||
mercProvCode: {
|
||||
required: true,
|
||||
errorMsg: '请选择归属地',
|
||||
},
|
||||
mercCityCode: {
|
||||
required: true,
|
||||
errorMsg: '请选择归属地',
|
||||
},
|
||||
mercAreaCode: {
|
||||
required: true,
|
||||
errorMsg: '请选择归属地',
|
||||
},
|
||||
mercProv: {
|
||||
required: true,
|
||||
errorMsg: '请选择归属地',
|
||||
},
|
||||
mercCity: {
|
||||
required: true,
|
||||
errorMsg: '请选择归属地',
|
||||
},
|
||||
mercArea: {
|
||||
required: true,
|
||||
errorMsg: '请选择归属地',
|
||||
},
|
||||
businessAddress: {
|
||||
required: true,
|
||||
errorMsg: '请填写营业地址',
|
||||
},
|
||||
'insidePic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传经营场所内设照片',
|
||||
},
|
||||
'doorPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传门头照',
|
||||
},
|
||||
'cashierDeskPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传收银台照片',
|
||||
res.legalPersonInfo.legalIdPersonStartDate = dayjs(res.legalPersonInfo
|
||||
.legalIdPersonStartDate).valueOf()
|
||||
res.legalPersonInfo.legalPersonIdEndDate = dayjs(res.legalPersonInfo
|
||||
.legalPersonIdEndDate).valueOf()
|
||||
res.businessLicenceInfo.licenceStartDate = dayjs(res.businessLicenceInfo
|
||||
.licenceStartDate).valueOf()
|
||||
res.businessLicenceInfo.licenceEndDate = dayjs(res.businessLicenceInfo
|
||||
.licenceEndDate).valueOf()
|
||||
|
||||
|
||||
Object.assign(form, res)
|
||||
})
|
||||
|
||||
} else {
|
||||
// const data = uni.getStorageSync('entryManager_submit_data')
|
||||
// if (data) {
|
||||
// Object.assign(form, data)
|
||||
// }
|
||||
form.shopId = opt.shopId || ''
|
||||
}
|
||||
|
||||
watch(() => form, (newval) => {
|
||||
uni.setStorageSync('entryManager_submit_data', form)
|
||||
}, {
|
||||
deep: true,
|
||||
immediate: true
|
||||
})
|
||||
})
|
||||
|
||||
function returnSettlementInfoRule() {
|
||||
let rule = {
|
||||
...rules.settlementInfo
|
||||
}
|
||||
if (form.settlementType * 1 == 0) {
|
||||
rule = {
|
||||
...rule,
|
||||
'noLegalHandSettleAuthPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传非法人手持结算授权书',
|
||||
},
|
||||
'noLegalSettleAuthPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传非法人结算授权书',
|
||||
},
|
||||
'noLegalIdCardFrontPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传非法人身份证正面',
|
||||
},
|
||||
'noLegalIdCardBackPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传非法人身份证反面',
|
||||
},
|
||||
noLegalName: {
|
||||
required: true,
|
||||
errorMsg: '请填写非法人姓名',
|
||||
},
|
||||
noLegalName: {
|
||||
required: true,
|
||||
errorMsg: '请填写非法人身份证号码',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function isEmptyValue(val) {
|
||||
if (val === '' || val === undefined || val === null) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析属性路径,返回数组格式的路径片段
|
||||
* @param {string} str - 属性路径(如 'userType' 或 'idCardHandPic.url')
|
||||
* @returns {Array<string>} 属性路径片段数组(如 ['userType'] 或 ['idCardHandPic', 'url'])
|
||||
*/
|
||||
function returnKey(str) {
|
||||
// 无论是否包含'.',都返回数组,方便后续统一处理
|
||||
return str.includes('.') ? str.split('.') : [str];
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据属性路径数组,安全获取对象的嵌套属性值
|
||||
* @param {Object} obj - 目标对象(如 form.legalPersonInfo)
|
||||
* @param {Array<string>} keyPath - 属性路径数组(如 ['idCardHandPic', 'url'])
|
||||
* @returns {*} 嵌套属性的值(若路径不存在,返回 undefined)
|
||||
*/
|
||||
function getNestedValue(obj, keyPath) {
|
||||
// 边界处理:obj不是对象,直接返回undefined
|
||||
if (typeof obj !== 'object' || obj === null) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// 逐层遍历属性路径,获取最终值
|
||||
return keyPath.reduce((currentObj, key) => {
|
||||
// 中间层级不存在,直接返回undefined,避免报错
|
||||
if (currentObj === undefined || currentObj === null) {
|
||||
return undefined;
|
||||
if (form.settlementCardType * 1 == 21) {
|
||||
rule = {
|
||||
'bankCardBackPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传银行卡反面照片',
|
||||
}
|
||||
}
|
||||
return currentObj[key];
|
||||
}, obj);
|
||||
}
|
||||
return rule
|
||||
}
|
||||
|
||||
|
||||
|
||||
function verifyValue(val, ruleItem) {
|
||||
const isEmpty = isEmptyValue(val)
|
||||
let result = {
|
||||
ispas: true,
|
||||
errorMsg: ''
|
||||
function returnMerchantBaseInfoRule() {
|
||||
let rule = rules.merchantBaseInfo
|
||||
if (form.merchantBaseInfo.contactPersonType == 'SUPER') {
|
||||
rule = {
|
||||
...rule,
|
||||
'contactIdCardFrontPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传联系人身份证正面照片',
|
||||
},
|
||||
'contactIdCardBackPic.url': {
|
||||
required: true,
|
||||
errorMsg: '请上传联系人身份证正面照片',
|
||||
},
|
||||
contactName: {
|
||||
required: true,
|
||||
errorMsg: '请填写联系人姓名',
|
||||
},
|
||||
contactPersonId: {
|
||||
required: true,
|
||||
errorMsg: '请填写联系人身份证号',
|
||||
},
|
||||
contactPersonIdStartDate: {
|
||||
required: true,
|
||||
errorMsg: '请填写联系人身份证开始日期',
|
||||
},
|
||||
contactPersonIdEndDate: {
|
||||
required: true,
|
||||
errorMsg: '请填写联系人身份证到期日期',
|
||||
},
|
||||
contactPhone: {
|
||||
required: true,
|
||||
errorMsg: '请填写联系人电话',
|
||||
},
|
||||
contactAddr: {
|
||||
required: true,
|
||||
errorMsg: '请填写联系人通讯地址',
|
||||
},
|
||||
contactEmail: {
|
||||
required: true,
|
||||
errorMsg: '请填写联系人邮箱',
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ruleItem.required) {
|
||||
console.log('rule', rule);
|
||||
return rule
|
||||
}
|
||||
const maxSize = ref(2)
|
||||
const step = ref(0)
|
||||
|
||||
if (isEmpty) {
|
||||
result.ispas = false
|
||||
result.errorMsg = ruleItem.errorMsg
|
||||
|
||||
const ruleArr=['merchantBaseInfo','legalPersonInfo','businessLicenceInfo','storeInfo','settlementInfo']
|
||||
function stepItemClick(newStep) {
|
||||
|
||||
const arr=ruleArr.slice(0,newStep-1)
|
||||
let isPas = true
|
||||
let result = null
|
||||
for (let index in arr) {
|
||||
const key=arr[index]
|
||||
if (key == 'settlementInfo') {
|
||||
result = verifyData(form[key], returnSettlementInfoRule())
|
||||
} else if (key == 'merchantBaseInfo') {
|
||||
result = verifyData(form[key], returnMerchantBaseInfoRule())
|
||||
} else {
|
||||
result = verifyData(form[key], rules[key])
|
||||
}
|
||||
if (!result.ispas) {
|
||||
uni.showToast({
|
||||
title: result.errorMsg || '请完善必填内容',
|
||||
icon: 'none'
|
||||
})
|
||||
result.step = index
|
||||
return result
|
||||
}
|
||||
}
|
||||
return result
|
||||
step.value = newStep
|
||||
}
|
||||
|
||||
function verifyData(data, rule) {
|
||||
// 边界处理:data不是对象,直接返回校验失败(若有必填规则)
|
||||
if (typeof data !== 'object' || data === null) {
|
||||
// 遍历规则,返回第一个必填项的错误信息
|
||||
for (let ruleKey in rule) {
|
||||
const ruleItem = rule[ruleKey];
|
||||
if (ruleItem.required) {
|
||||
return {
|
||||
ispas: false,
|
||||
errorMsg: ruleItem.errorMsg || '数据格式错误,无法校验'
|
||||
};
|
||||
|
||||
|
||||
function verifyForm(step = null) {
|
||||
let result = {
|
||||
ispas: true,
|
||||
errorMsg: '',
|
||||
step: -1,
|
||||
}
|
||||
if (step != null) {
|
||||
if (step == 0) {
|
||||
result = verifyData(form.merchantBaseInfo, returnMerchantBaseInfoRule())
|
||||
result.step = 0;
|
||||
}
|
||||
if (step == 1) {
|
||||
result = verifyData(form.legalPersonInfo, rules.legalPersonInfo)
|
||||
result.step = 1;
|
||||
}
|
||||
if (step == 2) {
|
||||
result = verifyData(form.businessLicenceInfo, rules.businessLicenceInfo)
|
||||
result.step = 2;
|
||||
}
|
||||
if (step == 3) {
|
||||
result = verifyData(form.storeInfo, rules.storeInfo)
|
||||
result.step = 3;
|
||||
}
|
||||
if (step == 4) {
|
||||
result = verifyData(form.storeInfo, returnSettlementInfoRule())
|
||||
result.step = 4;
|
||||
}
|
||||
|
||||
} else {
|
||||
let isPas = true
|
||||
let errorMsg = '';
|
||||
let result = null
|
||||
let index = -1;
|
||||
for (let key in rules) {
|
||||
index++
|
||||
if (key == 'settlementInfo') {
|
||||
result = verifyData(form[key], returnSettlementInfoRule())
|
||||
} else if (key == 'merchantBaseInfo') {
|
||||
result = verifyData(form[key], returnMerchantBaseInfoRule())
|
||||
} else {
|
||||
result = verifyData(form[key], rules[key])
|
||||
}
|
||||
if (!result.ispas) {
|
||||
uni.showToast({
|
||||
title: errorMsg || '请完善必填内容',
|
||||
icon: 'none'
|
||||
})
|
||||
result.step = index
|
||||
return result
|
||||
}
|
||||
}
|
||||
return {
|
||||
ispas: true,
|
||||
errorMsg: ''
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
for (let ruleKey in rule) {
|
||||
const ruleItem = rule[ruleKey];
|
||||
// 1. 获取属性路径数组(如 ['idCardHandPic', 'url'])
|
||||
const keyPath = returnKey(ruleKey);
|
||||
// 2. 安全获取嵌套属性值(核心:支持深层级属性)
|
||||
const targetValue = getNestedValue(data, keyPath);
|
||||
// 3. 校验属性值
|
||||
const result = verifyValue(targetValue, ruleItem);
|
||||
|
||||
// 4. 校验失败,直接返回结果
|
||||
if (!result.ispas) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
ispas: true,
|
||||
errorMsg: ''
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function saveClick() {
|
||||
if (step.value == 0) {
|
||||
|
||||
if (step.value == 4) {
|
||||
const {
|
||||
ispas,
|
||||
errorMsg
|
||||
} = verifyData(form.merchantBaseInfo, rules.merchantBaseInfo)
|
||||
if (!ispas) {
|
||||
uni.showToast({
|
||||
title: errorMsg || '请完善必填内容',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
if (step.value == 1) {
|
||||
const {
|
||||
ispas,
|
||||
errorMsg
|
||||
} = verifyData(form.legalPersonInfo, rules.legalPersonInfo)
|
||||
if (!ispas) {
|
||||
uni.showToast({
|
||||
title: errorMsg || '请完善必填内容',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
if (step.value == 2) {
|
||||
const {
|
||||
ispas,
|
||||
errorMsg
|
||||
} = verifyData(form.businessLicenceInfo, rules.businessLicenceInfo)
|
||||
if (!ispas) {
|
||||
uni.showToast({
|
||||
title: errorMsg || '请完善必填内容',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
if (step.value == 3) {
|
||||
const {
|
||||
ispas,
|
||||
errorMsg
|
||||
} = verifyData(form.storeInfo, rules.storeInfo)
|
||||
errorMsg,
|
||||
step: errorStep
|
||||
} = verifyForm()
|
||||
console.log(form.settlementInfo);
|
||||
if (!ispas) {
|
||||
uni.showToast({
|
||||
title: errorMsg || '请完善必填内容',
|
||||
icon: 'none'
|
||||
})
|
||||
step.value = errorStep
|
||||
return
|
||||
}
|
||||
}
|
||||
if (step.value < 4) {
|
||||
const {
|
||||
ispas,
|
||||
errorMsg,
|
||||
step: errorStep
|
||||
} = verifyForm(step.value)
|
||||
console.log('ispas', ispas);
|
||||
console.log('errorMsg', errorMsg);
|
||||
console.log('errorStep', errorStep);
|
||||
if (!ispas) {
|
||||
uni.showToast({
|
||||
title: errorMsg || '请完善必填内容',
|
||||
@@ -453,16 +453,57 @@
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if (step.value != 4) {
|
||||
step.value++
|
||||
return
|
||||
}
|
||||
addEntryManager(form)
|
||||
|
||||
const merchantBaseInfo = {
|
||||
...form.merchantBaseInfo,
|
||||
contactPersonIdEndDate: dayjs(form.merchantBaseInfo.contactPersonIdEndDate).format('YYY-MM-DD'),
|
||||
contactPersonIdStartDate: dayjs(form.merchantBaseInfo.contactPersonIdStartDate).format('YYY-MM-DD'),
|
||||
}
|
||||
const legalPersonInfo = {
|
||||
...form.legalPersonInfo,
|
||||
legalIdPersonStartDate: dayjs(form.legalPersonInfo.legalIdPersonStartDate).format('YYYY-MM-DD'),
|
||||
legalPersonIdEndDate: dayjs(form.legalPersonInfo.legalPersonIdEndDate).format('YYYY-MM-DD'),
|
||||
}
|
||||
const businessLicenceInfo = {
|
||||
...form.businessLicenceInfo,
|
||||
licenceStartDate: dayjs(form.businessLicenceInfo.licenceStartDate).format('YYYY-MM-DD'),
|
||||
licenceEndDate: dayjs(form.businessLicenceInfo.licenceEndDate).format('YYYY-MM-DD'),
|
||||
}
|
||||
|
||||
addEntryManager({
|
||||
...form,
|
||||
merchantBaseInfo,
|
||||
legalPersonInfo,
|
||||
businessLicenceInfo
|
||||
}).then(res => {
|
||||
if (res) {
|
||||
uni.showToast({
|
||||
title: '提交成功',
|
||||
})
|
||||
uni.removeStorageSync('entryManager_submit_data')
|
||||
setTimeout(() => {
|
||||
uni.navigateBack()
|
||||
}, 1000)
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '提交失败',
|
||||
icon: 'error'
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
function cancelClick() {
|
||||
if (step.value == 0) {
|
||||
return uni.navigateBack()
|
||||
}
|
||||
step.value--;
|
||||
}
|
||||
|
||||
@@ -472,12 +513,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
watch(() => form, (newval) => {
|
||||
uni.setStorageSync('entryManager_submit_data', form)
|
||||
}, {
|
||||
deep: true,
|
||||
immediate: true
|
||||
})
|
||||
|
||||
const cancelText = computed(() => {
|
||||
if (step.value == 0) {
|
||||
return '返回'
|
||||
@@ -491,10 +527,7 @@
|
||||
return '下一步'
|
||||
})
|
||||
onMounted(() => {
|
||||
// const data=uni.getStorageSync('entryManager_submit_data')
|
||||
// if(data){
|
||||
// Object.assign(form,data)
|
||||
// }
|
||||
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user