index.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802
  1. <template>
  2. <view class="box">
  3. <!-- <van-tabs v-model="active">
  4. <van-tab title="日"> -->
  5. <view class="user-box">
  6. <image class="top-right" src="https://app.tjzhxx.cn:11443/image/enterprise_icon.png" mode=""></image>
  7. <view class="right-box">
  8. <view class="name">刘嘉琳</view>
  9. <view class="info-box">
  10. <view class="info-item">
  11. <view class="number">78</view>
  12. <view class="word">年龄</view>
  13. </view>
  14. <view class="info-item">
  15. <view class="number">156</view>
  16. <view class="word">身高</view>
  17. </view>
  18. <view class="info-item">
  19. <view class="number">47.3</view>
  20. <view class="word">体重</view>
  21. </view>
  22. </view>
  23. </view>
  24. </view>
  25. <view class="content-box">
  26. <view class="number-box">
  27. <view class="box-item" :class="{ 'heart-selected': selectedItem === 'item1' }"
  28. @click="setSelectedItem('item1')">
  29. <view class="item-top">
  30. <view class="item-word">心率</view>
  31. <image
  32. :src="selectedItem === 'item1' ?'/static/img/heart-icon.png':'/static/img/unheart-icon.png'"
  33. mode=""></image>
  34. </view>
  35. <view class="item-under">
  36. <view class="number">076</view>
  37. <view class="unit">BPM</view>
  38. </view>
  39. </view>
  40. <view class="box-item" :class="{ 'sleep-selected': selectedItem === 'item2' }"
  41. @click="setSelectedItem('item2')">
  42. <view class="item-top">
  43. <view class="item-word">睡眠</view>
  44. <image class="sleep-icon"
  45. :src="selectedItem === 'item2' ?'/static/img/sleep-icon.png':'/static/img/unsleep-icon.png'"
  46. mode=""></image>
  47. </view>
  48. <view class="item-under">
  49. <view class="number">48</view>
  50. <view class="unit">MIN</view>
  51. </view>
  52. </view>
  53. <view class="box-item" :class="{ 'breathe-selected': selectedItem === 'item3' }"
  54. @click="setSelectedItem('item3')">
  55. <view class="item-top">
  56. <view class="item-word">呼吸</view>
  57. <image class="breathe-icon"
  58. :src="selectedItem === 'item3' ?'/static/img/breathe-icon.png':'/static/img/unbreathe-icon.png'"
  59. mode=""></image>
  60. </view>
  61. <view class="item-under">
  62. <view class="number">43</view>
  63. <view class="unit">AHI</view>
  64. </view>
  65. </view>
  66. </view>
  67. </view>
  68. <view class="top-box">
  69. <view class="container-top" @click="showDayPicker = true">
  70. <view class="top-left">
  71. <view class="word">今日</view>
  72. <text>{{formatDate(dayValue)}}</text>
  73. </view>
  74. <!-- <view class="top-right" @click.stop="fullscreenFn">
  75. <image src="/static/image/full.png" mode=""></image>
  76. </view> -->
  77. </view>
  78. <view class="chartsMain" v-if="Area.categories.length">
  79. <view class="">数据分析</view>
  80. <canvas canvas-id="canvasArea" id="canvasArea" class="charts" disable-scroll="false"></canvas>
  81. </view>
  82. <view class="chartsMain" v-else>
  83. <image src="/static/img/none.png" mode=""></image>
  84. </view>
  85. </view>
  86. <view class="under-box" v-if="selectedItem === 'item1'">
  87. <view class="under-item">
  88. <i class="iconfont icon-arrow-right"></i>
  89. <view class="under-top">120 bpm</view>
  90. <view class="under-word">最高心率</view>
  91. </view>
  92. <view class="under-item">
  93. <view class="under-top">70 bpm</view>
  94. <view class="under-word">最低心率</view>
  95. </view>
  96. <view class="under-item">
  97. <view class="under-top">84 bpm</view>
  98. <view class="under-word">平均心率</view>
  99. </view>
  100. </view>
  101. <view class="under-box" v-if="selectedItem === 'item2'">
  102. <view class="under-item">
  103. <view class="under-top">8h23min</view>
  104. <view class="under-word">深睡时长</view>
  105. </view>
  106. <view class="under-item">
  107. <view class="under-top">2h18min</view>
  108. <view class="under-word">浅睡时长</view>
  109. </view>
  110. <view class="under-item">
  111. <view class="under-top">良好</view>
  112. <view class="under-word">睡眠质量</view>
  113. </view>
  114. </view>
  115. <view class="under-box" v-if="selectedItem === 'item3'">
  116. <view class="under-item">
  117. <view class="under-top">19 次</view>
  118. <view class="under-word">最高呼吸率</view>
  119. </view>
  120. <view class="under-item">
  121. <view class="under-top">11 次</view>
  122. <view class="under-word">最低呼吸率</view>
  123. </view>
  124. <view class="under-item">
  125. <view class="under-top">17 次</view>
  126. <view class="under-word">平均呼吸率</view>
  127. </view>
  128. </view>
  129. <!--</van-tab>
  130. <van-tab title="月">
  131. <view class="top-box">
  132. <view class="container-top" @click="showMonthPicker = true">
  133. <view class="top-left">
  134. <view class="word">月份</view>
  135. <text>{{formatMonth(monthValue)}}</text>
  136. </view>
  137. <view class="top-right">
  138. <image src="/static/image/full.png" mode=""></image>
  139. </view>
  140. </view>
  141. <view class="chartsMain">
  142. <canvas canvas-id="canvasMonthArea" id="canvasMonthArea" class="charts"
  143. @touchstart="touchArea"></canvas>
  144. </view>
  145. </view>
  146. <content-page></content-page>
  147. </van-tab>
  148. <van-tab title="年">
  149. <view class="top-box">
  150. <view class="container-top" @click="showYearPicker = true">
  151. <view class="top-left">
  152. <view class="word">年份</view>
  153. <text>{{formatYear(yearValue)}}</text>
  154. </view>
  155. <view class="top-right">
  156. <image src="/static/image/full.png" mode=""></image>
  157. </view>
  158. </view>
  159. <view class="chartsMain">
  160. <canvas canvas-id="canvasYearArea" id="canvasYearArea" class="charts"
  161. @touchstart="touchArea"></canvas>
  162. </view>
  163. </view>
  164. <content-page></content-page>
  165. </van-tab>
  166. </van-tabs> -->
  167. <van-calendar :show="showDayPicker" @confirm="onConfirm" @close="showDayPicker = false"
  168. :default-date="currentDay" />
  169. <!-- <van-popup :show="showDayPicker" position="bottom">
  170. <van-datetime-picker @cancel="showDayPicker=false" @confirm="onConfirm" :value="currentDay" type="date" />
  171. </van-popup>
  172. <van-popup :show="showMonthPicker" position="bottom">
  173. <van-datetime-picker @cancel="showMonthPicker=false" @confirm="onMonthConfirm" type="year-month"
  174. :value="currentMonth" />
  175. </van-popup>
  176. <van-popup :show="showYearPicker" position="bottom">
  177. <van-datetime-picker @cancel="showYearPicker=false" @confirm="onYearConfirm" type="year"
  178. :value="currentYear" />
  179. </van-popup> -->
  180. </view>
  181. </template>
  182. <script>
  183. import {
  184. toLogin
  185. } from '@/libs/login.js';
  186. import {
  187. mapGetters
  188. } from "vuex";
  189. // import * as infoApi from '@/api/info/index.js';
  190. import dayjs from "@/plugin/dayjs/dayjs.min.js";
  191. import contentPage from './components/content.vue'
  192. // 图表
  193. import uCharts from "@/components/ucharts/ucharts.js";
  194. // import uCharts from "@/components/u-charts/u-charts.js";
  195. var _self;
  196. var canvaRing = null;
  197. var canvaArea = null;
  198. var canvaGauge = null;
  199. var canvaPie = null;
  200. var canvaColumn = null;
  201. var canvaFunnel = null;
  202. var canvaWord = null;
  203. export default {
  204. computed: mapGetters(['isLogin', 'uid', 'deviceId']),
  205. components: {
  206. contentPage
  207. },
  208. data() {
  209. return {
  210. active: 2,
  211. cWidth: '',
  212. cHeight: '',
  213. pixelRatio: 1,
  214. dayValue: new Date(),
  215. monthValue: new Date(),
  216. yearValue: new Date(),
  217. showDayPicker: false, //日
  218. showMonthPicker: false, //月
  219. showYearPicker: false, //年
  220. // minDate:new Date().getTime(),
  221. currentDay: new Date().getTime(),
  222. currentMonth: new Date().getTime(),
  223. currentYear: new Date().getTime(),
  224. fullscreen: false,
  225. dayInfo: {}, //日数据
  226. dayTimeList: [], //日X轴数据
  227. dayDataList: [], //日图表数据
  228. // 日折线图
  229. dayArea: {
  230. categories: [],
  231. // categories: ['08:22','08:22','08:22','08:22'],
  232. series: [{
  233. name: '学习前端',
  234. data: [],
  235. // data: [68,89,66,79],
  236. color: '#F35546'
  237. }]
  238. },
  239. // 月折线图
  240. monthArea: {
  241. categories: ['6月', '7月', '8月', ],
  242. series: [{
  243. name: '学习前端',
  244. data: [100, 80, 95, ],
  245. color: '#F35546'
  246. }]
  247. },
  248. // 年折线图
  249. yearArea: {
  250. categories: ['6月', '7月'],
  251. series: [{
  252. name: '学习前端',
  253. data: [100, 80, ],
  254. color: '#F35546'
  255. }]
  256. },
  257. selectedItem: 'item1',
  258. // 新
  259. Area: {
  260. categories: ['6月', '7月', '8月', '9月', '10月', '11月', '12月'],
  261. series: [{
  262. name: '学习前端',
  263. data: [100, 80, 95, 150, 112, 132, 151],
  264. color: '#facc14'
  265. }, {
  266. name: '学习后台',
  267. data: [70, 40, 65, 100, 44, 68, 78],
  268. color: '#2fc25b'
  269. }, {
  270. name: '学习设计',
  271. data: [35, 20, 25, 37, 4, 20, 39],
  272. color: '#1890ff'
  273. }]
  274. }
  275. };
  276. },
  277. onShow() {
  278. },
  279. async onLoad() {
  280. console.log(this.isLogin, '判断是否登录');
  281. // if (!this.isLogin) {
  282. // toLogin();
  283. // return
  284. // }
  285. _self = this;
  286. this.cWidth = uni.upx2px(630);
  287. this.cHeight = uni.upx2px(400);
  288. await this.getData()
  289. this.getServerData();
  290. },
  291. mounted() {},
  292. methods: {
  293. setSelectedItem(item) {
  294. this.selectedItem = this.selectedItem === item ? null : item;
  295. },
  296. getData() {
  297. console.log(this.deviceId, 88877766);
  298. let data = this.formatDate(this.dayValue).split("-"); // ["2023", "10", "18"]
  299. let params = {
  300. deviceId: this.deviceId,
  301. year: data[0],
  302. month: data[1],
  303. day: data[2],
  304. // day:"17",
  305. }
  306. return
  307. return infoApi.getHeartRate(params).then(res => {
  308. console.log(res, 44);
  309. if (res.data === null) {
  310. this.dayInfo = {}
  311. this.dayInfo.list = []
  312. this.dayArea.categories = []
  313. }
  314. if (res.code === 0 && res.data.list.length) {
  315. this.dayInfo = res.data
  316. // 组装接口数据。上方折线图若超过10条,截取10条
  317. let categoriesArr = res.data.list.map(item => this.formatHHmm(item.createTime))
  318. let seriesArr = res.data.list.map(item => item.heartRate)
  319. this.dayArea.categories = categoriesArr.length > 10 ? categoriesArr.slice(-10) :
  320. categoriesArr
  321. this.dayArea.series[0].data = seriesArr.length > 10 ? seriesArr.slice(-10) : seriesArr
  322. }
  323. })
  324. .catch(err => {
  325. return this.$util.Tips({
  326. title: err,
  327. // icon: 'error'
  328. });
  329. });
  330. },
  331. fullscreenFn() {
  332. wx.requestFullScreen({
  333. success: (res) => {
  334. console.log(res, 666);
  335. this.fullscreen = true
  336. }
  337. });
  338. },
  339. formatter(type, val) {
  340. if (type === 'year') {
  341. return `${val}年`;
  342. } else if (type === 'month') {
  343. return `${val}月`;
  344. }
  345. return val;
  346. },
  347. onYearConfirm(value) {
  348. console.log(value, 444);
  349. this.yearValue = value.detail
  350. this.showYearPicker = false
  351. },
  352. onMonthConfirm(value) {
  353. this.monthValue = value.detail
  354. this.showMonthPicker = false;
  355. console.log(this.formatMonth(this.monthValue), 777);
  356. },
  357. async onConfirm(value) {
  358. this.dayValue = value.detail;
  359. await this.getData()
  360. this.getServerData();
  361. this.showDayPicker = false;
  362. },
  363. formatHHmm: function(date) {
  364. return dayjs(date).format("HH:mm");
  365. },
  366. formatDate: function(date) {
  367. return dayjs(date).format("YYYY-MM-DD");
  368. },
  369. formatMonth: function(date) {
  370. return dayjs(date).format("YYYY-MM");
  371. },
  372. formatYear: function(date) {
  373. return dayjs(date).format("YYYY");
  374. },
  375. changeDay() {
  376. this.showDayPicker = true
  377. },
  378. getServerData() {
  379. console.log('是否先执行');
  380. _self.showArea("canvasArea", this.chartData, 'day');
  381. _self.showArea("canvasMonthArea", this.chartData, 'month');
  382. _self.showArea("canvasYearArea", this.chartData, 'year');
  383. },
  384. // 新
  385. showArea(canvasId, chartData) {
  386. canvaArea = new uCharts({
  387. $this: _self,
  388. canvasId: canvasId,
  389. type: 'area',
  390. fontSize: 11,
  391. legend: true,
  392. dataLabel: false,
  393. dataPointShape: true,
  394. background: '#FFFFFF',
  395. pixelRatio: _self.pixelRatio,
  396. categories: _self.Area.categories,
  397. series: _self.Area.series,
  398. animation: true,
  399. xAxis: {
  400. type: 'grid',
  401. gridColor: '#CCCCCC',
  402. gridType: 'dash',
  403. dashLength: 8,
  404. disableGrid: true,
  405. },
  406. yAxis: {
  407. gridType: 'dash',
  408. gridColor: '#CCCCCC',
  409. dashLength: 8,
  410. splitNumber: 5,
  411. min: 10,
  412. max: 180,
  413. },
  414. width: _self.cWidth * _self.pixelRatio,
  415. height: _self.cHeight * _self.pixelRatio,
  416. extra: {
  417. area: {
  418. type: 'straight',
  419. opacity: 0.2,
  420. addLine: true,
  421. width: 2
  422. }
  423. }
  424. });
  425. },
  426. // 折线图
  427. // showArea(canvasId, chartData, type) {
  428. // const categories = type == 'day' ? _self.dayArea.categories : type == 'month' ? _self.monthArea
  429. // .categories : _self.yearArea.categories
  430. // const series = type == 'day' ? _self.dayArea.series : type == 'month' ? _self.monthArea
  431. // .series : _self
  432. // .yearArea.series
  433. // canvaArea = new uCharts({
  434. // $this: _self,
  435. // canvasId: canvasId,
  436. // type: 'area',
  437. // fontSize: 11,
  438. // legend: {
  439. // show: false
  440. // },
  441. // dataLabel: true,
  442. // dataPointShape: true,
  443. // background: '#FFFFFF',
  444. // pixelRatio: _self.pixelRatio,
  445. // categories: categories,
  446. // series: series,
  447. // animation: true,
  448. // padding: [20, 10, 10, 10],
  449. // xAxis: {
  450. // type: 'grid',
  451. // gridColor: '#CCCCCC',
  452. // gridType: 'solid',
  453. // dashLength: 8,
  454. // disableGrid: true,
  455. // rotateLabel: true,
  456. // rotateAngle: -50,
  457. // },
  458. // yAxis: {
  459. // gridType: 'solid',
  460. // gridColor: '#CCCCCC',
  461. // dashLength: 8,
  462. // splitNumber: 5,
  463. // min: 10,
  464. // max: 180,
  465. // },
  466. // width: _self.cWidth * _self.pixelRatio,
  467. // height: _self.cHeight * _self.pixelRatio,
  468. // extra: {
  469. // area: {
  470. // type: 'straight',
  471. // // type: 'curve',
  472. // opacity: 0.2,
  473. // addLine: true,
  474. // width: 2
  475. // }
  476. // }
  477. // });
  478. // },
  479. touchArea(e) {
  480. canvaArea.showToolTip(e, {
  481. format: function(item, category) {
  482. return item.name + ' ' + category + ' ' + ':' + item.data
  483. }
  484. });
  485. },
  486. }
  487. };
  488. </script>
  489. <style lang="scss" scoped>
  490. // ::v-deep .van-tab__pane--active{
  491. // width: 100%;
  492. // }
  493. .box {
  494. padding: 20rpx 30rpx !important;
  495. }
  496. .user-box {
  497. // padding: 40rpx 30rpx;
  498. padding: 40rpx 70rpx 40rpx 30rpx;
  499. margin-bottom: 60rpx;
  500. background-color: #fff;
  501. border-radius: 15rpx;
  502. display: flex;
  503. align-items: center;
  504. image {
  505. width: 190rpx;
  506. height: 190rpx;
  507. border-radius: 50%;
  508. }
  509. .right-box {
  510. flex: 1;
  511. margin-left: 30rpx;
  512. .name {
  513. font-weight: 600;
  514. font-size: 48rpx;
  515. color: #2D2D2D;
  516. margin-bottom: 20rpx;
  517. }
  518. .info-box {
  519. display: flex;
  520. justify-content: space-between;
  521. .info-item {
  522. font-weight: 500;
  523. .number {
  524. font-size: 32rpx;
  525. color: #2D2D2D;
  526. }
  527. .word {
  528. font-size: 28rpx;
  529. color: #A6A6A6;
  530. }
  531. }
  532. }
  533. }
  534. }
  535. .content-box {
  536. // background-color: #F7F7F7;
  537. // height: 100vh;
  538. margin-bottom: 60rpx;
  539. .number-box {
  540. height: 120rpx;
  541. // background-color: #fff;
  542. display: flex;
  543. justify-content: space-between;
  544. .box-item {
  545. width: 210rpx;
  546. height: 120rpx;
  547. padding: 13rpx 20rpx;
  548. box-sizing: border-box;
  549. border-radius: 15rpx;
  550. background-color: #fff;
  551. text {
  552. font-size: 24rpx;
  553. font-weight: 400;
  554. color: #777777;
  555. }
  556. .item-top {
  557. display: flex;
  558. justify-content: space-between;
  559. align-items: center;
  560. .item-word {
  561. font-weight: 500;
  562. font-size: 32rpx;
  563. }
  564. image {
  565. width: 30rpx;
  566. height: 25rpx;
  567. }
  568. .sleep-icon {
  569. width: 31rpx;
  570. height: 36rpx;
  571. }
  572. .breathe-icon {
  573. width: 32rpx;
  574. height: 28rpx;
  575. }
  576. }
  577. .item-under {
  578. display: flex;
  579. align-items: center;
  580. // margin-top: 12rpx;
  581. font-weight: 500;
  582. align-items: flex-end;
  583. .number {
  584. font-size: 36rpx;
  585. }
  586. .unit {
  587. font-size: 24rpx;
  588. margin-left: 19rpx;
  589. }
  590. }
  591. }
  592. .box-item.heart-selected {
  593. background: linear-gradient(180deg, #FF8E8E 0%, #EC3534 100%);
  594. color: #fff;
  595. /* 选中的字体颜色 */
  596. }
  597. .box-item.sleep-selected {
  598. background: linear-gradient(180deg, #80D2FF 0%, #56B6FF 100%);
  599. color: #fff;
  600. /* 选中的字体颜色 */
  601. }
  602. .box-item.breathe-selected {
  603. background: linear-gradient(180deg, #FFDE8F 0%, #FF9A55 100%);
  604. color: #fff;
  605. /* 选中的字体颜色 */
  606. }
  607. }
  608. .word-box {
  609. margin-top: 16rpx;
  610. background-color: #fff;
  611. padding: 32rpx;
  612. .word-title {
  613. font-size: 32rpx;
  614. font-weight: 600;
  615. color: #000000;
  616. }
  617. .word {
  618. font-size: 28rpx;
  619. font-weight: 400;
  620. color: #000000;
  621. line-height: 40rpx;
  622. margin-top: 18rpx;
  623. }
  624. }
  625. .list-box {
  626. margin-top: 16rpx;
  627. background-color: #fff;
  628. padding: 0 32rpx;
  629. .list-box-item {
  630. height: 88rpx;
  631. display: flex;
  632. align-items: center;
  633. justify-content: space-between;
  634. .list-box-left {
  635. display: flex;
  636. align-items: center;
  637. image {
  638. width: 48rpx;
  639. height: 48rpx;
  640. }
  641. text {
  642. margin-left: 32rpx;
  643. font-size: 32rpx;
  644. font-weight: 400;
  645. color: #000000;
  646. }
  647. }
  648. .list-box-right {
  649. display: flex;
  650. font-size: 32rpx;
  651. font-weight: 600;
  652. color: #000000;
  653. .num {
  654. margin-right: 30rpx;
  655. }
  656. }
  657. }
  658. }
  659. }
  660. .top-box {
  661. padding: 28rpx 32rpx 19rpx;
  662. background-color: #fff;
  663. border-radius: 15rpx;
  664. .container-top {
  665. display: flex;
  666. align-items: center;
  667. justify-content: space-between;
  668. margin-bottom: 28rpx;
  669. .top-left {
  670. .word {
  671. font-size: 36rpx;
  672. font-weight: 500;
  673. color: #000000;
  674. }
  675. text {
  676. font-size: 24rpx;
  677. font-weight: 500;
  678. color: #777777;
  679. line-height: 33rpx;
  680. }
  681. }
  682. .top-right {
  683. width: 32rpx;
  684. height: 32rpx;
  685. image {
  686. width: 32rpx;
  687. height: 32rpx;
  688. }
  689. }
  690. }
  691. .chartsMain {
  692. width: 100%;
  693. // height: 450rpx;
  694. // box-sizing: border-box;
  695. background: #fff;
  696. border-top: 2rpx solid #f2f2f2;
  697. text-align: center;
  698. image {
  699. width: 70%;
  700. // height: 100%;
  701. }
  702. .charts {
  703. width: 630rpx;
  704. height: 400rpx;
  705. box-sizing: border-box;
  706. }
  707. }
  708. }
  709. .under-box{
  710. width: 100%;
  711. height: 174rpx;
  712. box-sizing: border-box;
  713. margin-top: 30rpx;
  714. display: flex;
  715. justify-content: space-between;
  716. padding: 40rpx 30rpx;
  717. background-color: #fff;
  718. border-radius: 15rpx;
  719. .under-item{
  720. color: #2D2D2D;
  721. text-align: center;
  722. .under-top{
  723. font-weight: 600;
  724. font-size: 36rpx;
  725. }
  726. .under-word{
  727. font-size: 30rpx;
  728. }
  729. }
  730. }
  731. </style>