Commit 5844ab5070b4761ab83fd424ece2087cc74f6e34
Merge branch 'ww' into 'main'
fix: tabbar badge not real update See merge request huang/thingskit-app!91
Showing
2 changed files
with
354 additions
and
333 deletions
1 | -<template> | ||
2 | - <view class="alarm-detail-page"> | ||
3 | - <!-- 公共组件-每个页面必须引入 --> | ||
4 | - <public-module></public-module> | ||
5 | - <view class="alarm-detail-column"> | ||
6 | - <view class="u-flex detail-column"> | ||
7 | - <view class="u-flex column"> | ||
8 | - <text class="text-org-bold">{{ list.deviceName == null ? '暂无数据' : list.deviceName }}</text> | ||
9 | - <image class="image" src="/static/alarm-device.png"></image> | ||
10 | - </view> | ||
11 | - <view class="column"> | ||
12 | - <text class="text-org-bold ">告警级别:</text> | ||
13 | - <text class="text-device-muted" style="color:#DE4437"> | ||
14 | - {{ | ||
15 | - list.severity == 'CRITICAL' | ||
16 | - ? '危险' | ||
17 | - : list.severity == 'MAJOR' | ||
18 | - ? '重要' | ||
19 | - : list.severity == 'MINOR' | ||
20 | - ? '次要' | ||
21 | - : list.severity == 'WARNING' | ||
22 | - ? '警告' | ||
23 | - : '不确定' | ||
24 | - }} | ||
25 | - </text> | ||
26 | - </view> | ||
27 | - <view class="column"> | ||
28 | - <text class="text-org-bold">所属组织:</text> | ||
29 | - <text class="text-device-muted">{{ list.organizationName == null ? '暂无数据' : list.organizationName }}</text> | ||
30 | - </view> | ||
31 | - <view class="column"> | ||
32 | - <text class="text-org-bold">告警值:</text> | ||
33 | - <text class="text-device-muted">{{ list.details == null ? '暂无数据' : formatDetailText(list.details.data) }}</text> | ||
34 | - </view> | ||
35 | - <view class="column"> | ||
36 | - <text class="text-org-bold">告警时间:</text> | ||
37 | - <text class="text-device-muted">{{ list.createdTime }}</text> | ||
38 | - </view> | ||
39 | - <view class="column"> | ||
40 | - <text class="text-org-bold">告警状态:</text> | ||
41 | - <text class="text-device-muted" style="color: #DE4437;"> | ||
42 | - {{ | ||
43 | - list.status == 'CLEARED_UNACK' | ||
44 | - ? '清除未确认' | ||
45 | - : list.status == 'ACTIVE_UNACK' | ||
46 | - ? '激活未确认' | ||
47 | - : list.status == 'CLEARED_ACK' | ||
48 | - ? '清除已确认' | ||
49 | - : '激活已确认' | ||
50 | - }} | ||
51 | - </text> | ||
52 | - </view> | ||
53 | - </view> | ||
54 | - </view> | ||
55 | - <!-- #ifdef MP --> | ||
56 | - <view class="handle-result text-org-bold" style="">处理结果</view> | ||
57 | - <view class="hanle-main"> | ||
58 | - <u--form :label-style="{ 'font-size': '0rpx' }" style="padding-left: 26rpx;" labelPosition="left" :model="formModel" ref="form1"> | ||
59 | - <u-form-item label="." prop="result" ref="item3"> | ||
60 | - <view style="position: relative;left: -60rpx;"> | ||
61 | - <u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count></u--textarea> | ||
62 | - </view> | ||
63 | - </u-form-item> | ||
64 | - </u--form> | ||
65 | - </view> | ||
66 | - <!-- #endif --> | ||
67 | - <!-- #ifdef APP-PLUS --> | ||
68 | - <view class="handle-result text-org-bold">处理结果</view> | ||
69 | - <view class="hanle-main"> | ||
70 | - <view><u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count></u--textarea></view> | ||
71 | - </view> | ||
72 | - <!-- #endif --> | ||
73 | - <view style="margin-top: 44rpx;display: flex;align-items: center;justify-content: space-between;"> | ||
74 | - <view | ||
75 | - :style="[ | ||
76 | - { position: list.status !== 'CLEARED_ACK' && list.status !== 'ACTIVE_ACK' ? 'relative' : '' }, | ||
77 | - { right: list.status !== 'CLEARED_ACK' && list.status !== 'ACTIVE_ACK' ? '-210rpx' : '' } | ||
78 | - ]" | ||
79 | - v-if="list.status !== 'CLEARED_ACK' && list.status !== 'ACTIVE_ACK'" | ||
80 | - class="u-flex" | ||
81 | - style="width: 260rpx" | ||
82 | - > | ||
83 | - <u-button @click="handleSubmit" type="primary" shape="circle" text="处理"></u-button> | ||
84 | - </view> | ||
85 | - <view style="width: 30rpx;"></view> | ||
86 | - <view | ||
87 | - :style="[{ position: list.status == 'ACTIVE_ACK' ? 'relative' : '' }, { right: list.status == 'ACTIVE_ACK' ? '207rpx' : '' }]" | ||
88 | - v-if="list.status == 'ACTIVE_ACK'" | ||
89 | - class="u-flex" | ||
90 | - style="width: 260rpx" | ||
91 | - > | ||
92 | - <u-button @click="handleRemove" type="error" shape="circle" text="清除"></u-button> | ||
93 | - </view> | ||
94 | - </view> | ||
95 | - </view> | ||
96 | -</template> | ||
97 | - | ||
98 | -<script> | ||
99 | -export default { | ||
100 | - data() { | ||
101 | - return { | ||
102 | - formModel: { | ||
103 | - result: '' | ||
104 | - }, | ||
105 | - list: {} | ||
106 | - }; | ||
107 | - }, | ||
108 | - onLoad(e) { | ||
109 | - if (e.data !== null) { | ||
110 | - let params = JSON.parse(e.data); | ||
111 | - this.list = params; | ||
112 | - } | ||
113 | - // 隐藏原生的tabbar | ||
114 | - uni.hideTabBar(); | ||
115 | - }, | ||
116 | - methods: { | ||
117 | - //处理 | ||
118 | - handleSubmit() { | ||
119 | - if (this.formModel.result == '') return uni.$u.toast('请输入处理结果'); | ||
120 | - else | ||
121 | - uni.$u.http | ||
122 | - .post(`/alarm/${this.list.id}/ack`) | ||
123 | - .then(res => { | ||
124 | - if (res == '') { | ||
125 | - uni.showToast({ | ||
126 | - title: '处理成功~', | ||
127 | - icon: 'none' | ||
128 | - }); | ||
129 | - let pages = getCurrentPages(); //获取所有页面栈实例列表 | ||
130 | - let nowPage = pages[pages.length - 1]; //当前页页面实例 | ||
131 | - let prevPage = pages[pages.length - 2]; //上一页页面实例 | ||
132 | - prevPage.$vm.detailStatus = true; | ||
133 | - setTimeout(() => { | ||
134 | - uni.navigateBack({ | ||
135 | - delta: 1 | ||
136 | - }); | ||
137 | - }, 500); | ||
138 | - } | ||
139 | - }) | ||
140 | - .catch(e => { | ||
141 | - uni.$u.toast(e.data?.message); | ||
142 | - }); | ||
143 | - }, | ||
144 | - // 清除 | ||
145 | - handleRemove() { | ||
146 | - uni.$u.http | ||
147 | - .post(`/alarm/${this.list.id}/clear`) | ||
148 | - .then(res => { | ||
149 | - if (res == '') { | ||
150 | - uni.showToast({ | ||
151 | - title: '清除成功~', | ||
152 | - icon: 'none' | ||
153 | - }); | ||
154 | - let pages = getCurrentPages(); //获取所有页面栈实例列表 | ||
155 | - let nowPage = pages[pages.length - 1]; //当前页页面实例 | ||
156 | - let prevPage = pages[pages.length - 2]; //上一页页面实例 | ||
157 | - prevPage.$vm.detailStatus = true; | ||
158 | - setTimeout(() => { | ||
159 | - uni.navigateBack({ | ||
160 | - delta: 1 | ||
161 | - }); | ||
162 | - }, 500); | ||
163 | - } | ||
164 | - }) | ||
165 | - .catch(e => { | ||
166 | - uni.$u.toast(e.data?.message); | ||
167 | - }); | ||
168 | - }, | ||
169 | - formatDetailText(e) { | ||
170 | - //去除字符串双引号 | ||
171 | - const jsonStr = JSON.stringify(e); | ||
172 | - const str = jsonStr.substring(1, jsonStr.length - 1); | ||
173 | - const newStr = str.replace(/\"/g, ''); | ||
174 | - return newStr; | ||
175 | - } | ||
176 | - } | ||
177 | -}; | ||
178 | -</script> | ||
179 | - | ||
180 | -<style lang="scss" scoped> | ||
181 | -@import './static/alarmDetail.scss'; | ||
182 | -/deep/ .u-button--primary { | ||
183 | - background-color: #377dff !important; | ||
184 | - border-color: #377dff !important; | ||
185 | -} | 1 | +<template> |
2 | + <view class="alarm-detail-page"> | ||
3 | + <!-- 公共组件-每个页面必须引入 --> | ||
4 | + <public-module></public-module> | ||
5 | + <view class="alarm-detail-column"> | ||
6 | + <view class="u-flex detail-column"> | ||
7 | + <view class="u-flex column"> | ||
8 | + <text class="text-org-bold">{{ list.deviceName == null ? '暂无数据' : list.deviceName }}</text> | ||
9 | + <image class="image" src="/static/alarm-device.png"></image> | ||
10 | + </view> | ||
11 | + <view class="column"> | ||
12 | + <text class="text-org-bold ">告警级别:</text> | ||
13 | + <text class="text-device-muted" style="color:#DE4437"> | ||
14 | + {{ | ||
15 | + list.severity == 'CRITICAL' | ||
16 | + ? '危险' | ||
17 | + : list.severity == 'MAJOR' | ||
18 | + ? '重要' | ||
19 | + : list.severity == 'MINOR' | ||
20 | + ? '次要' | ||
21 | + : list.severity == 'WARNING' | ||
22 | + ? '警告' | ||
23 | + : '不确定' | ||
24 | + }} | ||
25 | + </text> | ||
26 | + </view> | ||
27 | + <view class="column"> | ||
28 | + <text class="text-org-bold">所属组织:</text> | ||
29 | + <text | ||
30 | + class="text-device-muted">{{ list.organizationName == null ? '暂无数据' : list.organizationName }}</text> | ||
31 | + </view> | ||
32 | + <view class="column"> | ||
33 | + <text class="text-org-bold">告警值:</text> | ||
34 | + <text | ||
35 | + class="text-device-muted">{{ list.details == null ? '暂无数据' : formatDetailText(list.details.data) }}</text> | ||
36 | + </view> | ||
37 | + <view class="column"> | ||
38 | + <text class="text-org-bold">告警时间:</text> | ||
39 | + <text class="text-device-muted">{{ list.createdTime }}</text> | ||
40 | + </view> | ||
41 | + <view class="column"> | ||
42 | + <text class="text-org-bold">告警状态:</text> | ||
43 | + <text class="text-device-muted" style="color: #DE4437;"> | ||
44 | + {{ | ||
45 | + list.status == 'CLEARED_UNACK' | ||
46 | + ? '清除未确认' | ||
47 | + : list.status == 'ACTIVE_UNACK' | ||
48 | + ? '激活未确认' | ||
49 | + : list.status == 'CLEARED_ACK' | ||
50 | + ? '清除已确认' | ||
51 | + : '激活已确认' | ||
52 | + }} | ||
53 | + </text> | ||
54 | + </view> | ||
55 | + </view> | ||
56 | + </view> | ||
57 | + <!-- #ifdef MP --> | ||
58 | + <view class="handle-result text-org-bold" style="">处理结果</view> | ||
59 | + <view class="hanle-main"> | ||
60 | + <u--form :label-style="{ 'font-size': '0rpx' }" style="padding-left: 26rpx;" labelPosition="left" | ||
61 | + :model="formModel" ref="form1"> | ||
62 | + <u-form-item label="." prop="result" ref="item3"> | ||
63 | + <view style="position: relative;left: -60rpx;"> | ||
64 | + <u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count> | ||
65 | + </u--textarea> | ||
66 | + </view> | ||
67 | + </u-form-item> | ||
68 | + </u--form> | ||
69 | + </view> | ||
70 | + <!-- #endif --> | ||
71 | + <!-- #ifdef APP-PLUS --> | ||
72 | + <view class="handle-result text-org-bold">处理结果</view> | ||
73 | + <view class="hanle-main"> | ||
74 | + <view> | ||
75 | + <u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count> | ||
76 | + </u--textarea> | ||
77 | + </view> | ||
78 | + </view> | ||
79 | + <!-- #endif --> | ||
80 | + <view style="margin-top: 44rpx;display: flex;align-items: center;justify-content: space-between;"> | ||
81 | + <view :style="[ | ||
82 | + { position: list.status !== 'CLEARED_ACK' && list.status !== 'ACTIVE_ACK' ? 'relative' : '' }, | ||
83 | + { right: list.status !== 'CLEARED_ACK' && list.status !== 'ACTIVE_ACK' ? '-210rpx' : '' } | ||
84 | + ]" v-if="list.status !== 'CLEARED_ACK' && list.status !== 'ACTIVE_ACK'" class="u-flex" style="width: 260rpx"> | ||
85 | + <u-button @click="handleSubmit" type="primary" shape="circle" text="处理"></u-button> | ||
86 | + </view> | ||
87 | + <view style="width: 30rpx;"></view> | ||
88 | + <view | ||
89 | + :style="[{ position: list.status == 'ACTIVE_ACK' ? 'relative' : '' }, { right: list.status == 'ACTIVE_ACK' ? '207rpx' : '' }]" | ||
90 | + v-if="list.status == 'ACTIVE_ACK'" class="u-flex" style="width: 260rpx"> | ||
91 | + <u-button @click="handleRemove" type="error" shape="circle" text="清除"></u-button> | ||
92 | + </view> | ||
93 | + </view> | ||
94 | + </view> | ||
95 | +</template> | ||
96 | + | ||
97 | +<script> | ||
98 | + import { | ||
99 | + mapActions | ||
100 | + } from 'vuex' | ||
101 | + export default { | ||
102 | + data() { | ||
103 | + return { | ||
104 | + formModel: { | ||
105 | + result: '' | ||
106 | + }, | ||
107 | + list: {} | ||
108 | + }; | ||
109 | + }, | ||
110 | + onLoad(e) { | ||
111 | + if (e.data !== null) { | ||
112 | + let params = JSON.parse(e.data); | ||
113 | + this.list = params; | ||
114 | + } | ||
115 | + // 隐藏原生的tabbar | ||
116 | + uni.hideTabBar(); | ||
117 | + }, | ||
118 | + methods: { | ||
119 | + //处理 | ||
120 | + handleSubmit() { | ||
121 | + if (this.formModel.result == '') return uni.$u.toast('请输入处理结果'); | ||
122 | + else | ||
123 | + uni.$u.http | ||
124 | + .post(`/alarm/${this.list.id}/ack`) | ||
125 | + .then(res => { | ||
126 | + if (res == '') { | ||
127 | + uni.showToast({ | ||
128 | + title: '处理成功~', | ||
129 | + icon: 'none' | ||
130 | + }); | ||
131 | + let pages = getCurrentPages(); //获取所有页面栈实例列表 | ||
132 | + let nowPage = pages[pages.length - 1]; //当前页页面实例 | ||
133 | + let prevPage = pages[pages.length - 2]; //上一页页面实例 | ||
134 | + prevPage.$vm.detailStatus = true; | ||
135 | + setTimeout(() => { | ||
136 | + uni.navigateBack({ | ||
137 | + delta: 1 | ||
138 | + }); | ||
139 | + }, 500); | ||
140 | + } | ||
141 | + }) | ||
142 | + .catch(e => { | ||
143 | + uni.$u.toast(e.data?.message); | ||
144 | + }); | ||
145 | + }, | ||
146 | + // 清除 | ||
147 | + handleRemove() { | ||
148 | + uni.$u.http | ||
149 | + .post(`/alarm/${this.list.id}/clear`) | ||
150 | + .then(res => { | ||
151 | + if (res == '') { | ||
152 | + uni.showToast({ | ||
153 | + title: '清除成功~', | ||
154 | + icon: 'none' | ||
155 | + }); | ||
156 | + | ||
157 | + let pages = getCurrentPages(); //获取所有页面栈实例列表 | ||
158 | + let nowPage = pages[pages.length - 1]; //当前页页面实例 | ||
159 | + let prevPage = pages[pages.length - 2]; //上一页页面实例 | ||
160 | + prevPage.$vm.detailStatus = true; | ||
161 | + setTimeout(async () => { | ||
162 | + uni.navigateBack({ | ||
163 | + delta: 1 | ||
164 | + }); | ||
165 | + const res = await uni.$u.http.get('/yt/homepage/app?login=true'); | ||
166 | + if (res) { | ||
167 | + //异步实时更新告警徽标数 | ||
168 | + await this.updateBadgeTotal(res.totalAlarm?.activedAlarm); | ||
169 | + } | ||
170 | + }, 500); | ||
171 | + } | ||
172 | + }) | ||
173 | + .catch(e => { | ||
174 | + uni.$u.toast(e.data?.message); | ||
175 | + }); | ||
176 | + }, | ||
177 | + ...mapActions(['updateBadgeTotal']), | ||
178 | + formatDetailText(e) { | ||
179 | + //去除字符串双引号 | ||
180 | + const jsonStr = JSON.stringify(e); | ||
181 | + const str = jsonStr.substring(1, jsonStr.length - 1); | ||
182 | + const newStr = str.replace(/\"/g, ''); | ||
183 | + return newStr; | ||
184 | + } | ||
185 | + } | ||
186 | + }; | ||
187 | +</script> | ||
188 | + | ||
189 | +<style lang="scss" scoped> | ||
190 | + @import './static/alarmDetail.scss'; | ||
191 | + | ||
192 | + /deep/ .u-button--primary { | ||
193 | + background-color: #377dff !important; | ||
194 | + border-color: #377dff !important; | ||
195 | + } | ||
186 | </style> | 196 | </style> |
@@ -2,21 +2,17 @@ | @@ -2,21 +2,17 @@ | ||
2 | <view> | 2 | <view> |
3 | <view :class="[isFixed ? 'f-fixed' : '']"> | 3 | <view :class="[isFixed ? 'f-fixed' : '']"> |
4 | <!-- 二次封装tabbar --> | 4 | <!-- 二次封装tabbar --> |
5 | - <u-tabbar | ||
6 | - :value="tabIndex" | ||
7 | - @change="onTabbar" | ||
8 | - :fixed="false" | ||
9 | - :placeholder="false" | ||
10 | - :safeAreaInsetBottom="false" | ||
11 | - :activeColor="activeColor" | ||
12 | - :inactiveColor="inactiveColor" | ||
13 | - :border="border" | ||
14 | - > | 5 | + <u-tabbar :value="tabIndex" @change="onTabbar" :fixed="false" :placeholder="false" |
6 | + :safeAreaInsetBottom="false" :activeColor="activeColor" :inactiveColor="inactiveColor" :border="border"> | ||
15 | <block v-for="(item, index) in list" :key="index"> | 7 | <block v-for="(item, index) in list" :key="index"> |
16 | <!-- 自定义icon --> | 8 | <!-- 自定义icon --> |
17 | <u-tabbar-item :text="item.name" :badge="item.badge" :dot="item.dot" :badgeStyle="item.badgeStyle"> | 9 | <u-tabbar-item :text="item.name" :badge="item.badge" :dot="item.dot" :badgeStyle="item.badgeStyle"> |
18 | - <view slot="active-icon"><image style="width:50rpx;height: 50rpx;" :src="item.iconFill" mode=""></image></view> | ||
19 | - <view slot="inactive-icon"><image style="width:50rpx;height: 50rpx;" :src="item.icon" mode=""></image></view> | 10 | + <view slot="active-icon"> |
11 | + <image style="width:50rpx;height: 50rpx;" :src="item.iconFill" mode=""></image> | ||
12 | + </view> | ||
13 | + <view slot="inactive-icon"> | ||
14 | + <image style="width:50rpx;height: 50rpx;" :src="item.icon" mode=""></image> | ||
15 | + </view> | ||
20 | </u-tabbar-item> | 16 | </u-tabbar-item> |
21 | </block> | 17 | </block> |
22 | </u-tabbar> | 18 | </u-tabbar> |
@@ -29,153 +25,168 @@ | @@ -29,153 +25,168 @@ | ||
29 | </template> | 25 | </template> |
30 | 26 | ||
31 | <script> | 27 | <script> |
32 | -import base from '@/config/baseUrl.js'; | ||
33 | -import { mapState } from 'vuex'; | 28 | + import base from '@/config/baseUrl.js'; |
29 | + import { | ||
30 | + mapState | ||
31 | + } from 'vuex'; | ||
34 | 32 | ||
35 | -export default { | ||
36 | - name: 'f-tabbar', | ||
37 | - props: { | ||
38 | - // 是否固定在底部 | ||
39 | - isFixed: { | ||
40 | - type: Boolean, | ||
41 | - default: true | ||
42 | - }, | ||
43 | - // 是否设置防止塌陷高度 | ||
44 | - isFillHeight: { | ||
45 | - type: Boolean, | ||
46 | - default: true | ||
47 | - }, | ||
48 | - // 选中的颜色 | ||
49 | - activeColor: { | ||
50 | - type: String, | ||
51 | - default: '#377dff' | ||
52 | - }, | ||
53 | - // 未选中颜色 | ||
54 | - inactiveColor: { | ||
55 | - type: String, | ||
56 | - default: '#606266' | 33 | + export default { |
34 | + name: 'f-tabbar', | ||
35 | + props: { | ||
36 | + // 是否固定在底部 | ||
37 | + isFixed: { | ||
38 | + type: Boolean, | ||
39 | + default: true | ||
40 | + }, | ||
41 | + // 是否设置防止塌陷高度 | ||
42 | + isFillHeight: { | ||
43 | + type: Boolean, | ||
44 | + default: true | ||
45 | + }, | ||
46 | + // 选中的颜色 | ||
47 | + activeColor: { | ||
48 | + type: String, | ||
49 | + default: '#377dff' | ||
50 | + }, | ||
51 | + // 未选中颜色 | ||
52 | + inactiveColor: { | ||
53 | + type: String, | ||
54 | + default: '#606266' | ||
55 | + }, | ||
56 | + // 是否显示边框色 | ||
57 | + border: { | ||
58 | + type: Boolean, | ||
59 | + default: true | ||
60 | + }, | ||
61 | + // 右上角的角标提示信息 | ||
62 | + badge: { | ||
63 | + type: [String, Number, null], | ||
64 | + default: uni.$u.props.tabbarItem.badge | ||
65 | + }, | ||
66 | + // 是否显示圆点,将会覆盖badge参数 | ||
67 | + dot: { | ||
68 | + type: Boolean, | ||
69 | + default: uni.$u.props.tabbarItem.dot | ||
70 | + }, | ||
71 | + // 控制徽标的位置,对象或者字符串形式,可以设置top和right属性 | ||
72 | + badgeStyle: { | ||
73 | + type: [Object, String], | ||
74 | + default: uni.$u.props.tabbarItem.badgeStyle | ||
75 | + } | ||
57 | }, | 76 | }, |
58 | - // 是否显示边框色 | ||
59 | - border: { | ||
60 | - type: Boolean, | ||
61 | - default: true | 77 | + data() { |
78 | + return { | ||
79 | + systemInfo: base.systemInfo, | ||
80 | + tabIndex: 0, | ||
81 | + path: '', //当前路径 | ||
82 | + //#ifdef MP | ||
83 | + list: [{ | ||
84 | + name: '首页', | ||
85 | + url: 'pages/index/index', | ||
86 | + icon: '../../../static/home-un.png', | ||
87 | + iconFill: '../../../static/home-yes.png' | ||
88 | + }, | ||
89 | + { | ||
90 | + name: '设备', | ||
91 | + url: 'pages/device/device', | ||
92 | + icon: '../../../static/device-un.png', | ||
93 | + iconFill: '../../../static/device-yes.png' | ||
94 | + }, | ||
95 | + { | ||
96 | + name: '告警', | ||
97 | + url: 'pages/alarm/alarm', | ||
98 | + icon: '../../../static/alert-un.png', | ||
99 | + iconFill: '../../../static/alert-yes.png', | ||
100 | + badge: this.$store.state.badgeInfo | ||
101 | + }, | ||
102 | + { | ||
103 | + name: '我的', | ||
104 | + url: 'pages/personal/personal', | ||
105 | + icon: '../../../static/my-un.png', | ||
106 | + iconFill: '../../../static/my-yes.png' | ||
107 | + } | ||
108 | + ], | ||
109 | + //#endif | ||
110 | + //#ifdef APP-PLUS | ||
111 | + list: [{ | ||
112 | + name: '首页', | ||
113 | + url: 'pages/index/index', | ||
114 | + icon: '/static/home-un.png', | ||
115 | + iconFill: '/static/home-yes.png' | ||
116 | + }, | ||
117 | + { | ||
118 | + name: '设备', | ||
119 | + url: 'pages/device/device', | ||
120 | + icon: '/static/device-un.png', | ||
121 | + iconFill: '/static/device-yes.png' | ||
122 | + }, | ||
123 | + { | ||
124 | + name: '告警', | ||
125 | + url: 'pages/alarm/alarm', | ||
126 | + icon: '/static/alert-un.png', | ||
127 | + iconFill: '/static/alert-yes.png', | ||
128 | + badge: this.$store.state.badgeInfo | ||
129 | + }, | ||
130 | + { | ||
131 | + name: '我的', | ||
132 | + url: 'pages/personal/personal', | ||
133 | + icon: '/static/my-un.png', | ||
134 | + iconFill: '/static/my-yes.png' | ||
135 | + } | ||
136 | + ] | ||
137 | + //#endif | ||
138 | + }; | ||
62 | }, | 139 | }, |
63 | - // 右上角的角标提示信息 | ||
64 | - badge: { | ||
65 | - type: [String, Number, null], | ||
66 | - default: uni.$u.props.tabbarItem.badge | 140 | + created() { |
141 | + //获取页面路径 | ||
142 | + let currentPages = getCurrentPages(); | ||
143 | + let page = currentPages[currentPages.length - 1]; | ||
144 | + this.path = page.route; | ||
145 | + if (this.list.length > 0) { | ||
146 | + this.list.forEach((item, index) => { | ||
147 | + if (this.path == item.url) { | ||
148 | + this.tabIndex = index; | ||
149 | + } | ||
150 | + }); | ||
151 | + } | ||
67 | }, | 152 | }, |
68 | - // 是否显示圆点,将会覆盖badge参数 | ||
69 | - dot: { | ||
70 | - type: Boolean, | ||
71 | - default: uni.$u.props.tabbarItem.dot | 153 | + computed: { |
154 | + getAlarmBadge() { | ||
155 | + return this.$store.state.badgeInfo | ||
156 | + } | ||
72 | }, | 157 | }, |
73 | - // 控制徽标的位置,对象或者字符串形式,可以设置top和right属性 | ||
74 | - badgeStyle: { | ||
75 | - type: [Object, String], | ||
76 | - default: uni.$u.props.tabbarItem.badgeStyle | ||
77 | - } | ||
78 | - }, | ||
79 | - data() { | ||
80 | - return { | ||
81 | - systemInfo: base.systemInfo, | ||
82 | - tabIndex: 0, | ||
83 | - path: '', //当前路径 | ||
84 | - //#ifdef MP | ||
85 | - list: [ | ||
86 | - { | ||
87 | - name: '首页', | ||
88 | - url: 'pages/index/index', | ||
89 | - icon: '../../../static/home-un.png', | ||
90 | - iconFill: '../../../static/home-yes.png' | ||
91 | - }, | ||
92 | - { | ||
93 | - name: '设备', | ||
94 | - url: 'pages/device/device', | ||
95 | - icon: '../../../static/device-un.png', | ||
96 | - iconFill: '../../../static/device-yes.png' | ||
97 | - }, | ||
98 | - { | ||
99 | - name: '告警', | ||
100 | - url: 'pages/alarm/alarm', | ||
101 | - icon: '../../../static/alert-un.png', | ||
102 | - iconFill: '../../../static/alert-yes.png', | ||
103 | - badge: this.$store.state.badgeInfo | ||
104 | - }, | ||
105 | - { | ||
106 | - name: '我的', | ||
107 | - url: 'pages/personal/personal', | ||
108 | - icon: '../../../static/my-un.png', | ||
109 | - iconFill: '../../../static/my-yes.png' | 158 | + methods: { |
159 | + onTabbar(index) { | ||
160 | + // this.list[2].badge = this.getAlarmBadge; | ||
161 | + | ||
162 | + if (this.list[index].url) { | ||
163 | + if (this.path !== this.list[index].url) { | ||
164 | + uni.switchTab({ | ||
165 | + url: '/' + this.list[index].url | ||
166 | + }); | ||
167 | + } | ||
110 | } | 168 | } |
111 | - ], | ||
112 | - //#endif | ||
113 | - //#ifdef APP-PLUS | ||
114 | - list: [ | ||
115 | - { | ||
116 | - name: '首页', | ||
117 | - url: 'pages/index/index', | ||
118 | - icon: '/static/home-un.png', | ||
119 | - iconFill: '/static/home-yes.png' | ||
120 | - }, | ||
121 | - { | ||
122 | - name: '设备', | ||
123 | - url: 'pages/device/device', | ||
124 | - icon: '/static/device-un.png', | ||
125 | - iconFill: '/static/device-yes.png' | ||
126 | - }, | ||
127 | - { | ||
128 | - name: '告警', | ||
129 | - url: 'pages/alarm/alarm', | ||
130 | - icon: '/static/alert-un.png', | ||
131 | - iconFill: '/static/alert-yes.png', | 169 | + } |
170 | + }, | ||
171 | + watch: { | ||
172 | + getAlarmBadge(oldValue, newValue) { | ||
173 | + const oldRecord = this.list[2] | ||
174 | + this.$set(this.list, 2, { | ||
175 | + ...oldRecord, | ||
132 | badge: this.$store.state.badgeInfo | 176 | badge: this.$store.state.badgeInfo |
133 | - }, | ||
134 | - { | ||
135 | - name: '我的', | ||
136 | - url: 'pages/personal/personal', | ||
137 | - icon: '/static/my-un.png', | ||
138 | - iconFill: '/static/my-yes.png' | ||
139 | - } | ||
140 | - ] | ||
141 | - //#endif | ||
142 | - }; | ||
143 | - }, | ||
144 | - created() { | ||
145 | - //获取页面路径 | ||
146 | - let currentPages = getCurrentPages(); | ||
147 | - let page = currentPages[currentPages.length - 1]; | ||
148 | - this.path = page.route; | ||
149 | - if (this.list.length > 0) { | ||
150 | - this.list.forEach((item, index) => { | ||
151 | - if (this.path == item.url) { | ||
152 | - this.tabIndex = index; | ||
153 | - } | ||
154 | - }); | ||
155 | - } | ||
156 | - }, | ||
157 | - methods: { | ||
158 | - onTabbar(index) { | ||
159 | - this.list[2].badge = this.$store.state.badgeInfo; | 177 | + }) |
160 | 178 | ||
161 | - if (this.list[index].url) { | ||
162 | - if (this.path !== this.list[index].url) { | ||
163 | - uni.switchTab({ | ||
164 | - url: '/' + this.list[index].url | ||
165 | - }); | ||
166 | - } | ||
167 | } | 179 | } |
168 | } | 180 | } |
169 | - } | ||
170 | -}; | 181 | + }; |
171 | </script> | 182 | </script> |
172 | 183 | ||
173 | <style lang="scss" scoped> | 184 | <style lang="scss" scoped> |
174 | -.f-fixed { | ||
175 | - position: fixed; | ||
176 | - bottom: 0; | ||
177 | - left: 0; | ||
178 | - right: 0; | ||
179 | - z-index: 1000; | ||
180 | -} | 185 | + .f-fixed { |
186 | + position: fixed; | ||
187 | + bottom: 0; | ||
188 | + left: 0; | ||
189 | + right: 0; | ||
190 | + z-index: 1000; | ||
191 | + } | ||
181 | </style> | 192 | </style> |