emis-frontend/src/views/emis/EmisBaseTools/DestinationPicker.vue
2024-04-22 13:35:19 +08:00

142 lines
3.1 KiB
Vue

<template>
<section class="p-10">
<el-select
filterable
clearable
default-first-option
v-el-select-loadmore="loadmore"
remote
:remote-method="queryData"
:loading="loading"
:no-data-text="noDataText"
v-model="svalue"
sPlaceholder="选择"
@change="onChange">
<div class="el-s-thead">
<div style="width:40%;">目的地编号</div>
<div style="width:60%;">目的地名称</div>
</div>
<el-option v-for="item in filterData" :key="item.id" :label="item.destName" :value="item.id">
<div class="el-data">
<div style="width:40%;">{{ item.destCode }}</div>
<div style="width:60%;">{{ item.destName }}</div>
</div>
</el-option>
</el-select>
</section>
</template>
<script>
import { listEmisDestination } from "@/api/emis/emisDestination";
export default {
name: "DestinationPicker",
props: {
value: {
type: [String, Number],
required: false
},
countryCode: {
type: String,
required: false
},
isInitiated:{
type: [Boolean,String],
required: false,
default:false
}
},
data() {
return {
svalue: this.value,
sCountry:null,
code:'',
// 原始数据
data: [],
// 搜索后的数据
filterData:[],
filterMap:new Map(),
// 选中的值
sel:'',
// 输入的值转为大写后
queryVal:'',
noDataText: '无数据',
loading: false,
queryParams:{
pageNum: 1,
pageSize: 10,
}
};
},
watch: {
value(newVal) {
this.svalue = newVal;
},
svalue(newVal, oldVal) {
this.$emit("input", this.svalue);
},
countryCode(newVal) {
this.queryData();
}
},
created() {
if(this.isInitiated || this.svalue!=null){
this.queryData();
}
},
methods: {
onChange(val) {
this.svalue = val;
this.$emit("input", this.svalue);
let selData=this.filterMap[val];
console.log(selData);
this.$emit('onChange', selData)
},
loadmore() {
this.queryParams.pageNum++;
this.queryData();
},
queryData(queryVal) {
this.queryParams.pageNum=1;
this.queryParams.name=queryVal;
this.queryData();
listEmisDestination(this.queryParams).then(response => {
this.filterData= response.rows
this.filterData.forEach(item => {
this.filterMap[item.id]=item;
});
});
},
}
};
</script>
<style lang="scss" scoped>
.el-s-thead{
width: 100%;
color: rgb(177 47 41);
font-size: 14px;
font-weight: 600;
display: inline-flex;
padding: 10px;
border-bottom: 1px solid #e6e3e3;
min-width: 300px;
}
.el-data{
width: 100%;
color: #000;
font-size: 14px;
font-weight: 600;
display: inline-flex;
padding: 5px;
border-bottom: 1px solid #e6e3e3;
}
</style>