<template>
<el-radio-group v-if="tagType=='radio'" v-model="dictValue" :disabled="disabled" @change="handleInput">
<el-radio v-for="(item, key) in dictOptions" :key="key" :label="key" :value="key">{{ item }}</el-radio>
</el-radio-group>
<el-radio-group v-else-if="tagType=='radioButton'" v-model="dictValue" :disabled="disabled" @change="handleInput">
<el-radio-button v-for="(item, key) in dictOptions" :key="key" :label="key" :value="key">{{ item }}</el-radio-button>
</el-radio-group>
<el-select
v-else-if="tagType=='list'"
v-model="dictValue"
:multiple="multiple"
:clearable="isClearable"
:placeholder="placeholder"
:disabled="disabled"
:size="selectSize"
@change="handleInput">
<el-option v-if="showSelectOption" label="" value="">请选择</el-option>
<el-option v-for="(item, key) in dictOptions" :key="key" :label="item" :value="key">{{ item }}</el-option>
</el-select>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: 'DictSelectTag',
props: {
dictCode: String, // 字典名称
placeholder: String, // 提示句
value: '', // 绑定的数据
disabled: Boolean, // 是否禁用
type: String, // 选择器类型
size: String, // 大小
showSelectOption: { // 是否需要顯示請選擇選項
type: Boolean,
default: true
},
isClearable: { // 是否需要清楚圖標
type: Boolean,
default: true
},
multiple: { // 是否多选
type: Boolean,
default: false
}
},
data() {
return {
dictOptions: [], // 字典数据
tagType: '', // 选择器类型
dictValue: '',
selectSize: ''
}
},
computed: {
...mapState(['dicts'])
},
watch: {
dictCode: {
immediate: true,
handler() {
this.initDictData()
}
},
value(v) {
this.dictValue = v
}
},
created() {
this.tagType = this.type
this.dictValue = this.value ? this.value : ''
this.selectSize = this.size ? this.size : 'small'
},
methods: {
initDictData() { // 获取对应字典数据
this.dictOptions = this.dicts.dicts[this.dictCode]
},
handleInput(e) {
this.$emit('change', e)
}
}
}
</script>
// 使用方法
<dict-select-tag
v-model="submitForm.tradeCpType"
type="list"
dict-code="CREDIT_SUBJECT"
placeholder="请选择交易对手类型"
:show-select-option="false"
multiple
style="width: 100%"
/>