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