plan.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827
  1. <template>
  2. <view class="nv-work">
  3. <image class="banner" src="../../static/bg.png"></image>
  4. <picker class="selectTap" mode="selector" :value="pickeIndex" range-key="robotName" :range="robotList"
  5. @change="changePicker">
  6. <view style="flex: 1;display: flex;align-items: center;justify-content: center;">
  7. <text class="icon iconfont icon-jifang" style="font-size: 16px;color: #fff;"></text>
  8. <text class="t1">{{robotName}}</text>
  9. </view>
  10. <uni-icons style="text-align: right;padding-right: 25rpx;" color="#fff" type="bottom" size="16"></uni-icons>
  11. </picker>
  12. <!-- <view class="selectTap" @click="showSelect">
  13. <view style="flex: 1;display: flex;align-items: center;justify-content: center;">
  14. <text class="icon iconfont icon-jifang" style="font-size: 16px;color: #fff;"></text>
  15. <text class="t1">{{robotName}}</text>
  16. </view>
  17. <uni-icons style="text-align: right;padding-right: 25rpx;" color="#fff" type="bottom" size="16"></uni-icons>
  18. </view>
  19. <view :class="[{secHeight:isSelect}]" :style="{height:heiIndex}" class="selcontent">
  20. <view class="vv">
  21. <view class="v1" v-for="(item,index) in robotList" :key="index" @click="changePicker(index)">
  22. <text class="vt1">{{item.robotName}}</text>
  23. </view>
  24. </view>
  25. </view> -->
  26. <view class="nv-header-list">
  27. <view class="h-l-li">
  28. <text class="icon iconfont icon-zhukongtongxin"
  29. :style="{color:robotStatus.wifiCom == 1?'#23E274':'#FB4925'}"></text>
  30. <text class="h-l-li-t">通讯状态</text>
  31. </view>
  32. <view class="h-l-li">
  33. <text class="icon iconfont icon-80dianliang"
  34. :style="{color:robotStatus.cap && robotStatus.cap >50 ?'#23E274':'#FB4925'}"></text>
  35. <text class="h-l-li-t">电量{{robotStatus.cap}}%</text>
  36. </view>
  37. <view class="h-l-li">
  38. <text class="icon iconfont icon-line-batterychargechongdianzhuangtai-01"
  39. :style="{color:!robotStatus.chargingtfStatus?'#FB4925':' #23E274'}"></text>
  40. <text class="h-l-li-t">充电状态</text>
  41. </view>
  42. <view class="h-l-li">
  43. <text class="icon iconfont icon-guzhang"
  44. :style="{color:robotStatus.openRadarStatus == false?'#23E274':'#FB4925'}"></text>
  45. <text class="h-l-li-t">有无障碍</text>
  46. </view>
  47. </view>
  48. <view class="nv-top" elevation="3px">
  49. <view class="left bg1">
  50. <view class="left-l">
  51. <text class="left-l-t1">{{robotStatus.workTime && robotStatus.workTime.toFixed(0) }} <text
  52. class="t1-1">小时</text></text>
  53. <text class="left-l-t2">运行时长</text>
  54. </view>
  55. <view class="left-r icon iconfont icon-gongyezujian-yibiaopan"
  56. style="font-size: 50px;color: #fff;opacity: 0.6;">
  57. </view>
  58. </view>
  59. <view class="left bg2">
  60. <view class="left-l">
  61. <text class="left-l-t1">{{robotStatus.workMile && robotStatus.workMile.toFixed(0)}} <text
  62. class="t1-1">公里</text></text>
  63. <text class="left-l-t2">运行里程</text>
  64. </view>
  65. <view class="left-r icon iconfont icon-lichengduihuanx"
  66. style="font-size: 50px;color: #fff;opacity: 0.6;">
  67. </view>
  68. </view>
  69. </view>
  70. <view class="nv-list" elevation="3px" v-for="(item,index) in taskList" :key="index"
  71. :style="{marginTop:index== 0 ? '80rpx' :'0'}">
  72. <view @click="changeType(item)">
  73. <view class="top">
  74. <text class="icon iconfont icon-xunjianguanlix" style="color: #0581FD;"></text>
  75. <text class="t2 ">{{item.taskName}}</text>
  76. </view>
  77. <view class="nv-done" :style="{background:item.taskStatus == 0 ? '#E8A71C' : item.taskStatus == 1 ? '#EA743B' :item.taskStatus == 2?
  78. '#959595' : item.taskStatus == 3 ? '#3FBC4E' :item.taskStatus == 4 ? '#0581FD' :'#5CC2B0' }">
  79. <text class="d-t1">{{taskStatus(item.taskStatus)}}</text>
  80. </view>
  81. </view>
  82. <view class="center">
  83. <view class="c-v0">
  84. <view class="c-v0-d1" @click="jumpDetail(0,item)">
  85. <view class="d1-t">
  86. <text class="icon iconfont icon-xunjianrenwuguanli"
  87. style="color: #5FB23A;font-size: 14px;margin-right:10rpx"></text>
  88. <text>正常点</text>
  89. </view>
  90. <view class="d1-b">
  91. <text style="color: #5FB23A;">{{item.normalPointNum}}</text>
  92. <text class="icon iconfont icon-xiangyoujiantou"
  93. style="color: #B4B4B4;font-size: 12px;"></text>
  94. </view>
  95. </view>
  96. <view class="c-v0-d1" @click="jumpDetail(1,item)">
  97. <view class="d1-t">
  98. <text class="icon iconfont icon-xunjianrenwuguanli"
  99. style="color: #E95C2B;font-size: 14px;margin-right:10rpx"></text>
  100. <text>异常点</text>
  101. </view>
  102. <view class="d1-b">
  103. <text style="color: #E95C2B">{{item.warningPointNum}}</text>
  104. <text class="icon iconfont icon-xiangyoujiantou"
  105. style="color: #B4B4B4;font-size: 12px;"></text>
  106. </view>
  107. </view>
  108. <view class="c-v0-d1">
  109. <view class="d1-t">
  110. <text class="icon iconfont icon-shijian"
  111. style="color: #0581FD;font-size: 14px;margin-right:10rpx"></text>
  112. <text>更新时间</text>
  113. </view>
  114. <view class="d1-b">
  115. <text style="color: #666;font-size: 12px;">{{item.updateTime.substr(5,18)}}</text>
  116. </view>
  117. </view>
  118. </view>
  119. <view :class="[{activeHeight:item.show},{nomalHeight:true}]">
  120. <view class="c-v2">
  121. <view class="v2-1">
  122. <view class="v2-top">
  123. <text class="v2-t1">{{item.startTime.substr(5,18)}}</text>
  124. </view>
  125. <view class="v2-bottom">
  126. <text class="icon iconfont text icon-shijian-"></text>
  127. <text style="color: #31B643;padding-left: 5rpx;" class="text">开始时间</text>
  128. </view>
  129. </view>
  130. <view class="v2-1">
  131. <view class="v2-top">
  132. <text class="v2-t1">{{item.endTime.substr(5,18)}}</text>
  133. </view>
  134. <view class="v2-bottom">
  135. <text style="color: #3F9BF1;" class="icon iconfont text icon-shijian-"></text>
  136. <text style="color: #3F9BF1;padding-left: 5rpx;" class="text">结束时间</text>
  137. </view>
  138. </view>
  139. </view>
  140. <view class="c-v3" style="position: relative;z-index: 2;">
  141. <view class="v3-1">
  142. <text class="v3-1-t1">进度:</text>
  143. <view class="v3-1-1"><text class="v3-1-t2">{{item.checkedPointNum}}</text><text
  144. class="v3-1-t3">/{{item.totalPointNum}}</text></view>
  145. </view>
  146. <ProgressBar :Width="item.taskProgress" Type="aqua" :Vice="false"></ProgressBar>
  147. </view>
  148. </view>
  149. </view>
  150. </view>
  151. <view class="creatView" v-if="noData">
  152. <text class="icon iconfont icon-zanwu"></text>
  153. <text class="tx1">暂无任务</text>
  154. <button class="btn1" type="primary" @click="openDialog">创建任务</button>
  155. </view>
  156. <view class="loadingView" v-if="loading">
  157. <view class="lds-hourglass"></view>
  158. </view>
  159. <view class="empty" v-if="onOff">
  160. <text class="t1">没有更多了...</text>
  161. </view>
  162. <view class="moreView" v-if="!onOff && !loading && !noData">
  163. <view class="lds-ellipsis">
  164. <view></view>
  165. <view></view>
  166. <view></view>
  167. <view></view>
  168. </view>
  169. </view>
  170. </view>
  171. </template>
  172. <script>
  173. import ProgressBar from '@/components/Progress-Bar/Progress-Bar';
  174. import {
  175. BeforeNavigateTo
  176. } from '../../common/utils.js'
  177. import {
  178. mapGetters
  179. } from 'vuex'
  180. import {
  181. getRobotStauts,
  182. currentTask,
  183. getRobotList,
  184. addTask
  185. } from '@/common/api.js'
  186. export default {
  187. data() {
  188. return {
  189. show: true,
  190. robotName: null,
  191. pickeIndex: 0,
  192. loading: true,
  193. robotList: [],
  194. isSelect: false,
  195. robotData: {},
  196. pageIndex: 1,
  197. noData: false,
  198. heiIndex:0,
  199. robotStatus: {
  200. },
  201. taskList: [],
  202. onOff: false
  203. }
  204. },
  205. components: {
  206. ProgressBar,
  207. },
  208. onNavigationBarButtonTap(e) {
  209. uni.navigateTo({
  210. url:'/pages/webview/homeSelect'
  211. })
  212. },
  213. onLoad() {
  214. this.getRobot()
  215. uni.$on('HpopLog1', (data) => {
  216. addTask({
  217. robotId: this.robotData.robotId
  218. }).then(res => {
  219. this.onOff = false
  220. this.loading = true
  221. this.noData = false
  222. this.taskList = []
  223. this.pageIndex = 1
  224. this.currentTask()
  225. }).catch(e => {
  226. console.log(e)
  227. })
  228. });
  229. uni.$on("backhome", () => {
  230. this.onOff = false
  231. this.loading = true
  232. this.noData = false
  233. this.getRobot()
  234. })
  235. },
  236. async onPullDownRefresh() {
  237. this.onOff = false
  238. this.loading = true
  239. this.noData = false
  240. this.taskList = []
  241. this.pageIndex = 1
  242. this.getRobotStauts()
  243. this.currentTask()
  244. setTimeout(() => {
  245. uni.stopPullDownRefresh();
  246. }, 1000);
  247. },
  248. onReachBottom() {
  249. if (this.onOff) {
  250. return
  251. }
  252. ++this.pageIndex
  253. this.currentTask()
  254. },
  255. computed: {
  256. ...mapGetters([
  257. 'Token'
  258. ]),
  259. },
  260. methods: {
  261. showSelect() {
  262. let index = this.robotList.length * 70 +60
  263. this.isSelect ? this.heiIndex = `0rpx` :this.heiIndex = `${index}rpx`
  264. this.isSelect = !this.isSelect
  265. },
  266. jumpDetail(index, item) {
  267. uni.setStorageSync("xjapptaskId", {
  268. flag: index,
  269. taskId: item.taskId,
  270. runTimes: item.runTimes
  271. })
  272. uni.navigateTo({
  273. url: '/pages/native/datalist/inProcess'
  274. })
  275. },
  276. openDialog() {
  277. uni.navigateTo({
  278. url:'/pages/webview/popupHome',
  279. })
  280. },
  281. async getRobot() {
  282. this.taskList = []
  283. this.pageIndex = 1
  284. let res = await getRobotList()
  285. this.robotList = res.filter(item => {
  286. return item.followed == 1
  287. }) || []
  288. this.robotName = this.robotList[0].robotName
  289. this.robotData = this.robotList[0]
  290. this.getRobotStauts()
  291. this.currentTask()
  292. },
  293. taskStatus(type) {
  294. switch (type) {
  295. case 0:
  296. return '待执行'
  297. case 1:
  298. return '正在执行'
  299. case 2:
  300. return '已终止'
  301. case 3:
  302. return '已完成'
  303. case 4:
  304. return '已超期'
  305. case 5:
  306. return '已暂停'
  307. }
  308. },
  309. changeType(item) {
  310. item.show = item.show == undefined ? false : !item.show
  311. },
  312. changePicker(e) {
  313. this.heiIndex = `0rpx`
  314. this.isSelect = false
  315. let data = this.robotList[e.target.value]
  316. this.loading = true
  317. this.pickeIndex = e.target.value
  318. this.robotData = data
  319. this.robotName = data.robotName
  320. this.pageIndex = 1
  321. this.noData = false
  322. this.onOff = false
  323. this.taskList = []
  324. this.getRobotStauts()
  325. this.currentTask()
  326. },
  327. currentTask() {
  328. currentTask({
  329. robotId: this.robotData.robotId,
  330. pageIndex: this.pageIndex,
  331. pageSize: 10
  332. }).then(res => {
  333. res.map(item => {
  334. item.show = false
  335. })
  336. this.taskList = this.taskList.concat(res)
  337. if (res.length < 10) this.onOff = true
  338. if (this.taskList.length == 0) {
  339. this.noData = true, this.onOff = false
  340. }
  341. this.loading = false
  342. }).catch(e => {
  343. this.loading = false
  344. this.noData = true
  345. this.onOff = false
  346. console.log(e)
  347. })
  348. },
  349. getRobotStauts() {
  350. getRobotStauts({
  351. robotId: this.robotData.robotId
  352. }).then(res => {
  353. this.robotStatus = res
  354. }).catch(e => {
  355. console.log(e)
  356. })
  357. }
  358. }
  359. }
  360. </script>
  361. <style scoped lang="scss">
  362. @import '@/components/p-loading/loading10';
  363. @import '@/components/p-loading/loading8';
  364. .creatView {
  365. display: flex;
  366. justify-content: center;
  367. align-items: center;
  368. flex-direction: column;
  369. margin-top: 230rpx;
  370. .icon-zanwu {
  371. font-size: 90px;
  372. color: #86B5E2;
  373. }
  374. .tx1 {
  375. font-size: 30rpx;
  376. padding: 15rpx;
  377. color: #86B5E2;
  378. }
  379. .btn1 {
  380. width: 260rpx;
  381. margin-top: 93rpx;
  382. font-size: 28rpx;
  383. line-height: 80rpx;
  384. height: 80rpx;
  385. border-radius: 40rpx;
  386. }
  387. }
  388. .loadingView {
  389. margin-top: 300rpx;
  390. display: flex;
  391. justify-content: center;
  392. align-items: center;
  393. }
  394. .icon {
  395. font-size: 22px;
  396. color: #23E274;
  397. }
  398. .moreView {
  399. display: flex;
  400. justify-content: center;
  401. align-items: center;
  402. }
  403. .empty {
  404. display: flex;
  405. justify-content: center;
  406. align-items: center;
  407. .t1 {
  408. font-size: 28rpx;
  409. color: #999;
  410. padding-bottom: 20rpx;
  411. }
  412. }
  413. .activeHeight {
  414. height: 330rpx !important;
  415. transition: height 0.3s;
  416. }
  417. .secHeight{
  418. transition: height 0.3s;
  419. }
  420. .nomalHeight {
  421. height: 0rpx;
  422. overflow: hidden;
  423. }
  424. .nv-work {
  425. .banner {
  426. width: 750rpx;
  427. height: 348rpx;
  428. background: #0581FD;
  429. }
  430. .nv-header-list {
  431. display: flex;
  432. position: absolute;
  433. text-align: center;
  434. left: 20rpx;
  435. right: 20rpx;
  436. top: 120rpx;
  437. .h-l-li {
  438. flex: 1;
  439. display: flex;
  440. flex-direction: column;
  441. justify-content: center;
  442. align-items: center;
  443. .h-l-li-t {
  444. font-size: 22rpx;
  445. padding-top: 5rpx;
  446. color: #fff;
  447. }
  448. }
  449. }
  450. .nv-top {
  451. position: absolute;
  452. background-color: #FFFFFF;
  453. border-radius: 18rpx;
  454. box-shadow: 1px 2px 10px 0px #E5E5E5;
  455. top: 250rpx;
  456. left: 20rpx;
  457. right: 20rpx;
  458. align-items: center;
  459. padding: 0 10rpx 20rpx 10rpx;
  460. display: flex;
  461. .bg1 {
  462. background: linear-gradient(-83deg, #5B6EFF, #AFB9FF);
  463. }
  464. .bg2 {
  465. background: linear-gradient(-83deg, #1FAEB3, #90E6E9);
  466. }
  467. .left {
  468. width: 300rpx;
  469. margin: 25rpx 10rpx;
  470. border-radius: 15rpx;
  471. height: 100rpx;
  472. padding: 20rpx;
  473. display: flex;
  474. justify-content: space-between;
  475. .left-l {
  476. display: flex;
  477. flex-direction: column;
  478. .left-l-t1 {
  479. font-size: 40rpx;
  480. font-weight: bold;
  481. color: #fff;
  482. .t1-1 {
  483. font-size: 22rpx;
  484. font-weight: normal;
  485. margin-left: 25rpx;
  486. }
  487. }
  488. .left-l-t2 {
  489. font-size: 26rpx;
  490. margin-top: 18rpx;
  491. color: #fff;
  492. }
  493. }
  494. .left-r {}
  495. }
  496. }
  497. .selcontent {
  498. position: absolute;
  499. top: 80rpx;
  500. left: 20rpx;
  501. right: 20rpx;
  502. z-index: 9999999999;
  503. display: block;
  504. overflow: scroll;
  505. background-color: #46A0F9;
  506. height: 0;
  507. border-radius: 15rpx;
  508. border-bottom-right-radius: 15rpx;
  509. .vv{
  510. padding: 30rpx 0;
  511. align-items: center;
  512. text-align: center;
  513. width: 100%;
  514. }
  515. .v1 {
  516. padding: 13rpx;
  517. display: block;
  518. .vt1 {
  519. display: block;
  520. color: #fff;
  521. font-size:30rpx;
  522. }
  523. .active{
  524. color: #46A0F9;
  525. }
  526. }
  527. }
  528. .selectTap {
  529. position: absolute;
  530. top: 20rpx;
  531. height: 53rpx;
  532. border-radius: 6px;
  533. background: #46A0F9;
  534. left: 20rpx;
  535. right: 20rpx;
  536. align-items: center;
  537. text-align: center;
  538. display: flex;
  539. flex-direction: row;
  540. .t1 {
  541. color: #fff;
  542. font-size: 28rpx;
  543. padding: 0 10rpx 0 5rpx;
  544. }
  545. }
  546. .nv-list {
  547. position: relative;
  548. overflow: hidden;
  549. z-index: 99999;
  550. margin: -50rpx 20rpx 30rpx 20rpx;
  551. background-color: #FFFFFF;
  552. border-radius: 18rpx;
  553. box-shadow: 1px 2px 10px 0px #E5E5E5;
  554. .nv-done {
  555. position: absolute;
  556. top: 5rpx;
  557. right: -35rpx;
  558. display: flex;
  559. align-items: center;
  560. justify-content: center;
  561. width: 150rpx;
  562. height: 40rpx;
  563. line-height: 40rpx;
  564. background: #3FBC4E;
  565. text-align: center;
  566. transform: rotate(30deg);
  567. .d-t1 {
  568. color: #fff;
  569. font-size: 20rpx;
  570. }
  571. }
  572. .top {
  573. display: flex;
  574. flex-direction: row;
  575. align-items: center;
  576. padding: 20rpx 0;
  577. margin: 0rpx 22rpx 0 22rpx;
  578. .t2 {
  579. color: #333;
  580. font-size: 30rpx;
  581. font-weight: bold;
  582. padding-left: 10rpx;
  583. }
  584. }
  585. .center {
  586. padding: 20rpx 20rpx;
  587. .c-v0 {
  588. padding: 10rpx 10rpx;
  589. overflow: hidden;
  590. flex-direction: row;
  591. display: flex;
  592. justify-content: space-between;
  593. .c-v0-d1 {
  594. text-align: left;
  595. .d1-t {
  596. color: #000000;
  597. font-size: 24rpx;
  598. margin-bottom: 10rpx;
  599. }
  600. .di-b {
  601. text-align: right;
  602. font-size: 28rpx;
  603. }
  604. }
  605. }
  606. .ct-1 {
  607. color: #666;
  608. font-size: 30rpx;
  609. }
  610. .c-v1 {
  611. margin-top: 50rpx;
  612. display: flex;
  613. justify-content: space-between;
  614. align-items: center;
  615. .left {
  616. .ct-2 {
  617. color: #F76424;
  618. font-size: 44rpx;
  619. font-weight: bold;
  620. }
  621. .ct-3 {
  622. color: #F76424;
  623. font-size: 24rpx;
  624. }
  625. }
  626. .right {
  627. display: flex;
  628. align-items: center;
  629. .r-t1 {
  630. font-size: 26rpx;
  631. color: #5B5B5B;
  632. }
  633. }
  634. }
  635. .c-v2 {
  636. display: flex;
  637. margin-top: 30rpx;
  638. justify-content: space-between;
  639. .v2-1 {
  640. width: 325rpx;
  641. height: 100rpx;
  642. background: #EEEEEE;
  643. padding: 15rpx;
  644. border-radius: 15rpx;
  645. margin: 0 10rpx;
  646. .v2-bottom {
  647. margin-top: 10rpx;
  648. .text {
  649. font-size: 26rpx;
  650. }
  651. }
  652. .v2-top {
  653. .v2-t1 {
  654. color: #000000;
  655. font-size: 30rpx;
  656. font-weight: bold;
  657. }
  658. .v2-t2 {
  659. color: #000000;
  660. font-weight: bold;
  661. font-size: 30rpx;
  662. padding-left: 10rpx;
  663. }
  664. }
  665. }
  666. }
  667. .c-v3 {
  668. width: 640rpx;
  669. margin: 30rpx 0rpx 30rpx 0;
  670. .v3-1 {
  671. display: flex;
  672. padding: 0 15rpx;
  673. align-items: center;
  674. .v3-1-t1 {
  675. font-size: 30rpx;
  676. color: #000000;
  677. padding-right: 5rpx;
  678. }
  679. .v3-1-1 {
  680. .v3-1-t2 {
  681. color: #3F9BF1;
  682. font-size: 30rpx;
  683. }
  684. .v3-1-t3 {
  685. color: #000000;
  686. font-size: 30rpx;
  687. }
  688. }
  689. }
  690. }
  691. .c-bottom {
  692. display: flex;
  693. align-items: center;
  694. padding-bottom: 30rpx;
  695. justify-content: space-around;
  696. .c-b-l {
  697. background: linear-gradient(40deg, #87C589, #208E51);
  698. }
  699. .c-b-r {
  700. background: linear-gradient(45deg, #FA7839, #DDBE6A);
  701. }
  702. .c-cle {
  703. align-items: center;
  704. text-align: center;
  705. width: 150rpx;
  706. height: 150rpx;
  707. border-radius: 50%;
  708. display: flex;
  709. justify-content: center;
  710. .c-cle-n {
  711. width: 100rpx;
  712. height: 100rpx;
  713. border-radius: 50%;
  714. display: flex;
  715. flex-direction: column;
  716. align-items: center;
  717. justify-content: center;
  718. }
  719. .c-cle-l {
  720. background: #D7F0E1;
  721. .c-cle-n-t1 {
  722. font-size: 22rpx;
  723. color: #2F9659;
  724. }
  725. .c-cle-n-t2 {
  726. font-size: 26rpx;
  727. color: #2F9659;
  728. font-weight: bold;
  729. }
  730. }
  731. .c-cle-r {
  732. background: #FEECD6;
  733. .c-cle-n-t1 {
  734. font-size: 22rpx;
  735. color: #F97C3B;
  736. }
  737. .c-cle-n-t2 {
  738. font-size: 26rpx;
  739. color: #F97C3B;
  740. font-weight: bold;
  741. }
  742. }
  743. }
  744. }
  745. }
  746. }
  747. }
  748. </style>