index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839
  1. <template>
  2. <Theme>
  3. <view class="wrap" :style="{ '--tabbarHeight': tabbarHeight + 'px' }">
  4. <view class="cont">
  5. <view class="cont_bg" id="tob">
  6. <Navbar bgColor="transparent" fixed>
  7. <template #left>
  8. <view class="nav_left">
  9. <image
  10. src="@/static/logo.png"
  11. class="nav_logo"
  12. mode="widthFix"
  13. ></image>
  14. </view>
  15. </template>
  16. <template #right>
  17. <view class="nav_right">
  18. <view class="icon-badge-wrap">
  19. <image
  20. src="/static/home/kefu.png"
  21. class="mobile_system"
  22. @click="toGo('/pages/setting/system')"
  23. >
  24. </image>
  25. <up-badge
  26. type="error"
  27. max="99"
  28. :value="unreadCount"
  29. class="tips"
  30. v-if="unreadCount > 0"
  31. ></up-badge>
  32. </view>
  33. <image
  34. src="/static/language.png"
  35. class="mobile_language"
  36. @click="toGo('/pages/setting/language_currency')"
  37. ></image>
  38. <navMenu />
  39. </view>
  40. </template>
  41. </Navbar>
  42. <view class="bg_top">
  43. <view class="search">
  44. <Search
  45. v-model="searchValue"
  46. border="none"
  47. @click="searchClick"
  48. :placeholder="t('商品的链接或名称')"
  49. >
  50. <template #prefix>
  51. <i class="icon-font icon-search"></i>
  52. </template>
  53. <template #suffix>
  54. <i class="icon-font icon-camera"></i>
  55. </template>
  56. </Search>
  57. </view>
  58. </view>
  59. </view>
  60. <scroll-view
  61. class="content-scroll"
  62. scroll-y
  63. refresher-enabled
  64. :refresher-triggered="refreshering"
  65. @refresherrefresh="onRefresherRefresh"
  66. @refresherrestore="onRefresherRestore"
  67. refresher-default-style="none"
  68. :style="{ height: contentHeight + 'px' }"
  69. >
  70. <view class="refresher" v-if="refreshering">
  71. <up-loadmore :status="'loading'" :loadingText="''" />
  72. </view>
  73. <view class="content">
  74. <view
  75. class="old_box new_box"
  76. @click="toGo('/pages/index/activityList')"
  77. >
  78. <view class="new_logo">
  79. <trans _t="新" />
  80. </view>
  81. <view class="old_title">
  82. <trans _t="免运费区域" />
  83. </view>
  84. <newBox />
  85. <view class="card_desc">
  86. <view
  87. class="item_desc"
  88. v-for="(item, index) in newDesc"
  89. :key="index"
  90. >
  91. {{ item }}
  92. </view>
  93. </view>
  94. <view class="enter">
  95. <trans _t="立即进入" />
  96. </view>
  97. </view>
  98. <!-- <view class="or">
  99. <trans _t="或者选择你的方式" />
  100. </view> -->
  101. <view class="old_box">
  102. <!-- <view class="old_title">
  103. <trans _t="转运服务" />
  104. </view> -->
  105. <view
  106. class="card_wrapper"
  107. @click="toGo('/pages/user/beginner_guide')"
  108. >
  109. <view
  110. class="card_item"
  111. v-for="(item, index) in card"
  112. :key="index"
  113. >
  114. <view class="item_top">
  115. <view class="item_img">
  116. <image
  117. :src="`../../static/home/card_${index}.png`"
  118. class="img"
  119. ></image>
  120. </view>
  121. <view class="line"></view>
  122. </view>
  123. <image
  124. class="beginner"
  125. src="@/static/right.png"
  126. v-if="index == 2"
  127. ></image>
  128. <view class="item_text">
  129. <view class="item_num">{{ index + 1 }}</view>
  130. <trans class="text" :_t="item.text" />
  131. </view>
  132. </view>
  133. </view>
  134. <view class="card_desc">
  135. <view class="item_desc"> 7-DAy Buyback </view>
  136. <view class="item_desc"> Authenticity Check </view>
  137. <view class="item_desc"> Damage Insurance </view>
  138. </view>
  139. <view class="hot-platforms">
  140. <!-- <SectionTitle title="热门平台" /> -->
  141. <view class="platforms-list">
  142. <view
  143. class="platform-item"
  144. v-for="(item, index) in moduleList"
  145. :key="index"
  146. :style="{
  147. background: `url(../../static/home/shop_bg_${item.channel}.png)`,
  148. backgroundSize: '100% 100%',
  149. }"
  150. @click="linkClick(item)"
  151. >
  152. <view class="platform-top">
  153. <image
  154. :src="`../../static/shop/icon_${item.channel}.png`"
  155. class="platform-logo"
  156. />
  157. <view class="platform-name">{{ t(item.title) }}</view>
  158. </view>
  159. <view class="enter-btn">
  160. <trans _t="立即进入" />
  161. </view>
  162. </view>
  163. </view>
  164. </view>
  165. </view>
  166. <view class="old_box main_bg">
  167. <view class="guide-section" @click="jumpGuide">
  168. <view class="guide-content">
  169. <image class="img" src="/static/home/service.png"></image>
  170. <view class="guide-text">
  171. <view class="guide-title">
  172. <trans _t="网购专家指引" />
  173. </view>
  174. <view class="guide-desc">
  175. <trans _t="帮你快速上手选择性价比商品" />
  176. </view>
  177. </view>
  178. </view>
  179. <view class="jump-btn">
  180. <trans _t="点击跳转" />
  181. </view>
  182. </view>
  183. <view class="bootom_scorll_box">
  184. <view
  185. class="button-item"
  186. v-for="(btn, index) in functionButtons"
  187. :key="index"
  188. @click="toGo(btn.url)"
  189. >
  190. <image :src="btn.icon" class="btn-icon" />
  191. <view class="btn-text">{{ t(btn.text) }}</view>
  192. <!-- <view class="btn-desc">{{ t(btn.desc) }}</view> -->
  193. </view>
  194. </view>
  195. </view>
  196. <view class="old_box main_bg" v-if="orderList.length">
  197. <view class="old_title">
  198. <trans _t="进行中的订单" />
  199. </view>
  200. <OrderScroll
  201. :order-list="orderList"
  202. @itemClick="handleOrderClick"
  203. />
  204. </view>
  205. </view>
  206. </scroll-view>
  207. </view>
  208. </view>
  209. <IosUpdateModal />
  210. <blindModel />
  211. <Tabbar page="index" @getTabbarHeight="getTabbarHeight" />
  212. </Theme>
  213. </template>
  214. <script setup>
  215. import Tabbar from "@/components/tabbar";
  216. import Navbar from "@/components/navbar";
  217. import plaCard from "@/components/placard";
  218. import Swiper from "@/components/swiper";
  219. import blindModel from "@/components/blindModel";
  220. import Search from "@/components/input";
  221. import navMenu from "@/components/nav_menu";
  222. import IosUpdateModal from "@/components/IosUpdateModal";
  223. import SectionTitle from "./components/SectionTitle";
  224. import OrderScroll from "./components/OrderScroll.vue";
  225. import newBox from "./components/newBox.vue";
  226. import { computed, ref, watch, nextTick, onMounted } from "vue";
  227. import {
  228. onLoad,
  229. onShow,
  230. onUnload,
  231. onHide,
  232. onPageScroll,
  233. } from "@dcloudio/uni-app";
  234. import { storeToRefs } from "pinia";
  235. import {
  236. useShopStore,
  237. useSystemStore,
  238. useMessageStore,
  239. useTabbarStore,
  240. useUserStore,
  241. } from "@/store";
  242. import { t } from "@/locale";
  243. import { SHOP_INDEX_ORDER } from "@/api";
  244. import { query, systemInfo } from "@/utils";
  245. const useShop = useShopStore();
  246. const useSystem = useSystemStore();
  247. const useTabbar = useTabbarStore();
  248. const useUser = useUserStore();
  249. const langList = computed(() => useSystem.getLangeuage);
  250. const lang = computed(() => useSystem.getLang);
  251. const token = computed(() => useUser.getToken);
  252. const currentLangIcon = computed(() => {
  253. if (langList.value.length === 0) {
  254. return "/static/home/matchedIcon.png";
  255. }
  256. const matched = langList.value.find((item) => item.code === lang.value);
  257. return matched ? matched.icon : "/static/home/matchedIcon.png";
  258. });
  259. const useMessage = useMessageStore();
  260. const { globalMap } = storeToRefs(useMessage);
  261. const unreadCount = ref(0);
  262. watch(
  263. () => globalMap.value.noticeChannel,
  264. (newVal, oldVal) => {
  265. if (newVal) {
  266. unreadCount.value = newVal.unreadCount;
  267. }
  268. },
  269. {
  270. deep: true,
  271. immediate: true,
  272. }
  273. );
  274. const searchValue = ref("");
  275. const hotLink = computed(() => useShop.getHotLink);
  276. const refreshering = ref(false);
  277. const contentHeight = ref(0);
  278. const tabbarHeight = ref(0);
  279. const newDesc = ref(["Direct Ship", "Free Shipping", "Faster"]);
  280. const card = [
  281. {
  282. icon: "",
  283. text: "选购商品",
  284. desc: "7-DAy Buyback",
  285. url: "",
  286. },
  287. {
  288. icon: "",
  289. text: "仓储质检",
  290. desc: "Authenticity Check",
  291. url: "",
  292. },
  293. {
  294. icon: "",
  295. text: "运输到家",
  296. desc: "Damage Insurance",
  297. url: "",
  298. },
  299. ];
  300. const moduleList = [
  301. {
  302. channel: 0,
  303. title: "1688工厂直销",
  304. cont: "工厂直销",
  305. desc: "服装、美妆、母婴、食品、数码产品、家电、家具",
  306. },
  307. {
  308. channel: 1,
  309. title: "淘宝",
  310. cont: "全球最大的C2C电商平台之一",
  311. desc: "服装、美妆、母婴、食品、数码产品、家电、家具",
  312. },
  313. {
  314. channel: 3,
  315. title: "JD",
  316. cont: "主流电子商务应用产品平台",
  317. desc: "服装、美妆、母婴、食品、数码产品、家电、家具",
  318. },
  319. ];
  320. const functionButtons = ref([
  321. {
  322. icon: "/static/home/freight.png",
  323. text: "运费估算",
  324. desc: "优化预算成本",
  325. url: "/pages/index/estimation",
  326. },
  327. // {
  328. // icon: "/static/home/order.png",
  329. // text: "追踪订单",
  330. // url: "/pages/dashboard/order",
  331. // },
  332. {
  333. icon: "/static/home/price.png",
  334. text: "价格追踪",
  335. desc: "更新最低报价",
  336. url: "/pages/dashboard/favorites?change=1",
  337. },
  338. {
  339. icon: "/static/home/follow.png",
  340. text: "关注列表",
  341. desc: "关注最新信息",
  342. url: "/pages/dashboard/favorites",
  343. },
  344. ]);
  345. const searchClick = () => {
  346. toGo("/pages/index/search");
  347. };
  348. const orderList = ref([]);
  349. const handleOrderClick = (order) => {
  350. uni.navigateTo({
  351. url: `/pages/order/details?oid=${order.id}`,
  352. });
  353. };
  354. const toGo = (url) => {
  355. if (!url) return;
  356. uni.navigateTo({ url });
  357. };
  358. const jumpGuide = () => {
  359. uni.switchTab({ url: "/pages/chat/index" });
  360. useTabbar.getPageCur("chat");
  361. };
  362. const linkClick = (item) => {
  363. toGo(`/pages/index/products?channel=${item.channel}`);
  364. };
  365. const swiperClick = (item) => {
  366. if (item.action == "goto_user") {
  367. toGo(`/pages/index/activityList`);
  368. }
  369. };
  370. const getOrder = async () => {
  371. try {
  372. const res = await SHOP_INDEX_ORDER();
  373. orderList.value = res.data || [];
  374. } catch (error) {
  375. Toast(error.msg);
  376. }
  377. };
  378. const getTabbarHeight = (height) => {
  379. tabbarHeight.value = height;
  380. };
  381. const loadPageData = async () => {
  382. const tasks = [];
  383. if (token.value) tasks.push(getOrder());
  384. tasks.push(useSystem.setBoxes({}, { isLoading: true }));
  385. await Promise.all(tasks);
  386. };
  387. onShow(() => {
  388. loadPageData();
  389. });
  390. onMounted(() => {
  391. nextTick(async () => {
  392. const res = await query("#tob");
  393. const { windowHeight, statusBarHeight } = systemInfo();
  394. contentHeight.value = windowHeight - res.height - statusBarHeight;
  395. });
  396. });
  397. uni.hideTabBar();
  398. const onRefresherRefresh = async () => {
  399. try {
  400. refreshering.value = true;
  401. await loadPageData();
  402. } finally {
  403. refreshering.value = false;
  404. }
  405. };
  406. const onRefresherRestore = () => {
  407. refreshering.value = false;
  408. };
  409. </script>
  410. <style lang="less" scoped>
  411. .wrap {
  412. background: var(--bg);
  413. min-height: calc(100vh - var(--tabbarHeight));
  414. padding-bottom: var(--tabbarHeight);
  415. .nav_left {
  416. display: flex;
  417. align-items: center;
  418. .nav_logo {
  419. width: 284rpx;
  420. }
  421. }
  422. .nav_right {
  423. display: flex;
  424. align-items: center;
  425. .mobile_language {
  426. width: 48rpx;
  427. height: 48rpx;
  428. margin: 0 20rpx 0 24rpx;
  429. }
  430. .icon-badge-wrap {
  431. position: relative;
  432. display: inline-block;
  433. width: 48rpx;
  434. height: 48rpx;
  435. .mobile_system {
  436. width: 48rpx;
  437. height: 48rpx;
  438. }
  439. .tips {
  440. position: absolute;
  441. right: -10rpx;
  442. top: -8rpx;
  443. z-index: 2;
  444. }
  445. }
  446. }
  447. .cont {
  448. width: 100%;
  449. background-color: var(--light);
  450. &_bg {
  451. position: sticky;
  452. top: 0;
  453. z-index: 9999;
  454. background-color: var(--bg);
  455. .bg_top {
  456. padding: 0 30rpx;
  457. .search {
  458. padding: 26rpx 0;
  459. :deep(.u-input) {
  460. padding: 0 20px 0 16px !important;
  461. .u-input__content__field-wrapper__field {
  462. height: 47px;
  463. }
  464. }
  465. .icon-search {
  466. color: var(--text);
  467. font-size: 40rpx;
  468. }
  469. .icon-camera {
  470. color: var(--text-01);
  471. font-size: 70rpx;
  472. }
  473. }
  474. }
  475. }
  476. .content-scroll {
  477. overflow: hidden;
  478. }
  479. .content {
  480. width: 100%;
  481. padding: 0 30rpx 30rpx;
  482. position: relative;
  483. box-sizing: border-box;
  484. /deep/ .pla_card {
  485. margin-top: 16px;
  486. }
  487. /deep/ .swiper_list {
  488. object-fit: cover;
  489. aspect-ratio: 115 / 36;
  490. }
  491. .swiper-box {
  492. width: 100%;
  493. }
  494. .old_box {
  495. width: 100%;
  496. padding: 24rpx;
  497. border-radius: 20rpx;
  498. background: #fee4b3;
  499. &.main_bg {
  500. margin-top: 24rpx;
  501. background: var(--inputBg);
  502. }
  503. &.new_box {
  504. position: relative;
  505. background: #e5faff;
  506. margin-bottom: 24rpx;
  507. .new_logo {
  508. position: absolute;
  509. top: 26rpx;
  510. left: -8rpx;
  511. width: 140rpx;
  512. height: 62rpx;
  513. line-height: 56rpx;
  514. text-align: center;
  515. font-size: 36rpx;
  516. font-weight: bold;
  517. color: var(--light);
  518. background: url("/static/home/new_bg.png");
  519. background-size: 100% 100%;
  520. }
  521. .enter {
  522. width: 100%;
  523. height: 64rpx;
  524. line-height: 64rpx;
  525. text-align: center;
  526. font-size: 28rpx;
  527. font-weight: 600;
  528. color: var(--black);
  529. border-radius: 20rpx;
  530. padding: 0 28rpx;
  531. background: var(--bg);
  532. box-sizing: border-box;
  533. }
  534. }
  535. .old_title {
  536. text-align: center;
  537. font-size: 36rpx;
  538. font-weight: bold;
  539. color: var(--black);
  540. margin-bottom: 24rpx;
  541. }
  542. }
  543. .or {
  544. font-size: 24rpx;
  545. font-weight: bold;
  546. line-height: 62rpx;
  547. text-align: center;
  548. color: var(--text-01);
  549. }
  550. .card_wrapper {
  551. display: flex;
  552. justify-content: space-between;
  553. position: relative;
  554. width: calc(100% -62rpx);
  555. .card_item {
  556. width: 33%;
  557. color: var(--text);
  558. font-size: 24rpx;
  559. font-weight: bold;
  560. display: flex;
  561. flex-direction: column;
  562. align-items: center;
  563. justify-content: center;
  564. position: relative;
  565. z-index: 1;
  566. .item_top {
  567. position: relative;
  568. border-radius: 50%;
  569. padding: 14rpx;
  570. background-color: var(--bg);
  571. box-sizing: border-box;
  572. .item_img {
  573. background-color: var(--bg);
  574. border-radius: 50%;
  575. display: flex;
  576. align-items: center;
  577. justify-content: center;
  578. padding: 14rpx;
  579. border: 2rpx dashed var(--bor-color1);
  580. .img {
  581. width: 50rpx;
  582. height: 50rpx;
  583. }
  584. }
  585. }
  586. .item_text {
  587. display: flex;
  588. align-items: center;
  589. margin-top: 10rpx;
  590. .item_num {
  591. width: 32rpx;
  592. height: 32rpx;
  593. border-radius: 50%;
  594. background-color: var(--black);
  595. display: flex;
  596. justify-content: center;
  597. font-size: 24rpx;
  598. color: var(--light);
  599. line-height: 32rpx;
  600. margin-right: 8rpx;
  601. }
  602. .text {
  603. flex: 1;
  604. display: inline-block;
  605. text-align: center;
  606. white-space: nowrap;
  607. }
  608. }
  609. }
  610. &::before {
  611. content: "";
  612. position: absolute;
  613. left: 10%;
  614. right: 0;
  615. top: 56rpx;
  616. transform: translateY(-40%);
  617. width: 80%;
  618. height: 1px;
  619. border-bottom: 1px dashed var(--black);
  620. z-index: 0;
  621. }
  622. .beginner {
  623. position: absolute;
  624. right: 0rpx;
  625. top: 42rpx;
  626. width: 32rpx;
  627. height: 32rpx;
  628. }
  629. }
  630. .card_desc {
  631. display: flex;
  632. justify-content: space-between;
  633. margin: 24rpx 0;
  634. width: 100%;
  635. height: 54rpx;
  636. line-height: 54rpx;
  637. border-radius: 20rpx;
  638. background: rgba(255, 255, 255, 0.6);
  639. // padding: 0 30rpx;
  640. box-sizing: border-box;
  641. // border: 1rpx solid #e5e4e9;
  642. .item_desc {
  643. width: 33.33%;
  644. font-size: 20rpx;
  645. font-weight: bold;
  646. text-align: center;
  647. color: var(--text-01);
  648. position: relative;
  649. &:not(:last-child)::after {
  650. content: "•";
  651. position: absolute;
  652. right: -4rpx;
  653. color: var(--black);
  654. font-size: 36rpx;
  655. }
  656. }
  657. }
  658. .hot-platforms {
  659. .platforms-list {
  660. width: 100%;
  661. display: flex;
  662. // flex-wrap: wrap;
  663. gap: 24rpx;
  664. margin-right: 24rpx;
  665. .platform-item {
  666. width: 32%;
  667. min-height: 260rpx;
  668. object-fit: cover;
  669. aspect-ratio: 67 / 55;
  670. display: flex;
  671. flex-direction: column;
  672. justify-content: space-between;
  673. align-items: center;
  674. border: 1rpx solid #eee;
  675. border-radius: 20rpx;
  676. padding: 24rpx 16rpx 16rpx;
  677. background-size: cover;
  678. background-position: center;
  679. overflow: hidden;
  680. box-sizing: border-box;
  681. .platform-top {
  682. display: flex;
  683. flex-direction: column;
  684. align-items: center;
  685. .platform-logo {
  686. width: 60rpx;
  687. height: 60rpx;
  688. margin-bottom: 16rpx;
  689. }
  690. .platform-name {
  691. font-size: 26rpx;
  692. font-weight: bold;
  693. color: #fff;
  694. text-align: center;
  695. line-height: 28rpx;
  696. }
  697. }
  698. .enter-btn {
  699. width: 100%;
  700. height: 50rpx;
  701. line-height: 50rpx;
  702. text-align: center;
  703. font-size: 24rpx;
  704. font-weight: 500;
  705. color: #000;
  706. background-color: #fff;
  707. border-radius: 10rpx;
  708. }
  709. }
  710. }
  711. }
  712. .guide-section {
  713. margin-bottom: 24rpx;
  714. width: 100%;
  715. display: flex;
  716. flex-direction: column;
  717. justify-content: space-between;
  718. background-color: var(--bg);
  719. color: var(--black);
  720. padding: 22rpx 20rpx 24rpx;
  721. border-radius: 20rpx;
  722. .guide-content {
  723. display: flex;
  724. justify-content: center;
  725. align-items: center;
  726. margin-bottom: 24rpx;
  727. .guide-text {
  728. .guide-title {
  729. font-size: 32rpx;
  730. font-weight: bold;
  731. margin-bottom: 12rpx;
  732. }
  733. .guide-desc {
  734. font-size: 24rpx;
  735. color: var(--text-01);
  736. }
  737. }
  738. .img {
  739. width: 72rpx;
  740. height: 72rpx;
  741. margin-right: 14rpx;
  742. }
  743. }
  744. .jump-btn {
  745. width: 100%;
  746. height: 68rpx;
  747. line-height: 68rpx;
  748. text-align: center;
  749. font-size: 28rpx;
  750. font-weight: 600;
  751. color: var(--black);
  752. background: var(--bor-color);
  753. border-radius: 20rpx;
  754. }
  755. }
  756. .bootom_scorll_box {
  757. width: 100%;
  758. display: flex;
  759. justify-content: space-between;
  760. gap: 20rpx;
  761. .button-item {
  762. min-width: 31%;
  763. display: flex;
  764. flex-direction: column;
  765. justify-content: space-between;
  766. align-items: center;
  767. border-radius: 24rpx;
  768. background: var(--bg);
  769. padding: 24rpx 10rpx;
  770. box-sizing: border-box;
  771. .btn-icon {
  772. width: 80rpx;
  773. height: 80rpx;
  774. }
  775. .btn-text {
  776. padding: 20rpx 0 10rpx;
  777. font-size: 22rpx;
  778. color: var(--text);
  779. font-weight: bold;
  780. // white-space: nowrap;
  781. text-align: center;
  782. }
  783. .btn-desc {
  784. font-size: 20rpx;
  785. color: var(--text-01);
  786. text-align: center;
  787. }
  788. }
  789. }
  790. .function-buttons {
  791. }
  792. }
  793. }
  794. }
  795. </style>