Commit 3be4a23ce2edc12daaf3289de77da81c519c2e3a
1 parent
2da23875
fix:修改通知详情和通知类型判断,refractor:修改告警分页文本样式
Showing
14 changed files
with
965 additions
and
1001 deletions
| ... | ... | @@ -5,12 +5,12 @@ |
| 5 | 5 | <view class="alarm-detail-column"> |
| 6 | 6 | <view class="u-flex detail-column"> |
| 7 | 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 | 10 | </view> |
| 11 | 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 | 15 | list.severity == 'CRITICAL' |
| 16 | 16 | ? '危险' |
| ... | ... | @@ -25,20 +25,20 @@ |
| 25 | 25 | </text> |
| 26 | 26 | </view> |
| 27 | 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 | 30 | </view> |
| 31 | 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 | 34 | </view> |
| 35 | 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 | 38 | </view> |
| 39 | 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 | 43 | list.status == 'CLEARED_UNACK' |
| 44 | 44 | ? '清除未确认' |
| ... | ... | @@ -53,17 +53,19 @@ |
| 53 | 53 | </view> |
| 54 | 54 | </view> |
| 55 | 55 | <!-- #ifdef MP --> |
| 56 | - <view class="handle-result" style="">处理结果</view> | |
| 56 | + <view class="handle-result text-org-bold" style="">处理结果</view> | |
| 57 | 57 | <view class="hanle-main"> |
| 58 | 58 | <u--form :label-style="{ 'font-size': '0rpx' }" style="padding-left: 26rpx;" labelPosition="left" :model="formModel" ref="form1"> |
| 59 | 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 | 63 | </u-form-item> |
| 62 | 64 | </u--form> |
| 63 | 65 | </view> |
| 64 | 66 | <!-- #endif --> |
| 65 | 67 | <!-- #ifdef APP-PLUS --> |
| 66 | - <view class="handle-result">处理结果</view> | |
| 68 | + <view class="handle-result text-org-bold">处理结果</view> | |
| 67 | 69 | <view class="hanle-main"> |
| 68 | 70 | <view><u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count></u--textarea></view> |
| 69 | 71 | </view> |
| ... | ... | @@ -94,28 +96,37 @@ export default { |
| 94 | 96 | }, |
| 95 | 97 | methods: { |
| 96 | 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 | 1 | <template> |
| 2 | 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 | 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 | 18 | </view> |
| 26 | 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 | 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 | 27 | <u-icon :name="iconLeft" size="16" :color="leftColor"></u-icon> |
| 34 | 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 | 30 | </slot> |
| 37 | 31 | </view> |
| 38 | 32 | </block> |
| 39 | - <view class="center" :style="{width:titleWidth+'rpx'}"> | |
| 33 | + <view class="center" :style="{ width: titleWidth + 'rpx' }"> | |
| 40 | 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 | 44 | </slot> |
| 45 | 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 | 47 | </view> |
| 50 | 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 | 51 | </view> |
| 54 | 52 | </template> |
| 55 | 53 | |
| 56 | 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 | 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 | 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 | 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 | 303 | </script> |
| 307 | 304 | |
| 308 | 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 | 393 | </style> | ... | ... |
| ... | ... | @@ -111,7 +111,9 @@ export default { |
| 111 | 111 | ] |
| 112 | 112 | }; |
| 113 | 113 | }, |
| 114 | - onLoad() {}, | |
| 114 | + onLoad() { | |
| 115 | + this.loadData(); | |
| 116 | + }, | |
| 115 | 117 | created() { |
| 116 | 118 | //获取页面路径 |
| 117 | 119 | let currentPages = getCurrentPages(); |
| ... | ... | @@ -130,23 +132,17 @@ export default { |
| 130 | 132 | page: 1, |
| 131 | 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 | 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 | 1 | import base from "@/config/baseUrl"; |
| 2 | 2 | import store from "@/store"; |
| 3 | -import { judgeLogin } from "@/config/login"; | |
| 3 | +import { | |
| 4 | + judgeLogin | |
| 5 | +} from "@/config/login"; | |
| 4 | 6 | |
| 5 | 7 | // 初始化请求配置 |
| 6 | 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 | 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 | 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 | ); | ... | ... |
| 1 | 1 | <template> |
| 2 | 2 | <view class="alert-page"> |
| 3 | + <!-- 公共组件-每个页面必须引入 --> | |
| 4 | + <public-module></public-module> | |
| 3 | 5 | <f-navbar> |
| 4 | 6 | <view class="u-flex" slot="left"> |
| 5 | 7 | <u-icon color="#fff"></u-icon> |
| ... | ... | @@ -13,14 +15,12 @@ |
| 13 | 15 | <view class="filter-icon"><image class="image" @click="openSearchDialog" src="../../static/shaixuan.png"></image></view> |
| 14 | 16 | </view> |
| 15 | 17 | </f-navbar> |
| 16 | - <!-- 公共组件-每个页面必须引入 --> | |
| 17 | - <public-module></public-module> | |
| 18 | 18 | <view @click="openOrg" class="org-sty"> |
| 19 | 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 | 21 | <view class="u-flex item-child"> |
| 22 | 22 | <image class="image" src="../../static/org.png" mode=""></image> |
| 23 | - <text class="text">告警数:{{ alertTotal }}</text> | |
| 23 | + <text class="text-12">告警数:{{ alertTotal }}</text> | |
| 24 | 24 | </view> |
| 25 | 25 | </view> |
| 26 | 26 | <view class="org-item "><image class="org-image" src="../../static/right-arrow.png"></image></view> |
| ... | ... | @@ -30,15 +30,15 @@ |
| 30 | 30 | <view class="device-list"> |
| 31 | 31 | <view @click="openAlertDetail(item)" class="list-item" v-for="(item, index) in list" :key="index"> |
| 32 | 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 | 35 | </view> |
| 36 | 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 | 38 | </view> |
| 39 | 39 | <view class="item-text"> |
| 40 | - <text class="text"> | |
| 41 | - {{ | |
| 40 | + <text class="text-muted"> | |
| 41 | + 告警状态:{{ | |
| 42 | 42 | item.status == 'CLEARED_UNACK' |
| 43 | 43 | ? '清除未确认' |
| 44 | 44 | : item.status == 'ACTIVE_UNACK' |
| ... | ... | @@ -50,7 +50,7 @@ |
| 50 | 50 | </text> |
| 51 | 51 | </view> |
| 52 | 52 | <view class="item-text"> |
| 53 | - <text class="text-nine">{{ item.createdTime }}</text> | |
| 53 | + <text class="text-secondary">{{ item.createdTime }}</text> | |
| 54 | 54 | </view> |
| 55 | 55 | </view> |
| 56 | 56 | <view class="item"> |
| ... | ... | @@ -58,6 +58,7 @@ |
| 58 | 58 | <image class="right-image" :src="bindImageUrl(item.severity)"></image> |
| 59 | 59 | <view class="right-text"> |
| 60 | 60 | <text |
| 61 | + class="text-no-color" | |
| 61 | 62 | :style="[ |
| 62 | 63 | item.severity == 'CRITICAL' |
| 63 | 64 | ? { color: '#DE4437' } |
| ... | ... | @@ -151,13 +152,7 @@ |
| 151 | 152 | <view style="margin-top: 120rpx;"> |
| 152 | 153 | <view class="u-flex popup-alarm-child"> |
| 153 | 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 | 156 | <u-form-item style="font-size: 14px" label="选择日期" prop="selectTime" labelWidth="80" borderBottom @click="openTime"> |
| 162 | 157 | <u--input v-model="timeData.selectTime" placeholder="请选择日期" border="none"></u--input> |
| 163 | 158 | </u-form-item> |
| ... | ... | @@ -421,6 +416,13 @@ export default { |
| 421 | 416 | url: '/alarmSubPage/alarmDetailPage/alarmDetail?data=' + JSON.stringify(obj) |
| 422 | 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 | }; | ... | ... |
| 1 | 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 | 148 | </template> |
| 257 | 149 | |
| 258 | 150 | <script> |
| 259 | 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 | 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 | 297 | </script> |
| 406 | 298 | |
| 407 | 299 | <style lang="scss" scoped> |
| 408 | -@import "./static/personal.scss"; | |
| 300 | +@import './static/personal.scss'; | |
| 409 | 301 | </style> | ... | ... |
| ... | ... | @@ -153,11 +153,12 @@ export default { |
| 153 | 153 | }); |
| 154 | 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 | 160 | uni.showToast({ |
| 160 | - title: '限制图片类型以及过滤git图', | |
| 161 | + title: '请上传指定图片类型(jpg、jpeg、png)', | |
| 161 | 162 | icon: 'none', |
| 162 | 163 | duration: 2000, |
| 163 | 164 | mask: true | ... | ... |
| ... | ... | @@ -19,7 +19,7 @@ |
| 19 | 19 | <view class="form-row u-flex"> |
| 20 | 20 | <u-icon name="lock-fill"></u-icon> |
| 21 | 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 | 23 | <u-icon></u-icon> |
| 24 | 24 | </view> |
| 25 | 25 | <button class="submit" size="default" @click="onSubmitFunc"><text class="text">登录</text></button> |
| ... | ... | @@ -123,9 +123,17 @@ export default { |
| 123 | 123 | title: '登录成功~', |
| 124 | 124 | icon: 'none' |
| 125 | 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 | 138 | this.saveUserInfo(); |
| 131 | 139 | } | ... | ... |
static/alarm-device.png
0 → 100644
107 Bytes
| ... | ... | @@ -6,7 +6,8 @@ text, |
| 6 | 6 | button, |
| 7 | 7 | image, |
| 8 | 8 | textarea, |
| 9 | -scroll-view,input { | |
| 9 | +scroll-view, | |
| 10 | +input { | |
| 10 | 11 | box-sizing: border-box; |
| 11 | 12 | } |
| 12 | 13 | image { |
| ... | ... | @@ -15,35 +16,111 @@ image { |
| 15 | 16 | button { |
| 16 | 17 | margin: 0; |
| 17 | 18 | padding: 0; |
| 18 | - background-color: #FFFF; | |
| 19 | + background-color: #ffff; | |
| 19 | 20 | } |
| 20 | 21 | button::after { |
| 21 | 22 | border: none; |
| 22 | 23 | } |
| 23 | 24 | /* #endif */ |
| 24 | 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 | 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 | 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 | 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 | 126 | // 定义flex等分 |
| ... | ... | @@ -55,54 +132,56 @@ button{ |
| 55 | 132 | |
| 56 | 133 | // 定义内外边距,历遍1-80 |
| 57 | 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 | 139 | // 只要双数和能被5除尽的数 |
| 63 | 140 | @if $i % 2 == 0 or $i % 5 == 0 { |
| 64 | 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 | 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 | 153 | @each $short, $long in l left, t top, r right, b bottom { |
| 75 | 154 | // 缩写版,结果如: u-m-l-30 |
| 76 | 155 | // 定义外边距 |
| 77 | 156 | .u-m-#{$short}-#{$i} { |
| 78 | - margin-#{$long}: $i + rpx!important; | |
| 157 | + margin-#{$long}: $i + rpx !important; | |
| 79 | 158 | } |
| 80 | - | |
| 159 | + | |
| 81 | 160 | // 定义内边距 |
| 82 | 161 | .u-p-#{$short}-#{$i} { |
| 83 | - padding-#{$long}: $i + rpx!important; | |
| 162 | + padding-#{$long}: $i + rpx !important; | |
| 84 | 163 | } |
| 85 | - | |
| 164 | + | |
| 86 | 165 | // 完整版,结果如:u-margin-left-30 |
| 87 | 166 | // 定义外边距 |
| 88 | 167 | .u-margin-#{$long}-#{$i} { |
| 89 | - margin-#{$long}: $i + rpx!important; | |
| 168 | + margin-#{$long}: $i + rpx !important; | |
| 90 | 169 | } |
| 91 | - | |
| 170 | + | |
| 92 | 171 | // 定义内边距 |
| 93 | 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 | 178 | @keyframes show { |
| 100 | - 0% { | |
| 101 | - opacity: 0; | |
| 102 | - transform: translateY(50px); | |
| 103 | - } | |
| 104 | - 100% { | |
| 105 | - opacity: 1; | |
| 106 | - transform: translateY(0px); | |
| 107 | - } | |
| 108 | -} | |
| \ No newline at end of file | ||
| 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 | 4 | <public-module></public-module> |
| 5 | 5 | <view class="notify-column"> |
| 6 | 6 | <view class="u-flex column"> |
| 7 | - <text class="text">{{ notifyList.receiverName }}</text> | |
| 7 | + <text class="text">{{ notifyList.title }}</text> | |
| 8 | 8 | </view> |
| 9 | 9 | <view class="column-list"> |
| 10 | 10 | <u-list height="140rpx"> |
| 11 | 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 | 14 | </u-cell> |
| 15 | 15 | </u-list-item> |
| 16 | 16 | </u-list> |
| 17 | 17 | <view class="bottom-text"> |
| 18 | - <text class="text">{{ notifyList.receiverName }}</text> | |
| 18 | + <!-- 富文本解析 --> | |
| 19 | + <u-parse :content="notifyList.content"></u-parse> | |
| 20 | + <!-- 富文本解析 --> | |
| 19 | 21 | </view> |
| 20 | 22 | </view> |
| 21 | 23 | </view> |
| ... | ... | @@ -32,8 +34,7 @@ export default { |
| 32 | 34 | }, |
| 33 | 35 | data() { |
| 34 | 36 | return { |
| 35 | - notifyList: {}, | |
| 36 | - avatar: '' | |
| 37 | + notifyList: {} | |
| 37 | 38 | }; |
| 38 | 39 | }, |
| 39 | 40 | onLoad(e) { |
| ... | ... | @@ -41,24 +42,10 @@ export default { |
| 41 | 42 | uni.hideTabBar(); |
| 42 | 43 | if (e.data !== null) { |
| 43 | 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 | 50 | </script> |
| 64 | 51 | ... | ... |
| ... | ... | @@ -3,7 +3,7 @@ |
| 3 | 3 | <!-- 公共组件-每个页面必须引入 --> |
| 4 | 4 | <public-module></public-module> |
| 5 | 5 | <view> |
| 6 | - <u--form labelPosition="left" :model="model1" :rules="rules" ref="form1"> | |
| 6 | + <u--form labelPosition="left" :model="model1" ref="form1"> | |
| 7 | 7 | <u-form-item label="类型" prop="userInfo.sex" @click="openTypeClick" ref="item1"> |
| 8 | 8 | <u--input v-model="model1.userInfo.type" placeholder="请选择类型" border="surround"></u--input> |
| 9 | 9 | <u-icon slot="right" name="arrow-right"></u-icon> |
| ... | ... | @@ -14,16 +14,16 @@ |
| 14 | 14 | <view class="notify-main"> |
| 15 | 15 | <mescroll-body ref="mescrollRef" @init="mescrollInit" :down="downOption" @down="downCallback" @up="upCallback"> |
| 16 | 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 | 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 | 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 | 23 | </view> |
| 24 | 24 | </view> |
| 25 | 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 | 27 | </view> |
| 28 | 28 | </view> |
| 29 | 29 | </view> |
| ... | ... | @@ -80,6 +80,9 @@ export default { |
| 80 | 80 | this.stop(); |
| 81 | 81 | }, |
| 82 | 82 | methods: { |
| 83 | + formatType(e) { | |
| 84 | + return e?.type == 'OTHER' ? '其他' : e?.type == 'MEETING' ? '会议' : '公告'; | |
| 85 | + }, | |
| 83 | 86 | stop() { |
| 84 | 87 | let interval = setInterval(function() { |
| 85 | 88 | uni.hideKeyboard(); //隐藏软键盘 |
| ... | ... | @@ -124,20 +127,13 @@ export default { |
| 124 | 127 | uni.stopPullDownRefresh(); |
| 125 | 128 | this.mescroll.endByPage(res.items.length, res.total); |
| 126 | 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 | 131 | } else { |
| 136 | 132 | this.list = this.list.concat(res.items); |
| 137 | 133 | } |
| 138 | 134 | }) |
| 139 | 135 | .catch(e => { |
| 140 | - uni.$u.toast(e.data.message); | |
| 136 | + uni.$u.toast(e.data?.message); | |
| 141 | 137 | this.mescroll.endErr(); |
| 142 | 138 | }); |
| 143 | 139 | }, | ... | ... |