You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tanghe-report/report-ui/src/components/codeSelect.vue

156 lines
4.0 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* 使用方式 <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>-->