index.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. <template>
  2. <view class="detail-page">
  3. <!-- 顶部状态栏 -->
  4. <view class="header-section">
  5. <view class="header-content">
  6. <view class="title-group">
  7. <text class="main-title">黑名单企业监控</text>
  8. <text class="sub-title">实时监控异常经营企业</text>
  9. </view>
  10. <view class="stat-box">
  11. <text class="stat-num">{{ rows?.length || 0 }}</text>
  12. <text class="stat-unit">家</text>
  13. </view>
  14. </view>
  15. <view class="header-toolbar">
  16. <view class="update-tip">
  17. <!-- <text class="tip-icon">🕒</text> -->
  18. <text>更新:{{
  19. formatDate(
  20. new Date().setDate(new Date().getDate() - 1),
  21. "YYYY-MM-DD",
  22. ) || "--"
  23. }}</text>
  24. </view>
  25. </view>
  26. <!-- 背景装饰 -->
  27. <view class="header-circle circle-1"></view>
  28. <view class="header-circle circle-2"></view>
  29. </view>
  30. <scroll-view class="list-scroll" scroll-y="true" refresher-enabled :refresher-triggered="isRefreshing"
  31. @refresherrefresh="onRefresh">
  32. <view class="list-container">
  33. <view class="card-item" v-for="(item, index) in rows" :key="index" @click="toDetail(item)">
  34. <view class="card-header">
  35. <view class="header-left">
  36. <text class="index-num">{{ index + 1 }}</text>
  37. <text class="company-name">{{ item.queryCustomer }}</text>
  38. </view>
  39. <view class="header-right">
  40. <text class="status-tag">黑名单</text>
  41. </view>
  42. </view>
  43. <view class="card-body">
  44. <view class="code-row">
  45. <text class="label">信用代码:</text>
  46. <text class="value code-text">{{ item.socialCreditCode }}</text>
  47. </view>
  48. <view class="info-grid">
  49. <view class="info-item">
  50. <text class="label">省份</text>
  51. <text class="value">{{ item.province }}</text>
  52. </view>
  53. </view>
  54. </view>
  55. </view>
  56. <view v-if="!loading && rows.length === 0" class="empty-data">
  57. <EmptyView text="无相关数据" />
  58. </view>
  59. </view>
  60. </scroll-view>
  61. <view class="footer-btn-area">
  62. <button class="action-btn history-btn" @click="handleHistory">
  63. 历史记录
  64. </button>
  65. <button class="action-btn export-btn" @click="handleExport">
  66. 导出至邮箱
  67. </button>
  68. </view>
  69. <!-- 蒙层 -->
  70. <view class="report-export-create-modal-mask" v-if="emailModalOpen" @click="closeEmailModal"
  71. @touchmove.stop.prevent></view>
  72. <!-- 邮箱导出弹窗 -->
  73. <view class="report-export-create-modal report-export-create-email-modal"
  74. :class="{ 'report-export-create-modal--open': emailModalOpen }" v-if="emailModalOpen">
  75. <view class="report-export-create-modal-title">
  76. <text>发送至邮箱</text>
  77. <view class="report-export-create-modal-close" @click.stop="closeEmailModal">×</view>
  78. </view>
  79. <view class="report-export-create-modal-body" :style="{ padding: '40rpx' }">
  80. <up-input v-model="emailForm.email" border="none" :customStyle="{
  81. backgroundColor: '#ebf3fb',
  82. height: '80rpx',
  83. paddingLeft: '20rpx',
  84. }" placeholder="请填写邮箱" @input="emailError = false">
  85. <template #suffix>
  86. <view style="margin-right: 20rpx; color: #666">@999.com.cn</view>
  87. </template>
  88. </up-input>
  89. <text v-if="emailError" class="report-export-error-text">请输入邮箱</text>
  90. </view>
  91. <view class="report-export-create-modal-footer" :style="{
  92. padding: '20rpx 40rpx 40rpx',
  93. display: 'flex',
  94. 'justify-content': 'space-between',
  95. }">
  96. <view class="report-export-create-modal-btn cancel-btn" @click.stop="closeEmailModal">取消</view>
  97. <view class="report-export-create-modal-btn confirm-btn" @click.stop="handleSendEmail">发送</view>
  98. </view>
  99. </view>
  100. <!-- 独立的下拉菜单层 -->
  101. <view class="dropdown-layer" v-if="dropdownProvinceOpen" @click.stop>
  102. <view class="dropdown">
  103. <view class="dropdown-search-bar">
  104. <input class="dropdown-search-input" v-model="provinceSearchText" @input="onProvinceSearch"
  105. placeholder="搜索省份..." placeholder-style="color: #999" />
  106. </view>
  107. <scroll-view scroll-y="true" class="dropdown-scroll-view">
  108. <view class="dropdown-item" v-for="(p, i) in filteredProvinceList" :key="p || i" :class="{
  109. active: p === selectedProvince || (!selectedProvince && i === 0),
  110. }" @click.stop="selectProvince(p)">
  111. {{ p || "全部省份" }}
  112. <text v-if="p === selectedProvince || (!selectedProvince && i === 0)" class="check-mark">✓</text>
  113. </view>
  114. <view v-if="filteredProvinceList.length === 0" class="dropdown-empty">暂无数据</view>
  115. </scroll-view>
  116. </view>
  117. </view>
  118. </view>
  119. </template>
  120. <script>
  121. import EmptyView from "../../../wigets/empty.vue";
  122. import request from "../../../request/index.js";
  123. import { formatDate } from "../../../utils/utils.js";
  124. export default {
  125. components: {
  126. EmptyView,
  127. },
  128. data() {
  129. return {
  130. isRefreshing: false,
  131. loading: false,
  132. rows: [],
  133. dropdownProvinceOpen: false,
  134. provinceSearchText: "",
  135. provinceList: [""],
  136. selectedProvince: "",
  137. emailModalOpen: false,
  138. emailForm: {
  139. email: "",
  140. },
  141. emailError: false,
  142. };
  143. },
  144. created() {
  145. this.resetFetch();
  146. this.getProviceList();
  147. const userEmail = uni.getStorageSync('traceCode_useremail')
  148. this.emailForm.email = userEmail
  149. },
  150. methods: {
  151. formatDate,
  152. getProviceList() {
  153. request("/common/getProviceList", {
  154. path: "traceabilityReport/pages/blacklist/index.vue",
  155. }).then((res) => {
  156. if (res.code == 200) {
  157. const _data = res.data || [];
  158. this.provinceList = ["", ..._data.map((item) => item.regionName)];
  159. }
  160. });
  161. },
  162. fetchList() {
  163. if (this.loading) return;
  164. this.loading = true;
  165. const yesterday = new Date();
  166. yesterday.setDate(yesterday.getDate() - 1);
  167. const dateStr = this.formatDate(yesterday, "YYYY-MM-DD");
  168. request("/blacklist-report/get-export-company-data", {
  169. fromDate: dateStr,
  170. toDate: dateStr,
  171. path: "traceabilityReport/pages/blacklist/index.vue",
  172. }).then((res) => {
  173. if (res.code == 200) {
  174. this.rows = res.data || [];
  175. }
  176. this.loading = false;
  177. this.isRefreshing = false;
  178. });
  179. },
  180. async onRefresh() {
  181. this.isRefreshing = true;
  182. this.fetchList();
  183. },
  184. resetFetch() {
  185. this.rows = [];
  186. this.fetchList();
  187. },
  188. toDetail(item) {
  189. uni.navigateTo({
  190. url: `/traceCodePackages/traceabilityReport/pages/blacklist/detail/index?id=${item.socialCreditCode}&dateStr=${item.billTime}&name=${encodeURIComponent(item.queryCustomer)}`,
  191. });
  192. },
  193. handleHistory() {
  194. uni.navigateTo({
  195. url: "/traceCodePackages/traceabilityReport/pages/blacklist/history/index",
  196. });
  197. },
  198. handleExport() {
  199. if (this.rows?.length == 0) {
  200. uni.showToast({
  201. title: '暂无数据...',
  202. icon: 'none'
  203. })
  204. return
  205. }
  206. this.emailModalOpen = true;
  207. this.emailError = false;
  208. },
  209. closeEmailModal() {
  210. this.emailModalOpen = false;
  211. },
  212. handleSendEmail() {
  213. if (!this.emailForm.email) {
  214. this.emailError = true;
  215. return;
  216. }
  217. uni.showLoading({ title: "发送中..." });
  218. request("/report/sendemail", {
  219. taskId: this.rows[0]?.taskId,
  220. emailAddress: this.emailForm.email + "@999.com.cn",
  221. path: "traceabilityReport/pages/blacklist/index.vue",
  222. }).then((res) => {
  223. uni.hideLoading();
  224. if (res.code == 200) {
  225. uni.showToast({
  226. title: "发送成功",
  227. icon: "success",
  228. });
  229. this.closeEmailModal();
  230. } else {
  231. uni.showToast({
  232. title: res.msg || "发送失败",
  233. icon: "none",
  234. });
  235. }
  236. });
  237. },
  238. toggleProvinceDropdown() {
  239. this.dropdownProvinceOpen = !this.dropdownProvinceOpen;
  240. },
  241. closeProvinceDropdown() {
  242. this.dropdownProvinceOpen = false;
  243. },
  244. selectProvince(province) {
  245. this.selectedProvince = province || "";
  246. this.dropdownProvinceOpen = false;
  247. this.resetFetch();
  248. },
  249. },
  250. computed: {
  251. filteredProvinceList() {
  252. if (!this.provinceSearchText) {
  253. return this.provinceList;
  254. }
  255. return this.provinceList.filter((p) =>
  256. p?.toLowerCase()?.includes(this.provinceSearchText.toLowerCase()),
  257. );
  258. },
  259. },
  260. };
  261. </script>
  262. <style scoped>
  263. .detail-page {
  264. display: flex;
  265. flex-direction: column;
  266. height: calc(100vh - 116rpx - env(safe-area-inset-bottom));
  267. box-sizing: border-box;
  268. background: #f5f7fa;
  269. }
  270. /* Header Section */
  271. .header-section {
  272. background: linear-gradient(135deg, #2b32b2 0%, #1488cc 100%);
  273. padding: 40rpx 40rpx 80rpx;
  274. /* Extra padding at bottom for overlap effect */
  275. position: relative;
  276. z-index: 20;
  277. color: #fff;
  278. border-bottom-left-radius: 40rpx;
  279. border-bottom-right-radius: 40rpx;
  280. overflow: hidden;
  281. box-shadow: 0 10rpx 30rpx rgba(20, 136, 204, 0.2);
  282. }
  283. .header-content {
  284. display: flex;
  285. justify-content: space-between;
  286. align-items: center;
  287. position: relative;
  288. z-index: 2;
  289. margin-bottom: 24rpx;
  290. }
  291. .title-group {
  292. display: flex;
  293. flex-direction: column;
  294. }
  295. .main-title {
  296. font-size: 40rpx;
  297. font-weight: bold;
  298. margin-bottom: 8rpx;
  299. letter-spacing: 2rpx;
  300. }
  301. .sub-title {
  302. font-size: 24rpx;
  303. opacity: 0.8;
  304. }
  305. .stat-box {
  306. display: flex;
  307. align-items: baseline;
  308. }
  309. .stat-num {
  310. font-size: 56rpx;
  311. font-weight: bold;
  312. margin-right: 8rpx;
  313. font-family: "DINAlternate-Bold", sans-serif;
  314. }
  315. .stat-unit {
  316. font-size: 24rpx;
  317. opacity: 0.8;
  318. }
  319. .header-toolbar {
  320. display: flex;
  321. justify-content: space-between;
  322. align-items: center;
  323. position: relative;
  324. z-index: 3;
  325. }
  326. .update-tip {
  327. display: inline-flex;
  328. align-items: center;
  329. background: rgba(255, 255, 255, 0.15);
  330. padding: 8rpx 20rpx;
  331. border-radius: 30rpx;
  332. font-size: 22rpx;
  333. backdrop-filter: blur(10px);
  334. }
  335. .tip-icon {
  336. margin-right: 8rpx;
  337. font-size: 20rpx;
  338. }
  339. /* Filter Styles */
  340. .filter-wrap {
  341. position: relative;
  342. }
  343. .selector {
  344. display: flex;
  345. align-items: center;
  346. color: #fff;
  347. font-size: 26rpx;
  348. font-weight: 500;
  349. padding: 8rpx 20rpx;
  350. background: rgba(255, 255, 255, 0.2);
  351. border-radius: 30rpx;
  352. border: 1rpx solid rgba(255, 255, 255, 0.3);
  353. }
  354. .selector-text {
  355. max-width: 200rpx;
  356. overflow: hidden;
  357. white-space: nowrap;
  358. text-overflow: ellipsis;
  359. }
  360. .selector-arrow {
  361. margin-left: 10rpx;
  362. width: 0;
  363. height: 0;
  364. border-left: 8rpx solid transparent;
  365. border-right: 8rpx solid transparent;
  366. border-top: 10rpx solid #fff;
  367. transition: transform 0.3s;
  368. }
  369. .selector-arrow.open {
  370. transform: rotate(180deg);
  371. }
  372. /* Dropdown Layer (Absolute on top of everything) */
  373. .dropdown-layer {
  374. position: absolute;
  375. top: 300rpx;
  376. /* Adjust based on header layout */
  377. right: 40rpx;
  378. z-index: 999;
  379. }
  380. .dropdown {
  381. width: 360rpx;
  382. background: #fff;
  383. border-radius: 12rpx;
  384. box-shadow: 0 8rpx 30rpx rgba(0, 0, 0, 0.15);
  385. overflow: hidden;
  386. }
  387. .dropdown-search-bar {
  388. padding: 16rpx;
  389. border-bottom: 1rpx solid #f0f0f0;
  390. }
  391. .dropdown-search-input {
  392. background: #f5f7fa;
  393. height: 64rpx;
  394. border-radius: 32rpx;
  395. padding: 0 24rpx;
  396. font-size: 26rpx;
  397. }
  398. .dropdown-scroll-view {
  399. max-height: 400rpx;
  400. }
  401. .dropdown-item {
  402. padding: 20rpx 30rpx;
  403. font-size: 28rpx;
  404. color: #333;
  405. display: flex;
  406. justify-content: space-between;
  407. align-items: center;
  408. transition: background 0.2s;
  409. }
  410. .dropdown-item:active {
  411. background: #f5f7fa;
  412. }
  413. .dropdown-item.active {
  414. color: #1890ff;
  415. font-weight: 500;
  416. background: #e6f7ff;
  417. }
  418. .check-mark {
  419. font-size: 24rpx;
  420. }
  421. .dropdown-empty {
  422. padding: 40rpx;
  423. text-align: center;
  424. color: #999;
  425. font-size: 26rpx;
  426. }
  427. /* Header Decor Circles */
  428. .header-circle {
  429. position: absolute;
  430. border-radius: 50%;
  431. background: rgba(255, 255, 255, 0.05);
  432. }
  433. .circle-1 {
  434. width: 300rpx;
  435. height: 300rpx;
  436. top: -100rpx;
  437. right: -50rpx;
  438. }
  439. .circle-2 {
  440. width: 200rpx;
  441. height: 200rpx;
  442. bottom: -50rpx;
  443. left: -50rpx;
  444. }
  445. /* List Scroll */
  446. .list-scroll {
  447. flex: 1;
  448. height: 0;
  449. padding: 0 24rpx;
  450. /* Remove vertical padding from scroll container */
  451. box-sizing: border-box;
  452. margin-top: -50rpx;
  453. /* Negative margin to pull list up */
  454. position: relative;
  455. z-index: 21;
  456. }
  457. .list-container {
  458. padding-top: 10rpx;
  459. padding-bottom: calc(200rpx + env(safe-area-inset-bottom));
  460. }
  461. .card-item {
  462. background: #fff;
  463. border-radius: 20rpx;
  464. padding: 30rpx;
  465. margin-bottom: 24rpx;
  466. box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.05);
  467. transition: transform 0.2s;
  468. }
  469. .card-item:active {
  470. transform: scale(0.99);
  471. }
  472. .card-header {
  473. display: flex;
  474. justify-content: space-between;
  475. align-items: flex-start;
  476. margin-bottom: 24rpx;
  477. }
  478. .header-left {
  479. flex: 1;
  480. display: flex;
  481. align-items: center;
  482. margin-right: 20rpx;
  483. }
  484. .index-num {
  485. font-size: 24rpx;
  486. color: #999;
  487. margin-right: 12rpx;
  488. font-family: monospace;
  489. }
  490. .company-name {
  491. font-size: 32rpx;
  492. font-weight: 600;
  493. color: #096dd9;
  494. line-height: 1.4;
  495. text-decoration: underline;
  496. }
  497. .header-right {
  498. flex-shrink: 0;
  499. }
  500. .status-tag {
  501. font-size: 20rpx;
  502. padding: 6rpx 16rpx;
  503. border-radius: 20rpx;
  504. background: #fff1f0;
  505. color: #ff4d4f;
  506. font-weight: 600;
  507. border: 1rpx solid rgba(255, 77, 79, 0.2);
  508. }
  509. .card-body {
  510. background: #f9fbfd;
  511. border-radius: 12rpx;
  512. padding: 24rpx;
  513. }
  514. .code-row {
  515. display: flex;
  516. align-items: center;
  517. margin-bottom: 20rpx;
  518. padding-bottom: 20rpx;
  519. border-bottom: 1rpx solid #edf0f5;
  520. }
  521. .code-row:last-child {
  522. margin-bottom: 0;
  523. padding-bottom: 0;
  524. border-bottom: none;
  525. }
  526. .code-text {
  527. font-family: monospace;
  528. color: #333 !important;
  529. font-weight: 600 !important;
  530. letter-spacing: 1rpx;
  531. }
  532. .info-grid {
  533. display: flex;
  534. flex-wrap: wrap;
  535. gap: 24rpx;
  536. }
  537. .info-item {
  538. display: flex;
  539. align-items: center;
  540. width: 45%;
  541. }
  542. .info-item .label,
  543. .code-row .label {
  544. font-size: 24rpx;
  545. color: #999;
  546. margin-right: 12rpx;
  547. }
  548. .info-item .value,
  549. .code-row .value {
  550. font-size: 26rpx;
  551. color: #666;
  552. font-weight: 500;
  553. }
  554. /* Loading & Footer */
  555. .loading-more {
  556. display: flex;
  557. justify-content: center;
  558. align-items: center;
  559. padding: 30rpx 0;
  560. }
  561. .loading-text {
  562. font-size: 24rpx;
  563. color: #999;
  564. }
  565. .loading-icon {
  566. width: 32rpx;
  567. height: 32rpx;
  568. margin-right: 12rpx;
  569. animation: spin 1s linear infinite;
  570. }
  571. .empty-data {
  572. padding-top: 120rpx;
  573. }
  574. .no-more {
  575. text-align: center;
  576. color: #ccc;
  577. font-size: 24rpx;
  578. padding: 30rpx 0;
  579. }
  580. @keyframes spin {
  581. from {
  582. transform: rotate(0deg);
  583. }
  584. to {
  585. transform: rotate(360deg);
  586. }
  587. }
  588. .footer-btn-area {
  589. padding: 24rpx 32rpx calc(24rpx + env(safe-area-inset-bottom));
  590. background: #fff;
  591. box-shadow: 0 -4rpx 20rpx rgba(0, 0, 0, 0.08);
  592. position: fixed;
  593. z-index: 100;
  594. bottom: 0;
  595. width: 100%;
  596. box-sizing: border-box;
  597. display: flex;
  598. gap: 24rpx;
  599. }
  600. .action-btn {
  601. flex: 1;
  602. height: 88rpx;
  603. line-height: 88rpx;
  604. border-radius: 44rpx;
  605. font-size: 30rpx;
  606. font-weight: 600;
  607. text-align: center;
  608. border: none;
  609. transition: all 0.3s;
  610. }
  611. .action-btn::after {
  612. border: none;
  613. }
  614. .action-btn:active {
  615. transform: scale(0.96);
  616. }
  617. .history-btn {
  618. background: #fff;
  619. color: #1890ff;
  620. border: 2rpx solid #1890ff;
  621. box-shadow: 0 4rpx 12rpx rgba(24, 144, 255, 0.1);
  622. }
  623. .export-btn {
  624. background: linear-gradient(135deg, #1890ff 0%, #096dd9 100%);
  625. color: #fff;
  626. box-shadow: 0 6rpx 16rpx rgba(24, 144, 255, 0.35);
  627. }
  628. /* 弹窗样式 */
  629. .report-export-create-modal-mask {
  630. position: fixed;
  631. top: 0;
  632. left: 0;
  633. right: 0;
  634. bottom: 0;
  635. background: rgba(0, 0, 0, 0.6);
  636. z-index: 999;
  637. backdrop-filter: blur(2px);
  638. }
  639. .report-export-create-modal {
  640. position: fixed;
  641. z-index: 1000;
  642. background: #fff;
  643. transition: all 0.3s ease;
  644. }
  645. .report-export-create-email-modal {
  646. top: 50%;
  647. left: 50%;
  648. transform: translate(-50%, -50%);
  649. width: 620rpx;
  650. border-radius: 24rpx;
  651. opacity: 0;
  652. visibility: hidden;
  653. overflow: hidden;
  654. }
  655. .report-export-create-email-modal.report-export-create-modal--open {
  656. opacity: 1;
  657. visibility: visible;
  658. }
  659. .report-export-create-modal-title {
  660. padding: 36rpx 32rpx;
  661. font-size: 36rpx;
  662. color: #333;
  663. text-align: center;
  664. font-weight: 600;
  665. border-bottom: 1rpx solid #f0f0f0;
  666. position: relative;
  667. }
  668. .report-export-create-modal-close {
  669. position: absolute;
  670. right: 32rpx;
  671. top: 50%;
  672. transform: translateY(-50%);
  673. font-size: 44rpx;
  674. color: #999;
  675. line-height: 1;
  676. padding: 10rpx;
  677. }
  678. .report-export-create-modal-body {
  679. padding: 48rpx 40rpx 32rpx;
  680. }
  681. .report-export-error-text {
  682. font-size: 24rpx;
  683. color: #ff4d4f;
  684. margin-top: 12rpx;
  685. display: block;
  686. }
  687. .report-export-create-modal-footer {
  688. padding: 0 40rpx 48rpx;
  689. display: flex;
  690. justify-content: space-between;
  691. gap: 24rpx;
  692. }
  693. .report-export-create-modal-btn {
  694. height: 88rpx;
  695. line-height: 88rpx;
  696. border-radius: 44rpx;
  697. text-align: center;
  698. font-size: 30rpx;
  699. font-weight: 600;
  700. flex: 1;
  701. margin: 0;
  702. }
  703. .cancel-btn {
  704. background: #f5f7fa;
  705. color: #666;
  706. border: 1rpx solid #e4e7ed;
  707. }
  708. .confirm-btn {
  709. background: linear-gradient(135deg, #1890ff 0%, #096dd9 100%);
  710. color: #fff;
  711. box-shadow: 0 6rpx 16rpx rgba(24, 144, 255, 0.3);
  712. }
  713. </style>