Commit 3be4a23ce2edc12daaf3289de77da81c519c2e3a

Authored by fengtao
1 parent 2da23875

fix:修改通知详情和通知类型判断,refractor:修改告警分页文本样式

@@ -5,12 +5,12 @@ @@ -5,12 +5,12 @@
5 <view class="alarm-detail-column"> 5 <view class="alarm-detail-column">
6 <view class="u-flex detail-column"> 6 <view class="u-flex detail-column">
7 <view class="u-flex column"> 7 <view class="u-flex column">
8 - <text class="text">{{ list.deviceName == null ? '暂无数据' : list.deviceName }}</text>  
9 - <image class="image" src="../../static/alert-detail.png"></image> 8 + <text class="text-org-bold">{{ list.deviceName == null ? '暂无数据' : list.deviceName }}</text>
  9 + <image class="image" src="/static/alarm-device.png"></image>
10 </view> 10 </view>
11 <view class="column"> 11 <view class="column">
12 - <text class="text-alarm-level">告警级别:</text>  
13 - <text class="text-alarm-level" style="color:#DE4437"> 12 + <text class="text-org-bold ">告警级别:</text>
  13 + <text class="text-device-muted" style="color:#DE4437">
14 {{ 14 {{
15 list.severity == 'CRITICAL' 15 list.severity == 'CRITICAL'
16 ? '危险' 16 ? '危险'
@@ -25,20 +25,20 @@ @@ -25,20 +25,20 @@
25 </text> 25 </text>
26 </view> 26 </view>
27 <view class="column"> 27 <view class="column">
28 - <text class="text-alarm-level-lg">所属组织:</text>  
29 - <text class="text-alarm-lg">{{ list.originatorType }}</text> 28 + <text class="text-org-bold">所属组织:</text>
  29 + <text class="text-device-muted">{{ list.organizationName }}</text>
30 </view> 30 </view>
31 <view class="column"> 31 <view class="column">
32 - <text class="text-alarm-level-lg">告警值:</text>  
33 - <text class="text-alarm-lg">{{ list.details == null ? '暂无数据' : list.details.data }}</text> 32 + <text class="text-org-bold">告警值:</text>
  33 + <text class="text-device-muted">{{ list.details == null ? '暂无数据' : formatDetailText(list.details.data) }}</text>
34 </view> 34 </view>
35 <view class="column"> 35 <view class="column">
36 - <text class="text-alarm-level-lg">告警时间:</text>  
37 - <text class="text-alarm-lg">{{ list.createdTime }}</text> 36 + <text class="text-org-bold">告警时间:</text>
  37 + <text class="text-device-muted">{{ list.createdTime }}</text>
38 </view> 38 </view>
39 <view class="column"> 39 <view class="column">
40 - <text class="text-alarm-level-lg">告警状态:</text>  
41 - <text class="text-alarm-status"> 40 + <text class="text-org-bold">告警状态:</text>
  41 + <text class="text-device-muted">
42 {{ 42 {{
43 list.status == 'CLEARED_UNACK' 43 list.status == 'CLEARED_UNACK'
44 ? '清除未确认' 44 ? '清除未确认'
@@ -53,17 +53,19 @@ @@ -53,17 +53,19 @@
53 </view> 53 </view>
54 </view> 54 </view>
55 <!-- #ifdef MP --> 55 <!-- #ifdef MP -->
56 - <view class="handle-result" style="">处理结果</view> 56 + <view class="handle-result text-org-bold" style="">处理结果</view>
57 <view class="hanle-main"> 57 <view class="hanle-main">
58 <u--form :label-style="{ 'font-size': '0rpx' }" style="padding-left: 26rpx;" labelPosition="left" :model="formModel" ref="form1"> 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"> 59 <u-form-item label="." prop="result" ref="item3">
60 - <view style="margin-left: -60rpx;"><u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count></u--textarea></view> 60 + <view style="position: relative;left: -60rpx;">
  61 + <u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count></u--textarea>
  62 + </view>
61 </u-form-item> 63 </u-form-item>
62 </u--form> 64 </u--form>
63 </view> 65 </view>
64 <!-- #endif --> 66 <!-- #endif -->
65 <!-- #ifdef APP-PLUS --> 67 <!-- #ifdef APP-PLUS -->
66 - <view class="handle-result">处理结果</view> 68 + <view class="handle-result text-org-bold">处理结果</view>
67 <view class="hanle-main"> 69 <view class="hanle-main">
68 <view><u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count></u--textarea></view> 70 <view><u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count></u--textarea></view>
69 </view> 71 </view>
@@ -94,28 +96,37 @@ export default { @@ -94,28 +96,37 @@ export default {
94 }, 96 },
95 methods: { 97 methods: {
96 handleSubmit() { 98 handleSubmit() {
97 - uni.$u.http  
98 - .post(`/alarm/${this.list.id}/ack`)  
99 - .then(res => {  
100 - if (res == '') {  
101 - uni.showToast({  
102 - title: '处理成功~',  
103 - icon: 'none'  
104 - });  
105 - let pages = getCurrentPages(); //获取所有页面栈实例列表  
106 - let nowPage = pages[pages.length - 1]; //当前页页面实例  
107 - let prevPage = pages[pages.length - 2]; //上一页页面实例  
108 - prevPage.$vm.detailStatus = true;  
109 - setTimeout(() => {  
110 - uni.navigateBack({  
111 - delta: 1 99 + if (this.formModel.result == '') return uni.$u.toast('请输入处理结果');
  100 + else
  101 + uni.$u.http
  102 + .post(`/alarm/${this.list.id}/ack`)
  103 + .then(res => {
  104 + if (res == '') {
  105 + uni.showToast({
  106 + title: '处理成功~',
  107 + icon: 'none'
112 }); 108 });
113 - }, 500);  
114 - }  
115 - })  
116 - .catch(e => {  
117 - uni.$u.toast(e.data?.message);  
118 - }); 109 + let pages = getCurrentPages(); //获取所有页面栈实例列表
  110 + let nowPage = pages[pages.length - 1]; //当前页页面实例
  111 + let prevPage = pages[pages.length - 2]; //上一页页面实例
  112 + prevPage.$vm.detailStatus = true;
  113 + setTimeout(() => {
  114 + uni.navigateBack({
  115 + delta: 1
  116 + });
  117 + }, 500);
  118 + }
  119 + })
  120 + .catch(e => {
  121 + uni.$u.toast(e.data?.message);
  122 + });
  123 + },
  124 + formatDetailText(e) {
  125 + //去除字符串双引号
  126 + const jsonStr = JSON.stringify(e);
  127 + const str = jsonStr.substring(1, jsonStr.length - 1);
  128 + const newStr = str.replace(/\"/g, '');
  129 + return newStr;
119 } 130 }
120 } 131 }
121 }; 132 };
1 <template> 1 <template>
2 <view class="f-navbar"> 2 <view class="f-navbar">
3 - <view :class="[navbarType==1?'f-relative':'f-fixed']"  
4 - :style="[navbarType==1?{height:systemInfo.navBarH+'px'}:{paddingTop:systemInfo.statusBarHeight+'px'}]"> 3 + <view
  4 + :class="[navbarType == 1 ? 'f-relative' : 'f-fixed']"
  5 + :style="[navbarType == 1 ? { height: systemInfo.navBarH + 'px' } : { paddingTop: systemInfo.statusBarHeight + 'px' }]"
  6 + >
5 <!-- 背景色 --> 7 <!-- 背景色 -->
6 - <view class="bgColor"  
7 - :style="{height:systemInfo.navBarH+'px',background: bgColor,backgroundImage: gradient, opacity: navbarType == 5 ? transparentValue :''}">  
8 - <image :src="image" :mode="imageMode" style="width: 750rpx;" :style="{height:systemInfo.navBarH+'px'}"  
9 - v-if="image"></image> 8 + <view class="bgColor" :style="{ height: systemInfo.navBarH + 'px', background: bgColor, backgroundImage: gradient, opacity: navbarType == 5 ? transparentValue : '' }">
  9 + <image :src="image" :mode="imageMode" style="width: 750rpx;" :style="{ height: systemInfo.navBarH + 'px' }" v-if="image"></image>
10 </view> 10 </view>
11 - <view class="u-flex content"  
12 - :style="{height:systemInfo.titleBarHeight+'px',top:systemInfo.statusBarHeight+'px'}">  
13 - <block v-if="navbarType!=4 && isShowLeft">  
14 - <view class="u-flex left" hover-class="left--hover" hover-start-time="150" v-if="navbarType==3">  
15 - <view class="u-flex u-home-arrow-left"  
16 - :style="{borderColor:isWhite?'rgba(255,255,255,.5)':'#dadbde'}">  
17 - <view @click="onBack">  
18 - <u-icon name="arrow-left" size="19" :color="leftColor"></u-icon>  
19 - </view>  
20 - <u-line direction="column" :hairline="false" length="16" margin="0 8px"  
21 - :color="isWhite?'rgba(255,255,255,.3)':'#dadbde'"></u-line>  
22 - <view @click="onHome">  
23 - <u-icon name="home" size="20" :color="leftColor"></u-icon>  
24 - </view> 11 + <view class="u-flex content" :style="{ height: systemInfo.titleBarHeight + 'px', top: systemInfo.statusBarHeight + 'px' }">
  12 + <block v-if="navbarType != 4 && isShowLeft">
  13 + <view class="u-flex left" hover-class="left--hover" hover-start-time="150" v-if="navbarType == 3">
  14 + <view class="u-flex u-home-arrow-left" :style="{ borderColor: isWhite ? 'rgba(255,255,255,.5)' : '#dadbde' }">
  15 + <view @click="onBack"><u-icon name="arrow-left" size="19" :color="leftColor"></u-icon></view>
  16 + <u-line direction="column" :hairline="false" length="16" margin="0 8px" :color="isWhite ? 'rgba(255,255,255,.3)' : '#dadbde'"></u-line>
  17 + <view @click="onHome"><u-icon name="home" size="20" :color="leftColor"></u-icon></view>
25 </view> 18 </view>
26 </view> 19 </view>
27 - <view class="u-flex left" hover-class="left--hover" hover-start-time="150" @click="leftClick"  
28 - v-else> 20 + <view class="u-flex left" hover-class="left--hover" hover-start-time="150" @click="leftClick" v-else>
29 <slot name="left"> 21 <slot name="left">
30 <!-- 左边箭头背景渐变 --> 22 <!-- 左边箭头背景渐变 -->
31 - <view class="iconBg u-flex"  
32 - :style="{background: 'rgba(0,0,0,'+(navbarType == 5 ?(1-transparentValue)>0.4?.4:(1-transparentValue):0)+')'}"> 23 + <view
  24 + class="iconBg u-flex"
  25 + :style="{ background: 'rgba(0,0,0,' + (navbarType == 5 ? (1 - transparentValue > 0.4 ? 0.4 : 1 - transparentValue) : 0) + ')' }"
  26 + >
33 <u-icon :name="iconLeft" size="16" :color="leftColor"></u-icon> 27 <u-icon :name="iconLeft" size="16" :color="leftColor"></u-icon>
34 </view> 28 </view>
35 - <text v-if="leftText" class="left__text" :style="{color: leftColor}">{{ leftText }}</text> 29 + <text v-if="leftText" class="left__text" :style="{ color: leftColor }">{{ leftText }}</text>
36 </slot> 30 </slot>
37 </view> 31 </view>
38 </block> 32 </block>
39 - <view class="center" :style="{width:titleWidth+'rpx'}"> 33 + <view class="center" :style="{ width: titleWidth + 'rpx' }">
40 <slot name="default"> 34 <slot name="default">
41 - <view class="title u-line-1"  
42 - :style="[isShowTransparentTitle?{}:{opacity: navbarType == 5 ? transparentValue :''},{color:fontColor,width:titleWidth+'rpx',fontSize:fontSize+'rpx'}]">  
43 - {{title}}</view> 35 + <view
  36 + class="title u-line-1"
  37 + :style="[
  38 + isShowTransparentTitle ? {} : { opacity: navbarType == 5 ? transparentValue : '' },
  39 + { color: fontColor, width: titleWidth + 'rpx', fontSize: fontSize + 'rpx' }
  40 + ]"
  41 + >
  42 + {{ title }}
  43 + </view>
44 </slot> 44 </slot>
45 </view> 45 </view>
46 - <view class="u-flex right" @click="rightClick">  
47 - <slot name="right"></slot>  
48 - </view> 46 + <view class="u-flex right" @click="rightClick"><slot name="right"></slot></view>
49 </view> 47 </view>
50 </view> 48 </view>
51 <!-- 防止塌陷高度 --> 49 <!-- 防止塌陷高度 -->
52 - <view v-if="isFillHeight && navbarType!=5 && navbarType!=1" :style="{height:systemInfo.navBarH+'px'}"></view> 50 + <view v-if="isFillHeight && navbarType != 5 && navbarType != 1" :style="{ height: systemInfo.navBarH + 'px' }"></view>
53 </view> 51 </view>
54 </template> 52 </template>
55 53
56 <script> 54 <script>
57 - // 主页页面的页面路径  
58 - // 关联功能:打开的页面只有一个的时候右上角自动显示返回首页按钮,下面这个数组是排除显示返回首页的页面。  
59 - // 主页使用场景:小程序分享出去的页面,用户点击开是分享页面,很多情况下是没有返回首页按钮的  
60 - const mainPagePath = ['pages/index/index', 'pages/goods/goods', 'pages/device/device', 'pages/personal/personal','pages/alarm/alarm', ];  
61 - //返回首页的地址  
62 - const homePath = '/pages/index/index';  
63 - //白色表达值  
64 - const whiteList = ['#FFF', '#fff', '#FFFFFF', '#ffffff', 'white', 'rgb(255,255,255)', 'rgba(255,255,255,1)'];  
65 - // import base from '@/config/baseUrl.js';  
66 - export default {  
67 - name: 'f-navbar',  
68 - props: {  
69 - title: {  
70 - type: String,  
71 - },  
72 - // navbarType等于5透明背景时title是否显示  
73 - isShowTransparentTitle: {  
74 - type: Boolean,  
75 - default: function() {  
76 - return true;  
77 - }  
78 - },  
79 - // 左边文字  
80 - leftText: {  
81 - type: String  
82 - },  
83 - // 背景颜色  
84 - bgColor: {  
85 - type: String,  
86 - default: '#fff'  
87 - },  
88 - // 背景图片  
89 - image: {  
90 - type: String  
91 - },  
92 - // 背景图片mode  
93 - imageMode: {  
94 - type: String,  
95 - default: 'aspectFill'  
96 - },  
97 - // 导航状态 0、默认固定在顶部 1、不固定在顶部 2、自定义点击事件 3、同时显示箭头和去首页按钮 4、不显示左侧内容 5、上拉渐变显示背景色  
98 - navbarType: {  
99 - type: [String, Number],  
100 - default: 0  
101 - },  
102 - // 是否显示左侧内容  
103 - isShowLeft: {  
104 - type: Boolean,  
105 - default: function() {  
106 - return true;  
107 - }  
108 - },  
109 - // 左边按钮icon  
110 - leftIcon: {  
111 - type: String,  
112 - default: 'arrow-left'  
113 - },  
114 - // 左边icon颜色  
115 - leftIconColor: {  
116 - type: String,  
117 - default: '#303133'  
118 - },  
119 - // 屏幕滑动距离顶部距离(透明固定导航比传)  
120 - scrollTop: {  
121 - type: Number,  
122 - default: 0  
123 - },  
124 - //导航字体颜色,字体颜色为白色的时候会把手机状态栏设置为白色,否则为黑色  
125 - fontColor: {  
126 - type: String,  
127 - default: '#303133'  
128 - },  
129 - titleWidth: {  
130 - type: [String, Number],  
131 - default: 400  
132 - },  
133 - fontSize: {  
134 - type: [String, Number],  
135 - default: 30  
136 - },  
137 - gradient: {  
138 - type: String  
139 - },  
140 - // 是否设置防止塌陷高度  
141 - isFillHeight: {  
142 - type: Boolean,  
143 - default: function() {  
144 - return true;  
145 - }  
146 - }, 55 +// 主页页面的页面路径
  56 +// 关联功能:打开的页面只有一个的时候右上角自动显示返回首页按钮,下面这个数组是排除显示返回首页的页面。
  57 +// 主页使用场景:小程序分享出去的页面,用户点击开是分享页面,很多情况下是没有返回首页按钮的
  58 +const mainPagePath = ['pages/index/index', 'pages/device/device', 'pages/alarm/alarm', 'pages/personal/personal'];
  59 +//返回首页的地址
  60 +const homePath = '/pages/index/index';
  61 +//白色表达值
  62 +const whiteList = ['#FFF', '#fff', '#FFFFFF', '#ffffff', 'white', 'rgb(255,255,255)', 'rgba(255,255,255,1)'];
  63 +// import base from '@/config/baseUrl.js';
  64 +export default {
  65 + name: 'f-navbar',
  66 + props: {
  67 + title: {
  68 + type: String
147 }, 69 },
148 - data() {  
149 - return {  
150 - // systemInfo:base.systemInfo,  
151 - systemInfo: {  
152 - statusBarHeight: uni.getSystemInfoSync().statusBarHeight,  
153 - // #ifdef MP-ALIPAY  
154 - navBarH: uni.getSystemInfoSync().statusBarHeight + uni.getSystemInfoSync()  
155 - .titleBarHeight, //菜单栏总高度--单位px  
156 - titleBarHeight: uni.getSystemInfoSync().titleBarHeight, //标题栏高度--单位px  
157 - // #endif  
158 - // #ifndef MP-ALIPAY  
159 - navBarH: uni.getSystemInfoSync().statusBarHeight + 44, //菜单栏总高度--单位px  
160 - titleBarHeight: 44, //标题栏高度--单位px  
161 - // #endif  
162 - },  
163 - //当前页面是否是第一个页面  
164 - firstPage: false,  
165 - //透明度值  
166 - transparentValue: 0,  
167 - iconLeft: 'arrow-left', //左边icon  
168 - // 上次显示的导航栏颜色  
169 - lastFrontColor: '',  
170 - //字体色  
171 - navFontColor: '#303133',  
172 - isWhite: false, //是否白色 70 + // navbarType等于5透明背景时title是否显示
  71 + isShowTransparentTitle: {
  72 + type: Boolean,
  73 + default: function() {
  74 + return true;
173 } 75 }
174 }, 76 },
175 - watch: {  
176 - leftIcon: {  
177 - immediate: true,  
178 - handler(val) {  
179 - this.iconLeft = val  
180 - }  
181 - },  
182 - fontColor: {  
183 - immediate: true,  
184 - handler(val) {  
185 - this.navFontColor = val;  
186 - this.settingColor();  
187 - }  
188 - },  
189 - navbarType: {  
190 - immediate: true,  
191 - handler(val) {  
192 - console.log(val, 'navbarType')  
193 - if (val == 5) {  
194 - if (this.scrollTop > 180) {  
195 - this.transparentValue = 1;  
196 - } else {  
197 - this.transparentValue = this.scrollTop / 180;  
198 - }  
199 - }  
200 - } 77 + // 左边文字
  78 + leftText: {
  79 + type: String
  80 + },
  81 + // 背景颜色
  82 + bgColor: {
  83 + type: String,
  84 + default: '#fff'
  85 + },
  86 + // 背景图片
  87 + image: {
  88 + type: String
  89 + },
  90 + // 背景图片mode
  91 + imageMode: {
  92 + type: String,
  93 + default: 'aspectFill'
  94 + },
  95 + // 导航状态 0、默认固定在顶部 1、不固定在顶部 2、自定义点击事件 3、同时显示箭头和去首页按钮 4、不显示左侧内容 5、上拉渐变显示背景色
  96 + navbarType: {
  97 + type: [String, Number],
  98 + default: 0
  99 + },
  100 + // 是否显示左侧内容
  101 + isShowLeft: {
  102 + type: Boolean,
  103 + default: function() {
  104 + return true;
  105 + }
  106 + },
  107 + // 左边按钮icon
  108 + leftIcon: {
  109 + type: String,
  110 + default: 'arrow-left'
  111 + },
  112 + // 左边icon颜色
  113 + leftIconColor: {
  114 + type: String,
  115 + default: '#303133'
  116 + },
  117 + // 屏幕滑动距离顶部距离(透明固定导航比传)
  118 + scrollTop: {
  119 + type: Number,
  120 + default: 0
  121 + },
  122 + //导航字体颜色,字体颜色为白色的时候会把手机状态栏设置为白色,否则为黑色
  123 + fontColor: {
  124 + type: String,
  125 + default: '#303133'
  126 + },
  127 + titleWidth: {
  128 + type: [String, Number],
  129 + default: 400
  130 + },
  131 + fontSize: {
  132 + type: [String, Number],
  133 + default: 30
  134 + },
  135 + gradient: {
  136 + type: String
  137 + },
  138 + // 是否设置防止塌陷高度
  139 + isFillHeight: {
  140 + type: Boolean,
  141 + default: function() {
  142 + return true;
  143 + }
  144 + }
  145 + },
  146 + data() {
  147 + return {
  148 + // systemInfo:base.systemInfo,
  149 + systemInfo: {
  150 + statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
  151 + // #ifdef MP-ALIPAY
  152 + navBarH: uni.getSystemInfoSync().statusBarHeight + uni.getSystemInfoSync().titleBarHeight, //菜单栏总高度--单位px
  153 + titleBarHeight: uni.getSystemInfoSync().titleBarHeight, //标题栏高度--单位px
  154 + // #endif
  155 + // #ifndef MP-ALIPAY
  156 + navBarH: uni.getSystemInfoSync().statusBarHeight + 35, //菜单栏总高度--单位px
  157 + titleBarHeight: 35 //标题栏高度--单位px
  158 + // #endif
201 }, 159 },
202 - scrollTop(val) {  
203 - this.pageScroll({  
204 - scrollTop: val  
205 - }); 160 + //当前页面是否是第一个页面
  161 + firstPage: false,
  162 + //透明度值
  163 + transparentValue: 0,
  164 + iconLeft: 'arrow-left', //左边icon
  165 + // 上次显示的导航栏颜色
  166 + lastFrontColor: '',
  167 + //字体色
  168 + navFontColor: '#303133',
  169 + isWhite: false //是否白色
  170 + };
  171 + },
  172 + watch: {
  173 + leftIcon: {
  174 + immediate: true,
  175 + handler(val) {
  176 + this.iconLeft = val;
206 } 177 }
207 }, 178 },
208 - computed: {  
209 - leftColor() {  
210 - let color = '#303133'  
211 - if (this.leftIconColor == '#303133') { //如果等于默认值  
212 - // 背景不是白色或者背景是渐变色  
213 - if (!whiteList.includes(this.bgColor) || this.gradient) {  
214 - color = '#fff' 179 + fontColor: {
  180 + immediate: true,
  181 + handler(val) {
  182 + this.navFontColor = val;
  183 + this.settingColor();
  184 + }
  185 + },
  186 + navbarType: {
  187 + immediate: true,
  188 + handler(val) {
  189 + console.log(val, 'navbarType');
  190 + if (val == 5) {
  191 + if (this.scrollTop > 180) {
  192 + this.transparentValue = 1;
  193 + } else {
  194 + this.transparentValue = this.scrollTop / 180;
215 } 195 }
216 - } else {  
217 - color = this.leftIconColor  
218 } 196 }
219 - return color  
220 } 197 }
221 }, 198 },
222 - created() { 199 + scrollTop(val) {
223 this.pageScroll({ 200 this.pageScroll({
224 - scrollTop: this.scrollTop 201 + scrollTop: val
225 }); 202 });
226 - //获取所有页面  
227 - let currentPages = getCurrentPages();  
228 - let pageLen = currentPages.length;  
229 - //判断是否是第一个页面,如果是有设置back为true的页面,将不显示返回箭头,而显示返回首页按钮  
230 - if (pageLen == 1 && !mainPagePath.includes(currentPages[0].route)) {  
231 - this.firstPage = true;  
232 - this.iconLeft = 'home'  
233 - console.log(this.firstPage, 'this.firstPage')  
234 - }  
235 - },  
236 - methods: {  
237 - onBack() {  
238 - if (this.firstPage) {  
239 - uni.reLaunch({  
240 - url: homePath  
241 - });  
242 - } else {  
243 - uni.navigateBack(); 203 + }
  204 + },
  205 + computed: {
  206 + leftColor() {
  207 + let color = '#303133';
  208 + if (this.leftIconColor == '#303133') {
  209 + //如果等于默认值
  210 + // 背景不是白色或者背景是渐变色
  211 + if (!whiteList.includes(this.bgColor) || this.gradient) {
  212 + color = '#fff';
244 } 213 }
245 - },  
246 - onHome() {  
247 - uni.switchTab({ 214 + } else {
  215 + color = this.leftIconColor;
  216 + }
  217 + return color;
  218 + }
  219 + },
  220 + created() {
  221 + this.pageScroll({
  222 + scrollTop: this.scrollTop
  223 + });
  224 + //获取所有页面
  225 + let currentPages = getCurrentPages();
  226 + let pageLen = currentPages.length;
  227 + //判断是否是第一个页面,如果是有设置back为true的页面,将不显示返回箭头,而显示返回首页按钮
  228 + if (pageLen == 1 && !mainPagePath.includes(currentPages[0].route)) {
  229 + this.firstPage = true;
  230 + this.iconLeft = 'home';
  231 + console.log(this.firstPage, 'this.firstPage');
  232 + }
  233 + },
  234 + methods: {
  235 + onBack() {
  236 + if (this.firstPage) {
  237 + uni.reLaunch({
248 url: homePath 238 url: homePath
249 }); 239 });
250 - },  
251 - leftClick() {  
252 - if (this.navbarType == 2) {  
253 - this.$emit('leftClick');  
254 - } else {  
255 - this.onBack()  
256 - }  
257 - },  
258 - rightClick() {  
259 - this.$emit('rightClick');  
260 - },  
261 - pageScroll(e) {  
262 - if (this.navbarType == 5) {  
263 - if (e.scrollTop && e.scrollTop > 0) {  
264 - if (e.scrollTop > 180) {  
265 - this.transparentValue = 1;  
266 - } else {  
267 - this.transparentValue = e.scrollTop / 180;  
268 - } 240 + } else {
  241 + uni.navigateBack();
  242 + }
  243 + },
  244 + onHome() {
  245 + uni.switchTab({
  246 + url: homePath
  247 + });
  248 + },
  249 + leftClick() {
  250 + if (this.navbarType == 2) {
  251 + this.$emit('leftClick');
  252 + } else {
  253 + this.onBack();
  254 + }
  255 + },
  256 + rightClick() {
  257 + this.$emit('rightClick');
  258 + },
  259 + pageScroll(e) {
  260 + if (this.navbarType == 5) {
  261 + if (e.scrollTop && e.scrollTop > 0) {
  262 + if (e.scrollTop > 180) {
  263 + this.transparentValue = 1;
269 } else { 264 } else {
270 - this.transparentValue = 0; 265 + this.transparentValue = e.scrollTop / 180;
271 } 266 }
272 - // this.settingColor();  
273 - }  
274 - },  
275 - //设置手机状态栏颜色  
276 - settingColor() {  
277 - let navColor = this.navFontColor;  
278 - console.log(navColor, 'settingColor')  
279 - let frontColor = '#000000';  
280 - if (whiteList.includes(navColor)) {  
281 - frontColor = '#ffffff';  
282 - this.isWhite = true  
283 - }  
284 - if (this.lastFrontColor == frontColor) {  
285 - return; 267 + } else {
  268 + this.transparentValue = 0;
286 } 269 }
287 - setTimeout(() => {  
288 - this.lastFrontColor = frontColor;  
289 - // 改变手机状态栏颜色  
290 - // #ifndef MP-ALIPAY  
291 - uni.setNavigationBarColor({  
292 - frontColor: frontColor,  
293 - backgroundColor: '#FFFFFF'  
294 - });  
295 - // #endif  
296 - // #ifdef MP-ALIPAY  
297 - uni.setNavigationBarColor({  
298 - backgroundColor: frontColor == '#000000' ? '#ffffff' : '#000000'  
299 - });  
300 - // #endif  
301 - }, 150);  
302 - 270 + // this.settingColor();
  271 + }
  272 + },
  273 + //设置手机状态栏颜色
  274 + settingColor() {
  275 + let navColor = this.navFontColor;
  276 + console.log(navColor, 'settingColor');
  277 + let frontColor = '#000000';
  278 + if (whiteList.includes(navColor)) {
  279 + frontColor = '#ffffff';
  280 + this.isWhite = true;
  281 + }
  282 + if (this.lastFrontColor == frontColor) {
  283 + return;
303 } 284 }
  285 + setTimeout(() => {
  286 + this.lastFrontColor = frontColor;
  287 + // 改变手机状态栏颜色
  288 + // #ifndef MP-ALIPAY
  289 + uni.setNavigationBarColor({
  290 + frontColor: frontColor,
  291 + backgroundColor: '#FFFFFF'
  292 + });
  293 + // #endif
  294 + // #ifdef MP-ALIPAY
  295 + uni.setNavigationBarColor({
  296 + backgroundColor: frontColor == '#000000' ? '#ffffff' : '#000000'
  297 + });
  298 + // #endif
  299 + }, 150);
304 } 300 }
305 } 301 }
  302 +};
306 </script> 303 </script>
307 304
308 <style scoped lang="scss"> 305 <style scoped lang="scss">
309 - .u-flex {  
310 - /* #ifndef APP-NVUE */  
311 - display: flex;  
312 - /* #endif */  
313 - flex-direction: row;  
314 - align-items: center;  
315 - }  
316 -  
317 - .f-navbar {  
318 - width: 750rpx; 306 +.u-flex {
  307 + /* #ifndef APP-NVUE */
  308 + display: flex;
  309 + /* #endif */
  310 + flex-direction: row;
  311 + align-items: center;
  312 +}
319 313
320 - .f-fixed {  
321 - position: fixed;  
322 - top: 0;  
323 - left: 0;  
324 - right: 0;  
325 - z-index: 1000;  
326 - }  
327 -  
328 - .f-relative {  
329 - position: relative;  
330 - } 314 +.f-navbar {
  315 + width: 750rpx;
331 316
332 - .bgColor {  
333 - position: absolute;  
334 - top: 0;  
335 - left: 0;  
336 - right: 0;  
337 - } 317 + .f-fixed {
  318 + position: fixed;
  319 + top: 0;
  320 + left: 0;
  321 + right: 0;
  322 + z-index: 1000;
  323 + }
338 324
339 - .content {  
340 - position: absolute;  
341 - top: 0;  
342 - left: 0;  
343 - right: 0;  
344 - } 325 + .f-relative {
  326 + position: relative;
  327 + }
345 328
346 - .title {  
347 - text-align: center;  
348 - color: #303133;  
349 - } 329 + .bgColor {
  330 + position: absolute;
  331 + top: 0;
  332 + left: 0;
  333 + right: 0;
  334 + }
350 335
351 - .center {  
352 - margin: 0 auto;  
353 - } 336 + .content {
  337 + position: absolute;
  338 + top: 0;
  339 + left: 0;
  340 + right: 0;
  341 + }
354 342
355 - .left,  
356 - .right {  
357 - padding: 0 24rpx;  
358 - position: absolute;  
359 - top: 0;  
360 - bottom: 0;  
361 - } 343 + .title {
  344 + text-align: center;
  345 + color: #303133;
  346 + }
362 347
363 - .left {  
364 - left: 0; 348 + .center {
  349 + margin: 0 auto;
  350 + }
365 351
366 - &--hover {  
367 - opacity: 0.7;  
368 - } 352 + .left,
  353 + .right {
  354 + padding: 0 24rpx;
  355 + position: absolute;
  356 + top: 0;
  357 + bottom: 0;
  358 + }
369 359
370 - &__text {  
371 - font-size: 30rpx;  
372 - margin-left: 3px;  
373 - } 360 + .left {
  361 + left: 0;
374 362
375 - .iconBg {  
376 - width: 50rpx;  
377 - height: 50rpx;  
378 - background: rgba(0, 0, 0, .4);  
379 - border-radius: 25rpx;  
380 - justify-content: center;  
381 - } 363 + &--hover {
  364 + opacity: 0.7;
382 } 365 }
383 366
384 - .right {  
385 - right: 0; 367 + &__text {
  368 + font-size: 30rpx;
  369 + margin-left: 3px;
386 } 370 }
387 371
388 - .u-home-arrow-left {  
389 - justify-content: space-between;  
390 - border-radius: 100px;  
391 - padding: 3px 7px;  
392 - opacity: .8;  
393 - border: .5px solid #dadbde; 372 + .iconBg {
  373 + width: 50rpx;
  374 + height: 50rpx;
  375 + background: rgba(0, 0, 0, 0.4);
  376 + border-radius: 25rpx;
  377 + justify-content: center;
394 } 378 }
395 } 379 }
  380 +
  381 + .right {
  382 + right: 0;
  383 + }
  384 +
  385 + .u-home-arrow-left {
  386 + justify-content: space-between;
  387 + border-radius: 100px;
  388 + padding: 3px 7px;
  389 + opacity: 0.8;
  390 + border: 0.5px solid #dadbde;
  391 + }
  392 +}
396 </style> 393 </style>
@@ -111,7 +111,9 @@ export default { @@ -111,7 +111,9 @@ export default {
111 ] 111 ]
112 }; 112 };
113 }, 113 },
114 - onLoad() {}, 114 + onLoad() {
  115 + this.loadData();
  116 + },
115 created() { 117 created() {
116 //获取页面路径 118 //获取页面路径
117 let currentPages = getCurrentPages(); 119 let currentPages = getCurrentPages();
@@ -130,23 +132,17 @@ export default { @@ -130,23 +132,17 @@ export default {
130 page: 1, 132 page: 1,
131 pageSize: 10 133 pageSize: 10
132 }; 134 };
133 - uni.$u.http  
134 - .get('/yt/alarm', { params: httpData })  
135 - .then(res => {  
136 - this.list[2].badge = res.total;  
137 - })  
138 - .catch(e => {  
139 - uni.$u.toast(e.data?.message);  
140 - }); 135 + uni.$u.http.get('/yt/alarm', { params: httpData }).then(res => {
  136 + this.list[2].badge = res.total;
  137 + });
141 }, 138 },
142 onTabbar(index) { 139 onTabbar(index) {
143 - if (index !== 5) {  
144 - // this.loadData();  
145 - }  
146 - if (this.path !== this.list[index].url) {  
147 - uni.switchTab({  
148 - url: '/' + this.list[index].url  
149 - }); 140 + if (this.list[index].url) {
  141 + if (this.path !== this.list[index].url) {
  142 + uni.switchTab({
  143 + url: '/' + this.list[index].url
  144 + });
  145 + }
150 } 146 }
151 } 147 }
152 } 148 }
1 import base from "@/config/baseUrl"; 1 import base from "@/config/baseUrl";
2 import store from "@/store"; 2 import store from "@/store";
3 -import { judgeLogin } from "@/config/login"; 3 +import {
  4 + judgeLogin
  5 +} from "@/config/login";
4 6
5 // 初始化请求配置 7 // 初始化请求配置
6 uni.$u.http.setConfig((config) => { 8 uni.$u.http.setConfig((config) => {
7 - const token =  
8 - store.state.userInfo.isToken ||  
9 - uni.getStorageSync("userInfo").isToken ||  
10 - undefined;  
11 - // #ifdef H5  
12 - window.sessionStorage.getItem("userInfo").isToken;  
13 - // #endif  
14 - /* config 为默认全局配置*/  
15 - config.baseURL = base.baseUrl; /* 根域名 */  
16 - config.header = {  
17 - "Content-Type": "application/json",  
18 - Authorization: "Bearer " + token,  
19 - };  
20 - config.custom = {  
21 - load: true, //是否显示加载动画  
22 - isFactory: true, //true:返回的数据成功只返回data false:返回response  
23 - catch: true, //默认数据返回不成功进入catch返回  
24 - auth: true, //token  
25 - };  
26 - return config; 9 + const token =
  10 + store.state.userInfo.isToken ||
  11 + uni.getStorageSync("userInfo").isToken ||
  12 + undefined;
  13 + // #ifdef H5
  14 + window.sessionStorage.getItem("userInfo").isToken;
  15 + // #endif
  16 + /* config 为默认全局配置*/
  17 + config.baseURL = base.baseUrl; /* 根域名 */
  18 + config.header = {
  19 + "Content-Type": "application/json",
  20 + Authorization: "Bearer " + token,
  21 + };
  22 + config.custom = {
  23 + load: true, //是否显示加载动画
  24 + isFactory: true, //true:返回的数据成功只返回data false:返回response
  25 + catch: true, //默认数据返回不成功进入catch返回
  26 + auth: true, //token
  27 + };
  28 + return config;
27 }); 29 });
28 30
29 // 请求拦截 31 // 请求拦截
30 uni.$u.http.interceptors.request.use( 32 uni.$u.http.interceptors.request.use(
31 - (config) => {  
32 - // 可使用async await 做异步操作  
33 - // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}  
34 - config.data = config.data || {};  
35 - // 根据custom参数中配置的是否需要token,添加对应的请求头  
36 - if (config?.custom?.auth) {  
37 - config.header.Authorization =  
38 - "Bearer " + store.state.userInfo.isToken ||  
39 - uni.getStorageSync("userInfo").isToken ||  
40 - undefined;  
41 - }  
42 - // console.log("请求开始", config);  
43 - if (config?.custom?.load) {  
44 - //打开加载动画  
45 - store.commit("setLoadingShow", true);  
46 - } 33 + (config) => {
  34 + // 可使用async await 做异步操作
  35 + // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
  36 + config.data = config.data || {};
  37 + // 根据custom参数中配置的是否需要token,添加对应的请求头
  38 + if (config?.custom?.auth) {
  39 + config.header.Authorization =
  40 + "Bearer " + store.state.userInfo.isToken ||
  41 + uni.getStorageSync("userInfo").isToken ||
  42 + undefined;
  43 + }
  44 + // console.log("请求开始", config);
  45 + if (config?.custom?.load) {
  46 + //打开加载动画
  47 + store.commit("setLoadingShow", true);
  48 + }
47 49
48 - return config;  
49 - },  
50 - (config) => {  
51 - // 可使用async await 做异步操作  
52 - return Promise.reject(config);  
53 - } 50 + return config;
  51 + },
  52 + (config) => {
  53 + // 可使用async await 做异步操作
  54 + return Promise.reject(config);
  55 + }
54 ); 56 );
55 57
56 // 响应拦截 58 // 响应拦截
57 uni.$u.http.interceptors.response.use( 59 uni.$u.http.interceptors.response.use(
58 - (response) => {  
59 - /* 对响应成功做点什么 可使用async await 做异步操作*/  
60 - // 关闭加载动画  
61 - store.commit("setLoadingShow", false);  
62 - const data = response.data;  
63 - // 自定义参数  
64 - const custom = response.config?.custom;  
65 - // code: 200、请求成功 其他,没有更多参数 401、被迫下线重新登录、  
66 - if (response.statusCode == 200) {  
67 - return Promise.resolve(data);  
68 - // if (!custom.isFactory) {  
69 - // return Promise.reject(response.data)  
70 - // } else {  
71 - // return data.data === undefined ? {} : Promise.reject(response.data)  
72 - // }  
73 - } else if (response.statusCode == 401) {  
74 - //被迫下线重新登录  
75 - // 清空登录信息  
76 - store.commit("emptyUserInfo");  
77 - // 20秒节流,弹窗登录  
78 - uni.$u.throttle(judgeLogin(), 20000);  
79 - return new Promise(() => {});  
80 - } else {  
81 - // 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示  
82 - if (custom.toast !== false) {  
83 - uni.$u.toast(data.message || data.msg);  
84 - }  
85 - // 如果需要catch返回,则进行reject  
86 - if (custom?.catch) {  
87 - return Promise.reject(data);  
88 - } else {  
89 - // 否则返回一个pending中的promise,请求不会进入catch中  
90 - return new Promise(() => {});  
91 - }  
92 - }  
93 - },  
94 - (response) => {  
95 - // 关闭加载动画  
96 - store.commit("setLoadingShow", false);  
97 - // 对响应错误做点什么 (statusCode !== 200)  
98 - let errorData = "请检查网络或服务器";  
99 - let message = response.data?.message || response?.errMsg;  
100 - if (message == "request:fail url not in domain list") {  
101 - errorData = "检查请求域名是否添加了域名白名单";  
102 - } else if (message == "request:fail timeout") {  
103 - errorData = "请求超时:请检查网络";  
104 - } else if (message == "Token has expired") {  
105 - errorData = "Token失效,请重新登录";  
106 - uni.reLaunch({  
107 - url: "/publicLoginSubPage/public/login",  
108 - });  
109 - store.commit("emptyUserInfo");  
110 - } else if (message == "Invalid username or password") {  
111 - errorData = "用户名或者密码无效";  
112 - uni.reLaunch({  
113 - url: "/publicLoginSubPage/public/login",  
114 - });  
115 - store.commit("emptyUserInfo");  
116 - } else {  
117 - errorData = message || "请检查网络或服务器";  
118 - }  
119 - uni.$u.toast(errorData);  
120 - return Promise.reject(response);  
121 - } 60 + (response) => {
  61 + /* 对响应成功做点什么 可使用async await 做异步操作*/
  62 + // 关闭加载动画
  63 + store.commit("setLoadingShow", false);
  64 + const data = response.data;
  65 + // 自定义参数
  66 + const custom = response.config?.custom;
  67 + // code: 200、请求成功 其他,没有更多参数 401、被迫下线重新登录、
  68 + if (response.statusCode == 200) {
  69 + return Promise.resolve(data);
  70 + // if (!custom.isFactory) {
  71 + // return Promise.reject(response.data)
  72 + // } else {
  73 + // return data.data === undefined ? {} : Promise.reject(response.data)
  74 + // }
  75 + } else if (response.statusCode == 401) {
  76 + //被迫下线重新登录
  77 + // 清空登录信息
  78 + store.commit("emptyUserInfo");
  79 + // 20秒节流,弹窗登录
  80 + uni.$u.throttle(judgeLogin(), 20000);
  81 + return new Promise(() => {});
  82 + } else {
  83 + // 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
  84 + if (custom.toast !== false) {
  85 + // uni.$u.toast(data.message || data.msg);
  86 + }
  87 + // 如果需要catch返回,则进行reject
  88 + if (custom?.catch) {
  89 + return Promise.reject(data);
  90 + } else {
  91 + // 否则返回一个pending中的promise,请求不会进入catch中
  92 + return new Promise(() => {});
  93 + }
  94 + }
  95 + },
  96 + (response) => {
  97 + // 关闭加载动画
  98 + store.commit("setLoadingShow", false);
  99 + // 对响应错误做点什么 (statusCode !== 200)
  100 + let errorData = "请检查网络或服务器";
  101 + let message = response.data?.message || response?.errMsg;
  102 + if (message == "request:fail url not in domain list") {
  103 + errorData = "检查请求域名是否添加了域名白名单";
  104 + } else if (message == "request:fail timeout") {
  105 + errorData = "请求超时:请检查网络";
  106 + } else if (message == "Token has expired") {
  107 + errorData = "Token失效,请重新登录";
  108 + uni.reLaunch({
  109 + url: "/publicLoginSubPage/public/login",
  110 + });
  111 + store.commit("emptyUserInfo");
  112 + } else if (message == "Invalid username or password") {
  113 + errorData = "用户名或者密码无效";
  114 + uni.reLaunch({
  115 + url: "/publicLoginSubPage/public/login",
  116 + });
  117 + store.commit("emptyUserInfo");
  118 + } else {
  119 + errorData = message || "请检查网络或服务器";
  120 + }
  121 + uni.$u.toast(errorData);
  122 + return Promise.reject(response);
  123 + }
122 ); 124 );
@@ -14,12 +14,6 @@ @@ -14,12 +14,6 @@
14 "navigationBarTitleText": "设备" 14 "navigationBarTitleText": "设备"
15 } 15 }
16 }, 16 },
17 - // {  
18 - // "path": "pages/device/deviceDetail",  
19 - // "style": {  
20 - // "navigationBarTitleText": "设备详情"  
21 - // }  
22 - // },  
23 { 17 {
24 "path": "pages/device/org/org", 18 "path": "pages/device/org/org",
25 "style": { 19 "style": {
1 <template> 1 <template>
2 <view class="alert-page"> 2 <view class="alert-page">
  3 + <!-- 公共组件-每个页面必须引入 -->
  4 + <public-module></public-module>
3 <f-navbar> 5 <f-navbar>
4 <view class="u-flex" slot="left"> 6 <view class="u-flex" slot="left">
5 <u-icon color="#fff"></u-icon> 7 <u-icon color="#fff"></u-icon>
@@ -13,14 +15,12 @@ @@ -13,14 +15,12 @@
13 <view class="filter-icon"><image class="image" @click="openSearchDialog" src="../../static/shaixuan.png"></image></view> 15 <view class="filter-icon"><image class="image" @click="openSearchDialog" src="../../static/shaixuan.png"></image></view>
14 </view> 16 </view>
15 </f-navbar> 17 </f-navbar>
16 - <!-- 公共组件-每个页面必须引入 -->  
17 - <public-module></public-module>  
18 <view @click="openOrg" class="org-sty"> 18 <view @click="openOrg" class="org-sty">
19 <view class="org-item"> 19 <view class="org-item">
20 - <view class="u-flex item"><text class="text">组织关系</text></view> 20 + <view class="u-flex item"><text class="text-bold">组织关系</text></view>
21 <view class="u-flex item-child"> 21 <view class="u-flex item-child">
22 <image class="image" src="../../static/org.png" mode=""></image> 22 <image class="image" src="../../static/org.png" mode=""></image>
23 - <text class="text">告警数:{{ alertTotal }}</text> 23 + <text class="text-12">告警数:{{ alertTotal }}</text>
24 </view> 24 </view>
25 </view> 25 </view>
26 <view class="org-item "><image class="org-image" src="../../static/right-arrow.png"></image></view> 26 <view class="org-item "><image class="org-image" src="../../static/right-arrow.png"></image></view>
@@ -30,15 +30,15 @@ @@ -30,15 +30,15 @@
30 <view class="device-list"> 30 <view class="device-list">
31 <view @click="openAlertDetail(item)" class="list-item" v-for="(item, index) in list" :key="index"> 31 <view @click="openAlertDetail(item)" class="list-item" v-for="(item, index) in list" :key="index">
32 <view class="u-flex item"> 32 <view class="u-flex item">
33 - <view class="item-text">  
34 - <text class="text-three">{{ item.deviceName == null ? '暂无数据' : item.deviceName }}</text> 33 + <view class="item-text text-clip">
  34 + <text class="text-bold">{{ item.deviceName == null ? '暂无数据' : item.deviceName }}</text>
35 </view> 35 </view>
36 <view class="item-text"> 36 <view class="item-text">
37 - <text class="text">{{ item.details == null ? '暂无数据' : item.details.data }}</text> 37 + <text class="text-muted">{{ item.details == null ? '暂无数据' : formatDetailText(item.details.data) }}</text>
38 </view> 38 </view>
39 <view class="item-text"> 39 <view class="item-text">
40 - <text class="text">  
41 - {{ 40 + <text class="text-muted">
  41 + 告警状态:{{
42 item.status == 'CLEARED_UNACK' 42 item.status == 'CLEARED_UNACK'
43 ? '清除未确认' 43 ? '清除未确认'
44 : item.status == 'ACTIVE_UNACK' 44 : item.status == 'ACTIVE_UNACK'
@@ -50,7 +50,7 @@ @@ -50,7 +50,7 @@
50 </text> 50 </text>
51 </view> 51 </view>
52 <view class="item-text"> 52 <view class="item-text">
53 - <text class="text-nine">{{ item.createdTime }}</text> 53 + <text class="text-secondary">{{ item.createdTime }}</text>
54 </view> 54 </view>
55 </view> 55 </view>
56 <view class="item"> 56 <view class="item">
@@ -58,6 +58,7 @@ @@ -58,6 +58,7 @@
58 <image class="right-image" :src="bindImageUrl(item.severity)"></image> 58 <image class="right-image" :src="bindImageUrl(item.severity)"></image>
59 <view class="right-text"> 59 <view class="right-text">
60 <text 60 <text
  61 + class="text-no-color"
61 :style="[ 62 :style="[
62 item.severity == 'CRITICAL' 63 item.severity == 'CRITICAL'
63 ? { color: '#DE4437' } 64 ? { color: '#DE4437' }
@@ -151,13 +152,7 @@ @@ -151,13 +152,7 @@
151 <view style="margin-top: 120rpx;"> 152 <view style="margin-top: 120rpx;">
152 <view class="u-flex popup-alarm-child"> 153 <view class="u-flex popup-alarm-child">
153 <view> 154 <view>
154 - <u--form  
155 - :label-style="{ 'font-size': '29rpx', 'margin-left': '10rpx' }"  
156 - labelPosition="left"  
157 - :model="timeData"  
158 - :rules="rules"  
159 - ref="form1"  
160 - > 155 + <u--form :label-style="{ 'font-size': '29rpx', 'margin-left': '10rpx' }" labelPosition="left" :model="timeData">
161 <u-form-item style="font-size: 14px" label="选择日期" prop="selectTime" labelWidth="80" borderBottom @click="openTime"> 156 <u-form-item style="font-size: 14px" label="选择日期" prop="selectTime" labelWidth="80" borderBottom @click="openTime">
162 <u--input v-model="timeData.selectTime" placeholder="请选择日期" border="none"></u--input> 157 <u--input v-model="timeData.selectTime" placeholder="请选择日期" border="none"></u--input>
163 </u-form-item> 158 </u-form-item>
@@ -421,6 +416,13 @@ export default { @@ -421,6 +416,13 @@ export default {
421 url: '/alarmSubPage/alarmDetailPage/alarmDetail?data=' + JSON.stringify(obj) 416 url: '/alarmSubPage/alarmDetailPage/alarmDetail?data=' + JSON.stringify(obj)
422 // url: '/' + JSON.stringify(obj) 417 // url: '/' + JSON.stringify(obj)
423 }); 418 });
  419 + },
  420 + formatDetailText(e) {
  421 + //去除字符串双引号
  422 + const jsonStr = JSON.stringify(e);
  423 + const str = jsonStr.substring(1, jsonStr.length - 1);
  424 + const newStr = str.replace(/\"/g, '');
  425 + return newStr;
424 } 426 }
425 } 427 }
426 }; 428 };
@@ -55,8 +55,7 @@ @@ -55,8 +55,7 @@
55 } 55 }
56 56
57 .item-child { 57 .item-child {
58 - margin-top: 5rpx;  
59 - margin-left: 15rpx; 58 + margin-top: 28rpx;
60 flex-direction: row; 59 flex-direction: row;
61 60
62 .image { 61 .image {
1 <template> 1 <template>
2 - <view class="personal">  
3 - <!-- 公共组件-每个页面必须引入 -->  
4 - <public-module></public-module>  
5 - <view class="headBox">  
6 - <!-- #ifdef MP -->  
7 - <!-- 登录 -->  
8 - <view class="u-flex u-p-l-30 u-p-r-20 u-p-t-75 u-p-b-30">  
9 - <block v-if="userInfo.isToken">  
10 - <view @click="openPersonalInfo" class="u-m-r-20"  
11 - ><image  
12 - class="avatar"  
13 - mode="aspectFill"  
14 - :src="userInfo.avatar || '/static/default.png'"  
15 - ></image  
16 - ></view>  
17 - <view @click="openPersonalInfo" class="u-flex-1">  
18 - <view class="nickName u-flex">  
19 - <view class="name u-m-r-10" v-if="userInfo.realName">  
20 - <text style="#FFFFFF;font-size: 18px;">{{  
21 - userInfo.realName  
22 - }}</text>  
23 - </view>  
24 - </view>  
25 - <view style="#FFFFFF;font-size: 14px;" v-if="userInfo.phoneNumber"  
26 - >手机号:{{ userInfo.phoneNumber | phone }}</view  
27 - >  
28 - <view v-else  
29 - ><text style="#FFFFFF;font-size: 14px;">手机号:未绑定</text></view  
30 - >  
31 - </view>  
32 - </block>  
33 - <block v-else>  
34 - <view class="u-m-r-20">  
35 - <view class="avatar u-flex"  
36 - ><u-icon name="account-fill" color="black" size="30"></u-icon  
37 - ></view>  
38 - </view>  
39 - <view class="u-flex-1">  
40 - <view @click="openLoginFunc" class="u-font-lg click-login"  
41 - >请点击登录</view  
42 - >  
43 - <view @click="clickAccountFunc" class="detail"  
44 - ><text class="text">绑定账号</text></view  
45 - >  
46 - </view>  
47 - </block>  
48 - <view  
49 - ><u-icon name="arrow-right" color="black" size="13"></u-icon  
50 - ></view>  
51 - </view>  
52 - <!-- #endif -->  
53 - <!-- #ifndef MP -->  
54 - <!-- 登录 -->  
55 - <view class="u-flex u-p-l-30 u-p-r-20 u-p-t-75 u-p-b-30">  
56 - <block v-if="userInfo.isToken">  
57 - <view @click="openPersonalInfo" class="u-m-r-20"  
58 - ><image  
59 - class="avatar"  
60 - mode="aspectFill"  
61 - :src="userInfo.avatar || '/static/default.png'"  
62 - ></image  
63 - ></view>  
64 - <view @click="openPersonalInfo" class="u-flex-1">  
65 - <view class="nickName u-flex">  
66 - <view class="name u-m-r-10" v-if="userInfo.realName">  
67 - <text style="#FFFFFF;font-size: 18px;">{{  
68 - userInfo.realName  
69 - }}</text>  
70 - </view>  
71 - </view>  
72 - <view style="#FFFFFF;font-size: 14px;" v-if="userInfo.phoneNumber"  
73 - >手机号:{{ userInfo.phoneNumber | phone }}</view  
74 - >  
75 - <view v-else  
76 - ><text style="#FFFFFF;font-size: 14px;">手机号:未绑定</text></view  
77 - >  
78 - </view>  
79 - </block>  
80 - <block v-else>  
81 - <view class="u-m-r-20">  
82 - <view class="avatar u-flex" style="justify-content: center"  
83 - ><u-icon name="account-fill" color="black" size="30"></u-icon  
84 - ></view>  
85 - </view>  
86 - <view class="u-flex-1">  
87 - <view  
88 - @click="openLoginFunc"  
89 - class="u-font-lg"  
90 - style="color: black; font-weight: bold"  
91 - >登录</view  
92 - >  
93 - <view @click="clickAccountFunc" style="color: black" class="detail"  
94 - >绑定账号</view  
95 - >  
96 - </view>  
97 - </block>  
98 - <view  
99 - ><u-icon name="arrow-right" color="black" size="13"></u-icon  
100 - ></view>  
101 - </view>  
102 - <!-- #endif -->  
103 - </view>  
104 - <view class="u-flex my-nav">  
105 - <view class="nav-main">  
106 - <view  
107 - @click="onTokenJump('/sysNotifySubPage/sysNotifyPage/systemNotify')"  
108 - class="u-flex nav-link"  
109 - >  
110 - <view class="nav-image"  
111 - ><image class="image" src="../../static/sys-not.png"></image  
112 - ></view>  
113 - <view class="nav-center"><text class="text">系统通知</text></view>  
114 - <view class="nav-right"  
115 - ><image class="image" src="../../static/arrow-right.png"></image  
116 - ></view>  
117 - </view>  
118 - <view  
119 - @click="onTokenJump('/feedBackSubPage/feedback/feedback')"  
120 - class="u-flex nav-link"  
121 - >  
122 - <view class="nav-image"  
123 - ><image class="image" src="../../static/find-sugg.png"></image  
124 - ></view>  
125 - <view class="nav-center"><text class="text">意见反馈</text></view>  
126 - <view class="nav-right"  
127 - ><image class="image" src="../../static/arrow-right.png"></image  
128 - ></view>  
129 - </view>  
130 - </view>  
131 - <view  
132 - v-if="userInfo.isToken"  
133 - class="u-flex"  
134 - style="justify-content: center; width: 600rpx"  
135 - >  
136 - <u-button  
137 - @click="onLoginoutFunc"  
138 - type="primary"  
139 - shape="circle"  
140 - text="退出账号"  
141 - ></u-button>  
142 - </view>  
143 - </view>  
144 - <!-- 绑定账号 -->  
145 - <view>  
146 - <u-modal :showConfirmButton="false" :show="show" :title="title">  
147 - <view v-if="!bindPhone" class="loginPhone">  
148 - <view class="form-row"  
149 - ><u--input  
150 - shape="circle"  
151 - class="input"  
152 - prefixIcon="account-fill"  
153 - type="text"  
154 - placeholder="登录账号"  
155 - v-model="account"  
156 - ></u--input  
157 - ></view>  
158 - <view class="form-row item-bind">  
159 - <u--input  
160 - class="input"  
161 - shape="circle"  
162 - prefixIcon="lock-fill"  
163 - suffixIconStyle="color: #909399"  
164 - type="password"  
165 - placeholder="登录密码"  
166 - v-model="password"  
167 - @change="passwordChange"  
168 - ></u--input>  
169 - </view>  
170 - <view class="u-flex item-phone">  
171 - <view class="phone-hide">手机验证码登录</view>  
172 - <view class="bind-phone-text" @click="bindPhoneFunc">手机绑定</view>  
173 - </view>  
174 - </view>  
175 - <view v-else class="loginPhone">  
176 - <view class="form-row">  
177 - <u--input  
178 - shape="circle"  
179 - class="input"  
180 - type="text"  
181 - v-model="phone"  
182 - placeholder="请输入手机号码"  
183 - placeholder-style="font-weight:normal;color:#bbbbbb;"  
184 - ></u--input>  
185 - </view>  
186 - <view class="form-row row-top">  
187 - <u--input  
188 - shape="circle"  
189 - class="input"  
190 - type="text"  
191 - v-model="vCode"  
192 - placeholder="请输入验证码"  
193 - placeholder-style="font-weight:normal;color:#bbbbbb;"  
194 - ></u--input>  
195 - <view  
196 - style="color: #377dff"  
197 - class="getvcode"  
198 - :class="{ forhidden: readonly }"  
199 - @click="getVcode"  
200 - >{{ codeText }}</view  
201 - >  
202 - </view>  
203 - <view class="u-flex item-phone">  
204 - <view class="phone-hide">手机验证码登录</view>  
205 - <view class="bind-phone-text" @click="bindAccountFunc"  
206 - >账号绑定</view  
207 - >  
208 - </view>  
209 - </view>  
210 - <view class="bottom-content">  
211 - <view class="u-flex content">  
212 - <view class="cancel"  
213 - ><u-button  
214 - @click="show = false"  
215 - type="info"  
216 - shape="circle"  
217 - text="取消"  
218 - ></u-button  
219 - ></view>  
220 - <view class="confrim"  
221 - ><u-button  
222 - @click="bindConfirm"  
223 - type="primary"  
224 - shape="circle"  
225 - text="确认"  
226 - ></u-button  
227 - ></view>  
228 - </view>  
229 - </view>  
230 - </u-modal>  
231 - </view>  
232 - <!-- 退出登录 -->  
233 - <view>  
234 - <u-popup  
235 - bgColor="transparent"  
236 - :overlay="true"  
237 - :show="showLogout"  
238 - mode="bottom"  
239 - >  
240 - <view class="u-flex logout-main">  
241 - <view class="main"  
242 - ><text style="color: #999999">确定要退出当前账号?</text></view  
243 - >  
244 - <view @click="logoutBtn" class="main"  
245 - ><text style="color: #f95e5a">退出登录</text></view  
246 - >  
247 - <view class="main"  
248 - ><text @click="closeLogout" style="color: #3478f7">取消</text></view  
249 - >  
250 - </view>  
251 - </u-popup>  
252 - </view>  
253 - <!-- 退出登录 -->  
254 - <f-tabbar></f-tabbar>  
255 - </view> 2 + <view class="personal">
  3 + <!-- 公共组件-每个页面必须引入 -->
  4 + <public-module></public-module>
  5 + <view class="headBox">
  6 + <!-- #ifdef MP -->
  7 + <!-- 登录 -->
  8 + <view class="u-flex u-p-l-30 u-p-r-20 u-p-t-75 u-p-b-30">
  9 + <block v-if="userInfo.isToken">
  10 + <view @click="openPersonalInfo" class="u-m-r-20"><image class="avatar" mode="aspectFill" :src="userInfo.avatar || '/static/default.png'"></image></view>
  11 + <view @click="openPersonalInfo" class="u-flex-1">
  12 + <view class="nickName u-flex">
  13 + <view class="name u-m-r-10" v-if="userInfo.realName">
  14 + <text style="#FFFFFF;font-size: 18px;">{{ userInfo.realName }}</text>
  15 + </view>
  16 + </view>
  17 + <view style="#FFFFFF;font-size: 14px;" v-if="userInfo.phoneNumber">手机号:{{ userInfo.phoneNumber | phone }}</view>
  18 + <view v-else><text style="#FFFFFF;font-size: 14px;">手机号:未绑定</text></view>
  19 + </view>
  20 + </block>
  21 + <block v-else>
  22 + <view class="u-m-r-20">
  23 + <view class="avatar u-flex"><u-icon name="account-fill" color="black" size="30"></u-icon></view>
  24 + </view>
  25 + <view class="u-flex-1">
  26 + <view @click="openLoginFunc" class="u-font-lg click-login">请点击登录</view>
  27 + <view @click="clickAccountFunc" class="detail"><text class="text">绑定账号</text></view>
  28 + </view>
  29 + </block>
  30 + <view><u-icon name="arrow-right" color="black" size="13"></u-icon></view>
  31 + </view>
  32 + <!-- #endif -->
  33 + <!-- #ifndef MP -->
  34 + <!-- 登录 -->
  35 + <view class="u-flex u-p-l-30 u-p-r-20 u-p-t-75 u-p-b-30">
  36 + <block v-if="userInfo.isToken">
  37 + <view @click="openPersonalInfo" class="u-m-r-20"><image class="avatar" mode="aspectFill" :src="userInfo.avatar || '/static/default.png'"></image></view>
  38 + <view @click="openPersonalInfo" class="u-flex-1">
  39 + <view class="nickName u-flex">
  40 + <view class="name u-m-r-10" v-if="userInfo.realName">
  41 + <text style="#FFFFFF;font-size: 18px;">{{ userInfo.realName }}</text>
  42 + </view>
  43 + </view>
  44 + <view style="#FFFFFF;font-size: 14px;" v-if="userInfo.phoneNumber">手机号:{{ userInfo.phoneNumber | phone }}</view>
  45 + <view v-else><text style="#FFFFFF;font-size: 14px;">手机号:未绑定</text></view>
  46 + </view>
  47 + </block>
  48 + <block v-else>
  49 + <view class="u-m-r-20">
  50 + <view class="avatar u-flex" style="justify-content: center"><u-icon name="account-fill" color="black" size="30"></u-icon></view>
  51 + </view>
  52 + <view class="u-flex-1">
  53 + <view @click="openLoginFunc" class="u-font-lg" style="color: black; font-weight: bold">登录</view>
  54 + <view @click="clickAccountFunc" style="color: black" class="detail">绑定账号</view>
  55 + </view>
  56 + </block>
  57 + <view><u-icon name="arrow-right" color="black" size="13"></u-icon></view>
  58 + </view>
  59 + <!-- #endif -->
  60 + </view>
  61 + <view class="u-flex my-nav">
  62 + <view class="nav-main">
  63 + <view @click="onTokenJump('/sysNotifySubPage/sysNotifyPage/systemNotify')" class="u-flex nav-link">
  64 + <view class="nav-image"><image class="image" src="../../static/sys-not.png"></image></view>
  65 + <view class="nav-center"><text class="text">系统通知</text></view>
  66 + <view class="nav-right"><image class="image" src="../../static/arrow-right.png"></image></view>
  67 + </view>
  68 + <view @click="onTokenJump('/feedBackSubPage/feedback/feedback')" class="u-flex nav-link">
  69 + <view class="nav-image"><image class="image" src="../../static/find-sugg.png"></image></view>
  70 + <view class="nav-center"><text class="text">意见反馈</text></view>
  71 + <view class="nav-right"><image class="image" src="../../static/arrow-right.png"></image></view>
  72 + </view>
  73 + </view>
  74 + <view v-if="userInfo.isToken || userInfo" class="u-flex" style="justify-content: center; width: 600rpx">
  75 + <u-button @click.top="onLoginoutFunc" type="primary" shape="circle" text="退出账号"></u-button>
  76 + </view>
  77 + </view>
  78 + <!-- 绑定账号 -->
  79 + <view>
  80 + <u-modal :showConfirmButton="false" :show="show" :title="title">
  81 + <view v-if="!bindPhone" class="loginPhone">
  82 + <view class="form-row"><u--input shape="circle" class="input" prefixIcon="account-fill" type="text" placeholder="登录账号" v-model="account"></u--input></view>
  83 + <view class="form-row item-bind">
  84 + <u--input
  85 + class="input"
  86 + shape="circle"
  87 + prefixIcon="lock-fill"
  88 + suffixIconStyle="color: #909399"
  89 + type="password"
  90 + placeholder="登录密码"
  91 + v-model="password"
  92 + @change="passwordChange"
  93 + ></u--input>
  94 + </view>
  95 + <view class="u-flex item-phone">
  96 + <view class="phone-hide">手机验证码登录</view>
  97 + <view class="bind-phone-text" @click="bindPhoneFunc">手机绑定</view>
  98 + </view>
  99 + </view>
  100 + <view v-else class="loginPhone">
  101 + <view class="form-row">
  102 + <u--input
  103 + shape="circle"
  104 + class="input"
  105 + type="text"
  106 + v-model="phone"
  107 + placeholder="请输入手机号码"
  108 + placeholder-style="font-weight:normal;color:#bbbbbb;"
  109 + ></u--input>
  110 + </view>
  111 + <view class="form-row row-top">
  112 + <u--input
  113 + shape="circle"
  114 + class="input"
  115 + type="text"
  116 + v-model="vCode"
  117 + placeholder="请输入验证码"
  118 + placeholder-style="font-weight:normal;color:#bbbbbb;"
  119 + ></u--input>
  120 + <view style="color: #377dff" class="getvcode" :class="{ forhidden: readonly }" @click="getVcode">{{ codeText }}</view>
  121 + </view>
  122 + <view class="u-flex item-phone">
  123 + <view class="phone-hide">手机验证码登录</view>
  124 + <view class="bind-phone-text" @click="bindAccountFunc">账号绑定</view>
  125 + </view>
  126 + </view>
  127 + <view class="bottom-content">
  128 + <view class="u-flex content">
  129 + <view class="cancel"><u-button @click="show = false" type="info" shape="circle" text="取消"></u-button></view>
  130 + <view class="confrim"><u-button @click="bindConfirm" type="primary" shape="circle" text="确认"></u-button></view>
  131 + </view>
  132 + </view>
  133 + </u-modal>
  134 + </view>
  135 + <!-- 退出登录 -->
  136 + <view>
  137 + <u-popup bgColor="transparent" :overlay="true" :show="showLogout" mode="bottom">
  138 + <view class="u-flex logout-main">
  139 + <view class="main"><text style="color: #999999">确定要退出当前账号?</text></view>
  140 + <view @click.top="logoutBtn" class="main"><text style="color: #f95e5a">退出登录</text></view>
  141 + <view class="main"><text @click.top="closeLogout" style="color: #3478f7">取消</text></view>
  142 + </view>
  143 + </u-popup>
  144 + </view>
  145 + <!-- 退出登录 -->
  146 + <f-tabbar></f-tabbar>
  147 + </view>
256 </template> 148 </template>
257 149
258 <script> 150 <script>
259 var clear; 151 var clear;
260 -import base from "@/config/baseUrl";  
261 -import fTabbar from "@/components/module/f-tabbar/f-tabbar";  
262 -import fNavbar from "@/components/module/f-navbar/f-navbar";  
263 -import { mapState, mapMutations } from "vuex"; 152 +import base from '@/config/baseUrl';
  153 +import fTabbar from '@/components/module/f-tabbar/f-tabbar';
  154 +import fNavbar from '@/components/module/f-navbar/f-navbar';
  155 +import { mapState, mapMutations } from 'vuex';
264 156
265 export default { 157 export default {
266 - components: {  
267 - fTabbar,  
268 - fNavbar,  
269 - },  
270 - data() {  
271 - return {  
272 - PrimaryColor: "#0079fe", //主题色  
273 - showLogout: false,  
274 - readonly: false,  
275 - codeText: "获取验证码",  
276 - phone: "", //号码  
277 - vCode: "", //验证码  
278 - tips: "验证码",  
279 - bindPhone: false,  
280 - show: false,  
281 - title: "绑定账号",  
282 - systemInfo: base.systemInfo,  
283 - PrimaryButtonColor: "#0079fe", //主题色  
284 - };  
285 - },  
286 - onLoad() {  
287 - // 隐藏原生的tabbar  
288 - uni.hideTabBar();  
289 - },  
290 - computed: {  
291 - ...mapState(["userInfo"]),  
292 - },  
293 - methods: {  
294 - ...mapMutations(["emptyUserInfo"]),  
295 - // 跳转前判断登录  
296 - onTokenJump(url) {  
297 - this.judgeLogin(() => {  
298 - uni.navigateTo({  
299 - url: url,  
300 - });  
301 - });  
302 - },  
303 - onJump(url) {  
304 - uni.navigateTo({  
305 - url: url,  
306 - });  
307 - },  
308 - openLoginFunc() {  
309 - uni.navigateTo({  
310 - url: "/publicLoginSubPage/public/login",  
311 - });  
312 - },  
313 - openPersonalInfo() {  
314 - let obj = {  
315 - data: this.userInfo,  
316 - };  
317 - uni.navigateTo({  
318 - url: "/publicLoginSubPage/other/set?data=" + JSON.stringify(obj),  
319 - });  
320 - },  
321 - clickAccountFunc() {  
322 - this.show = true;  
323 - },  
324 - bindConfirm() {},  
325 - bindPhoneFunc() {  
326 - this.bindPhone = true;  
327 - },  
328 - bindAccountFunc() {  
329 - this.bindPhone = false;  
330 - },  
331 - //验证码按钮文字状态  
332 - getCodeState() {  
333 - const _this = this;  
334 - this.readonly = true;  
335 - this.codeText = "60S后重新获取";  
336 - var s = 60;  
337 - clear = setInterval(() => {  
338 - s--;  
339 - _this.codeText = s + "S后重新获取";  
340 - if (s <= 0) {  
341 - clearInterval(clear);  
342 - _this.codeText = "获取验证码";  
343 - _this.readonly = false;  
344 - }  
345 - }, 1000);  
346 - },  
347 - //获取验证码  
348 - getVcode() {  
349 - console.log("getVcode");  
350 - if (this.readonly) {  
351 - uni.showToast({  
352 - title: "验证码已发送~",  
353 - icon: "none",  
354 - });  
355 - return;  
356 - }  
357 - if (this.phone == "") {  
358 - uni.showToast({  
359 - title: "请输入手机号~",  
360 - icon: "none",  
361 - });  
362 - return;  
363 - }  
364 - const phoneRegular = /^1\d{10}$/;  
365 - if (!phoneRegular.test(this.phone)) {  
366 - uni.showToast({  
367 - title: "手机号格式不正确~",  
368 - icon: "none",  
369 - });  
370 - return;  
371 - }  
372 - let httpData = {};  
373 - // 获取验证码接口  
374 - // uni.$u.http.post('您的接口', httpData).then(res => {  
375 - this.getCodeState(); //开始倒计时  
376 - // })  
377 - },  
378 - onLoginoutFunc() {  
379 - this.showLogout = true;  
380 - },  
381 - closeLogout() {  
382 - this.showLogout = false;  
383 - },  
384 - logoutBtn() {  
385 - let that = this;  
386 - uni.showModal({  
387 - title: "退出登录",  
388 - content: "你确定退出登录吗?",  
389 - success(res) {  
390 - if (res.confirm) {  
391 - that.emptyUserInfo();  
392 - that.showLogout = false;  
393 - setTimeout(() => {  
394 - uni.navigateTo({  
395 - url: "/publicLoginSubPage/public/login",  
396 - });  
397 - }, 500);  
398 - } else if (res.cancel) {  
399 - }  
400 - },  
401 - });  
402 - },  
403 - }, 158 + components: {
  159 + fTabbar,
  160 + fNavbar
  161 + },
  162 + data() {
  163 + return {
  164 + PrimaryColor: '#0079fe', //主题色
  165 + showLogout: false,
  166 + readonly: false,
  167 + codeText: '获取验证码',
  168 + phone: '', //号码
  169 + vCode: '', //验证码
  170 + tips: '验证码',
  171 + bindPhone: false,
  172 + show: false,
  173 + title: '绑定账号',
  174 + systemInfo: base.systemInfo,
  175 + PrimaryButtonColor: '#0079fe' //主题色
  176 + };
  177 + },
  178 + onLoad() {
  179 + // 隐藏原生的tabbar
  180 + uni.hideTabBar();
  181 + },
  182 + computed: {
  183 + ...mapState(['userInfo'])
  184 + },
  185 + methods: {
  186 + ...mapMutations(['emptyUserInfo']),
  187 + // 跳转前判断登录
  188 + onTokenJump(url) {
  189 + this.judgeLogin(() => {
  190 + uni.navigateTo({
  191 + url: url
  192 + });
  193 + });
  194 + },
  195 + onJump(url) {
  196 + uni.navigateTo({
  197 + url: url
  198 + });
  199 + },
  200 + openLoginFunc() {
  201 + uni.navigateTo({
  202 + url: '/publicLoginSubPage/public/login'
  203 + });
  204 + },
  205 + openPersonalInfo() {
  206 + let obj = {
  207 + data: this.userInfo
  208 + };
  209 + uni.navigateTo({
  210 + url: '/publicLoginSubPage/other/set?data=' + JSON.stringify(obj)
  211 + });
  212 + },
  213 + clickAccountFunc() {
  214 + this.show = true;
  215 + },
  216 + bindConfirm() {},
  217 + bindPhoneFunc() {
  218 + this.bindPhone = true;
  219 + },
  220 + bindAccountFunc() {
  221 + this.bindPhone = false;
  222 + },
  223 + //验证码按钮文字状态
  224 + getCodeState() {
  225 + const _this = this;
  226 + this.readonly = true;
  227 + this.codeText = '60S后重新获取';
  228 + var s = 60;
  229 + clear = setInterval(() => {
  230 + s--;
  231 + _this.codeText = s + 'S后重新获取';
  232 + if (s <= 0) {
  233 + clearInterval(clear);
  234 + _this.codeText = '获取验证码';
  235 + _this.readonly = false;
  236 + }
  237 + }, 1000);
  238 + },
  239 + //获取验证码
  240 + getVcode() {
  241 + console.log('getVcode');
  242 + if (this.readonly) {
  243 + uni.showToast({
  244 + title: '验证码已发送~',
  245 + icon: 'none'
  246 + });
  247 + return;
  248 + }
  249 + if (this.phone == '') {
  250 + uni.showToast({
  251 + title: '请输入手机号~',
  252 + icon: 'none'
  253 + });
  254 + return;
  255 + }
  256 + const phoneRegular = /^1\d{10}$/;
  257 + if (!phoneRegular.test(this.phone)) {
  258 + uni.showToast({
  259 + title: '手机号格式不正确~',
  260 + icon: 'none'
  261 + });
  262 + return;
  263 + }
  264 + let httpData = {};
  265 + // 获取验证码接口
  266 + // uni.$u.http.post('您的接口', httpData).then(res => {
  267 + this.getCodeState(); //开始倒计时
  268 + // })
  269 + },
  270 + onLoginoutFunc() {
  271 + this.showLogout = true;
  272 + },
  273 + closeLogout() {
  274 + this.showLogout = false;
  275 + },
  276 + logoutBtn() {
  277 + let that = this;
  278 + uni.showModal({
  279 + title: '退出登录',
  280 + content: '你确定退出登录吗?',
  281 + success(res) {
  282 + if (res.confirm) {
  283 + that.emptyUserInfo();
  284 + that.showLogout = false;
  285 + setTimeout(() => {
  286 + uni.navigateTo({
  287 + url: '/publicLoginSubPage/public/login'
  288 + });
  289 + }, 500);
  290 + } else if (res.cancel) {
  291 + }
  292 + }
  293 + });
  294 + }
  295 + }
404 }; 296 };
405 </script> 297 </script>
406 298
407 <style lang="scss" scoped> 299 <style lang="scss" scoped>
408 -@import "./static/personal.scss"; 300 +@import './static/personal.scss';
409 </style> 301 </style>
@@ -153,11 +153,12 @@ export default { @@ -153,11 +153,12 @@ export default {
153 }); 153 });
154 return; 154 return;
155 } 155 }
156 - //限制图片类型  
157 - let resType = res.tempFiles[0].type.substring(0, 5);  
158 - if (resType != 'image' || res.tempFiles[0].type.substring(6, 7) == 'g') { 156 + //获取图片扩展名
  157 + const fileTxt = res.tempFilePaths[0].split('.').pop();
  158 + const judgeType = fileTxt == 'jpg' || fileTxt == 'jpeg' || fileTxt == 'png';
  159 + if (!judgeType) {
159 uni.showToast({ 160 uni.showToast({
160 - title: '限制图片类型以及过滤git图', 161 + title: '请上传指定图片类型(jpg、jpeg、png)',
161 icon: 'none', 162 icon: 'none',
162 duration: 2000, 163 duration: 2000,
163 mask: true 164 mask: true
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 <view class="form-row u-flex"> 19 <view class="form-row u-flex">
20 <u-icon name="lock-fill"></u-icon> 20 <u-icon name="lock-fill"></u-icon>
21 <view class="v-input"><input type="text" v-model="loginForm.password" maxlength="32" placeholder="请输入登录密码" :password="!showPassword" /></view> 21 <view class="v-input"><input type="text" v-model="loginForm.password" maxlength="32" placeholder="请输入登录密码" :password="!showPassword" /></view>
22 - <view class="v-password"><u-icon @click="showPasswordMode" :name="showPassword ? 'eye-fill' : 'eye-off'"></u-icon></view> 22 + <view class="v-password" @click="showPasswordMode"><u-icon :name="showPassword ? 'eye-fill' : 'eye-off'"></u-icon></view>
23 <u-icon></u-icon> 23 <u-icon></u-icon>
24 </view> 24 </view>
25 <button class="submit" size="default" @click="onSubmitFunc"><text class="text">登录</text></button> 25 <button class="submit" size="default" @click="onSubmitFunc"><text class="text">登录</text></button>
@@ -123,9 +123,17 @@ export default { @@ -123,9 +123,17 @@ export default {
123 title: '登录成功~', 123 title: '登录成功~',
124 icon: 'none' 124 icon: 'none'
125 }).then(res => { 125 }).then(res => {
126 - uni.reLaunch({  
127 - url: '/pages/personal/personal'  
128 - }); 126 + /**
  127 + * 有些时候不起作用
  128 + */
  129 + // uni.navigateBack({
  130 + // delta: 1
  131 + // });
  132 + // #ifdef APP-PLUS||MP
  133 + uni.reLaunch({
  134 + url: '/pages/personal/personal'
  135 + });
  136 + // #endif
129 }); 137 });
130 this.saveUserInfo(); 138 this.saveUserInfo();
131 } 139 }
@@ -6,7 +6,8 @@ text, @@ -6,7 +6,8 @@ text,
6 button, 6 button,
7 image, 7 image,
8 textarea, 8 textarea,
9 -scroll-view,input { 9 +scroll-view,
  10 +input {
10 box-sizing: border-box; 11 box-sizing: border-box;
11 } 12 }
12 image { 13 image {
@@ -15,35 +16,111 @@ image { @@ -15,35 +16,111 @@ image {
15 button { 16 button {
16 margin: 0; 17 margin: 0;
17 padding: 0; 18 padding: 0;
18 - background-color: #FFFF; 19 + background-color: #ffff;
19 } 20 }
20 button::after { 21 button::after {
21 border: none; 22 border: none;
22 } 23 }
23 /* #endif */ 24 /* #endif */
24 /* #ifdef MP-ALIPAY */ 25 /* #ifdef MP-ALIPAY */
25 -input{  
26 - background: transparent; 26 +input {
  27 + background: transparent;
27 } 28 }
28 -button{  
29 - border:none; 29 +button {
  30 + border: none;
30 } 31 }
31 /* #endif */ 32 /* #endif */
32 -.u-flex{  
33 - /* #ifndef APP-NVUE */  
34 - display: flex;  
35 - /* #endif */  
36 - flex-direction: row;  
37 - align-items: center; 33 +.u-flex {
  34 + /* #ifndef APP-NVUE */
  35 + display: flex;
  36 + /* #endif */
  37 + flex-direction: row;
  38 + align-items: center;
38 } 39 }
39 .u-flex-m { 40 .u-flex-m {
40 - -webkit-box-flex: 1;  
41 - -webkit-flex: 1;  
42 - flex: 1;  
43 - overflow: hidden 41 + -webkit-box-flex: 1;
  42 + -webkit-flex: 1;
  43 + flex: 1;
  44 + overflow: hidden;
44 } 45 }
45 .scroll-view_H { 46 .scroll-view_H {
46 - white-space: nowrap; 47 + white-space: nowrap;
  48 +}
  49 +///////////////////////////////////////////////////////////////小程序、app抽取公共样式/////////////////////////////////////////////////////////////////////
  50 +//通用(设备、告警、摄像头分页头部组织和设备数和设备、告警里面的详情(左边的文本)
  51 +.text-org-bold {
  52 + color: #333333;
  53 + font-family: PingFangSC-Medium, PingFang SC;
  54 + font-weight: 400;
  55 + font-size: 15px;
  56 +}
  57 +.text-org-total {
  58 + color: #666666;
  59 + font-family: PingFangSC-Medium, PingFang SC;
  60 + font-weight: 400;
  61 + font-size: 12px;
  62 +}
  63 +//通用(设备、告警分页)第一个文本
  64 +.text-bold {
  65 + color: #333333;
  66 + font-family: PingFangSC-Medium, PingFang SC;
  67 + font-weight: 500;
  68 + font-size: 15px;
  69 +}
  70 +//(设备、告警,适用设备详情基础信息文本(右边的值的文本))第二个文本
  71 +.text-device-muted {
  72 + font-size: 14px;
  73 + font-family: PingFangSC-Regular, PingFang SC;
  74 + font-weight: 400;
  75 + color: #666666;
  76 +}
  77 +//(设备不适用告警)左边在线离线文本
  78 +.text-device-color {
  79 + font-size: 13px;
  80 + font-family: PingFangSC-Regular, PingFang SC;
  81 + font-weight: 400;
  82 +}
  83 +//告警抽取(通用设备顶部的筛选文本)
  84 +.text-muted {
  85 + font-size: 14px;
  86 + font-family: PingFangSC-Regular, PingFang SC;
  87 + font-weight: 400;
  88 + color: #333333;
  89 +}
  90 +//告警抽取
  91 +.text-secondary {
  92 + font-size: 14px;
  93 + font-family: PingFangSC-Regular, PingFang SC;
  94 + font-weight: 400;
  95 + color: #999999;
  96 +}
  97 +//告警抽取
  98 +.text-no-color {
  99 + font-size: 14px;
  100 + font-family: PingFangSC-Regular, PingFang SC;
  101 + font-weight: 400;
  102 +}
  103 +//告警抽取
  104 +.text-12 {
  105 + font-size: 12px;
  106 + font-family: PingFangSC-Regular, PingFang SC;
  107 + font-weight: 400;
  108 +}
  109 +//文本溢出(通用)
  110 +.text-clip {
  111 + text-overflow: ellipsis;
  112 + overflow: hidden;
  113 + text-overflow: ellipsis;
  114 + white-space: nowrap;
  115 +}
  116 +//通用按钮提交(border框)
  117 +.btn-border {
  118 + background: #377dff;
  119 + border-radius: 20px !important;
  120 +}
  121 +//通用所有边框
  122 +.border-line {
  123 + border-radius: 20px;
47 } 124 }
48 125
49 // 定义flex等分 126 // 定义flex等分
@@ -55,54 +132,56 @@ button{ @@ -55,54 +132,56 @@ button{
55 132
56 // 定义内外边距,历遍1-80 133 // 定义内外边距,历遍1-80
57 @for $i from 0 through 80 { 134 @for $i from 0 through 80 {
58 - // 定义字体大小  
59 - .u-f-s-#{$i} {  
60 - font-size: $i + rpx!important;  
61 - } 135 + // 定义字体大小
  136 + .u-f-s-#{$i} {
  137 + font-size: $i + rpx !important;
  138 + }
62 // 只要双数和能被5除尽的数 139 // 只要双数和能被5除尽的数
63 @if $i % 2 == 0 or $i % 5 == 0 { 140 @if $i % 2 == 0 or $i % 5 == 0 {
64 // 得出:u-margin-30或者u-m-30 141 // 得出:u-margin-30或者u-m-30
65 - .u-margin-#{$i}, .u-m-#{$i} {  
66 - margin: $i + rpx!important; 142 + .u-margin-#{$i},
  143 + .u-m-#{$i} {
  144 + margin: $i + rpx !important;
67 } 145 }
68 - 146 +
69 // 得出:u-padding-30或者u-p-30 147 // 得出:u-padding-30或者u-p-30
70 - .u-padding-#{$i}, .u-p-#{$i} {  
71 - padding: $i + rpx!important; 148 + .u-padding-#{$i},
  149 + .u-p-#{$i} {
  150 + padding: $i + rpx !important;
72 } 151 }
73 - 152 +
74 @each $short, $long in l left, t top, r right, b bottom { 153 @each $short, $long in l left, t top, r right, b bottom {
75 // 缩写版,结果如: u-m-l-30 154 // 缩写版,结果如: u-m-l-30
76 // 定义外边距 155 // 定义外边距
77 .u-m-#{$short}-#{$i} { 156 .u-m-#{$short}-#{$i} {
78 - margin-#{$long}: $i + rpx!important; 157 + margin-#{$long}: $i + rpx !important;
79 } 158 }
80 - 159 +
81 // 定义内边距 160 // 定义内边距
82 .u-p-#{$short}-#{$i} { 161 .u-p-#{$short}-#{$i} {
83 - padding-#{$long}: $i + rpx!important; 162 + padding-#{$long}: $i + rpx !important;
84 } 163 }
85 - 164 +
86 // 完整版,结果如:u-margin-left-30 165 // 完整版,结果如:u-margin-left-30
87 // 定义外边距 166 // 定义外边距
88 .u-margin-#{$long}-#{$i} { 167 .u-margin-#{$long}-#{$i} {
89 - margin-#{$long}: $i + rpx!important; 168 + margin-#{$long}: $i + rpx !important;
90 } 169 }
91 - 170 +
92 // 定义内边距 171 // 定义内边距
93 .u-padding-#{$long}-#{$i} { 172 .u-padding-#{$long}-#{$i} {
94 - padding-#{$long}: $i + rpx!important; 173 + padding-#{$long}: $i + rpx !important;
95 } 174 }
96 } 175 }
97 } 176 }
98 } 177 }
99 @keyframes show { 178 @keyframes show {
100 - 0% {  
101 - opacity: 0;  
102 - transform: translateY(50px);  
103 - }  
104 - 100% {  
105 - opacity: 1;  
106 - transform: translateY(0px);  
107 - }  
108 -}  
  179 + 0% {
  180 + opacity: 0;
  181 + transform: translateY(50px);
  182 + }
  183 + 100% {
  184 + opacity: 1;
  185 + transform: translateY(0px);
  186 + }
  187 +}
@@ -4,18 +4,20 @@ @@ -4,18 +4,20 @@
4 <public-module></public-module> 4 <public-module></public-module>
5 <view class="notify-column"> 5 <view class="notify-column">
6 <view class="u-flex column"> 6 <view class="u-flex column">
7 - <text class="text">{{ notifyList.receiverName }}</text> 7 + <text class="text">{{ notifyList.title }}</text>
8 </view> 8 </view>
9 <view class="column-list"> 9 <view class="column-list">
10 <u-list height="140rpx"> 10 <u-list height="140rpx">
11 <u-list-item> 11 <u-list-item>
12 - <u-cell :value="`${notifyList.createTime}`" :title="`${notifyList.receiverName}`">  
13 - <u-avatar slot="icon" shape="circle" size="35" :src="avatar"></u-avatar> 12 + <u-cell :value="`${notifyList.senderDate}`" :title="`${notifyList.senderName}`">
  13 + <u-avatar slot="icon" shape="circle" size="35" :src="notifyList.avatar"></u-avatar>
14 </u-cell> 14 </u-cell>
15 </u-list-item> 15 </u-list-item>
16 </u-list> 16 </u-list>
17 <view class="bottom-text"> 17 <view class="bottom-text">
18 - <text class="text">{{ notifyList.receiverName }}</text> 18 + <!-- 富文本解析 -->
  19 + <u-parse :content="notifyList.content"></u-parse>
  20 + <!-- 富文本解析 -->
19 </view> 21 </view>
20 </view> 22 </view>
21 </view> 23 </view>
@@ -32,8 +34,7 @@ export default { @@ -32,8 +34,7 @@ export default {
32 }, 34 },
33 data() { 35 data() {
34 return { 36 return {
35 - notifyList: {},  
36 - avatar: '' 37 + notifyList: {}
37 }; 38 };
38 }, 39 },
39 onLoad(e) { 40 onLoad(e) {
@@ -41,24 +42,10 @@ export default { @@ -41,24 +42,10 @@ export default {
41 uni.hideTabBar(); 42 uni.hideTabBar();
42 if (e.data !== null) { 43 if (e.data !== null) {
43 let params = JSON.parse(e.data); 44 let params = JSON.parse(e.data);
44 - this.avatar = params.avatar;  
45 - this.loadData(params.id); 45 + if (params) this.notifyList = params;
46 } 46 }
47 }, 47 },
48 - methods: {  
49 - loadData(e) {  
50 - uni.$u.http  
51 - .get(`/yt/noticeUser/${e}`)  
52 - .then(res => {  
53 - if (res) {  
54 - this.notifyList = res;  
55 - }  
56 - })  
57 - .catch(e => {  
58 - uni.$u.toast(e.data?.message);  
59 - });  
60 - }  
61 - } 48 + methods: {}
62 }; 49 };
63 </script> 50 </script>
64 51
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <!-- 公共组件-每个页面必须引入 --> 3 <!-- 公共组件-每个页面必须引入 -->
4 <public-module></public-module> 4 <public-module></public-module>
5 <view> 5 <view>
6 - <u--form labelPosition="left" :model="model1" :rules="rules" ref="form1"> 6 + <u--form labelPosition="left" :model="model1" ref="form1">
7 <u-form-item label="类型" prop="userInfo.sex" @click="openTypeClick" ref="item1"> 7 <u-form-item label="类型" prop="userInfo.sex" @click="openTypeClick" ref="item1">
8 <u--input v-model="model1.userInfo.type" placeholder="请选择类型" border="surround"></u--input> 8 <u--input v-model="model1.userInfo.type" placeholder="请选择类型" border="surround"></u--input>
9 <u-icon slot="right" name="arrow-right"></u-icon> 9 <u-icon slot="right" name="arrow-right"></u-icon>
@@ -14,16 +14,16 @@ @@ -14,16 +14,16 @@
14 <view class="notify-main"> 14 <view class="notify-main">
15 <mescroll-body ref="mescrollRef" @init="mescrollInit" :down="downOption" @down="downCallback" @up="upCallback"> 15 <mescroll-body ref="mescrollRef" @init="mescrollInit" :down="downOption" @down="downCallback" @up="upCallback">
16 <view class="u-flex main"> 16 <view class="u-flex main">
17 - <view @click="clickNotifyDetail(item)" class="u-flex main-item" v-for="(item, index) in list" :key="index"> 17 + <view @click="clickNotifyDetail(item.sysNotice)" class="u-flex main-item" v-for="(item, index) in list" :key="index">
18 <view class="u-flex item"> 18 <view class="u-flex item">
19 - <view class="item-avatar"><u-avatar class="avatar" shape="circle" size="40" :src="item.avatar"></u-avatar></view> 19 + <view class="item-avatar"><u-avatar class="avatar" shape="circle" size="40" :src="item.sysNotice.avatar"></u-avatar></view>
20 <view class="u-flex item-content"> 20 <view class="u-flex item-content">
21 - <text class="text-top">{{ item.title }}</text>  
22 - <text class="text-bottom">{{ item.createTime }}</text> 21 + <text class="text-top">{{ item.sysNotice.title }}</text>
  22 + <text class="text-bottom">{{ item.sysNotice.createTime }}</text>
23 </view> 23 </view>
24 </view> 24 </view>
25 <view class="item-right"> 25 <view class="item-right">
26 - <text class="text">{{ item.type == 'OTHER' ? '其他' : item.type == 'MEETING' ? '会议' : '公告' }}</text> 26 + <text class="text">{{ formatType(item.sysNotice) }}</text>
27 </view> 27 </view>
28 </view> 28 </view>
29 </view> 29 </view>
@@ -80,6 +80,9 @@ export default { @@ -80,6 +80,9 @@ export default {
80 this.stop(); 80 this.stop();
81 }, 81 },
82 methods: { 82 methods: {
  83 + formatType(e) {
  84 + return e?.type == 'OTHER' ? '其他' : e?.type == 'MEETING' ? '会议' : '公告';
  85 + },
83 stop() { 86 stop() {
84 let interval = setInterval(function() { 87 let interval = setInterval(function() {
85 uni.hideKeyboard(); //隐藏软键盘 88 uni.hideKeyboard(); //隐藏软键盘
@@ -124,20 +127,13 @@ export default { @@ -124,20 +127,13 @@ export default {
124 uni.stopPullDownRefresh(); 127 uni.stopPullDownRefresh();
125 this.mescroll.endByPage(res.items.length, res.total); 128 this.mescroll.endByPage(res.items.length, res.total);
126 if (pageNo == 1) { 129 if (pageNo == 1) {
127 - this.list = res.items.map(m => {  
128 - return {  
129 - title: m?.sysNotice?.title,  
130 - avatar: m?.sysNotice?.avatar,  
131 - id: m?.sysNotice?.id,  
132 - createTime: m?.createTime  
133 - };  
134 - }); 130 + this.list = res.items;
135 } else { 131 } else {
136 this.list = this.list.concat(res.items); 132 this.list = this.list.concat(res.items);
137 } 133 }
138 }) 134 })
139 .catch(e => { 135 .catch(e => {
140 - uni.$u.toast(e.data.message); 136 + uni.$u.toast(e.data?.message);
141 this.mescroll.endErr(); 137 this.mescroll.endErr();
142 }); 138 });
143 }, 139 },