<template> <el-form ref="elForm" :model="baseInfo" :rules="rules" size="medium" label-width="100px"> <el-row style="margin-top: 20px"> <el-col :span="6"> <el-form-item label="企业名称" prop="name"> <el-input v-model="baseInfo.name" placeholder="请输入企业名称" clearable /> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="企业类型" prop="companyType"> <el-select v-model="baseInfo.companyType" placeholder="请选择企业类型" clearable :style="{ width: '100%' }"> <el-option v-for="item in companyTypeOptions" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="企业性质" prop="companyNature"> <el-select v-model="baseInfo.companyNature" placeholder="请选择企业性质" clearable :style="{ width: '100%' }"> <el-option v-for="item in companyNatureOptions" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="6"> <el-form-item label="所在区域" prop="area"> <el-select v-model="baseInfo.area" placeholder="请选择所在区域" clearable :style="{ width: '100%' }"> <el-option v-for="item in areaOptions" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="16" style="margin-right: 15px"> <el-form-item label="详细地址" prop="companyAddress"> <el-select ref="provSelect" v-model="province" v-show="baseInfo.area == 1" placeholder="省/自治区/直辖市" clearable @change="getAreaCityByProv"> <el-option v-for="item in provinceList" :key="item.id" :label="item.areaName" :value="item.id" /> </el-select> <el-select ref="citySelect" v-model="city" v-show="baseInfo.area == 1" placeholder="市" clearable @change="getAreaCountyByCity"> <el-option v-for="item in citiesList" :key="item.id" :label="item.areaName" :value="item.id" /> </el-select> <el-select ref="countySelect" v-model="county" v-show="baseInfo.area == 1" placeholder="县/区" clearable> <el-option v-for="item in countiesList" :key="item.id" :label="item.areaName" :value="item.id" /> </el-select> <el-input v-model="baseInfo.companyAddress" placeholder="请输入详细地址" clearable style="width: 40%" /> </el-form-item> </el-col> </el-row> </el-form> </template> <script> import { getDictByCode } from '@/api/system/dict' import { getAreaList } from '@/api/system/area' export default { name: 'BaseInfo', mounted() { this.getAreaOptions() this.getCompanyType() this.getCompanyNature() this.getAreaProvince() }, watch: { province: function(val, oldval) { const selected = this.provinceList.filter(item => item.id === val) if (selected.length > 0) { this.baseInfo.companyProvince = selected[0].areaName } }, city: function(val, oldVal) { const selected = this.citiesList.filter(item => item.id === val) if (selected.length > 0) { this.baseInfo.companyCity = selected[0].areaName } }, county: function(val, oldVal) { const selected = this.countiesList.filter(item => item.id === val) if (selected.length > 0) { this.baseInfo.companyArea = selected[0].areaName } } }, data() { return { baseInfo: { name: '', area: '', companyNature: '', companyType: '', companyProvince: '', companyCity: '', companyArea: '', companyAddress: '' }, province: '', city: '', county: '', companyTypeOptions: [], companyNatureOptions: [], areaOptions: [], provinceList: [], citiesList: [], countiesList: [], rules: { name: [{ required: true, message: '请输入企业名称', trigger: 'blur' }], area: [{ required: true, message: '请选择所在区域', trigger: 'change' }], companyNature: [{ required: true, message: '请选择单位性质', trigger: 'change' }], companyType: [{ required: true, message: '请选择企业类型', trigger: 'change' }], companyProvince: [{ required: true, message: '省/市', trigger: 'change' }], companyCity: [{ required: true, message: '市/区', trigger: 'change' }], companyArea: [{ required: true, message: '县/街道', trigger: 'change' }], companyAddress: [{ required: true, message: '请输入详细地址', trigger: 'blur' }] } } }, methods: { getAreaOptions: function() { getDictByCode('companyRegion').then(response => { if (response.code === 200) { this.areaOptions = response.data this.baseInfo.area = this.areaOptions[0].value } }) }, getCompanyType: function() { getDictByCode('companyType').then(response => { if (response.code === 200) { this.companyTypeOptions = response.data } }) }, getCompanyNature: function() { getDictByCode('companyNature').then(response => { if (response.code === 200) { this.companyNatureOptions = response.data } }) }, getAreaProvince: function() { getAreaList('0').then(response => { if (response.code === 200) { this.provinceList = response.data } }) }, getAreaCityByProv: function() { getAreaList(this.province).then(response => { if (response.code === 200) { this.baseInfo.companyCity = [] this.baseInfo.companyArea = [] this.citiesList = response.data } }) }, getAreaCountyByCity: function() { getAreaList(this.city).then(response => { if (response.code === 200) { this.baseInfo.companyArea = [] this.countiesList = response.data } }) } } } </script> <style scoped> </style>