Files
emsfront/src/components/Ems/ZdSelect/index.vue

146 lines
3.6 KiB
Vue
Raw Normal View History

<!--站点选择组件-->
<template>
<div class="zd-select-container">
<el-form :inline="true">
2026-02-13 21:46:12 +08:00
<el-form-item :label="showLabel ? '站点选择' : ''" :class="{'no-label': !showLabel}">
<el-select
v-model="id"
:size="size"
:placeholder="placeholder"
:loading="loading"
loading-text="正在加载数据"
:style="{width: selectWidth}"
@change="onSubmit"
>
2025-06-30 17:32:04 +08:00
<el-option :label="item.siteName" :value="item.siteId" v-for="(item,index) in siteList" :key="index+'zdxeSelect'"></el-option>
</el-select>
</el-form-item>
2025-09-08 18:01:48 +08:00
<!-- <el-form-item>-->
<!-- <el-button type="primary" :loading="searchLoading" @click="onSubmit">搜索</el-button>-->
<!-- </el-form-item>-->
</el-form>
</div>
</template>
<style scoped lang="scss">
2026-02-13 21:46:12 +08:00
.zd-select-container {
.el-form {
display: inline-flex;
align-items: center;
}
.el-form-item {
margin-bottom: 0;
}
.no-label ::v-deep .el-form-item__label {
display: none;
}
.no-label ::v-deep .el-form-item__content {
margin-left: 0 !important;
}
}
</style>
<script>
import {getAllSites} from '@/api/ems/zddt'
import {mapGetters} from "vuex"
export default {
props:{
getListByStore:{
type:Boolean,
default:false,
required:false
},
defaultSiteId:{//默认展示的站点ID
2025-06-30 17:32:04 +08:00
type:String,
default:'',
required:false
2026-02-13 21:46:12 +08:00
},
showLabel: {
type: Boolean,
default: true,
required: false
},
size: {
type: String,
default: 'medium',
required: false
},
placeholder: {
type: String,
default: '请选择换电站名称',
required: false
},
selectWidth: {
type: String,
default: '220px',
required: false
}
},
data() {
return {
id:'',
loading:false,
2025-06-25 00:17:08 +08:00
searchLoading:false,
siteList:[],
}
},
computed:{
...mapGetters(["zdList"]),
},
2026-02-13 21:46:12 +08:00
watch: {
defaultSiteId(newVal) {
if (!newVal || !this.siteList || this.siteList.length === 0) {
return
}
if (this.siteList.find(item => item.siteId === newVal) && this.id !== newVal) {
this.id = newVal
}
}
},
methods:{
onSubmit(){
this.$emit('submitSite',this.id)
},
2026-02-17 21:44:12 +08:00
emitSitesLoaded() {
this.$emit('sitesLoaded', this.siteList || [])
},
setDefaultSite(){
2025-06-30 17:32:04 +08:00
const defaultSite = this.defaultSiteId
if(defaultSite && this.siteList.find(item=>item.siteId === defaultSite)){
this.id = defaultSite
}else if(!defaultSite && this.siteList.length>0){
2025-06-30 17:32:04 +08:00
this.id = this.siteList[0].siteId
}
this.$emit('submitSite',this.id)
},
getList(){
return getAllSites().then(response => {
this.siteList = response.data || []
2026-02-17 21:44:12 +08:00
this.emitSitesLoaded()
this.setDefaultSite()
2025-06-25 00:17:08 +08:00
}).finally(() => {this.loading=false;this.searchLoading=false})
}
},
mounted(){
this.loading=true
2025-06-25 00:17:08 +08:00
this.searchLoading=true
this.$nextTick(()=>{
if(this.getListByStore){
if(this.zdList.length === 0){
2026-02-13 21:46:12 +08:00
this.getList().then(()=>{
this.$store.commit('SET_ZD_LIST', this.siteList)
})
}else{
this.siteList = this.zdList
2026-02-17 21:44:12 +08:00
this.emitSitesLoaded()
this.loading=false
2025-06-25 00:17:08 +08:00
this.searchLoading=false
this.setDefaultSite()
}
}else{
this.getList()
}
})
}
}
</script>