国家与省份匹配

This commit is contained in:
wuteng 2025-07-17 13:33:17 +08:00
parent 030cec434d
commit 1be934fb72
4 changed files with 112 additions and 14 deletions

View File

@ -81,8 +81,9 @@ methods: {
}, },
onChange() { onChange() {
this.$emit("input", this.svalue); this.$emit("input", this.svalue);
this.$emit("onChange"); //传选中值对象
}, let selItem = this.optionItems.find(item => item.regionCode == this.svalue);
this.$emit("onChange", selItem);},
queryData(val,key) { queryData(val,key) {
this.optionItems =[]; this.optionItems =[];

View File

@ -242,7 +242,7 @@
<el-form-item :label="$t('国家地区')" prop="sender.province" > <el-form-item :label="$t('国家地区')" prop="sender.province" >
<div style="display:inline-flex"> <div style="display:inline-flex">
<country-picker1 v-model="form.sender.country" ></country-picker1> <country-picker1 v-model="form.sender.country" ></country-picker1>
<province-picker1 v-model="form.sender.province" :countryCode="form.sender.country" style="margin-left:5px"></province-picker1> <province-picker1 v-model="form.sender.province" :countryCode="form.sender.country" style="margin-left:5px" @onChange="onChangeSenderProvince"></province-picker1>
<city-picker1 v-model="form.sender.city" :parentCode="form.sender.province" style="margin-left:5px"></city-picker1> <city-picker1 v-model="form.sender.city" :parentCode="form.sender.province" style="margin-left:5px"></city-picker1>
<district-picker1 v-model="form.sender.county" :parentCode="form.sender.city" style="margin-left:5px"></district-picker1> <district-picker1 v-model="form.sender.county" :parentCode="form.sender.city" style="margin-left:5px"></district-picker1>
</div> </div>
@ -306,7 +306,7 @@
<el-form-item :label="$t('国家地区')" prop="reciever.province"> <el-form-item :label="$t('国家地区')" prop="reciever.province">
<div style="display:inline-flex"> <div style="display:inline-flex">
<country-picker2 v-model="form.reciever.country" ></country-picker2> <country-picker2 v-model="form.reciever.country" ></country-picker2>
<ProvincePicker2 v-model="form.reciever.province" :countryCode="form.reciever.country" style="margin-left:5px" @onChange="handleCalcDestSite" ></ProvincePicker2> <ProvincePicker2 v-model="form.reciever.province" :countryCode="form.reciever.country" style="margin-left:5px" @onChange="onChangeRecieverProvince"></ProvincePicker2>
<city-picker2 v-model="form.reciever.city" :parentCode="form.reciever.province" style="margin-left:5px" @onChange="handleCalcDestSite" ></city-picker2> <city-picker2 v-model="form.reciever.city" :parentCode="form.reciever.province" style="margin-left:5px" @onChange="handleCalcDestSite" ></city-picker2>
<district-picker2 v-model="form.reciever.county" :parentCode="form.reciever.city" style="margin-left:5px" @onChange="handleCalcDestSite" ></district-picker2> <district-picker2 v-model="form.reciever.county" :parentCode="form.reciever.city" style="margin-left:5px" @onChange="handleCalcDestSite" ></district-picker2>
</div> </div>
@ -939,6 +939,31 @@ data() {
callback(); callback();
} }
} }
//校验寄件国家地区国家和省份是否匹配
var checkSenderCountryProvince = (rule, value, callback) => {
if (this.form.sender.country && this.senderCountryCode) {
if (this.form.sender.country != this.senderCountryCode) {
callback(new Error('寄件国家和省份不一致'));
} else {
callback();
}
} else {
callback();
}
}
//校验收件国家地区国家和省份是否匹配
var checkRecieverCountryProvince = (rule, value, callback) => {
console.log('value',value, this.form.reciever.country , this.recieverCountryCode)
if (this.form.reciever.country && this.recieverCountryCode) {
if (this.form.reciever.country != this.recieverCountryCode) {
callback(new Error('收件国家和省份不一致'));
} else {
callback();
}
} else {
callback();
}
}
return { return {
activeNames:['1','2','3','4'], activeNames:['1','2','3','4'],
exchangeRate:null, exchangeRate:null,
@ -968,6 +993,9 @@ data() {
subHasCnt:0 subHasCnt:0
}, },
sendSiteSelectCount:0,//寄件网点变化次数 sendSiteSelectCount:0,//寄件网点变化次数
//寄件人省份的国家
senderCountryCode:null,
recieverCountryCode:null,
// 表单校验 // 表单校验
rules: { rules: {
billCode: [ billCode: [
@ -987,7 +1015,9 @@ data() {
{ required: true, message: "收货人国家不能为空", trigger: ["blur",'change'] } { required: true, message: "收货人国家不能为空", trigger: ["blur",'change'] }
], ],
province: [ province: [
{ required: true, message: "收货省不能为空", trigger: ["blur",'change'] } { required: true, message: "收货省不能为空", trigger: ["blur",'change'] }, {
validator: checkRecieverCountryProvince, trigger: ['blur', 'change']
}
], ],
company: [ company: [
{ required: true, message: "收货公司不能为空", trigger: ["blur",'change'] } { required: true, message: "收货公司不能为空", trigger: ["blur",'change'] }
@ -1013,7 +1043,8 @@ data() {
{ required: true, message: "寄件人国家不能为空", trigger: ["blur",'change'] } { required: true, message: "寄件人国家不能为空", trigger: ["blur",'change'] }
], ],
province: [ province: [
{ required: true, message: "寄件省不能为空", trigger: ["blur",'change'] } { required: true, message: "寄件省不能为空", trigger: ["blur",'change'] },{
validator: checkSenderCountryProvince, trigger: ['blur', 'change'] }
], ],
company: [ company: [
{ required: true, message: "寄件公司不能为空", trigger: ["blur",'change'] } { required: true, message: "寄件公司不能为空", trigger: ["blur",'change'] }
@ -2486,6 +2517,19 @@ methods: {
this.form.remark = this.form.remark.replace(/该单为虚拟单:对应主单为[\da-zA-Z]+/g, ''); this.form.remark = this.form.remark.replace(/该单为虚拟单:对应主单为[\da-zA-Z]+/g, '');
} }
} }
},
//寄件省份变化
onChangeSenderProvince(val){
if(val){
this.senderCountryCode = val.countryCode;
}
},
//收件省份变化
onChangeRecieverProvince(val){
if(val){
this.recieverCountryCode = val.countryCode;
}
this.handleCalcDestSite();
} }
} }
}; };

View File

@ -943,10 +943,9 @@ data() {
} }
//校验寄件国家地区国家和省份是否匹配 //校验寄件国家地区国家和省份是否匹配
var checkSenderCountryProvince = (rule, value, callback) => { var checkSenderCountryProvince = (rule, value, callback) => {
console.log('value',value, this.form.sender.country , this.senderCountryCode)
if (this.form.sender.country && this.senderCountryCode) { if (this.form.sender.country && this.senderCountryCode) {
if (this.form.sender.country != this.senderCountryCode) { if (this.form.sender.country != this.senderCountryCode) {
callback(new Error('国家和省份不一致')); callback(new Error('寄件国家和省份不一致'));
} else { } else {
callback(); callback();
} }
@ -956,10 +955,9 @@ data() {
} }
//校验收件国家地区国家和省份是否匹配 //校验收件国家地区国家和省份是否匹配
var checkRecieverCountryProvince = (rule, value, callback) => { var checkRecieverCountryProvince = (rule, value, callback) => {
console.log('value',value, this.form.reciever.country , this.recieverCountryCode)
if (this.form.reciever.country && this.recieverCountryCode) { if (this.form.reciever.country && this.recieverCountryCode) {
if (this.form.reciever.country != this.recieverCountryCode) { if (this.form.reciever.country != this.recieverCountryCode) {
callback(new Error('国家和省份不一致')); callback(new Error('收件国家和省份不一致'));
} else { } else {
callback(); callback();
} }

View File

@ -634,7 +634,7 @@
<el-form-item :label="$t('国家地区')" prop="sender.province" > <el-form-item :label="$t('国家地区')" prop="sender.province" >
<div style="display:inline-flex"> <div style="display:inline-flex">
<country-picker1 v-model="form.sender.country" ></country-picker1> <country-picker1 v-model="form.sender.country" ></country-picker1>
<province-picker1 v-model="form.sender.province" :countryCode="form.sender.country" style="margin-left:5px"></province-picker1> <province-picker1 v-model="form.sender.province" :countryCode="form.sender.country" style="margin-left:5px" @onChange="onChangeSenderProvince"></province-picker1>
<city-picker1 v-model="form.sender.city" :parentCode="form.sender.province" style="margin-left:5px"></city-picker1> <city-picker1 v-model="form.sender.city" :parentCode="form.sender.province" style="margin-left:5px"></city-picker1>
<district-picker1 v-model="form.sender.county" :parentCode="form.sender.city" style="margin-left:5px"></district-picker1> <district-picker1 v-model="form.sender.county" :parentCode="form.sender.city" style="margin-left:5px"></district-picker1>
</div> </div>
@ -691,7 +691,7 @@
<el-form-item :label="$t('国家地区')" prop="reciever.province"> <el-form-item :label="$t('国家地区')" prop="reciever.province">
<div style="display:inline-flex"> <div style="display:inline-flex">
<country-picker2 v-model="form.reciever.country" ></country-picker2> <country-picker2 v-model="form.reciever.country" ></country-picker2>
<ProvincePicker2 v-model="form.reciever.province" :countryCode="form.reciever.country" style="margin-left:5px" @onChange="handleCalcDestSite" ></ProvincePicker2> <ProvincePicker2 v-model="form.reciever.province" :countryCode="form.reciever.country" style="margin-left:5px" @onChange="onChangeRecieverProvince"></ProvincePicker2>
<city-picker2 v-model="form.reciever.city" :parentCode="form.reciever.province" style="margin-left:5px" @onChange="handleCalcDestSite" ></city-picker2> <city-picker2 v-model="form.reciever.city" :parentCode="form.reciever.province" style="margin-left:5px" @onChange="handleCalcDestSite" ></city-picker2>
<district-picker2 v-model="form.reciever.county" :parentCode="form.reciever.city" style="margin-left:5px" @onChange="handleCalcDestSite" ></district-picker2> <district-picker2 v-model="form.reciever.county" :parentCode="form.reciever.city" style="margin-left:5px" @onChange="handleCalcDestSite" ></district-picker2>
</div> </div>
@ -1297,6 +1297,30 @@ export default {
callback(); callback();
} }
} }
//校验寄件国家地区国家和省份是否匹配
var checkSenderCountryProvince = (rule, value, callback) => {
if (this.form.sender.country && this.senderCountryCode) {
if (this.form.sender.country != this.senderCountryCode) {
callback(new Error('寄件国家和省份不一致'));
} else {
callback();
}
} else {
callback();
}
}
//校验收件国家地区国家和省份是否匹配
var checkRecieverCountryProvince = (rule, value, callback) => {
if (this.form.reciever.country && this.recieverCountryCode) {
if (this.form.reciever.country != this.recieverCountryCode) {
callback(new Error('收件国家和省份不一致'));
} else {
callback();
}
} else {
callback();
}
}
return { return {
triggerCount:0, triggerCount:0,
activeNames:['1','2','3','4'], activeNames:['1','2','3','4'],
@ -1314,6 +1338,9 @@ export default {
masterBillProductType:null, masterBillProductType:null,
// 表单参数 // 表单参数
form:{}, form:{},
//寄件人省份的国家
senderCountryCode:null,
recieverCountryCode:null,
// 表单校验 // 表单校验
rules: { rules: {
billCode: [ billCode: [
@ -1333,7 +1360,9 @@ export default {
{ required: true, message: "收货人国家不能为空", trigger: ["blur",'change'] } { required: true, message: "收货人国家不能为空", trigger: ["blur",'change'] }
], ],
province: [ province: [
{ required: true, message: "收货省不能为空", trigger: ["blur",'change'] } { required: true, message: "收货省不能为空", trigger: ["blur",'change'] }, {
validator: checkRecieverCountryProvince, trigger: ['blur', 'change']
}
], ],
company: [ company: [
{ required: true, message: "发件公司不能为空", trigger: ["blur",'change'] } { required: true, message: "发件公司不能为空", trigger: ["blur",'change'] }
@ -1359,7 +1388,8 @@ export default {
{ required: true, message: "寄件人国家不能为空", trigger: ["blur",'change'] } { required: true, message: "寄件人国家不能为空", trigger: ["blur",'change'] }
], ],
province: [ province: [
{ required: true, message: "寄件省不能为空", trigger: ["blur",'change'] } { required: true, message: "寄件省不能为空", trigger: ["blur",'change'] },{
validator: checkSenderCountryProvince, trigger: ['blur', 'change'] }
], ],
company: [ company: [
{ required: true, message: "发件公司不能为空", trigger: ["blur",'change'] } { required: true, message: "发件公司不能为空", trigger: ["blur",'change'] }
@ -1498,6 +1528,7 @@ export default {
this.applyTypeArr=[]; this.applyTypeArr=[];
} }
console.log("====>this.applyTypeArr==>",this.applyTypeArr); console.log("====>this.applyTypeArr==>",this.applyTypeArr);
this.initCountryCode();
}, },
deep: true deep: true
}, },
@ -2140,6 +2171,30 @@ export default {
this.form.startSiteCode = item.siteCode; this.form.startSiteCode = item.siteCode;
this.form.startSiteName = item.siteName; this.form.startSiteName = item.siteName;
}, },
//寄件省份变化
onChangeSenderProvince(val){
console.log('onChangeSenderProvince',val)
if(val){
this.senderCountryCode = val.countryCode;
}
},
//收件省份变化
onChangeRecieverProvince(val){
console.log('val++++++',val)
if(val){
this.recieverCountryCode = val.countryCode;
}
this.handleCalcDestSite();
},
//初始化选中省份的国家
initCountryCode(){
if(this.form.sender){
this.senderCountryCode = this.form.sender.country;
}
if(this.form.reciever){
this.recieverCountryCode = this.form.reciever.country;
}
}
} }
}; };
</script> </script>