You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.7 KiB
86 lines
1.7 KiB
<template>
|
|
<view class="cu-form-group">
|
|
<view class="title">{{label}}</view>
|
|
<picker @change="PickerChange" :value="index" :range-key="rangeKey" :range="dictOptions">
|
|
<view class="picker">
|
|
{{index>-1?dictOptions[index][rangeKey]:'请选择'}}
|
|
</view>
|
|
</picker>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'MySelect',
|
|
props: {
|
|
dictCode: String,
|
|
value: String,
|
|
label:String,
|
|
rangeKey:{type:String,default:'label'},
|
|
valueKey:{type:String,default:'value'},
|
|
searchUrl:String,
|
|
|
|
},
|
|
watch: {
|
|
dictCode: {
|
|
immediate: true,
|
|
handler() {
|
|
this.initDictData()
|
|
},
|
|
},
|
|
},
|
|
computed: {
|
|
|
|
},
|
|
data() {
|
|
return {
|
|
dictOptions: [],
|
|
index: -1,
|
|
}
|
|
},
|
|
methods: {
|
|
initDictData() {
|
|
//根据字典Code, 初始化字典数组
|
|
if (this.searchUrl){
|
|
this.$http.get(this.searchUrl,{"code":this.dictCode}).then(res=>{
|
|
if(res.data.success){
|
|
this.dictOptions = res;
|
|
this.getIndex()
|
|
}
|
|
})
|
|
}else{
|
|
let code = this.dictCode;
|
|
this.$http.get(`/sys/dict/getDictItems/${code}`).then(res=>{
|
|
if(res.data.success){
|
|
this.dictOptions = res.data.result;
|
|
this.getIndex()
|
|
}
|
|
})
|
|
}
|
|
},
|
|
PickerChange(e) {
|
|
this.index=e.detail.value
|
|
if(this.index==-1){
|
|
this.index=0
|
|
this.$emit('input',this.dictOptions[0][this.valueKey])
|
|
}else{
|
|
this.$emit('input', this.dictOptions[this.index][this.valueKey]);
|
|
}
|
|
},
|
|
getIndex() {
|
|
for (var i = 0; i < this.dictOptions.length; i++) {
|
|
if (this.dictOptions[i].value == this.value) {
|
|
this.index = i
|
|
return
|
|
}
|
|
}
|
|
this.index=-1
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
|
|
</style>
|