You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

124 lines
3.5 KiB

<template>
<el-cascader
:key="componentKey"
v-model="selectedValues"
:options="options"
:props="props"
@change="handleChange"
collapse-tags
filterable
clearable>
</el-cascader>
</template>
<script>
import stationApi from "@/api/basic/station";
export default {
name: "station",
props: {
startTime: { type: String, required: true, default: null },
endTime: { type: String, required: true, default: null },
type: {
type: String,
required: true,
default:null// 强制要求父组件传递
}
},
data() {
return {
props: {
multiple: true,
checkStrictly: true,// 允许独立选择节点
value: 'value', // 确保与数据源字段名一致
label: 'label',
disabled: 'disabled'
},
componentKey: 0,
options: [],
stcds: '',
selectedValues: [], // 绑定选中值
}
},
watch: {
// 监听时间参数变化
startTime(newVal) {
this.checkAndFetchData(newVal, this.endTime);
},
endTime(newVal) {
this.checkAndFetchData(this.startTime, newVal);
}
},
methods: {
formatDateTime(date) {
if (!date) return '';
const d = new Date(date);
if (isNaN(d.getTime())) return '';
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
const hours = String(d.getHours()).padStart(2, '0'); // 小时补零
const minutes = String(d.getMinutes()).padStart(2, '0'); // 分钟补零
const seconds = String(d.getSeconds()).padStart(2, '0'); // 秒数补零
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
// 检查是否满足查询条件
checkAndFetchData(start, end) {
if (start && end) {
this.componentKey++;
this.options=[]
this.selectedValues=[]
if (this.type.includes("Day") || this.type.includes("Dp")){
// 触发查询
this.getStaionList(this.formatDateTime(start), this.formatDateTime(end),this.type);
}else {
this.getStaionList(start, end,this.type);
}
}
},
async getStaionList(startTime, endTime, type) {
const res = await stationApi.getStnmAndStcdList(startTime, endTime, type);
// 新增数据处理逻辑
const processTree = (nodes) => {
return nodes.map(node => {
const hasChildren = node.children && node.children.length > 0;
return {
...node,
disabled: hasChildren, // 有子节点的父类自动禁用
children: hasChildren ? processTree(node.children) : null
};
});
};
this.options = processTree([res.data]); // 注意保持数组结构
},
handleChange(selectedValues, selectedNodes) {
const value=this.selectedValues.map(path => path[path.length - 1])[0];
if (value==='all') {
this.selectedValues = ["1,all"];
}
const lastValue = selectedValues.map(path => path[path.length - 1]);
this.stcds = lastValue.join(",")
this.$emit('stcd-update', this.stcds); // 触发事件
},
getStcds() {
this.$emit('childEvent', stcds);
}
},
mounted() {
if (this.startTime !=null || this.endTime !=null) {
this.getStaionList(this.startTime,this.endTime,this.type)
}else {
this.getStaionList(null,null,this.type)
}
}
}
</script>
<style scoped lang="scss">
</style>