cbsl-app/pages/forewarning/forewarning.vue

175 lines
3.9 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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>