plan.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835
  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 ? '180rpx' :'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' :'#959595' }">
  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. const xsubNVue = uni.getSubNVueById('CpopLog3')
  210. xsubNVue.show('fade-in', 300, () => {
  211. });
  212. },
  213. onLoad() {
  214. this.getRobot()
  215. uni.$on('ApopLog1', (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('CpopLog3', (data) => {
  230. const subNVue1 = uni.getSubNVueById('ApopLog1')
  231. subNVue1.show('fade-in', 300, () => {
  232. });
  233. });
  234. uni.$on("backhome", () => {
  235. this.getRobot()
  236. })
  237. },
  238. async onPullDownRefresh() {
  239. this.onOff = false
  240. this.loading = true
  241. this.noData = false
  242. this.taskList = []
  243. this.pageIndex = 1
  244. this.getRobotStauts()
  245. this.currentTask()
  246. setTimeout(() => {
  247. uni.stopPullDownRefresh();
  248. }, 1000);
  249. },
  250. onReachBottom() {
  251. if (this.onOff) {
  252. return
  253. }
  254. ++this.pageIndex
  255. this.currentTask()
  256. },
  257. computed: {
  258. ...mapGetters([
  259. 'Token'
  260. ]),
  261. },
  262. methods: {
  263. showSelect() {
  264. let index = this.robotList.length * 70 +60
  265. this.isSelect ? this.heiIndex = `0rpx` :this.heiIndex = `${index}rpx`
  266. this.isSelect = !this.isSelect
  267. },
  268. jumpDetail(index, item) {
  269. uni.setStorageSync("xjapptaskId", {
  270. flag: index,
  271. taskId: item.taskId,
  272. runTimes: item.runTimes
  273. })
  274. uni.navigateTo({
  275. url: '/pages/native/datalist/inProcess'
  276. })
  277. },
  278. openDialog() {
  279. const subNVue = uni.getSubNVueById('ApopLog1')
  280. subNVue.show('fade-in', 300, () => {
  281. });
  282. // this.$refs.popup.open()
  283. },
  284. async getRobot() {
  285. this.taskList = []
  286. this.pageIndex = 1
  287. let res = await getRobotList()
  288. this.robotList = res.filter(item => {
  289. return item.followed == 1
  290. }) || []
  291. this.robotName = res[0].robotName
  292. this.robotData = res[0]
  293. this.getRobotStauts()
  294. this.currentTask()
  295. },
  296. taskStatus(type) {
  297. switch (type) {
  298. case 0:
  299. return '待执行'
  300. case 1:
  301. return '正在执行'
  302. case 2:
  303. return '已终止'
  304. case 3:
  305. return '已完成'
  306. case 4:
  307. return '已超期'
  308. case 5:
  309. return '已暂停'
  310. }
  311. },
  312. changeType(item) {
  313. item.show = item.show == undefined ? false : !item.show
  314. },
  315. changePicker(e) {
  316. this.heiIndex = `0rpx`
  317. this.isSelect = false
  318. let data = this.robotList[e.target.value]
  319. this.loading = true
  320. this.pickeIndex = e.target.value
  321. this.robotData = data
  322. this.robotName = data.robotName
  323. this.pageIndex = 1
  324. this.noData = false
  325. this.onOff = false
  326. this.taskList = []
  327. this.getRobotStauts()
  328. this.currentTask()
  329. },
  330. currentTask() {
  331. currentTask({
  332. robotId: this.robotData.robotId,
  333. pageIndex: this.pageIndex,
  334. pageSize: 10
  335. }).then(res => {
  336. res.map(item => {
  337. item.show = false
  338. })
  339. this.taskList = this.taskList.concat(res)
  340. if (res.length < 10) this.onOff = true
  341. if (this.taskList.length == 0) {
  342. this.noData = true, this.onOff = false
  343. }
  344. this.loading = false
  345. }).catch(e => {
  346. this.loading = false
  347. this.noData = true
  348. this.onOff = false
  349. console.log(e)
  350. })
  351. },
  352. getRobotStauts() {
  353. getRobotStauts({
  354. robotId: this.robotData.robotId
  355. }).then(res => {
  356. this.robotStatus = res
  357. }).catch(e => {
  358. console.log(e)
  359. })
  360. }
  361. }
  362. }
  363. </script>
  364. <style scoped lang="scss">
  365. @import '@/components/p-loading/loading10';
  366. @import '@/components/p-loading/loading8';
  367. .creatView {
  368. display: flex;
  369. justify-content: center;
  370. align-items: center;
  371. flex-direction: column;
  372. margin-top: 230rpx;
  373. .icon-zanwu {
  374. font-size: 90px;
  375. color: #86B5E2;
  376. }
  377. .tx1 {
  378. font-size: 30rpx;
  379. padding: 15rpx;
  380. color: #86B5E2;
  381. }
  382. .btn1 {
  383. width: 260rpx;
  384. margin-top: 93rpx;
  385. font-size: 28rpx;
  386. line-height: 80rpx;
  387. height: 80rpx;
  388. border-radius: 40rpx;
  389. }
  390. }
  391. .loadingView {
  392. margin-top: 300rpx;
  393. display: flex;
  394. justify-content: center;
  395. align-items: center;
  396. }
  397. .icon {
  398. font-size: 22px;
  399. color: #23E274;
  400. }
  401. .moreView {
  402. display: flex;
  403. justify-content: center;
  404. align-items: center;
  405. }
  406. .empty {
  407. display: flex;
  408. justify-content: center;
  409. align-items: center;
  410. .t1 {
  411. font-size: 28rpx;
  412. color: #999;
  413. padding-bottom: 20rpx;
  414. }
  415. }
  416. .activeHeight {
  417. height: 330rpx !important;
  418. transition: height 0.3s;
  419. }
  420. .secHeight{
  421. transition: height 0.3s;
  422. }
  423. .nomalHeight {
  424. height: 0rpx;
  425. overflow: hidden;
  426. }
  427. .nv-work {
  428. .banner {
  429. width: 750rpx;
  430. height: 348rpx;
  431. background: #0581FD;
  432. }
  433. .nv-header-list {
  434. display: flex;
  435. position: absolute;
  436. text-align: center;
  437. left: 20rpx;
  438. right: 20rpx;
  439. top: 120rpx;
  440. .h-l-li {
  441. flex: 1;
  442. display: flex;
  443. flex-direction: column;
  444. justify-content: center;
  445. align-items: center;
  446. .h-l-li-t {
  447. font-size: 22rpx;
  448. padding-top: 5rpx;
  449. color: #fff;
  450. }
  451. }
  452. }
  453. .nv-top {
  454. position: absolute;
  455. background-color: #FFFFFF;
  456. border-radius: 18rpx;
  457. box-shadow: 1px 2px 10px 0px #E5E5E5;
  458. top: 250rpx;
  459. left: 20rpx;
  460. right: 20rpx;
  461. align-items: center;
  462. padding: 0 10rpx 20rpx 10rpx;
  463. display: flex;
  464. .bg1 {
  465. background: linear-gradient(-83deg, #5B6EFF, #AFB9FF);
  466. }
  467. .bg2 {
  468. background: linear-gradient(-83deg, #1FAEB3, #90E6E9);
  469. }
  470. .left {
  471. width: 300rpx;
  472. margin: 25rpx 10rpx;
  473. border-radius: 15rpx;
  474. height: 100rpx;
  475. padding: 20rpx;
  476. display: flex;
  477. justify-content: space-between;
  478. .left-l {
  479. display: flex;
  480. flex-direction: column;
  481. .left-l-t1 {
  482. font-size: 40rpx;
  483. font-weight: bold;
  484. color: #fff;
  485. .t1-1 {
  486. font-size: 22rpx;
  487. font-weight: normal;
  488. margin-left: 25rpx;
  489. }
  490. }
  491. .left-l-t2 {
  492. font-size: 26rpx;
  493. margin-top: 18rpx;
  494. color: #fff;
  495. }
  496. }
  497. .left-r {}
  498. }
  499. }
  500. .selcontent {
  501. position: absolute;
  502. top: 80rpx;
  503. left: 20rpx;
  504. right: 20rpx;
  505. z-index: 9999999999;
  506. display: block;
  507. overflow: scroll;
  508. background-color: #46A0F9;
  509. height: 0;
  510. border-radius: 15rpx;
  511. border-bottom-right-radius: 15rpx;
  512. .vv{
  513. padding: 30rpx 0;
  514. align-items: center;
  515. text-align: center;
  516. width: 100%;
  517. }
  518. .v1 {
  519. padding: 13rpx;
  520. display: block;
  521. .vt1 {
  522. display: block;
  523. color: #fff;
  524. font-size:30rpx;
  525. }
  526. .active{
  527. color: #46A0F9;
  528. }
  529. }
  530. }
  531. .selectTap {
  532. position: absolute;
  533. top: 20rpx;
  534. height: 53rpx;
  535. border-radius: 6px;
  536. background: #46A0F9;
  537. left: 20rpx;
  538. right: 20rpx;
  539. align-items: center;
  540. text-align: center;
  541. display: flex;
  542. flex-direction: row;
  543. .t1 {
  544. color: #fff;
  545. font-size: 28rpx;
  546. padding: 0 10rpx 0 5rpx;
  547. }
  548. }
  549. .nv-list {
  550. position: relative;
  551. overflow: hidden;
  552. z-index: 99999;
  553. margin: 0rpx 20rpx 30rpx 20rpx;
  554. background-color: #FFFFFF;
  555. border-radius: 18rpx;
  556. box-shadow: 1px 2px 10px 0px #E5E5E5;
  557. .nv-done {
  558. position: absolute;
  559. top: 5rpx;
  560. right: -35rpx;
  561. display: flex;
  562. align-items: center;
  563. justify-content: center;
  564. width: 150rpx;
  565. height: 40rpx;
  566. line-height: 40rpx;
  567. background: #3FBC4E;
  568. text-align: center;
  569. transform: rotate(30deg);
  570. .d-t1 {
  571. color: #fff;
  572. font-size: 20rpx;
  573. }
  574. }
  575. .top {
  576. display: flex;
  577. flex-direction: row;
  578. align-items: center;
  579. padding: 20rpx 0;
  580. margin: 0rpx 22rpx 0 22rpx;
  581. .t2 {
  582. color: #333;
  583. font-size: 30rpx;
  584. font-weight: bold;
  585. padding-left: 10rpx;
  586. }
  587. }
  588. .center {
  589. padding: 20rpx 20rpx;
  590. .c-v0 {
  591. padding: 10rpx 10rpx;
  592. overflow: hidden;
  593. flex-direction: row;
  594. display: flex;
  595. justify-content: space-between;
  596. .c-v0-d1 {
  597. text-align: left;
  598. .d1-t {
  599. color: #000000;
  600. font-size: 24rpx;
  601. margin-bottom: 10rpx;
  602. }
  603. .di-b {
  604. text-align: right;
  605. font-size: 28rpx;
  606. }
  607. }
  608. }
  609. .ct-1 {
  610. color: #666;
  611. font-size: 30rpx;
  612. }
  613. .c-v1 {
  614. margin-top: 50rpx;
  615. display: flex;
  616. justify-content: space-between;
  617. align-items: center;
  618. .left {
  619. .ct-2 {
  620. color: #F76424;
  621. font-size: 44rpx;
  622. font-weight: bold;
  623. }
  624. .ct-3 {
  625. color: #F76424;
  626. font-size: 24rpx;
  627. }
  628. }
  629. .right {
  630. display: flex;
  631. align-items: center;
  632. .r-t1 {
  633. font-size: 26rpx;
  634. color: #5B5B5B;
  635. }
  636. }
  637. }
  638. .c-v2 {
  639. display: flex;
  640. margin-top: 30rpx;
  641. justify-content: space-between;
  642. .v2-1 {
  643. width: 325rpx;
  644. height: 100rpx;
  645. background: #EEEEEE;
  646. padding: 15rpx;
  647. border-radius: 15rpx;
  648. margin: 0 10rpx;
  649. .v2-bottom {
  650. margin-top: 10rpx;
  651. .text {
  652. font-size: 26rpx;
  653. }
  654. }
  655. .v2-top {
  656. .v2-t1 {
  657. color: #000000;
  658. font-size: 30rpx;
  659. font-weight: bold;
  660. }
  661. .v2-t2 {
  662. color: #000000;
  663. font-weight: bold;
  664. font-size: 30rpx;
  665. padding-left: 10rpx;
  666. }
  667. }
  668. }
  669. }
  670. .c-v3 {
  671. width: 640rpx;
  672. margin: 30rpx 0rpx 30rpx 0;
  673. .v3-1 {
  674. display: flex;
  675. padding: 0 15rpx;
  676. align-items: center;
  677. .v3-1-t1 {
  678. font-size: 30rpx;
  679. color: #000000;
  680. padding-right: 5rpx;
  681. }
  682. .v3-1-1 {
  683. .v3-1-t2 {
  684. color: #3F9BF1;
  685. font-size: 30rpx;
  686. }
  687. .v3-1-t3 {
  688. color: #000000;
  689. font-size: 30rpx;
  690. }
  691. }
  692. }
  693. }
  694. .c-bottom {
  695. display: flex;
  696. align-items: center;
  697. padding-bottom: 30rpx;
  698. justify-content: space-around;
  699. .c-b-l {
  700. background: linear-gradient(40deg, #87C589, #208E51);
  701. }
  702. .c-b-r {
  703. background: linear-gradient(45deg, #FA7839, #DDBE6A);
  704. }
  705. .c-cle {
  706. align-items: center;
  707. text-align: center;
  708. width: 150rpx;
  709. height: 150rpx;
  710. border-radius: 50%;
  711. display: flex;
  712. justify-content: center;
  713. .c-cle-n {
  714. width: 100rpx;
  715. height: 100rpx;
  716. border-radius: 50%;
  717. display: flex;
  718. flex-direction: column;
  719. align-items: center;
  720. justify-content: center;
  721. }
  722. .c-cle-l {
  723. background: #D7F0E1;
  724. .c-cle-n-t1 {
  725. font-size: 22rpx;
  726. color: #2F9659;
  727. }
  728. .c-cle-n-t2 {
  729. font-size: 26rpx;
  730. color: #2F9659;
  731. font-weight: bold;
  732. }
  733. }
  734. .c-cle-r {
  735. background: #FEECD6;
  736. .c-cle-n-t1 {
  737. font-size: 22rpx;
  738. color: #F97C3B;
  739. }
  740. .c-cle-n-t2 {
  741. font-size: 26rpx;
  742. color: #F97C3B;
  743. font-weight: bold;
  744. }
  745. }
  746. }
  747. }
  748. }
  749. }
  750. }
  751. </style>