1. 使用form表单渲染select
- ref为参考值,prop为规则验证
- data_tpye_dict.baseGrop为预先定位的分组
- mode=“multiple” 为多选
<a-form-model-item ref="data_type" label="模型算法" prop="data_type"
v-if="activeKey == '地类分割成果服务' || activeKey == '目标检测成果服务'">
<a-select placeholder="请选择模型算法" v-model:value="form.data_type" mode="multiple">
<a-select-opt-group mode="multiple">
<span slot="label" style="font-size:16px;color:#177DE4;">
<i class="iconfont icon-groai-base" style="margin-right: 8px;"/>基础模型
</span>
<a-select-option v-for="item in data_tpye_dict.baseGrop"
:value="item.key">{{ item.value }}
</a-select-option>
</a-select-opt-group>
<a-select-opt-group mode="multiple">
<span slot="label" style="font-size:16px;color:#177DE4;">
<i class="iconfont icon-geoai-interest" style="margin-right: 8px;"/>兴趣模型
</span>
<a-select-option v-for="item in data_tpye_dict.interestGrop"
:value="item.key">{{ item.value }}
</a-select-option>
</a-select-opt-group>
</a-select>
</a-form-model-item>
2. 定义的字典项
const data_tpye_dict = {
interestGrop: [
{key: "interest_excavator", value: "挖掘机"},
{key: "interest_playground", value: "操场"},
{key: "interest_steamboat", value: "轮船"},
{key: "interest_plane", value: "飞机"}
],
baseGrop: [
{key: "base_building", value: "建筑物"},
{key: "base_woodland", value: "林地"},
{key: "base_landConstruction", value: "建设用地"},
{key: "base_road", value: "道路"},
{key: "base_plough", value: "飞机"},
{key: "base_river", value: "水系"},
],
}
3. 验证规则
- 表单验证使用antd推荐的async-validator
- github:https://github.com/yiminghe/async-validator
- 思路:匹配前一个关键字,不一致pop剔除
const validDataType = (rule, value, callback) => {
let keyHeader = value[0].split("_")[0]
if (value[value.length - 1].indexOf(keyHeader) !== -1) {
return callback();
} else {
value.pop()
this.$message.warning("基础模型与兴趣模型无法同时选中!", 3)
return callback(new Error('基础模型与兴趣模型无法同时选中!'));
}
}
form: {
data_type: undefined
},
rules: {
data_type: [
{required: true,type: 'array',message: '请选择模型算法!',trigger: 'change'},
{validator: validDataType, trigger: 'change'}
],
}