<tr>
<e-td :required="!read" label>
<span>地区:</span>
</e-td>
<td>
<div
class="table-cell-flex"
style="width:450px"
v-if="!read && this.data.nationCode == 148"
>
<el-form-item prop="nationCode" class="address">
<el-select
placeholder="国家"
v-model="data.nationCode"
@change="getprovince(data.nationCode, 1)"
>
<el-option
v-for="item in nationList"
:key="item.code"
:label="item.codeName"
:value="item.codeCode"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="proviceCode" class="address">
<el-select
placeholder="省级地区"
v-model="data.proviceCode"
@change="getCityList(data.proviceCode, 1)"
>
<el-option
v-for="item in proviceList"
:key="item.code"
:label="item.codeName"
:value="item.codeCode"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item class="el-form-item" prop="cityCode">
<el-select
placeholder="市级地区"
v-model="data.cityCode"
@change="getCountyList(data.cityCode, 1)"
>
<el-option
v-for="item in cityList"
:key="item.code"
:label="item.codeName"
:value="item.codeCode"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item class="el-form-item" prop="countyCode">
<el-select
@change="getCountyName(data.countyCode, 1)"
v-model="data.countyCode"
placeholder="区级地区"
>
<el-option
v-for="item in countyList"
:key="item.code"
:label="item.codeName"
:value="item.codeCode"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div
class="table-cell-flex"
style="width:450px"
v-else-if="!read && this.data.nationCode != 148"
>
<el-form-item prop="nationCode" class="address">
<el-select
placeholder="国家"
v-model="data.nationCode"
@change="getprovince(data.nationCode, 1)"
>
<el-option
v-for="item in nationList"
:key="item.code"
:label="item.codeName"
:value="item.codeCode"
>
</el-option>
</el-select>
</el-form-item>
<div class="el-form-item">
<el-form-item class="address">
<el-select
placeholder="省级地区"
v-model="data.proviceCode"
@change="getCityList(data.proviceCode, 1)"
>
<el-option
v-for="item in proviceList"
:key="item.code"
:label="item.codeName"
:value="item.codeCode"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div class="el-form-item">
<el-form-item class="el-form-item">
<el-select
placeholder="市级地区"
v-model="data.cityCode"
@change="getCountyList(data.cityCode, 1)"
>
<el-option
v-for="item in cityList"
:key="item.code"
:label="item.codeName"
:value="item.codeCode"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div class="el-form-item">
<el-form-item class="el-form-item">
<el-select
@change="getCountyName(data.countyCode, 1)"
v-model="data.countyCode"
placeholder="区级地区"
>
<el-option
v-for="item in countyList"
:key="item.code"
:label="item.codeName"
:value="item.codeCode"
>
</el-option>
</el-select>
</el-form-item>
</div>
</div>
<span v-else>
<template v-if="data.nationProviceCityName">
<span
:style="
equal(
'nationProviceCityName',
data.nationProviceCityName
)
"
>
{{ data.nationProviceCityName }}
</span>
</template>
<template v-else-if="data.regProvinceAndCityAndCountyName">
<span
:style="
equal(
'regProvinceAndCityAndCountyName',
data.regProvinceAndCityAndCountyName
)
"
>{{ data.regProvinceAndCityAndCountyName }}</span
>
</template>
<template v-else>
<span :style="equal('proviceName', data.proviceName)">{{
data.proviceName
}}</span>
<span :style="equal('cityName', data.cityName)">{{
data.cityName
}}</span>
<span :style="equal('countyName', data.countyName)">{{
data.countyName
}}</span>
</template>
</span>
</td>
<e-td :required="!read" label>
<span>详细地址:</span>
</e-td>
<td>
<div class="table-cell-flex">
<el-form-item v-if="!read" prop="compAddress">
<el-input
v-model="data.compAddress"
@keydown.delete.native="onDeleteKeyDown"
@keydown.native="onKeyDown"
@compositionstart.native="onCompositionStart"
@compositionend.native="compositionend"
placeholder="请输入详细地址"
></el-input>
</el-form-item>
<span
v-else
:style="equal('compAddress', data.compAddress)"
>{{ data.compAddress }}</span
>
</div>
</td>
</tr>
watch: {
'data.nationCode': {
handler: function(newval, oldval) {
console.log(newval, 'new')
console.log(oldval, 'old')
if (newval) {
this.getprovince(newval)
}
},
immediate: true
},
'data.proviceCode': {
handler: function(newval, oldval) {
console.log(newval, 'new')
console.log(oldval, 'old')
if (newval) {
this.getCityList(newval)
}
},
immediate: true
},
'data.cityCode': {
handler: function(newval, oldval) {
console.log(newval, 'new')
console.log(oldval, 'old')
if (newval) {
this.getCountyList(newval)
}
},
immediate: true
},
'data.countyCode': {
handler: function(newval) {
if (newval) {
this.getCountyName(newval)
}
},
immediate: true
},
},
methods: {
async getnationList() {
let params = {
classCode: 'countryRegionsAndProvinces',
higherCode: 0
}
let data = await this.$api.common.getDictionary(params)
if (data) {
this.nationList = data
}
},
async getprovince(val, isempty) {
let params = {
classCode: 'countryRegionsAndProvinces',
higherCode: val
}
let data = await this.$api.common.getDictionary(params)
if (data) {
this.proviceList = data
if (isempty == 1) {
this.proviceName = ''
this.cityName = ''
this.countyName = ''
this.data.compAddress = ''
this.data.proviceCode = ''
this.data.cityCode = ''
this.data.countyCode = ''
this.cityList = []
this.countyList = []
}
},
async getCityList(code, isempty) {
let params = {
classCode: 'countryRegionsAndProvinces',
higherCode: code
}
let data = await this.$api.common.getDictionary(params)
if (data) {
this.cityList = data
if (isempty == 1) {
this.cityName = ''
this.countyName = ''
this.data.cityCode = ''
this.data.countyCode = ''
this.countyList = []
this.proviceName = this.getRessName(
this.data.proviceCode,
this.proviceList
)
this.data.compAddress =
this.proviceName + this.cityName + this.countyName
this.ress = this.proviceName + this.cityName + this.countyName
}
}
},
async getCountyList(code, isempty) {
let params = {
classCode: 'countryRegionsAndProvinces',
higherCode: code
}
let data = await this.$api.common.getDictionary(params)
if (data) {
this.countyList = data
if (isempty == 1) {
this.cityName = ''
this.data.countyCode = ''
this.countyName = ''
this.proviceName = this.getRessName(
this.data.proviceCode,
this.proviceList
)
this.cityName = this.getRessName(this.data.cityCode, this.cityList)
this.data.compAddress =
this.proviceName + this.cityName + this.countyName
this.ress = this.proviceName + this.cityName + this.countyName
}
}
},
getCountyName(val, isempty) {
if (isempty == 1) {
this.countyName = ''
this.proviceName = this.getRessName(
this.data.proviceCode,
this.proviceList
)
this.cityName = this.getRessName(this.data.cityCode, this.cityList)
this.countyName = this.getRessName(
this.data.countyCode,
this.countyList
)
this.data.compAddress =
this.proviceName + this.cityName + this.countyName
this.ress = this.proviceName + this.cityName + this.countyName
}
},
onDeleteKeyDown(e) {
let { selectionStart, selectionEnd } = e.target
if (!(selectionStart > this.ress.length || selectionEnd < 0)) {
e.preventDefault()
}
},
onKeyDown(e) {
if (
!(
e.target.selectionStart > this.ress.length - 1 ||
e.target.selectionEnd < 0
)
) {
e.preventDefault()
}
},
onCompositionStart(e) {
this.checkText = e.data
this.startVal = e.target.selectionStart
},
compositionend(e) {
if (this.startVal !== null) {
this.$nextTick(() => {
if (this.startVal < this.ress.length) {
let targetVal = e.target.value
let startTarget = targetVal.substring(0, this.startVal)
let endTarget = targetVal.substring(e.target.selectionEnd)
e.target.value = startTarget + this.checkText + endTarget
}
})
}
},
getRessName(codeCode, arr) {
return arr.find(o => o.id == Number(codeCode))
? arr.find(o => o.id == Number(codeCode)).codeName
: ''
},
}