cbsl-app/pages/forewarning/forewarning.vue

175 lines
3.9 KiB
Vue
Raw Normal View History

2026-04-13 14:13:06 +08:00
<template>
<view :style="{ height: '100vh', overflow: 'hidden' }">
<u-status-bar></u-status-bar>
<u-navbar
title="预警"
:autoBack="true"
:titleStyle="{
fontSize: '18px',
}"
:height="44"
:safeAreaInsetTop="true"
leftIconSize="20"
leftIconColor="rgb(153, 153, 153)"
>
</u-navbar>
<!-- <u-tabs
:list="tabsOptions"
@click="tabsChange"
:scrollable="false"
class="tabsClass"
:activeStyle="{ color: 'rgb(37, 157, 255)', fontSize: '16px' }"
:inactiveStyle="{ color: '#606266', fontSize: '16px' }"
lineColor="transparent"
itemStyle="height: 44px"
:customItemClass="getCustomItemClass"
>
</u-tabs> -->
<view class="tab-container">
<view
v-for="(item, index) in tabsOptions"
:key="index"
class="tab-item"
:class="{ 'tab-active': tabsVal === item.components }"
@click="tabsChange(item)"
>
{{ item.name }}
<view v-if="item.hasData" class="red-dot"></view>
</view>
</view>
<uniSh
v-show="tabsVal === 'uniSh'"
@hasData="updateTabData('uniSh', $event)"
ref="shComponent"
></uniSh>
<uniSk
v-show="tabsVal === 'uniSk'"
@hasData="updateTabData('uniSk', $event)"
ref="skComponent"
></uniSk>
<uniHd
v-show="tabsVal === 'uniHd'"
@hasData="updateTabData('uniHd', $event)"
ref="hdComponent"
></uniHd>
</view>
</template>
<script>
import moment from "moment";
import uniSh from "./sh.vue";
import uniSk from "./sk.vue";
import uniHd from "./hd.vue";
export default {
components: { uniSh, uniSk, uniHd },
data() {
return {
tabsOptions: [
{
name: "山洪预警",
components: "uniSh",
hasData: true,
},
{
name: "水库预警",
components: "uniSk",
hasData: false,
},
{
name: "河道预警",
components: "uniHd",
hasData: false,
},
],
tabsVal: "uniSh",
};
},
methods: {
getCustomItemClass(item, index) {
return item.hasData ? "u-tabs__wrapper__nav__item--data-dot" : "";
},
tabsChange(item) {
this.tabsVal = item.components;
console.log(this.tabsVal);
// 直接调用当前激活组件的submit方法
if (this.tabsVal === 'uniSh') {
this.$refs.shComponent.submit();
} else if (this.tabsVal === 'uniSk') {
this.$refs.skComponent.submit();
} else if (this.tabsVal === 'uniHd') {
this.$refs.hdComponent.submit();
}
},
updateTabData(component, hasData) {
const index = this.tabsOptions.findIndex(
(item) => item.components === component
);
if (index !== -1) {
this.tabsOptions[index].hasData = hasData;
}
},
// 初始化所有子组件的数据
initAllTabsData() {
// 这里不需要做任何事情因为子组件在created钩子中会自动请求数据
// 由于我们使用了v-show而不是v-if所有子组件都会被创建并执行created钩子
}
},
mounted() {
// 页面加载完成后初始化所有标签页数据
this.initAllTabsData();
}
};
</script>
<style lang="scss" scoped>
.myTitleStyle {
font-size: 30px;
background-color: red;
height: 200px;
}
.tabsClass {
margin-top: 44px;
height: 44px;
padding: 0 40px;
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
}
.tab-container {
display: flex;
margin-top: 44px;
height: 44px;
padding: 0 40px;
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
}
.tab-item {
flex: 1;
position: relative;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
color: #606266;
height: 100%;
}
.tab-active {
color: rgb(37, 157, 255);
}
.red-dot {
position: absolute;
top: 9px;
right: 9px;
width: 8px;
height: 8px;
border-radius: 50%;
background-color: red;
}
</style>