refactor: 将省份和城市级联改为select框联动

This commit is contained in:
SADYX 2024-07-09 16:42:48 +08:00
parent 7a6c93d7e7
commit 7a68dccf9b
2 changed files with 70 additions and 39 deletions

View File

@ -37,29 +37,37 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="省份" prop="provinceId"> <el-form-item label="省份" prop="provinceId">
<el-cascader <el-select
v-model="formData.provinceId"
:options="areaList"
:props="props1"
class="w-1/1"
clearable clearable
filterable filterable
placeholder="请选择省份" placeholder="请选择省份"
/> v-model="formData.provinceId"
@change="onProvinceChange"
>
<el-option
v-for="item in areaList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="城市" prop="cityId"> <el-form-item label="城市" prop="cityId">
<el-cascader <el-select
v-model="formData.cityId"
:options="areaList"
:props="props1"
:show-all-levels="false"
class="w-1/1"
clearable clearable
filterable filterable
placeholder="请选择城市" placeholder="请选择城市"
/> v-model="formData.cityId"
>
<el-option
v-for="item in cityList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -245,6 +253,7 @@ import { useUserStore } from '@/store/modules/user'
import { CustomerCompanyApi, CustomerCompanyVO } from '@/api/cms/customerCompany' import { CustomerCompanyApi, CustomerCompanyVO } from '@/api/cms/customerCompany'
import * as DeptApi from '@/api/system/dept' import * as DeptApi from '@/api/system/dept'
import {defaultProps, handleTree} from "@/utils/tree"; import {defaultProps, handleTree} from "@/utils/tree";
import { log } from 'console'
/** 项目基本信息 表单 */ /** 项目基本信息 表单 */
defineOptions({ name: 'ProjectForm' }) defineOptions({ name: 'ProjectForm' })
@ -256,6 +265,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') // const dialogTitle = ref('') //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
const areaList = ref([]) // const areaList = ref([]) //
const cityList = ref([]); // options
const formType = ref('') // create - update - const formType = ref('') // create - update -
const userOptions = ref<UserApi.UserVO[]>([]) // const userOptions = ref<UserApi.UserVO[]>([]) //
const customerCompanyOptions = ref<CustomerCompanyVO[]>([]) // const customerCompanyOptions = ref<CustomerCompanyVO[]>([]) //
@ -401,4 +411,10 @@ const resetForm = () => {
} }
formRef.value?.resetFields() formRef.value?.resetFields()
} }
//
const onProvinceChange = (value: number)=>{
formData.value.cityId = undefined;
cityList.value = (areaList.value.find(({id})=>id===value) as any)?.children ?? [];
}
</script> </script>

View File

@ -35,32 +35,40 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="省份" prop="provinceId"> <el-form-item label="省份" prop="provinceId">
<el-cascader <el-select
v-model="formData.provinceId" clearable
:options="areaList" filterable
:props="props" placeholder="请选择省份"
class="w-1/1" v-model="formData.provinceId"
clearable @change="onProvinceChange"
filterable >
placeholder="请选择省份" <el-option
/> v-for="item in areaList"
</el-form-item> :key="item.id"
</el-col> :label="item.name"
<el-col :span="12"> :value="item.id"
<el-form-item label="城市" prop="cityId"> />
<el-cascader </el-select>
v-model="formData.cityId" </el-form-item>
:options="areaList" </el-col>
:props="props" <el-col :span="12">
:show-all-levels="false" <el-form-item label="城市" prop="cityId">
class="w-1/1" <el-select
clearable clearable
filterable filterable
placeholder="请选择城市" placeholder="请选择城市"
/> v-model="formData.cityId"
</el-form-item> >
</el-col> <el-option
v-for="item in cityList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="预计金额(万)" prop="contractAmount" :label-width="102"> <el-form-item label="预计金额(万)" prop="contractAmount" :label-width="102">
<el-input v-model="formData.contractAmount" placeholder="请输入预计合同金额" /> <el-input v-model="formData.contractAmount" placeholder="请输入预计合同金额" />
@ -309,6 +317,7 @@ const formRef = ref() // 表单 Ref
const processDefineKey = 'pms_project_init' // Key const processDefineKey = 'pms_project_init' // Key
const userList = ref<any[]>([]) // const userList = ref<any[]>([]) //
const areaList = ref([]) // const areaList = ref([]) //
const cityList = ref([]); // options
const customerCompanyOptions = ref<CustomerCompanyVO[]>([]) // const customerCompanyOptions = ref<CustomerCompanyVO[]>([]) //
const deptOptions = ref<any[]>([]) // const deptOptions = ref<any[]>([]) //
@ -354,4 +363,10 @@ onMounted(async () => {
// //
customerCompanyOptions.value = await CustomerCompanyApi.getCustomerCompanyList() customerCompanyOptions.value = await CustomerCompanyApi.getCustomerCompanyList()
}) })
//
const onProvinceChange = (value: number)=>{
formData.value.cityId = undefined;
cityList.value = (areaList.value.find(({id})=>id===value) as any)?.children ?? [];
}
</script> </script>