ProFormCascader组件-省市区联动组件数据处理

const [cityList, setCityList] = useState<any>([]);

useEffect(() => {
    //获取城市列表
    getCityeList().then((res) => {
      const list = res?.map((item) => {
        const obj = {
          label: item.name,
          value: item.divisionId,
          children: item.childAddress.map((ztem) => {
            return {
              label: ztem.name,
              value: ztem.divisionId,
              children: ztem?.childAddress.map((utem) => {
                return {
                  label: utem.name,
                  value: utem.divisionId,
                };
              }),
            };
          }),
        };
        return obj;
      });
      setCityList(list);
    });
  }, []);

//使用
<ProFormCascader
    width="md"
    required
    name="cityName"
    label="城市"
    rules={[
      {
       required: true,
       message: "请选择城市",
       },
      ]}
    fieldProps={{
    options: cityList,
    fieldNames: {
       children: cityList?.children,
       label: cityList?.lable,
       },
       onChange: handleHouseCityChange,
       }}
 />

项目中用的是antDesign Pro,今天来记一下ProFormCascader组件的数据处理;

首先来看一下从后端请求过来的数据原始格式:如下图

(1)

(2)

 (3)全部展开的数据层级如下:

 前端数据处理如下:

  const [cityList, setCityList] = useState<any>([]);

useEffect(() => {
    //获取城市列表
    getCityeList().then((res) => {
      const list = res?.map((item) => {
        const obj = {
          label: item.name,
          value: item.divisionId,
          children: item.childAddress.map((ztem) => {
            return {
              label: ztem.name,
              value: ztem.divisionId,
              children: ztem?.childAddress.map((utem) => {
                return {
                  label: utem.name,
                  value: utem.divisionId,
                };
              }),
            };
          }),
        };
        return obj;
      });
      setCityList(list);
    });
  }, []);

<ProFormCascader
            width="md"
            required
            name="cityName"
            label="城市"
            rules={[
              {
                required: true,
                message: "请选择城市",
              },
            ]}
            fieldProps={{
              options: cityList,
              fieldNames: {
                children: cityList?.children,
                label: cityList?.lable,
              },
              onChange: handleHouseCityChange,
            }}
          />

现在我们来打印看一下,选择完省市区以后,该组件字段取到的数据是什么样子的:

  // 选择城市 onChange
  const handleHouseCityChange = (e: any) => {
    console.log("cityName-----", e);

    const formValue = form.getFieldsValue();
    form.setFieldsValue({
      ...formValue,
      projectMid: null,
      outerLayoutsId: null,
    });
    if (id != 10) {
      handelQueryQuarter();
    }
    if (e[0] == 500000) {
      setIsChongQing(true);
    } else {
      setIsChongQing(false);
    }
  };

打印结果如下:

0:代表省

1:代表市

2:代表区


完成啦~ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想使用Element UI组件库来实现Vue的省市区联动布局,可以按照以下步骤进行分开加实现: 1. 安装Element UI:首先,确保你已经安装了Element UI。你可以通过npm或者yarn来安装Element UI。 ```shell npm install element-ui --save ``` 2. 引入Element UI组件:在你的Vue组件中,引入需要使用的Element UI组件。例如,需要使用`<el-select>`、`<el-option>`等组件。 ```html <template> <div> <el-select v-model="selectedProvince" @change="updateCities"> <el-option v-for="province in provinces" :key="province.id" :value="province.id" :label="province.name"></el-option> </el-select> <el-select v-model="selectedCity" @change="updateDistricts"> <el-option v-for="city in cities" :key="city.id" :value="city.id" :label="city.name"></el-option> </el-select> <el-select v-model="selectedDistrict"> <el-option v-for="district in districts" :key="district.id" :value="district.id" :label="district.name"></el-option> </el-select> </div> </template> <script> import { ElSelect, ElOption } from 'element-ui'; export default { components: { ElSelect, ElOption, }, data() { return { provinces: [], // 省份数据 cities: [], // 城市数据 districts: [], // 区域数据 selectedProvince: '', // 选中的省份 selectedCity: '', // 选中的城市 selectedDistrict: '', // 选中的区域 }; }, mounted() { // 初始化数据,从后端接口获取省份数据 this.getProvinces(); }, methods: { getProvinces() { // 从后端接口获取省份数据,更新this.provinces }, getCities(provinceId) { // 根据省份ID从后端接口获取城市数据,更新this.cities }, getDistricts(cityId) { // 根据城市ID从后端接口获取区域数据,更新this.districts }, updateCities() { this.getCities(this.selectedProvince); this.selectedCity = ''; this.selectedDistrict = ''; }, updateDistricts() { this.getDistricts(this.selectedCity); this.selectedDistrict = ''; }, }, }; </script> ``` 通过以上步骤,你可以使用Element UI的`<el-select>`和`<el-option>`组件来实现Vue的省市区联动布局。根据你的实际需求,你可以进一步添加样式和逻辑来完善这个联动布局。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值