<template>
<div>
<!-- 搜索下拉框 -->
<search-select
v-model="currentValue"
v-bind="attributes"
:min-len="minilen"
:search-method="searchoption"
:disabled="disabled"
:init-on-load="initOnLoad"
:page-size="pageSize"
:show-code="showCode"
:allow-create="allowCreate"
v-on="$listeners"
@change="change"
/>
</div>
</template>
<script>
import { getDict } from '@/api/dictDetail'
import SearchSelect from '@/components/SearchSelect'
export default {
components: { SearchSelect },
props: {
value: {
type: String,
default: ''
},
disabled: {
type: Boolean,
default: false
},
minilen: {
type: Number,
default: 0
},
pageSize: {
type: Number,
default: 15
},
initOnLoad: {
type: Boolean,
default: false
},
showCode: {
default: false,
type: Boolean
},
dict: {
type: String,
default: ''
},
allowCreate: {
type: Boolean,
default: false
}
},
data() {
return {
currentValue: this.value,
parsed: {},
};
},
computed: {
parsedParams() {
return this.parseParams()
},
attributes: function() {
const attrs = this.$attrs || {}
return attrs
},
},
watch: {
value(val) {
this.currentValue = val;
},
currentValue(val) {
this.$emit('input', val)
}
},
methods: {
change(value) {
this.$emit('change', value)
},
parseParams() {
const n = this.dict
if (!n) {
return {
'codetype': 'NIL'
}
}
const index = n.indexOf('[')
const params = {}
if (index > -1) {
const realName = n.substring(0, index)
const expressionStr = n.match(/\[([\s\S]+)\]/)[1]
const expressioins = expressionStr.split(',')
params['codetype'] = realName
if (expressioins && expressioins.length > 0) {
for (const expression of expressioins) {
const kvPair = expression.split('=')
const k = kvPair[0]
let v = kvPair[1]
if (v.indexOf('{') === 0) {
v = this.$data[v.replace(/[\{\}]/g, '')]
}
params[k] = v
}
}
} else {
params['codetype'] = n
}
return params
},
/* getPostData(val) {
this.parsed = val;
}, */
searchoption(params) {
const queryParam = Object.assign({
matchfield: 'codecode',
codevalue: params.keyword
}, this.parsedParams)
return getDict(queryParam, params.pageNo, params.pageSize)
},
}
}
</script>