2025-06-16 15:54:10 +08:00
|
|
|
<!--站点选择组件-->
|
|
|
|
|
<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>
|
2025-06-16 15:54:10 +08:00
|
|
|
</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>-->
|
2025-06-16 15:54:10 +08:00
|
|
|
</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;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-06-16 15:54:10 +08:00
|
|
|
</style>
|
|
|
|
|
<script>
|
2025-06-20 02:00:10 +08:00
|
|
|
import {getAllSites} from '@/api/ems/zddt'
|
2025-06-22 22:20:34 +08:00
|
|
|
import {mapGetters} from "vuex"
|
2025-06-16 15:54:10 +08:00
|
|
|
export default {
|
2025-06-20 02:00:10 +08:00
|
|
|
props:{
|
2025-06-22 22:20:34 +08:00
|
|
|
getListByStore:{
|
|
|
|
|
type:Boolean,
|
|
|
|
|
default:false,
|
|
|
|
|
required:false
|
|
|
|
|
},
|
2025-06-20 02:00:10 +08:00
|
|
|
defaultSiteId:{//默认展示的站点ID
|
2025-06-30 17:32:04 +08:00
|
|
|
type:String,
|
2025-06-20 02:00:10 +08:00
|
|
|
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
|
2025-06-20 02:00:10 +08:00
|
|
|
}
|
|
|
|
|
},
|
2025-06-16 15:54:10 +08:00
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
id:'',
|
2025-06-20 02:00:10 +08:00
|
|
|
loading:false,
|
2025-06-25 00:17:08 +08:00
|
|
|
searchLoading:false,
|
2025-06-22 22:20:34 +08:00
|
|
|
siteList:[],
|
2025-06-16 15:54:10 +08:00
|
|
|
}
|
|
|
|
|
},
|
2025-06-22 22:20:34 +08:00
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-06-16 15:54:10 +08:00
|
|
|
methods:{
|
|
|
|
|
onSubmit(){
|
2025-06-20 02:00:10 +08:00
|
|
|
this.$emit('submitSite',this.id)
|
2025-06-16 15:54:10 +08:00
|
|
|
},
|
2026-02-17 21:44:12 +08:00
|
|
|
emitSitesLoaded() {
|
|
|
|
|
this.$emit('sitesLoaded', this.siteList || [])
|
|
|
|
|
},
|
2025-06-22 22:20:34 +08:00
|
|
|
setDefaultSite(){
|
2025-06-30 17:32:04 +08:00
|
|
|
const defaultSite = this.defaultSiteId
|
|
|
|
|
if(defaultSite && this.siteList.find(item=>item.siteId === defaultSite)){
|
2025-06-22 22:20:34 +08:00
|
|
|
this.id = defaultSite
|
|
|
|
|
}else if(!defaultSite && this.siteList.length>0){
|
2025-06-30 17:32:04 +08:00
|
|
|
this.id = this.siteList[0].siteId
|
2025-06-22 22:20:34 +08:00
|
|
|
}
|
|
|
|
|
this.$emit('submitSite',this.id)
|
|
|
|
|
},
|
|
|
|
|
getList(){
|
|
|
|
|
return getAllSites().then(response => {
|
|
|
|
|
this.siteList = response.data || []
|
2026-02-17 21:44:12 +08:00
|
|
|
this.emitSitesLoaded()
|
2025-06-22 22:20:34 +08:00
|
|
|
this.setDefaultSite()
|
2025-06-25 00:17:08 +08:00
|
|
|
}).finally(() => {this.loading=false;this.searchLoading=false})
|
2025-06-16 15:54:10 +08:00
|
|
|
}
|
2025-06-20 02:00:10 +08:00
|
|
|
},
|
|
|
|
|
mounted(){
|
|
|
|
|
this.loading=true
|
2025-06-25 00:17:08 +08:00
|
|
|
this.searchLoading=true
|
2025-06-20 02:00:10 +08:00
|
|
|
this.$nextTick(()=>{
|
2025-06-22 22:20:34 +08:00
|
|
|
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)
|
2025-06-22 22:20:34 +08:00
|
|
|
})
|
|
|
|
|
}else{
|
|
|
|
|
this.siteList = this.zdList
|
2026-02-17 21:44:12 +08:00
|
|
|
this.emitSitesLoaded()
|
2025-06-22 22:20:34 +08:00
|
|
|
this.loading=false
|
2025-06-25 00:17:08 +08:00
|
|
|
this.searchLoading=false
|
2025-06-22 22:20:34 +08:00
|
|
|
this.setDefaultSite()
|
2025-06-20 02:00:10 +08:00
|
|
|
}
|
2025-06-22 22:20:34 +08:00
|
|
|
}else{
|
|
|
|
|
this.getList()
|
|
|
|
|
}
|
2025-06-20 02:00:10 +08:00
|
|
|
})
|
2025-06-16 15:54:10 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|