metalExchange.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. <template>
  2. <view class="withdraw">
  3. <view class="withdrawContent">
  4. <view class="tabs">
  5. <view
  6. v-for="item in tabsList"
  7. :key="item.key"
  8. class="tabs-item"
  9. :class="[tabsIndex === item.key ? 'active' : '']"
  10. @click="tabsChange(item)"
  11. >
  12. {{ item.title }}
  13. </view>
  14. </view>
  15. <!-- 收货地址模块 -->
  16. <view class="address" @click="onAddress">
  17. <view class="addressCon" v-if="addressInfo.realName">
  18. <view class="name"
  19. >{{ addressInfo.realName }}
  20. <text class="phone">{{ addressInfo.phone }}</text>
  21. </view>
  22. <view class="acea-row">
  23. <text class="default font-color" v-if="addressInfo.isDefault"
  24. >[默认]</text
  25. >
  26. <text class="line2"
  27. >{{ addressInfo.province }}{{ addressInfo.city
  28. }}{{ addressInfo.district }}{{ addressInfo.detail }}</text
  29. >
  30. </view>
  31. </view>
  32. <view class="addressCon" v-else>
  33. <view class="setaddress">设置收货地址</view>
  34. </view>
  35. <view class="iconfont icon-jiantou"></view>
  36. </view>
  37. <view class="content-top">
  38. <!-- 快递公司选择模块 -->
  39. <view class="section">
  40. <view class="section-title">选择快递公司</view>
  41. <view class="courier-list">
  42. <view
  43. class="courier-item"
  44. :class="{ active: item.isSelected }"
  45. v-for="(item, index) in courierList"
  46. :key="index"
  47. @click="handleSelectCourier(index)"
  48. >
  49. <image class="courier-logo" :src="item.logo"></image>
  50. <image
  51. v-show="item.isSelected"
  52. class="gou"
  53. src="https://mp-ad17e5cd-05c1-4df9-b060-556e25dac130.cdn.bspapp.com/mini/courier/dui.png"
  54. ></image>
  55. </view>
  56. </view>
  57. </view>
  58. </view>
  59. <view class="gold-box">
  60. <view class="gold-item">
  61. <view class="header">
  62. <h3 class="title">板料克重</h3>
  63. <view class="live-gold">
  64. 实时金价
  65. <text class="price">{{ realprice.toFixed(2) }}</text>
  66. </view>
  67. </view>
  68. <view class="input-box">
  69. <input
  70. v-model.number="extract"
  71. placeholder="请输入克数"
  72. type="digit"
  73. class="t-input"
  74. @input="onKeyInput"
  75. />
  76. </view>
  77. <view class="infoMoney" style="font-size: 16px">
  78. <view v-if="is_out">
  79. <text class="info-money-num" style="color: #ff1e0f">
  80. 输入克重超过可提现克重,账户克重{{ accountWeight }}克
  81. </text>
  82. </view>
  83. <view v-else-if="is_lowest">
  84. <text class="info-money-num" style="color: #ff1e0f">
  85. 最低{{ lowest }}克起兑换,账户克重{{
  86. accountWeight
  87. }}克,且最多两位小数
  88. </text>
  89. <text class="info-money-num" style="color: #ff1e0f"
  90. >最低{{ lowest }}g起购买,且最多两位小数</text
  91. >
  92. </view>
  93. <text v-else class="infoMoneyNum">
  94. {{ `手续费:${1}元 运费:${1}元 账户克重:${accountWeight}克` }}
  95. </text>
  96. <view class="infoTip">*默认融成小圆饼寄出</view>
  97. </view>
  98. </view>
  99. </view>
  100. <view class="withdraw-bottom">
  101. <view
  102. :class="['submitBtn', is_post ? '' : 'submitBtnActive']"
  103. style="margin-top: 10px"
  104. >
  105. <button @click="handleShowModel">提交兑换</button>
  106. </view>
  107. </view>
  108. </view>
  109. <!-- <uni-popup
  110. ref="singPopup"
  111. type="bottom"
  112. borderRadius="10px 10px 0 0"
  113. maskBackgroundColor="rgba(0,0,0,0)"
  114. >
  115. <view class="signContent">
  116. <scroll-view scrollY class="scrollView">
  117. <rich-text :nodes="agreement"></rich-text>
  118. </scroll-view>
  119. <view
  120. class="confirmBtn footer"
  121. @click="
  122. aggregate = true;
  123. $refs.singPopup.close();
  124. "
  125. >
  126. 我已详细知悉
  127. </view>
  128. </view>
  129. </uni-popup> -->
  130. <!-- 收货地址组件 -->
  131. <addressWindow
  132. ref="addressWindowRef"
  133. :address="address"
  134. :pagesUrl="pagesUrl"
  135. @OnDefaultAddress="OnDefaultAddress"
  136. @OnChangeAddress="OnChangeAddress"
  137. @changeClose="changeClose"
  138. />
  139. </view>
  140. </template>
  141. <script setup>
  142. import { ref, computed, nextTick } from "vue";
  143. import { onLoad } from "@dcloudio/uni-app";
  144. // 导入用户地址详情API接口
  145. import { getAddressDetail, getAddressDefault } from "@/api/user.js";
  146. // 导入地址选择组件
  147. import addressWindow from "@/components/addressWindow";
  148. import { useAppStore } from "@/stores/app";
  149. const appStore = useAppStore();
  150. console.log(appStore.userInfo);
  151. const tabsList = ref([
  152. { key: 1, label: "gold", title: "黄金" },
  153. { key: 2, label: "platinum", title: "铂金" },
  154. { key: 3, label: "silver", title: "白银" },
  155. ]);
  156. // 响应式数据(对应原data())
  157. const tabsIndex = ref(1);
  158. const needPrice = ref(0); // 手续费
  159. const goldAllPrice = ref(0); // 总金价
  160. const extract = ref(0);
  161. const lowest = ref(1);
  162. const is_out = ref(false);
  163. const is_post = ref(false);
  164. const is_lowest = ref(false);
  165. const aggregate = ref(false);
  166. const agreement = ref([]);
  167. // 快递公司列表(静态结构,内部选中状态需响应式)
  168. const courierList = ref([
  169. {
  170. type: 2,
  171. name: "顺丰陆运",
  172. logo: "https://mp-ad17e5cd-05c1-4df9-b060-556e25dac130.cdn.bspapp.com/mini/courier/sf-land.png",
  173. isSelected: true,
  174. price: 15,
  175. },
  176. {
  177. type: 3,
  178. name: "顺丰空运",
  179. logo: "https://mp-ad17e5cd-05c1-4df9-b060-556e25dac130.cdn.bspapp.com/mini/courier/sf-air.png",
  180. isSelected: false,
  181. price: 24,
  182. },
  183. {
  184. type: 4,
  185. name: "顺丰到付",
  186. logo: "https://mp-ad17e5cd-05c1-4df9-b060-556e25dac130.cdn.bspapp.com/mini/courier/sf-cod.png",
  187. isSelected: false,
  188. price: 0,
  189. },
  190. ]);
  191. // 快递相关响应式数据
  192. const courierPrice = ref(15);
  193. const selectedCourierType = ref(2);
  194. const selectedGender = ref("gold");
  195. // 用户余额及手续费(响应式对象)
  196. const preciousMetal = ref({
  197. gold: { name: "黄金", pool: 0, fee: 0 },
  198. platinum: { name: "铂金", pool: 0, fee: 0 },
  199. silver: { name: "白银", pool: 0, fee: 0 },
  200. });
  201. const tabsChange = (item) => {
  202. tabsIndex.value = item.key;
  203. selectedGender.value = item.label;
  204. };
  205. const handleSelectCourier = (index) => {
  206. courierList.value.forEach((item, i) => {
  207. item.isSelected = i === index;
  208. });
  209. const selectedCourier = courierList.value.find((item) => item.isSelected);
  210. if (selectedCourier) {
  211. // this.courierPrice = this.userInfo?.isSVIP
  212. // ? vk.myfn.accDivDecimal(selectedCourier.price, 2)
  213. // : selectedCourier.price;
  214. // this.selectedCourierType = selectedCourier.type; // 保存选中快递的type
  215. }
  216. };
  217. // 输入框逻辑
  218. // 在<script setup>中添加输入验证方法
  219. const onKeyInput = () => {
  220. // 重置提示状态
  221. is_lowest.value = false;
  222. is_out.value = false;
  223. // 处理空输入
  224. if (extract.value === null || extract.value === "" || isNaN(extract.value)) {
  225. is_lowest.value = true; // 空输入时显示最低限制提示
  226. return;
  227. }
  228. const inputWeight = Number(extract.value);
  229. const minWeight = lowest.value; // 最低1克(来自定义的lowest: ref(1))
  230. const accountWeightNum = Number(accountWeight.value) || 0;
  231. // 验证1:是否低于最低限制(1克)
  232. const isBelowMin = inputWeight < minWeight;
  233. // 验证2:是否超过两位小数(通过正则判断)
  234. const hasMoreThanTwoDecimals = /\.\d{3,}$/.test(extract.value.toString());
  235. // 验证3:是否超过账户可用克重
  236. const isOverAccount = inputWeight > accountWeightNum;
  237. // 设置提示状态
  238. if (isBelowMin || hasMoreThanTwoDecimals) {
  239. is_lowest.value = true; // 显示最低限制提示(包含兑换和购买)
  240. }
  241. if (isOverAccount) {
  242. is_out.value = true; // 显示超过账户克重提示
  243. }
  244. };
  245. // 账户克重
  246. const accountWeight = computed(() => {
  247. if (tabsIndex.value == 1) {
  248. return appStore.userInfo.goldBalance;
  249. }
  250. if (tabsIndex.value == 2) {
  251. return appStore.userInfo.ptBalance;
  252. }
  253. if (tabsIndex.value == 3) {
  254. return appStore.userInfo.agBalance;
  255. }
  256. });
  257. import useRealGoldPrice from "@/hooks/useRealGoldPrice";
  258. // 实时价格处理
  259. const {
  260. realGoldRecyclePrice,
  261. realKGoldRecyclePrice,
  262. realPtRecyclePrice,
  263. realAgRecyclePrice,
  264. } = useRealGoldPrice({});
  265. import { useStoreRights } from "@/stores/rights";
  266. const rightsStore = useStoreRights();
  267. // 回收
  268. const vipRealGoldRecyclePrice = computed(() => {
  269. let res = 0;
  270. const basePrice = Number(realGoldRecyclePrice.value || 0);
  271. const soldBenefit = Number(rightsStore.userBenefits?.sold || 0);
  272. res = appStore.userInfo.svip
  273. ? basePrice + soldBenefit + 0.3
  274. : basePrice + soldBenefit;
  275. return res;
  276. });
  277. const viprealKGoldRecyclePrice = computed(() => {
  278. let res = 0;
  279. const basePrice = Number(realKGoldRecyclePrice.value || 0);
  280. const soldBenefit = Number(rightsStore.userBenefits?.sold || 0);
  281. res = appStore.userInfo.svip
  282. ? basePrice + soldBenefit + 0.3
  283. : basePrice + soldBenefit;
  284. return res;
  285. });
  286. const viprealPtRecyclePrice = computed(() => {
  287. let res = 0;
  288. const basePrice = Number(realPtRecyclePrice.value || 0);
  289. const soldBenefit = Number(rightsStore.userBenefits?.sold || 0);
  290. res = appStore.userInfo.svip
  291. ? basePrice + soldBenefit + 0.3
  292. : basePrice + soldBenefit;
  293. return res;
  294. });
  295. const viprealAgRecyclePrice = computed(() => {
  296. let res = 0;
  297. const basePrice = Number(realAgRecyclePrice.value || 0);
  298. const soldBenefit = Number(rightsStore.userBenefits?.sold || 0);
  299. res = appStore.userInfo.svip
  300. ? basePrice + soldBenefit + 0.3
  301. : basePrice + soldBenefit;
  302. return res;
  303. });
  304. // 实时金价
  305. const realprice = computed(() => {
  306. if (tabsIndex.value == 1) {
  307. return vipRealGoldRecyclePrice.value;
  308. }
  309. if (tabsIndex.value == 2) {
  310. return viprealPtRecyclePrice.value;
  311. }
  312. if (tabsIndex.value == 3) {
  313. return viprealAgRecyclePrice.value;
  314. }
  315. });
  316. // 地址相关
  317. const textareaStatus = ref(true);
  318. const pagesUrl = ref("");
  319. const addressWindowRef = ref(null);
  320. const address = ref({
  321. address: false,
  322. addressId: 0,
  323. }); // 地址组件
  324. const addressInfo = ref({}); // 地址信息
  325. const addressId = ref(0); // 地址id
  326. // 首次进入页面时展示默认地址
  327. const OnDefaultAddress = (e) => {
  328. console.log("保存默认地址详情");
  329. addressInfo.value = e; // 保存默认地址详情
  330. address.value.addressId = e.id; // 更新选中地址ID
  331. };
  332. // 打开地址选择弹窗
  333. const onAddress = () => {
  334. textareaStatus.value = false; // 隐藏备注框
  335. address.value.address = true; // 显示地址弹窗
  336. // 设置地址页面跳转链接
  337. pagesUrl.value = "/pages/users/user_address_list/index";
  338. nextTick(() => {
  339. addressWindowRef.value.fetchAddressList();
  340. });
  341. };
  342. // 选择地址后触发的事件
  343. const OnChangeAddress = (e) => {
  344. console.log("OnChangeAddress", e);
  345. addressInfo.value = e; // 保存选中的地址详情
  346. address.value.addressId = e.id; // 更新选中地址ID
  347. textareaStatus.value = true; // 显示备注框
  348. address.value.address = false; // 关闭地址弹窗
  349. };
  350. // 获取默认地址或指定地址详情
  351. const getaddressInfo = () => {
  352. if (addressId.value) {
  353. // 若有指定地址ID,获取该地址详情
  354. getAddressDetail(addressId.value).then((res) => {
  355. if (res.data) {
  356. // 若地址存在
  357. res.data.isDefault = parseInt(res.data.isDefault); // 转换默认地址标识为数字
  358. addressInfo.value = res.data || {}; // 保存地址详情
  359. addressId.value = res.data.id || 0; // 更新地址ID
  360. address.value.addressId = res.data.id || 0; // 更新选中地址ID
  361. }
  362. });
  363. } else {
  364. // 若没有指定地址ID,获取默认地址
  365. getAddressDefault().then((res) => {
  366. // 注意:原代码中未导入getAddressDefault,可能是遗漏
  367. if (res.data) {
  368. // 若默认地址存在
  369. res.data.isDefault = parseInt(res.data.isDefault);
  370. addressInfo.value = res.data || {};
  371. addressId.value = res.data.id || 0;
  372. address.value.addressId = res.data.id || 0;
  373. }
  374. });
  375. }
  376. };
  377. onLoad(() => {
  378. // 若已登录且非支付页面,则获取地址信息(注释掉的逻辑,预留)
  379. if (appStore.isLogin) {
  380. // console.log(1111);
  381. getaddressInfo();
  382. // 等待DOM更新后,调用地址组件的方法获取地址列表
  383. nextTick(() => {
  384. addressWindowRef.value.fetchAddressList();
  385. });
  386. }
  387. });
  388. // 关闭地址弹窗
  389. const changeClose = () => {
  390. address.value.address = false; // 隐藏地址弹窗
  391. };
  392. </script>
  393. <style lang="scss" scoped>
  394. $item-value-color: #dca537;
  395. $card-bcolor: #f8f8f8;
  396. page {
  397. height: 100%;
  398. background-color: #ededed;
  399. }
  400. .tabs {
  401. display: flex;
  402. height: 80rpx;
  403. border-radius: 40rpx;
  404. padding: 0 20rpx;
  405. color: #fff;
  406. font-size: 38rpx;
  407. font-weight: 300;
  408. // margin-bottom: 10rpx;
  409. .tabs-item {
  410. width: 50%;
  411. height: 100%;
  412. display: flex;
  413. justify-content: center;
  414. // align-items:;
  415. position: relative;
  416. color: #000000;
  417. }
  418. .active::after {
  419. position: absolute;
  420. bottom: 18rpx;
  421. left: 50%;
  422. transform: translateX(-50%);
  423. content: "";
  424. z-index: 100;
  425. display: block;
  426. width: 65rpx;
  427. height: 6rpx;
  428. background-color: #cc9933;
  429. }
  430. }
  431. .withdraw-bottom {
  432. width: 100%;
  433. margin-top: 100rpx;
  434. display: flex;
  435. justify-content: center;
  436. }
  437. .header {
  438. padding-left: 5px;
  439. position: relative;
  440. display: flex;
  441. align-items: center;
  442. justify-content: space-between;
  443. padding: 10px 10px;
  444. border-radius: 5px;
  445. // background-color: #fff;
  446. // font-weight: bold;
  447. font-size: 18px;
  448. .live-gold {
  449. font-weight: 0;
  450. font-size: 30rpx;
  451. .price {
  452. color: #dcbe81;
  453. margin-left: 10rpx;
  454. }
  455. }
  456. .item {
  457. display: flex;
  458. align-items: center;
  459. margin-top: 15px;
  460. .targe {
  461. display: flex;
  462. justify-content: center;
  463. align-items: center;
  464. color: #fff;
  465. width: 35px;
  466. height: 35px;
  467. border-radius: 50%;
  468. background-color: #cc9933;
  469. }
  470. .address {
  471. width: 440rpx;
  472. margin: 0 10px;
  473. font-size: 28rpx;
  474. .receive-address {
  475. letter-spacing: 9px;
  476. }
  477. }
  478. .end {
  479. display: flex;
  480. justify-content: center;
  481. align-items: center;
  482. .copy {
  483. color: #888888;
  484. border-radius: 3px;
  485. border: 1px solid #888888;
  486. font-size: 24rpx;
  487. padding: 6rpx 23rpx;
  488. }
  489. }
  490. }
  491. &::before {
  492. position: absolute;
  493. top: 50%;
  494. transform: translatey(-50%);
  495. left: 0;
  496. content: "";
  497. width: 2px;
  498. height: 15px;
  499. background-color: #daa520;
  500. }
  501. .title {
  502. font-weight: 500;
  503. font-size: 32rpx;
  504. font-family: "黑体";
  505. }
  506. }
  507. .gold-box {
  508. padding: 30rpx 20rpx;
  509. }
  510. .gold-item {
  511. margin: 0 0 25rpx 0;
  512. }
  513. .input-box {
  514. display: flex;
  515. background-color: #ededed;
  516. border-radius: 5px;
  517. height: 90rpx;
  518. align-items: center;
  519. justify-content: space-around;
  520. font-size: 28rpx;
  521. padding-left: 20rpx;
  522. margin-top: 50rpx;
  523. input {
  524. width: 90%;
  525. }
  526. }
  527. // 地址相关样式
  528. .address {
  529. width: 690rpx;
  530. max-height: 180rpx;
  531. margin: 40rpx 0;
  532. padding: 28rpx;
  533. box-sizing: border-box;
  534. border-radius: 30rpx;
  535. .addressCon {
  536. width: 596rpx;
  537. font-size: 26rpx;
  538. color: #666;
  539. .name {
  540. font-size: 30rpx;
  541. color: #282828;
  542. font-weight: bold;
  543. margin-bottom: 10rpx;
  544. .phone {
  545. margin-left: 50rpx;
  546. }
  547. }
  548. .default {
  549. margin-right: 12rpx;
  550. }
  551. .setaddress {
  552. color: #333;
  553. font-size: 28rpx;
  554. }
  555. }
  556. .iconfont {
  557. font-size: 35rpx;
  558. color: #707070;
  559. }
  560. }
  561. .content-top {
  562. border-radius: 30rpx;
  563. // padding: 20rpx;
  564. background: $card-bcolor;
  565. margin-bottom: 20rpx;
  566. // 通用区块标题
  567. .section {
  568. // margin: 0 24rpx 32rpx;
  569. .section-title {
  570. font-size: 32rpx;
  571. font-weight: bold;
  572. margin-bottom: 24rpx;
  573. position: relative;
  574. padding-left: 20rpx;
  575. &::after {
  576. position: absolute;
  577. top: 0;
  578. left: 0;
  579. height: 100%;
  580. width: 3px;
  581. background: $item-value-color;
  582. content: "";
  583. }
  584. }
  585. // 快递公司选择
  586. .courier-list {
  587. display: flex;
  588. // overflow-x: auto;
  589. justify-content: space-between;
  590. padding-bottom: 16rpx;
  591. .courier-item {
  592. display: flex;
  593. flex-direction: column;
  594. align-items: center;
  595. min-width: 160rpx;
  596. margin-right: 24rpx;
  597. padding: 24rpx 20rpx;
  598. border: 2rpx solid #eee;
  599. border-radius: 12rpx;
  600. cursor: pointer;
  601. position: relative;
  602. .gou {
  603. position: absolute;
  604. width: 40rpx;
  605. height: 40rpx;
  606. // background: #dca537;
  607. right: -7rpx;
  608. bottom: -7rpx;
  609. border-radius: 50%;
  610. right: -6rpx;
  611. bottom: -6rpx;
  612. }
  613. &.active {
  614. border-color: #dbb870;
  615. }
  616. .courier-logo {
  617. width: 120rpx;
  618. height: 120rpx;
  619. margin-bottom: 8rpx;
  620. }
  621. .courier-name {
  622. font-size: 26rpx;
  623. }
  624. }
  625. }
  626. }
  627. }
  628. .withdraw {
  629. height: 100%;
  630. background-size: 100% 40%;
  631. background: $uni-bg-primary !important;
  632. .withdrawContent {
  633. padding: 45rpx 40rpx;
  634. background-color: #f7f7f7;
  635. // margin-top: ;
  636. position: relative;
  637. top: 150rpx;
  638. border-radius: 50rpx 50rpx 0 0;
  639. }
  640. .withdrawBody {
  641. background-color: #fff;
  642. padding: 20px 30px;
  643. font-size: 14px;
  644. .inputMoney {
  645. display: flex;
  646. align-items: center;
  647. justify-content: center;
  648. font-weight: 600;
  649. border-bottom: 1px solid #eaeef1;
  650. .rmb {
  651. font-size: 16px;
  652. // text-wrap: nowrap;
  653. }
  654. .tInput {
  655. height: 1.9em;
  656. font-size: 2.5em;
  657. border: none;
  658. position: relative;
  659. left: 3.5%;
  660. outline: none;
  661. }
  662. }
  663. }
  664. }
  665. .infoMoney {
  666. margin-top: 10px;
  667. font-size: 12px;
  668. margin-bottom: 20px;
  669. .infoMoneyNum {
  670. color: #b2b2b2;
  671. font-size: 26rpx;
  672. }
  673. .infoTip {
  674. color: red;
  675. font-size: 23rpx;
  676. margin-top: 10rpx;
  677. }
  678. }
  679. .agreement {
  680. display: flex;
  681. align-items: center;
  682. justify-content: center;
  683. padding: 10px;
  684. .chooseIcon {
  685. width: 16px;
  686. height: 16px;
  687. }
  688. .agreementText {
  689. font-size: 14px;
  690. margin-left: 10px;
  691. color: #999999;
  692. .agreementLink {
  693. color: #dca12b;
  694. }
  695. }
  696. }
  697. .submitBtn {
  698. button {
  699. background-color: #dca12b;
  700. color: #fff;
  701. width: 450rpx;
  702. height: 72rpx;
  703. display: flex;
  704. font-size: 30rpx;
  705. justify-content: center;
  706. align-items: center;
  707. border-radius: 30rpx;
  708. }
  709. }
  710. .submitBtnActive {
  711. button {
  712. color: #fff;
  713. background: #c4bba6;
  714. }
  715. }
  716. .signContent {
  717. background-color: #f8f8f8;
  718. padding: 20px;
  719. box-sizing: border-box;
  720. display: flex;
  721. justify-content: center;
  722. align-items: center;
  723. flex-direction: column;
  724. border-radius: 20px 20px 0 0;
  725. .scrollView {
  726. background-color: #fff;
  727. padding: 4px;
  728. height: 300px;
  729. overflow-y: hidden;
  730. border: 1px solid #dfdfdf;
  731. }
  732. .confirmBtn {
  733. margin-top: 10px;
  734. color: #fff;
  735. padding: 4px 20px;
  736. border-radius: 20px;
  737. background: linear-gradient(to right, #8ed187, #5dd665);
  738. }
  739. }
  740. </style>