index.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  1. <template>
  2. <view class="container">
  3. <view class="doctor-info">
  4. <image :src="bg" class="bg"></image>
  5. <view class="user">
  6. <view class="info">
  7. <view class="name">{{user.userName}}</view>
  8. <view class="group">{{user.groupName}}</view>
  9. <view class="ocName">{{user.ocName||user.positionName}}</view>
  10. </view>
  11. <template v-if="user.type<4">
  12. <image class="avatar radius" src="/static/index/piont.png"></image>
  13. </template>
  14. <template v-else>
  15. <image :src="user.userAvatar" class="avatar" @error="avatarError" v-if="user.userAvatar"></image>
  16. <image :src="defAvatar" class="avatar" v-else></image>
  17. </template>
  18. </view>
  19. <view class="introduce" v-if="user.userIntro">{{user.userIntro}}</view>
  20. </view>
  21. <view class="notice" v-if="alertnotice">
  22. <view class="notice-name">
  23. <image class="icon" src="/static/index/alert.png" mode="widthFix"></image>
  24. <!-- <text class="text">预警</text> -->
  25. </view>
  26. <view class="notice-cont">
  27. <uni-notice-bar
  28. v-if="alertnotice"
  29. @getmore="getmorealert"
  30. scrollable :text="alertnotice"
  31. background-color="#fff0"
  32. :speed="30"
  33. ref="uni-notice-bar"
  34. show-get-more
  35. color="#333" />
  36. </view>
  37. </view>
  38. <view class="tab-container" v-if="showTab">
  39. <view class="header">待办事项</view>
  40. <view class="tab">
  41. <div class="tab-item" @click="linkTo('task','待办任务')" v-if="todos.checkTaskCount>0">
  42. <view class="tab-name">任务处理</view>
  43. <view class="number task">{{todos.checkTaskCount>99?'99+':taskTotal}}</view>
  44. </div>
  45. <div class="tab-item" @click="linkTo('danger','待处理隐患')" v-if="todos.dangerCount>0">
  46. <view class="tab-name danger">隐患处理</view>
  47. <view class="number">{{todos.dangerCount>99?'99+':todos.dangerCount}}</view>
  48. </div>
  49. <div class="tab-item" @click="linkTo('warn','告警事件')" v-if="todos.warningCount>0">
  50. <view class="tab-name">告警处理 </view>
  51. <view class="number warn">{{todos.warningCount>99?'99+':todos.warningCount}}</view>
  52. </div>
  53. <div class="tab-item" @click="linkTo('alert','预警事件')" v-if="todos.snapshotCount>0">
  54. <view class="tab-name">预警处理</view>
  55. <view class="number alert">{{todos.snapshotCount>99?'99+':todos.snapshotCount}}</view>
  56. </div>
  57. </view>
  58. </view>
  59. <view class="app-container">
  60. <view class="app-title">常规操作</view>
  61. <view class="app-list">
  62. <view class="app-item" v-for="(item,index) in actionList" :key="index" @click="handle(item)">
  63. <image class="logo" :src="item.miniLogo" ></image>
  64. <view class="app-cont">
  65. <view class="name">{{item.miniTitle}}</view>
  66. <view class="desc" v-if="item.miniDesc">{{item.miniDesc}}</view>
  67. </view>
  68. </view>
  69. </view>
  70. </view>
  71. <uni-popup ref="alertpopup" is-mask-click>
  72. <view class="alert-container">
  73. <uni-list>
  74. <uni-list-item v-for="(item,aIdx) in alertList" :key="aIdx"
  75. :title="item.alertTitle"
  76. :rightText="item.alertTime"
  77. :note="item.alertContent">
  78. </uni-list-item>
  79. </uni-list>
  80. </view>
  81. </uni-popup>
  82. </view>
  83. </template>
  84. <script>
  85. import defAvatar from '@/static/avatar.png'
  86. import {wxLogin} from '@/api/openApi.js'
  87. import {getByQr,getApps} from '@/api/system/scan.js'
  88. import {getQueryParams} from '@/utils/index.js'
  89. export default {
  90. data() {
  91. return {
  92. actionList:[],
  93. defAvatar:defAvatar,
  94. bg:'',
  95. user:{
  96. userAvatar:""
  97. },
  98. alertnotice:undefined,
  99. alertList:[],
  100. todos:{
  101. checkTaskCount: 0,
  102. dangerCount: 0,
  103. snapshotCount: 0,
  104. warningCount: 0
  105. },
  106. miniList:[]
  107. }
  108. },
  109. onLoad(options){
  110. this.init(options)
  111. },
  112. computed:{
  113. showTab(){
  114. return this.todos.checkTaskCount>0||this.todos.dangerCount>0||this.todos.snapshotCount>0||this.todos.warningCount>0
  115. }
  116. },
  117. methods: {
  118. async init(options){
  119. if(options && options.hasOwnProperty('q') ){
  120. let URL = decodeURIComponent(options.q);
  121. options=getQueryParams(URL)
  122. }
  123. this.getData(options)
  124. },
  125. setUnionid(){
  126. return new Promise((resolve,reject)=>{
  127. uni.login({
  128. provider: 'weixin',
  129. success: function (loginRes) {
  130. let code=loginRes.code;
  131. wxLogin(code).then((resp)=>{
  132. const { code, data, msg } = resp
  133. resolve(resp)
  134. }).catch((resp)=>{
  135. reject(resp)
  136. })
  137. },
  138. fail(resp) {
  139. reject(resp)
  140. }
  141. })
  142. })
  143. },
  144. getData({ocId, code}){
  145. if(!ocId){
  146. let qrcode=uni.getStorageSync('qrcode')
  147. if(!qrcode){return}
  148. ocId=qrcode.ocId
  149. code=qrcode.code
  150. }
  151. uni.setStorageSync('qrcode',{ocId,code})
  152. let isLogin=uni.getStorageSync('isLogin')
  153. if(!isLogin){
  154. uni.showToast({
  155. title:"请授权登录登录失效!",
  156. mask: true,
  157. icon: "none",
  158. complete() {
  159. uni.redirectTo({
  160. url: '/pages/authorizedLogin/index'
  161. })
  162. }
  163. })
  164. return
  165. }
  166. getByQr(ocId, code).then((res)=>{
  167. let type=res.data.targetType
  168. uni.setStorageSync('qrcode',{
  169. ...res.data.target,
  170. targetId:res.data.targetId,
  171. targetType:res.data.targetType,
  172. targetTitle:res.data.targetTitle,
  173. ocId,
  174. code
  175. })
  176. let desc="";
  177. if(type===1){desc=res.data.target.riskPointDesc}
  178. if(type===2){desc=res.data.target.gridDesc}
  179. if(type===3){desc=res.data.target.equipDesc;}
  180. if(type===4){desc=res.data.target.doctorDesc}
  181. if(type===5){desc=res.data.target.doctorResume}
  182. let riskPointTypeTitle=res.data.target.riskPointTypeTitle?res.data.target.riskPointTypeTitle:"";
  183. let riskPointCatTitle=res.data.target.riskPointCatTitle?`【${res.data.target.riskPointCatTitle}】`:""
  184. res.data.target.positionName=`${riskPointTypeTitle}${riskPointCatTitle}`
  185. this.user={
  186. type:res.data.targetType,
  187. userName:res.data.targetTitle,
  188. groupName:res.data.targetGroupName,
  189. userAvatar:res.data.target.doctorAvatar,
  190. positionName:res.data.target.positionName,
  191. userIntro:desc,
  192. }
  193. if(type>3){
  194. this.bg='/static/index/bg.png'
  195. }else{
  196. this.bg=type===1?'/static/index/riskBg.png':(type===2?'/static/index/areaBg.png':'/static/index/eqBg.png')
  197. }
  198. getApps(res.data.targetId).then((res)=>{
  199. this.actionList=res.data.miniList
  200. if(res.data.alertList){
  201. this.alertList=res.data.alertList
  202. this.alertnotice=res.data.alertList.reduce((pre,item,index)=>`${pre} ${index+1}、${item.alertContent},${item.alertTime};`,'')
  203. this.$nextTick(()=>{
  204. this.$refs['uni-notice-bar'].initSize()
  205. })
  206. }
  207. if(res.data.todos){
  208. this.todos=res.data.todos
  209. }
  210. if(res.data.wxId)uni.setStorageSync('wxId',res.data.wxId)
  211. uni.setStorageSync('isAccount',res.data.isAccount)
  212. })
  213. })
  214. },
  215. avatarError(){
  216. this.user.userAvatar=defAvatar
  217. },
  218. handle(item){
  219. if(item.miniCode==='danger-submit'){ //隐患登记
  220. uni.navigateTo({url:'/pages/app_views/danger/submit/submit'})
  221. }
  222. if(item.miniCode==='checklist_point'){// 清单
  223. uni.navigateTo({url:'/pages/app_views/checkList/index/index?type=app&id='+item.checklistId})
  224. }
  225. if(item.miniCode==='checklist_score'){// 满意度
  226. uni.navigateTo({url:'/pages/app_views/satisfaction_evaluation/satisfaction_evaluation?type=app&id='+item.checklistId})
  227. }
  228. if(item.miniCode==='checklist_hazard'){// 危险源
  229. uni.navigateTo({url:'/pages/app_views/hazard/index/index?type=app&id='+item.checklistId})
  230. }
  231. if(item.miniCode==='app-snapshot'){ //问题反馈
  232. uni.navigateTo({url:'/pages/app_views/problem_feedback/problem_feedback'})
  233. }
  234. if(item.miniCode==='mini_check_in'){//打卡
  235. uni.navigateTo({url:'/pages/app_views/clockIn/index'})
  236. }
  237. },
  238. isNull(val){
  239. if(val===undefined||val==="undefined"||val===""||val===null){
  240. return true
  241. }
  242. return false
  243. },
  244. linkTo(type,name){
  245. let riskPointId=uni.getStorageSync('qrcode').riskPointId
  246. uni.navigateTo({
  247. url:`/pages/index/detail/detail?type=${type}&name=${name}&rid=${riskPointId}`
  248. })
  249. },
  250. getmorealert(){
  251. this.$refs.alertpopup.open("center")
  252. }
  253. },
  254. onShareAppMessage() {
  255. }
  256. }
  257. </script>
  258. <style lang="scss" scoped>
  259. .container {
  260. min-height: 100vh;
  261. padding: 48rpx 36rpx;
  262. font-size: 14px;
  263. line-height: 24px;
  264. background-color:rgba(245,246,248,1);
  265. box-sizing: border-box;
  266. .doctor-info{
  267. background-image: url('/static/index/bg.png');
  268. background-repeat: no-repeat;
  269. background-size: 100% 100%;
  270. padding: 30rpx 48rpx 48rpx 48rpx;
  271. box-sizing: border-box;
  272. color: #fff;
  273. position: relative;
  274. .bg{
  275. display: block;
  276. width: 100%;
  277. height: 100%;
  278. position: absolute;
  279. left: 0;
  280. top: 0;
  281. z-index: -1;
  282. }
  283. .user{
  284. display: flex;
  285. justify-content: space-between;
  286. align-items: center;
  287. .info{
  288. position: relative;
  289. padding-left: 20rpx;
  290. .name{
  291. font-size: 32rpx;
  292. font-weight: 700;
  293. line-height: 1;
  294. }
  295. .group{
  296. font-size: 24rpx;
  297. font-weight: 400;
  298. line-height: 1;
  299. margin-top: 16rpx;
  300. }
  301. .ocName{
  302. font-size: 24rpx;
  303. font-weight: 400;
  304. line-height: 1;
  305. margin-top: 16rpx;
  306. }
  307. &::after{
  308. width: 1px;
  309. height: 100%;
  310. display: block;
  311. content: "";
  312. position: absolute;
  313. border-radius: 10px;
  314. top: 0;
  315. left: 0;
  316. background-color: #83D047;
  317. }
  318. }
  319. .avatar{
  320. display: block;
  321. width: 140rpx;
  322. height: 140rpx;
  323. border-radius: 50%;
  324. &.radius{
  325. border-radius:34rpx;
  326. }
  327. }
  328. }
  329. .introduce{
  330. padding-top: 30rpx;
  331. max-height: 318rpx;
  332. font-family: SF Pro Text;
  333. font-size: 30rpx;
  334. font-weight: 400;
  335. line-height: 44rpx;
  336. color: #fff;
  337. overflow: hidden;
  338. text-overflow: ellipsis;
  339. display: -webkit-box;
  340. -webkit-line-clamp: 7;
  341. -webkit-box-orient: vertical;
  342. text-align: justify;
  343. word-break: break-all;
  344. }
  345. }
  346. .notice{
  347. height: 84rpx;
  348. background-color:rgba(245, 246, 248, 1);
  349. margin-top: 28rpx;
  350. border-radius: 6rpx;
  351. display: flex;
  352. justify-content: space-between;
  353. align-items: center;
  354. box-shadow: 0px 10px 10px -4px rgba(45, 54, 67, 0.2);
  355. padding-left:28rpx;
  356. .notice-name{
  357. height: 84rpx;
  358. display: flex;
  359. align-items: center;
  360. font-weight: 600;
  361. font-size: 24rpx;
  362. color: rgba(0, 0, 0, 0.9);
  363. .icon{
  364. width: 40rpx;
  365. height: 40rpx;
  366. // padding-right: 8rpx;
  367. // margin-top:8rpx ;
  368. }
  369. .text{
  370. font-size: 28rpx;
  371. line-height: 1;
  372. // margin-top:8rpx ;
  373. }
  374. }
  375. .notice-cont{
  376. width: 600rpx;
  377. height: 80rpx;
  378. flex: 1;
  379. font-size: 28rpx;
  380. color: rgba(0, 0, 0, 0.9);
  381. // background-color: #fff;
  382. }
  383. }
  384. .tab-container{
  385. background-color: #fff;
  386. margin-top: 32rpx;
  387. border-radius: 16rpx;
  388. .header{
  389. width: 216rpx;
  390. height: 64rpx;
  391. text-align: center;
  392. line-height: 64rpx;
  393. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAAAgCAYAAAD3/J3aAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAyZSURBVHgBnVtNrh1XEa663CQvjJDYQMSQicMKyJRZlgA7cDYQ4h34iQFTsgAiIzEAMcBeQYKUeewVxDOE4neK7lPfV/Wdvs9O7mvJr293n5/6/eqn226H43efxW9PPj4180/d7KMIC3dznnPUdrnd6GuzfL5fhutvfa77HMdyvf36dHIfI6LHGZ73b32GHeTCI6+Tzt5T+eCYS35IK+m6nNtzdJzyZPccvUbLRuXLMcWDx+vt6a2d7MX5jb189tRfFpOfPI5f/DzG59vwxymHAFP1exG6ez2flG9EgJgeK2PA4SQOTPmmmDnXWmm57v6s507m8Mxqj3UMmdzHeSj9mFc8UN9vuecGFluwTbfSB+GSNaXR1BBWlVFJHr0XF+G+O1Pxavv3h78/fe+5HZVOZX0YP/x7I/DjSZyaqKlVifWZlTLUoO61Skzfx815G9dJ605bkTvH5RicxfJyT1gwxtZ8h4DxvNbHraa56RABHAwzaVmfRcmjaTVf9vU40JoTdR3lqWkFS5zvdvtfOz95/tRf2z3Hef9zM374fDs9GrunYHbL0WzQ2mKk9xiFBBgpKcc2VqwqUpoDfBQQDLFiUptC2RfaTmMX+radRQuxmUqm4ZqWypn3UtQw9aQnFZp2P/kDvaH0JF9BfvlsQHcOHQXtF2iCgT4irxxWkZQ1Rte+87eD/gEZ7GQPw5JP/nH7wRN7x+GfPP7+o5u7m+9KxlbuDkvgfbOV2Un4VGYtJhg9lVkPViGZ4rRiuSrHbJlf8QPrGGjgePiOH2FoGeuAaqFB15VZxduFl69wcaAn54bQ4BewIbJY1779559uPrMfOc4f3N38cazE5l+qRZmXcWFKagm9Ys1UGuFkwBSnNRpsUyw15wujAxBSm03BjVEIU1DMAA4e4FJxMAgPpbdxfI3NIsAee1BaqHoOyYWsXoodozF77jUiOnmCHMJf/u+9m3d6Fo/zuBuPCpEydja8AAyKYH9LMMWzMr6d3QZVzCvr9kKy4a3xjAhOUOMWqZ2ULTDeTFSZeFh0MGBQGKKzhd5mQ5LLWO3TNElYeJ1zRzvUYdKkOEExHImVkR5OamXvUvnibTHreJy3xT42WuZQKSRDE9o0zEQSW1mUbFvCm2MEnhZiKx1GfNilNHxx1gpp+8WJtk63stTvifrzqCBZoVCCVPFgNQZ/xrR2oTfaTitpyGfkUY2j0QDy8fLW6Ix5uNhXzp/0Nop/968/f/il/cTjPIPf0UYYC6IdQiJQQVSMuJhZc8T1l8dNN4NzzmICI/Ax79ubpqHShP36jusxCYFORyUHALpGwKJ9h9BeLxqmE00G0D0AucKlECMsRRts72sRbfu9FmVL0xt/syuOc1uDrW5qoWf8Hh0/4lLNk0zJHgUXL6AUj9zuLXLBeGVuONWzXLNjDwvfTBbEg13o8rZ+7rmJayTvqAPbO+2y8H4X30c+p1GMqCJdM0M9xpsrFTYQyY+EHLMjUrS64z1Z2RKcXeZN8lwDRwu3PQpWfpyve6Nw7kSh51gca8Dc06pYjVBjbJppZKnASdeF0M1iUSxloJ0O7hmhhi2uVgEVsntj39gVx66wA4MqSLvwvmOLpgmloDQDsIuWzaxpe60mHIKlcCHApWV1pG2GrxHaLqr9DvcjUOs0HZc0c90x2nN5n17bKL+2tejhDOJqOBzTih9lOC/+8suflGyUwqD9lvBk6EQIF6szpu3R1mzVquFYTQ+B46YwBgt2sWpJQlSJtitDvW2ZY52Sq/Vin4GUmm0qWrxC+pCUfjHOOqIKanr7bggFa7UnW2TJ22qQeW/Uc6BBrHK5QmFJFHAbdJvdiRUqrpPEYFGN+ieqOJqKq9owbOvjSjaGbsXIQaV0U0gJjxWucsveIypttJD2kOQDwQDW9Rl/twEIvIdVpyhtI6R/OB8mrKH3MXfqxgIMdlSdWXV4lLbb43alR7D6eIDCxhotQvE9wKsUsS6WzRElGEKLWM5o/0FpAAHH7Dx4uSw9HZlUHGLjPkLzWcyQ2BTASzodlbbwVQnHkoejDcbY6IyFGWmltcb6BqjDdYG1DVZV+AeMeKFjAbQrjzPaYLYEQpxHml6EdXbDCAorKsLSKuOeeNcpeSypYVbOKB+4umuUpiWLsVbjl0wTl5Nm+JXFIdbhSZYi5qf0iPLEyhDYryyaJ41T4CciiCQQ9LJgH7RlRO83sypQw9j8Rnh5gNYIieIwUTJz74anvlLAqGyKZ4uuZLfAmTV+h2RO1slEaFKB9bBPFrIan8ogpLSgd7WRhNBnS6+zSryxduWpNzRmS/na4Rh3ZYR1EJuyuVs+lHymr1fMrJIVINmvh65U2EzrNbEjUjBU7ZZIoEnIMK+icB8GRTRmFuEGWcJboAFieuEpNO3t6aV4emDHDFpvIPCMyy4HX1OI42LZUfcFVIrmcmxrh1xadEf+KaZWXk1lLFw8nuEAtEqydIXCdsv3FlbmUsztAl42mwdmBPPQVg0hsl9vUF+E9cngxH1AfgsU0b4Tl5xIb9m33IO5dVqIREXfH805yUO1uKbyOgtpA9o5KY9Y6thqFRG38HZnX02gexeHzRIhXT3EYNjBKPmIMtWgufAD0g4kHZ2+xgFXKyXRu3HJqMJH114cPqogpeDoNVvzObpWKb1YZ6BQmvsKt2x9FZZXd4VDXF8VpaGs8Xosa5RLCK6HxtiWUcbNgtJSVKP3oXD3NrAQuV02jn/0OHen4a0HCAkpmLvql2H1PFtFSahfvppQc6sY5Ppqg0KhzyFblaTyIsHJcepNQlnR3XsRSkXBxacmXpZwFi2nblmpgazGssbelTaTPcb1MSxmp3Ntv9j9bZjFg/J0n1KYSNAaLe77bABja10RHMfNIvV0OhnX6Y7CbBpuz+/s8E7tcBwSgZX+euZ+okJESWZdo2qHZKftNJ9pSUH69g+IQrNe87h0iPTYbZfv7cpjtqYEFoDvjB8qUusEARDpCD8CZeFIpLLRibAmNGtuYe1EzQezQ4StXSnMtJwJyZTc0BxGqbSKaySAsIb7SyKzo+u2x4mK93EB8Ui4jIlC+CArHgt8GpIgfcnWPBXPFbDHf+zKoyAxFg8alX+vxgjKnK0jqy+X0voGahXnl01M+ZNnJDDLvVKZCDYtg+tmmdVpt2XkbyvoHp5V52RyIZmbi7AqmWKE2+7djWz2Fn0L/FXuyu7Ggg5s1blrsA/Ij/lVrLY5Jt3P7FqFGVy7gzbNIwtm/RSBlpIf6+T1GBpsaZVcc9gB6SqFF+nid7oEihdwPA6tKGNbp2iKkiOa2MZKHgJkrAcdrGbHPf2hpGemgX2v94Fsun1VHh5QzGltrc2g6fWitOIm6RhvztcrbGjOCRxOOyn8n6tPJWkisHiEUAjQQ5mCRVg8phCHtCBGFbyM5HluBC1b7SIe52HH+sIWPII0FwSm5+A9ukmI9q60C8PKa/jejNnGzFLZgkJouOPHr1hLv6ZaPlZKMr78+qtfvbJrFWYMrNBMuUk0vpRlWawpewXqPEa0hlranQ2lfLrFZJ0qA0otR4COFIaWDVAJBe9FOHbNyDfMLltkZiicXbP32sdQgJpFx73ZmaqWr1EOyDByiRzmxXX04CofzLpPZRM3Xp/i5gt7wHGW7+OQM2S+gFdB/WqlheX52oKC7Poq0Bem+CQ0pgTgd7m2o3u+K/MUqvxuEY3qXlT84GVKE1sFMzaWSMzcDFGyoGHer1cexnhb97p9Foyz0V8aW/eFy5AZW4OAEram/hAAZLtfnfzJQ7xrKizjEYXZgJLodRI7MkaGdBSx3jEbqQow3UMzQVFy0faNdDvuFhWXLqg0q6wiv8VQP8Z4BHhJ3OagShpEjinVQQXI2+FhdBe+NpqIOBMS8wVfo4KnhIWqXdrYCg/QXdm84cm3f310aw88ziFf81LkCNwVyJtKImenxtPKTsk41JKa99GVvE7ff6BH5S7pdoqs33gYe0NYaxFY09gOzLAzPL/DgYYWf++EheEyHzatU1mFljOFh+JTofvck/XrlBoKwRnIqxIhV935eb3de/Lts4crKxU2uihv/AoUh+QWbsYGrHwRle2lNt+KKMIMOErz1s+tR9dqJSBr5VS8hEPLdSsf86rTwH1Xlsog6j8izA2GNAdE8NaQ1yZByO7QGKEMyh6NLoTXF+/97P3ff/3Vrx8Eg3qcKYS10p9dDKWkMNmWdlGdRVlra6eDv0CgCK4Kd7NjL9DM4iCU8KZ3NYge99ZOjXG8flij+99z+D3rCt+k28W45/nVNu3ldv/5+ye7/ebZb676buNdx/8BbZgR1ME2kIoAAAAASUVORK5CYII=);
  394. background-repeat: no-repeat;
  395. background-size: 100% 100%;
  396. font-size: 32rpx;
  397. color: #fff;
  398. }
  399. .tab{
  400. display: flex;
  401. align-items: center;
  402. padding: 28rpx 0;
  403. .tab-item{
  404. width: 25%;
  405. // height: 150rpx;
  406. display: flex;
  407. justify-content: center;
  408. align-items: center;
  409. flex-direction: column;
  410. .icon{
  411. width: 96rpx;
  412. }
  413. .tab-name{
  414. font-size: 28rpx;
  415. line-height: 1;
  416. color: #222;
  417. padding-top: 12rpx;
  418. }
  419. .number{
  420. color: #000;
  421. font-size: 36rpx;
  422. line-height: 40rpx;
  423. font-weight: 700;
  424. padding-top: 8rpx;
  425. &.task{
  426. color: #4D73FF;
  427. }
  428. &.danger{
  429. color: #FE4644;
  430. }
  431. &.warn{
  432. color: #F4752D;
  433. }
  434. }
  435. }
  436. }
  437. }
  438. .alert-container{
  439. width: 96%;
  440. height: 60vh;
  441. overflow-y: auto;
  442. margin: 0 auto;
  443. }
  444. .app-container{
  445. .app-title{
  446. font-size: 34rpx;
  447. color: #000;
  448. line-height: 1;
  449. padding: 40rpx 0;
  450. font-weight: 600;
  451. }
  452. .app-list{
  453. display: flex;
  454. justify-content: space-between;
  455. flex-wrap: wrap;
  456. .app-item{
  457. display: flex;
  458. align-items: center;
  459. width: 330rpx;
  460. height: 160rpx;
  461. padding: 20rpx;
  462. box-sizing: border-box;
  463. border-left: 0;
  464. background-color: #fff;
  465. margin-bottom: 18rpx;
  466. border-radius: 20rpx;
  467. .logo{
  468. display: block;
  469. width: 66rpx;
  470. height: 66rpx;
  471. border: 1px solid #efe3e3;
  472. border-radius: 50%;
  473. overflow: hidden;
  474. }
  475. .app-cont{
  476. flex: 1;
  477. margin-left: 14rpx;
  478. .name{
  479. width: 100%;
  480. color: #222222;
  481. font-size: 32rpx;
  482. line-height: 1;
  483. margin-bottom: 20rpx;
  484. text-overflow: ellipsis;
  485. word-break: break-all;
  486. overflow: hidden;
  487. white-space: nowrap;
  488. }
  489. .desc{
  490. width: 203rpx;
  491. height: 48rpx;
  492. background: linear-gradient(128.57deg, rgba(253, 198, 48, 0.1), rgba(244, 125, 52, 0.1));
  493. color: #FFAB08;
  494. font-size: 24rpx;
  495. line-height: 48rpx;
  496. padding-left: 16rpx;
  497. box-sizing: border-box;
  498. }
  499. }
  500. }
  501. }
  502. }
  503. }
  504. </style>