rechargeRmb.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863
  1. <template>
  2. <view class="withdraw">
  3. <view class="content">
  4. <!-- 充值相关内容 -->
  5. <view style="height: auto">
  6. <view class="balance-box">
  7. <view>
  8. <view class="balance-title">可用余额</view>
  9. <view class="balance-rmb">
  10. <view style="display: flex; align-items: flex-end">¥</view>
  11. <view class="rmb">{{ userInfo?.nowMoney || 0 }}</view>
  12. </view>
  13. </view>
  14. </view>
  15. <view class="tabs">
  16. <view
  17. class="tabs-item"
  18. :class="[tabsIndex === item.key ? 'active' : '']"
  19. v-for="item in tabsList"
  20. :key="item.key"
  21. @click="tabsChange(item)"
  22. >
  23. {{ item.title }}
  24. </view>
  25. </view>
  26. <view class="box-list" v-if="tabsIndex === 0">
  27. <view class="box">
  28. <view class="title-tip">自主打款</view>
  29. <view class="item">
  30. <view class="targe">转</view>
  31. <view class="address">
  32. <view>用户名:深圳市水贝珠宝贸易有限公司</view>
  33. <view>账&nbsp;&nbsp;&nbsp;户:1223606060@qq.com</view>
  34. </view>
  35. <view class="end">
  36. <view class="copy" @click="copy('账户:1223606060@qq.com')"
  37. >复制</view
  38. >
  39. </view>
  40. </view>
  41. </view>
  42. </view>
  43. <view class="box-list" v-else>
  44. <view class="box">
  45. <view class="title-tip">自主打款</view>
  46. <view class="item">
  47. <view class="targe">转</view>
  48. <view
  49. class="address"
  50. style="display: flex; flex-wrap: wrap; height: 140rpx"
  51. >
  52. <view>用户名:深圳市水贝珠宝贸易有限公司</view>
  53. <view>卡号:756279419662</view>
  54. <view>开户行:中国银行深圳水贝支行</view>
  55. </view>
  56. <view class="end">
  57. <view
  58. class="copy"
  59. @click="
  60. copy(
  61. '用户名:深圳市水贝珠宝贸易有限公司,开户行:中国银行深圳水贝支行,卡号:756279419662'
  62. )
  63. "
  64. >
  65. 复制
  66. </view>
  67. </view>
  68. </view>
  69. </view>
  70. </view>
  71. </view>
  72. <view style="padding: 0 30px; background-color: #fff; padding-top: 30rpx">
  73. <view class="withdraw-body">
  74. <view class="title-tip">金额</view>
  75. <view class="input-money">
  76. <view class="rmb">
  77. <view style="width: 20px">¥</view>
  78. </view>
  79. <view style="width: 100%">
  80. <input
  81. placeholder="请输入充值金额(最低100元起充)"
  82. v-model.number="extract"
  83. type="digit"
  84. class="t-input"
  85. @input="onKeyInput"
  86. />
  87. </view>
  88. </view>
  89. <view class="info-money">
  90. <view v-if="is_lowest">
  91. <text class="info-money-num" style="color: #ff1e0f"
  92. >最低{{ lowest }}元起充,账户充值{{ extract }}元</text
  93. >
  94. </view>
  95. </view>
  96. <view v-if="tabsIndex === 0" style="margin-top: 50rpx">
  97. <view class="title-tip">订单号</view>
  98. <view class="input-order">
  99. <view class="rmb">
  100. <view style="width: 20px"></view>
  101. </view>
  102. <view style="width: 100%">
  103. <input
  104. placeholder="请输入订单号"
  105. v-model="order_no"
  106. class="t-input"
  107. />
  108. </view>
  109. </view>
  110. </view>
  111. <view style="margin-top: 50rpx">
  112. <view class="title-tip">转账图片</view>
  113. <view style="margin-top: 20px">
  114. <view class="upload-box">
  115. <up-upload
  116. :fileList="imageList"
  117. uploadIcon="plus"
  118. @afterRead="afterRead"
  119. @delete="deletePic"
  120. name="1"
  121. multiple
  122. :maxCount="1"
  123. >
  124. <template #trigger>
  125. <view class="upload-block">
  126. <uni-icons
  127. size="38"
  128. color="#ccc"
  129. type="plusempty"
  130. ></uni-icons>
  131. </view>
  132. </template>
  133. </up-upload>
  134. </view>
  135. </view>
  136. </view>
  137. <view :class="'btn-box tx' + (is_post ? '-active' : '')">
  138. <view class="btn" @click="handleShowModel">提交申请</view>
  139. </view>
  140. <view class="btn-tip" v-if="tabsIndex === 0">
  141. 提交后无需审核,0秒到账!
  142. <span style="color: red">(推荐)</span>
  143. </view>
  144. <view class="aggregate" @click="aggregate = !aggregate">
  145. <image
  146. class="choose"
  147. :src="
  148. aggregate
  149. ? '/static/recycle/choose.png'
  150. : '/static/recycle/nochoose.png'
  151. "
  152. mode="scaleToFill"
  153. ></image>
  154. <view class="aggre">
  155. 阅读并同意
  156. <span class="aggre-text" @click="showAggre">《充值协议》</span>
  157. </view>
  158. </view>
  159. </view>
  160. <view
  161. v-if="tabsIndex === 0 && !appStore?.$wxConfig?.auditModeEnabled"
  162. class="process-guidelines"
  163. >
  164. <view v-if="tabsIndex === 0" style="margin: 30rpx 0"
  165. >支付宝充值流程指引</view
  166. >
  167. <up-parse
  168. :content="process"
  169. @imgtap="handlePreviewImage"
  170. ></up-parse>
  171. </view>
  172. </view>
  173. </view>
  174. <uni-popup
  175. ref="singPopup"
  176. type="bottom"
  177. borderRadius="10px 10px 0 0"
  178. maskBackgroundColor="rgba(0,0,0,0)"
  179. >
  180. <view class="signContent">
  181. <scroll-view scrollY class="scroll">
  182. <up-parse :content="content"></up-parse>
  183. </scroll-view>
  184. <view
  185. class="comfireBtn footer"
  186. @click="
  187. aggregate = true;
  188. $refs.singPopup.close();
  189. "
  190. >
  191. 我已详细知悉
  192. </view>
  193. </view>
  194. </uni-popup>
  195. <!-- 图片预览 -->
  196. <!-- <image
  197. src="https://mp-c7c90a6c-c53b-48dd-bd94-692abc111f89.cdn.bspapp.com/2025/08/07/65570280-62375873-0.png"
  198. ></image> -->
  199. <!-- 底部占位 -->
  200. <view style="width: 100%; height: 100rpx"></view>
  201. </view>
  202. </template>
  203. <script setup>
  204. import { onLoad } from "@dcloudio/uni-app";
  205. import { ref, computed, watch } from "vue";
  206. import { useAppStore } from "@/stores/app";
  207. import { useImageUpload } from "@/hooks/useImageUpload";
  208. import { rechargeAlipayAPI, rechargeBankAPI } from "@/api/functions";
  209. import { agreementGetoneApi } from "@/api/user";
  210. // 引入uni-app API(无需额外import,直接使用uni.xxx即可)
  211. // 1. 初始化图片上传钩子(解构响应式数据和方法)
  212. const { imageList, afterRead, deletePic, uploadLoading } = useImageUpload({
  213. pid: 12,
  214. model: "zfb",
  215. });
  216. // 2. 获取Pinia Store实例
  217. const appStore = useAppStore();
  218. // 3. 定义响应式数据(替代Vue2的data选项)
  219. // 基础类型用ref,复杂类型(对象/数组)也可用ref(Vue3推荐)
  220. const transferImg = ref([]); // 转账图片
  221. const agreement = ref("");
  222. const extract = ref(null); // 充值金额
  223. const is_lowest = ref(false); // 是否低于最低充值额
  224. const is_post = ref(false); // 提交按钮是否可用
  225. const lowest = ref(100); // 最低充值额
  226. const aggregate = ref(false); // 是否同意协议
  227. const tabsIndex = ref(0); // 当前选中的标签(支付宝/银行卡)
  228. const tabsList = ref([
  229. { key: 0, title: "" },
  230. { key: 1, title: "" },
  231. ]); // 标签列表(固定数据,也可不用ref,直接const tabsList = [...])
  232. const order_no = ref(null); // 订单号
  233. const showPreview = ref(false); // 是否显示图片预览
  234. // const ImageUrl = ref([{ id: 1, src: "/static/logo.png" }]); // 预览图片列表
  235. const previewImageUrl = ref(""); // 预览图片地址
  236. const userInfo = ref({}); // 用户信息(从Store获取)
  237. // tabs切换
  238. const tabsChange = (item) => {
  239. if(appStore?.$wxConfig?.auditModeEnabled) return
  240. tabsIndex.value = item.key;
  241. extract.value = null;
  242. order_no.value = null;
  243. imageList.value = [];
  244. };
  245. // 4. 定义方法(替代Vue2的methods选项)
  246. // 复制文本方法
  247. const copy = (item) => {
  248. uni.setClipboardData({
  249. data: item,
  250. success: () => {
  251. uni.showToast({
  252. title: "复制成功",
  253. icon: "success",
  254. });
  255. },
  256. fail: (err) => {
  257. uni.showToast({
  258. title: "复制失败",
  259. icon: "none",
  260. });
  261. console.error("复制失败:", err);
  262. },
  263. });
  264. };
  265. // 输入框输入事件
  266. const onKeyInput = () => {
  267. checkMoney();
  268. };
  269. // 检查充值金额是否符合要求
  270. const checkMoney = () => {
  271. // 处理null/undefined情况
  272. const currentAmount = Number(extract.value);
  273. if (isNaN(currentAmount)) {
  274. is_post.value = false;
  275. is_lowest.value = true;
  276. return;
  277. }
  278. if (currentAmount >= lowest.value) {
  279. is_post.value = true;
  280. is_lowest.value = false;
  281. } else {
  282. is_lowest.value = true;
  283. is_post.value = false;
  284. }
  285. };
  286. // 提交申请(模板调用但原代码未实现,补充空函数避免报错)
  287. const handleShowModel = async () => {
  288. // 此处可添加提交前的校验(如是否同意协议、是否上传图片等)
  289. // 示例:
  290. if (!aggregate.value) {
  291. uni.showToast({
  292. title: "请先阅读并同意《充值协议》",
  293. icon: "none",
  294. });
  295. return;
  296. }
  297. if (!extract.value || extract.value < lowest.value) {
  298. uni.showToast({
  299. title: `请输入不低于${lowest.value}元的充值金额`,
  300. icon: "none",
  301. });
  302. return;
  303. }
  304. // 支付宝
  305. if (tabsIndex.value == 0) {
  306. const res = await rechargeAlipayAPI({
  307. orderNo: order_no.value,
  308. price: extract.value,
  309. rechargeImage: imageList.value.map((v) => v.info.url),
  310. });
  311. // console.log(res);
  312. if (res.code == 200) {
  313. uni.showToast({ title: "提交成功!" });
  314. }
  315. } else {
  316. const res = await rechargeBankAPI({
  317. price: extract.value,
  318. rechargeImage: imageList.value.map((v) => v.info.url),
  319. });
  320. if (res.code == 200) {
  321. uni.showToast({ title: "提交成功!" });
  322. setTimeout(() => {
  323. uni.navigateTo({
  324. url: "/pages/users/vault/index",
  325. });
  326. });
  327. }
  328. }
  329. // 银行卡
  330. };
  331. const singPopup = ref(null); // 需在模板中给uni-popup添加ref="singPopup"
  332. const showAggre = () => {
  333. singPopup.value?.open();
  334. };
  335. // 显示图片预览(模板调用但原代码未实现,补充空函数避免报错)
  336. const showImage = (url) => {
  337. uni.previewImage({
  338. current: url, // 当前显示图片的URL
  339. urls: [url], // 需要预览的图片URL列表
  340. success: () => {},
  341. fail: (err) => {
  342. console.error("预览图片失败:", err);
  343. },
  344. });
  345. };
  346. // 处理图片预览
  347. const handlePreviewImage = (e) => {
  348. console.log("e", e);
  349. const { src, urls } = e.detail;
  350. // 使用 uni-app 自带的图片预览 API
  351. uni.previewImage({
  352. current: src, // 当前点击的图片地址
  353. urls: urls, // 所有图片的数组(用于左右滑动预览)
  354. });
  355. };
  356. // 获取协议
  357. const process = ref("");
  358. const content = ref("123");
  359. const agreementGetoneFn = () => {
  360. agreementGetoneApi({ name: "recharge_text" }).then((res) => {
  361. process.value = res.data?.content;
  362. });
  363. agreementGetoneApi({ name: "recharge_rule" }).then((res) => {
  364. content.value = res.data?.content;
  365. });
  366. };
  367. // 5. 生命周期钩子(uni-app的onLoad,Vue3中直接使用)
  368. onLoad((options) => {
  369. agreementGetoneFn();
  370. if (appStore?.$wxConfig?.auditModeEnabled) {
  371. console.log("执行");
  372. } else {
  373. console.log("执行", appStore?.$wxConfig?.auditModeEnabled);
  374. tabsList.value = [
  375. { key: 0, title: "支付宝" },
  376. { key: 1, title: "银行卡" },
  377. ];
  378. }
  379. console.log("页面加载参数:", options);
  380. // 从Pinia Store获取用户信息(注意:Store中的userInfo若为响应式,需确保已加载)
  381. userInfo.value = appStore.userInfo;
  382. console.log("当前用户信息:", userInfo.value);
  383. // 可选:监听Store中userInfo的变化,实时更新本地userInfo
  384. watch(
  385. () => appStore.userInfo,
  386. (newUserInfo) => {
  387. userInfo.value = newUserInfo;
  388. },
  389. { immediate: true } // 立即执行一次
  390. );
  391. });
  392. // 6. 计算属性(替代Vue2的computed选项)
  393. // 原代码中computed为空,此处示例如何定义(按需添加)
  394. const computedExample = computed(() => {
  395. // 示例:计算充值金额的格式化显示
  396. return extract.value ? `¥${Number(extract.value).toFixed(2)}` : "¥0.00";
  397. });
  398. // 7. 监听器(替代Vue2的watch选项)
  399. // 示例:监听extract变化,自动检查金额(也可通过@input触发,二选一)
  400. watch(
  401. extract,
  402. (newVal) => {
  403. checkMoney();
  404. },
  405. { immediate: true } // 初始值也触发检查
  406. );
  407. // 监听tabsIndex变化(按需添加)
  408. watch(tabsIndex, (newIndex) => {
  409. console.log("切换到标签:", newIndex === 0 ? "支付宝" : "银行卡");
  410. // 切换标签时的额外逻辑(如清空订单号等)
  411. if (newIndex !== 0) {
  412. order_no.value = null;
  413. }
  414. });
  415. </script>
  416. <style lang="scss" scoped>
  417. page {
  418. height: 100%;
  419. background-color: #f7f7f7;
  420. }
  421. ::v-deep .file-list-row {
  422. background: #ededed;
  423. overflow: hidden;
  424. border-radius: 20rpx;
  425. }
  426. .upload-box {
  427. margin-top: 40rpx;
  428. .upload-block {
  429. width: 160rpx;
  430. height: 160rpx;
  431. border: 1px solid #ccc;
  432. border-radius: 10rpx;
  433. display: flex;
  434. flex-direction: column;
  435. justify-content: center;
  436. align-items: center;
  437. color: #ccc;
  438. font-weight: 700;
  439. font-size: 26rpx;
  440. }
  441. }
  442. .withdraw {
  443. height: 100%;
  444. // background-color: #f7f7f7;
  445. background-image: $uni-bg-primary !important;
  446. .content {
  447. // background: url('https://mp-ad17e5cd-05c1-4df9-b060-556e25dac130.cdn.bspapp.com/mini/static/20250529221733.jpg');
  448. background-size: 100% 500rpx;
  449. background-position: top center;
  450. background-repeat: no-repeat;
  451. box-sizing: border-box;
  452. // padding: 0 30rpx;
  453. }
  454. &-body {
  455. background-color: #fff;
  456. padding: 50rpx 0;
  457. font-size: 14px;
  458. .input-money,
  459. .input-order {
  460. box-sizing: border-box;
  461. }
  462. .input-money {
  463. display: flex;
  464. align-items: center;
  465. border-bottom: 1px solid #eaeef1;
  466. margin-top: 30rpx;
  467. background-color: #ededed;
  468. padding: 20rpx;
  469. border-radius: 15rpx;
  470. width: 100%;
  471. .rmb {
  472. font-size: 38rpx;
  473. // text-wrap: nowrap;
  474. font-weight: 300;
  475. font-family: "Calibri";
  476. }
  477. .t-input {
  478. height: 1.4em;
  479. width: 100%;
  480. font-size: 26rpx;
  481. border: none;
  482. position: relative;
  483. left: 1%;
  484. outline: none;
  485. }
  486. }
  487. .input-order {
  488. display: flex;
  489. align-items: center;
  490. border-bottom: 1px solid #eaeef1;
  491. margin-top: 30rpx;
  492. background-color: #ededed;
  493. padding: 20rpx;
  494. border-radius: 15rpx;
  495. width: 100%;
  496. .t-input {
  497. height: 1.4em;
  498. font-size: 30rpx;
  499. border: none;
  500. position: relative;
  501. left: 0;
  502. outline: none;
  503. }
  504. }
  505. .info-money {
  506. margin-top: 10px;
  507. font-size: 12px;
  508. margin-bottom: 20px;
  509. &-num {
  510. color: #b2b2b2;
  511. }
  512. }
  513. .tx {
  514. button {
  515. color: #b2b2b2;
  516. }
  517. }
  518. .tx-active {
  519. button {
  520. color: #fff;
  521. background: #c4bba6;
  522. }
  523. }
  524. .aggregate {
  525. display: flex;
  526. align-items: center;
  527. justify-content: center;
  528. padding: 10px;
  529. .aggre {
  530. font-size: 14px;
  531. margin-left: 10px;
  532. .aggre-text {
  533. color: #3ab0ff;
  534. }
  535. }
  536. }
  537. .choose {
  538. width: 16px;
  539. height: 16px;
  540. }
  541. }
  542. .box {
  543. display: flex;
  544. flex-direction: column;
  545. background-color: #fff;
  546. padding: 50rpx;
  547. padding-top: 50rpx;
  548. width: 100%;
  549. padding-bottom: 0;
  550. box-sizing: border-box;
  551. &-title {
  552. font-size: 14px;
  553. }
  554. }
  555. .tabs {
  556. display: flex;
  557. height: 80rpx;
  558. border-radius: 40rpx;
  559. padding: 0 20rpx;
  560. color: #fff;
  561. font-size: 38rpx;
  562. font-weight: 300;
  563. box-sizing: border-box;
  564. .tabs-item {
  565. width: 50%;
  566. height: 100%;
  567. display: flex;
  568. justify-content: center;
  569. position: relative;
  570. box-sizing: border-box;
  571. }
  572. .active::after {
  573. position: absolute;
  574. bottom: -10rpx;
  575. left: 50%;
  576. transform: translateX(-50%);
  577. content: "";
  578. border-style: solid;
  579. border-width: 0 10px 10px 10px;
  580. border-color: transparent transparent #ffffff transparent;
  581. width: 0;
  582. height: 0;
  583. opacity: 0;
  584. transform-origin: center top;
  585. animation: showTriangle 0.3s ease-out forwards;
  586. }
  587. }
  588. @keyframes showTriangle {
  589. 0% {
  590. opacity: 0;
  591. transform: translateY(-50%) scaleX(0);
  592. }
  593. 100% {
  594. opacity: 1;
  595. transform: translateY(-50%) scaleX(1);
  596. }
  597. }
  598. .box-list {
  599. width: 100%;
  600. box-sizing: border-box;
  601. .title {
  602. font-size: 14px;
  603. }
  604. }
  605. .box {
  606. display: flex;
  607. flex-direction: column;
  608. align-items: flex-start;
  609. justify-content: center;
  610. background-color: #f7f7f7;
  611. border-top-left-radius: 60rpx;
  612. border-top-right-radius: 60rpx;
  613. width: 100%;
  614. box-sizing: border-box;
  615. padding: 14px;
  616. padding-top: 60rpx;
  617. .head {
  618. font-size: 14px;
  619. }
  620. .item {
  621. width: 100%;
  622. display: flex;
  623. align-items: center;
  624. margin-top: 30px;
  625. .source {
  626. background-color: #f7af74;
  627. }
  628. .targe {
  629. background-color: #cd9933;
  630. }
  631. .source,
  632. .targe {
  633. display: flex;
  634. justify-content: center;
  635. align-items: center;
  636. color: #fff;
  637. width: 35px;
  638. height: 35px;
  639. border-radius: 50%;
  640. margin-right: 20rpx;
  641. }
  642. .address {
  643. height: 100rpx;
  644. display: flex;
  645. flex-wrap: wrap;
  646. align-items: center;
  647. flex: 1;
  648. font-size: 26rpx;
  649. font-family: "微软雅黑";
  650. color: #000000;
  651. }
  652. .write {
  653. margin: 0 10px;
  654. font-size: 14px;
  655. color: #888888;
  656. }
  657. .end {
  658. display: flex;
  659. justify-content: center;
  660. align-items: center;
  661. .copy {
  662. color: #888888;
  663. border-radius: 3px;
  664. border: 1px solid #888888;
  665. font-size: 24rpx;
  666. padding: 6rpx 20rpx;
  667. margin-right: 10rpx;
  668. }
  669. }
  670. }
  671. }
  672. /* 图片预览样式 */
  673. .image-preview-mask {
  674. position: fixed;
  675. top: 0;
  676. left: 0;
  677. width: 100%;
  678. height: 100%;
  679. background-color: rgba(0, 0, 0, 0.8);
  680. display: flex;
  681. justify-content: center;
  682. align-items: center;
  683. z-index: 9999;
  684. .imgBox {
  685. width: 100%;
  686. height: 100vh;
  687. .preview-image {
  688. width: 100%;
  689. height: 100% !important;
  690. }
  691. }
  692. }
  693. .process-guidelines {
  694. color: rgb(0, 0, 0);
  695. font-size: 32rpx;
  696. margin-top: 20rpx;
  697. margin-bottom: 20rpx;
  698. display: flex;
  699. flex-wrap: wrap;
  700. justify-content: center;
  701. border: 1rpx solid #f5f5f5;
  702. border-radius: 20rpx;
  703. box-shadow: 0 0px 10px 6px #efefef;
  704. padding-bottom: 70rpx;
  705. box-sizing: border-box;
  706. }
  707. .title-tip {
  708. position: relative;
  709. padding-left: 20rpx;
  710. height: 50rpx;
  711. display: flex;
  712. align-items: center;
  713. font-size: 32rpx;
  714. font-family: "黑体";
  715. width: 100%;
  716. box-sizing: border-box;
  717. &::before {
  718. position: absolute;
  719. top: 50%;
  720. transform: translatey(-40%);
  721. left: 0;
  722. content: "";
  723. width: 2px;
  724. height: 18px;
  725. background-color: #daa520;
  726. }
  727. }
  728. .balance-box {
  729. height: 300rpx;
  730. padding-left: 60rpx;
  731. color: #fff;
  732. display: flex;
  733. align-items: center;
  734. flex-wrap: wrap;
  735. width: 100%;
  736. box-sizing: border-box;
  737. .balance-title {
  738. width: 100%;
  739. font-size: 36rpx;
  740. font-weight: 300;
  741. margin-bottom: 10rpx;
  742. font-family: "微软雅黑";
  743. }
  744. .balance-rmb {
  745. width: 100%;
  746. display: flex;
  747. width: 100%;
  748. font-size: 38rpx;
  749. font-weight: 300;
  750. .rmb {
  751. font-size: 60rpx;
  752. font-weight: 500;
  753. margin-left: 10rpx;
  754. }
  755. }
  756. }
  757. .btn-box {
  758. height: 100rpx;
  759. display: flex;
  760. justify-content: center;
  761. align-items: center;
  762. margin-bottom: 40rpx;
  763. margin-top: 80rpx;
  764. width: 100%;
  765. box-sizing: border-box;
  766. .btn {
  767. height: 75rpx;
  768. width: 400rpx;
  769. background-color: #cd9933;
  770. color: #fff;
  771. border-radius: 50rpx;
  772. display: flex;
  773. justify-content: center;
  774. align-items: center;
  775. font-size: 30rpx;
  776. }
  777. }
  778. .btn-tip {
  779. height: 30rpx;
  780. display: flex;
  781. justify-content: center;
  782. align-items: center;
  783. margin-bottom: 30rpx;
  784. color: #808080;
  785. width: 100%;
  786. box-sizing: border-box;
  787. }
  788. }
  789. .signContent {
  790. background-color: #f8f8f8;
  791. padding: 20px;
  792. box-sizing: border-box;
  793. display: flex;
  794. justify-content: center;
  795. align-items: center;
  796. flex-direction: column;
  797. border-radius: 20px 20px 0 0;
  798. .scroll {
  799. background-color: #fff;
  800. padding: 4px;
  801. height: 300px;
  802. overflow-y: hidden;
  803. border: 1px solid #dfdfdf;
  804. }
  805. .footer {
  806. margin-top: 10px;
  807. color: #fff;
  808. padding: 4px 20px;
  809. border-radius: 20px;
  810. background: linear-gradient(to right, #8ed187, #5dd665);
  811. }
  812. }
  813. </style>