数据模型完成
This commit is contained in:
@@ -1,32 +1,30 @@
|
||||
<template>
|
||||
<div class="ai-select">
|
||||
<el-select
|
||||
style="width: 100%;"
|
||||
clearable
|
||||
:value="value"
|
||||
:size="$attrs.size || 'small'"
|
||||
:filterable="isAction"
|
||||
v-bind="$attrs"
|
||||
v-on="$listeners">
|
||||
<el-select clearable class="w100"
|
||||
:value="value"
|
||||
:size="$attrs.size || 'small'"
|
||||
:filterable="isAction||filterable"
|
||||
:disabled="disabled"
|
||||
v-bind="$attrs"
|
||||
v-on="$listeners">
|
||||
<template v-if="isAction">
|
||||
<el-option v-for="op in actionOps" :key="op.id"
|
||||
:label="op[actionProp.label]" :value="op[actionProp.value]"/>
|
||||
<el-option v-for="op in actionOps" :key="op.id" :label="op.label" :value="op[actionProp.value]"/>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-option
|
||||
v-for="(item, index) in selectList"
|
||||
:key="index"
|
||||
:label="item.dictName"
|
||||
:value="item.dictValue"/>
|
||||
<el-option v-for="(item, index) in ops" :key="index"
|
||||
:label="item.dictName||item[actionProp.label]"
|
||||
:value="item.dictValue>-1?item.dictValue:item[actionProp.value]"
|
||||
:disabled="check(item[actionProp.value])"/>
|
||||
</template>
|
||||
</el-select>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Dict from "../../lib/js/dict";
|
||||
|
||||
export default {
|
||||
name: 'AiSelect',
|
||||
|
||||
model: {
|
||||
prop: 'value',
|
||||
event: 'change'
|
||||
@@ -38,9 +36,11 @@ export default {
|
||||
v && this.isAction && !this.options.toString() && this.getOptions()
|
||||
}
|
||||
},
|
||||
action() {
|
||||
this.isAction && this.getOptions()
|
||||
},
|
||||
value(v) {
|
||||
this.$emit("select", this.isAction ? this.options.find(e => e[this.actionProp.value] == v) :
|
||||
this.selectList.find(e => e.dictValue == v))
|
||||
this.handleSelect(v)
|
||||
}
|
||||
},
|
||||
props: {
|
||||
@@ -48,35 +48,35 @@ export default {
|
||||
selectList: {
|
||||
type: Array
|
||||
},
|
||||
|
||||
width: {
|
||||
type: String,
|
||||
default: '216'
|
||||
},
|
||||
dict: String,
|
||||
instance: Function,
|
||||
action: {default: ""},
|
||||
prop: {
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
filterable: Boolean,
|
||||
disabled: Boolean
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
options: [],
|
||||
filter: ""
|
||||
filter: "",
|
||||
Dict
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
selectWidth() {
|
||||
if (this.width.indexOf('px') > -1) {
|
||||
return this.width
|
||||
}
|
||||
return `${this.width}px`
|
||||
},
|
||||
isAction() {
|
||||
return !!this.action
|
||||
},
|
||||
isAction: v => !!v.action,
|
||||
actionOps() {
|
||||
return this.options.filter(e => !this.filter || e[this.actionProp.label].indexOf(this.filter) > -1)
|
||||
const {filter} = this
|
||||
const LABEL = this.actionProp.label
|
||||
return this.options.map(e => ({
|
||||
...e,
|
||||
label: typeof LABEL == "function" ? LABEL?.(e) : e[LABEL]
|
||||
})).filter(e => !filter || e.label.indexOf(filter) > -1)
|
||||
},
|
||||
actionProp() {
|
||||
return {
|
||||
@@ -84,7 +84,8 @@ export default {
|
||||
value: 'id',
|
||||
...this.prop
|
||||
}
|
||||
}
|
||||
},
|
||||
ops: v => v.dict ? v.Dict.getDict(v.dict) : v.selectList
|
||||
},
|
||||
methods: {
|
||||
getOptions() {
|
||||
@@ -94,7 +95,14 @@ export default {
|
||||
if (res?.data) {
|
||||
this.options = res.data.records || res.data
|
||||
}
|
||||
})
|
||||
}).then(() => this.handleSelect())
|
||||
},
|
||||
handleSelect(v = this.value) {
|
||||
this.disabled || this.$emit("select", this.isAction ? this.options.find(e => e[this.actionProp.value] == v) :
|
||||
this.ops.find(e => this.dict ? e.dictValue == v : e[this.actionProp.value] == v))
|
||||
},
|
||||
check(v) {
|
||||
return this.actionProp.disabled && [this.actionProp.disabled].flat().includes(v)
|
||||
}
|
||||
},
|
||||
created() {
|
||||
@@ -102,9 +110,3 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
:deep( .ai-select .el-select ) {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user