Files
AJ-Report/report-ui/src/components/codeSelect.vue
2021-07-18 14:29:17 +08:00

156 lines
4.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 使用方式 <code-select v-model="params.enableFlag" dictname="ENABLE_FLAG" @changed="handler" placeholder="启用状态" style="width: 120px;"/>
* 根据/data/basecode.js中字典值生成下拉列表
* @property dictname ENABLE_FLAG
* @property placeholder
* @property style
*/
<template>
<el-select :name="inputName" v-model="selectValue" :disabled="disabled" :placeholder="placeholder" :style="mystyle" clearable class="filter-item code-selected" @change="selectChange" @visible-change="drowShow">
<el-option v-for="(item,index) in optionList" :key="index" :label="item[label]" :value="item[valWord]" />
</el-select>
</template>
<script>
import request from '@/api/axios'
import { getStorageItem } from '@/utils/storage'
export default {
props: {
value: {
type: [String, Number],
default: ''
},
//用localStrage中的basecode生成下拉
dictname: {
type: String,
default: ''
},
//远程请求,生成下拉
remoteurl: {
type: String,
default: ''
},
remoteParams: {
type: Object,
default: ()=>{}
},
inputName: {
type: String,
default: ''
},
placeholder: {
type: String,
default: '请选择'
},
mystyle: {
type: String,
default: 'width: 100px'
},
disabled: {
type: Boolean,
default: false
},
label:{
type: String,
default: 'label'
},
valWord:{
type: String,
default: 'value'
},
},
data () {
return {
selectValue: '',
optionList: [],
dictList: [],
}
},
watch: {
value:{
handler(newValue, oldValue){
if (typeof newValue === 'string') {
this.selectValue = newValue
} else {
this.selectValue = this.parseString(newValue);
}
},
immediate: true
},
},
computed: {},
created () {
if (this.dictname !== '') {
this.optionList = this.getListFromBaseCode()
}
if (this.remoteurl !== '') {
this.getListFromAjax()
}
},
mounted () {},
methods: {
getListFromBaseCode() {
let basecode = getStorageItem('queryForCodeSelect')
let list = []
if (!basecode.hasOwnProperty(this.dictname)) {
return []
}
this.dictList = basecode[this.dictname]
for (let i = 0; i < this.dictList.length; i++) {
var codeItem = this.dictList[i]
list.push({ 'value': codeItem.value.toString(), 'label': codeItem.label })
}
return list
},
getListFromAjax() {
//将url中的参数转换成json提交
var reqData = {};
/*var params = this.remoteurl.slice(this.remoteurl.indexOf('?') + 1).split('&');
for (var i = 0; i < params.length; i++) {
var map = params[i].split('=');
var key = map[0];
var val = map[1];
if(','.indexOf(val)>0 && val.split(',').length>1){
val = val.split(',');
}
reqData[map[0]] = val;
}*/
if(this.remoteParams != null){
reqData = this.remoteParams;
}
request({
url: this.remoteurl,
method: 'post',
data: reqData
}).then(response => {
if (response.repCode == '0000') {
this.optionList = response.repData
}
})
},
selectChange (val) {
this.$emit('input', val)
var list = this.optionList
for (var i in list) {
var item = list[i]
if (item[this.valWord] === val) {
this.$emit('changed', item)
break
}
}
},
drowShow (val) {
this.$emit('show', val)
this.$emit('click', val)
}
}
}
</script>
<!--<style rel="stylesheet/scss" lang="less" scoped>-->
<!--</style>-->