PageThree.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866
  1. <template>
  2. <view class="page-three-container">
  3. <!-- 支付信息卡片 -->
  4. <view class="info-card">
  5. <view class="info-card-title">支付信息</view>
  6. <u-row class="info-row" justify="space-between">
  7. <u-col span="5.8">
  8. <view class="info-label">开户人</view>
  9. <u-input
  10. v-model="paymentInfo.customName"
  11. placeholder="请输入开户人姓名"
  12. class="info-input"
  13. />
  14. </u-col>
  15. <u-col span="5.8">
  16. <view class="info-label">银行名称</view>
  17. <u-input
  18. v-model="paymentInfo.bankName"
  19. placeholder="请输入银行名称"
  20. class="info-input"
  21. @blur="handleBankNameInput"
  22. />
  23. </u-col>
  24. </u-row>
  25. <u-row class="info-row">
  26. <u-col span="12">
  27. <view class="info-label">银行账号</view>
  28. <u-input
  29. v-model="paymentInfo.bankAccount"
  30. placeholder="请输入银行账号"
  31. class="info-input"
  32. />
  33. </u-col>
  34. </u-row>
  35. <u-row class="info-row">
  36. <u-col span="12">
  37. <view class="info-label">身份证号</view>
  38. <u-input
  39. v-model="paymentInfo.idNumber"
  40. placeholder="请输入身份证号"
  41. class="info-input"
  42. />
  43. </u-col>
  44. </u-row>
  45. <u-row class="info-row">
  46. <u-col span="12">
  47. <view class="info-label">支付方式选择</view>
  48. <u-radio-group
  49. iconPlacement="left"
  50. v-model="paymentMethodRadio"
  51. placement="row"
  52. @change="handlePaymentMethodRadioChange"
  53. >
  54. <u-radio shape="circle" label="小葫芦线上支付" name="online" />
  55. <u-radio shape="circle" label="线下支付" name="offline" />
  56. </u-radio-group>
  57. </u-col>
  58. </u-row>
  59. <u-row class="info-row">
  60. <u-col span="12">
  61. <view class="info-label">支付方式</view>
  62. <u-input
  63. :disabled="paymentMethodRadio === 'online'"
  64. v-model="paymentMethod"
  65. placeholder="请输入支付方式"
  66. class="info-input"
  67. />
  68. </u-col>
  69. </u-row>
  70. </view>
  71. <!-- 高清实物图卡片 -->
  72. <view class="card-wrap">
  73. <view class="detail-image-section">
  74. <view class="detail-image-header">
  75. <text class="detail-image-title">高清实物图(拖拽排序)</text>
  76. </view>
  77. <view class="detail-image-content">
  78. <view class="detail-image-list">
  79. <view
  80. v-for="(item, index) in detailImages.slice(0, 6)"
  81. :key="`detail-${index}`"
  82. class="detail-image-item"
  83. :class="{
  84. 'dragging': draggingIndex === index,
  85. 'can-drop': canDropIndex === index
  86. }"
  87. @touchstart.stop="onTouchStart($event, index)"
  88. @touchmove.stop="onTouchMove($event)"
  89. @touchend.stop="onTouchEnd"
  90. >
  91. <PicComp
  92. :src="item.fileUrl"
  93. @needPreviewPic="previewImageDetail"
  94. />
  95. <view class="image-type-tag">{{ getImageType(index) }}</view>
  96. <view
  97. class="detail-delete-btn"
  98. @click.stop="handleHideImage(item, index)"
  99. >
  100. ×
  101. </view>
  102. </view>
  103. <view
  104. class="detail-upload-btn"
  105. @click="handleUploadImage"
  106. >
  107. <u-icon name="plus" size="40rpx" color="#999" />
  108. </view>
  109. </view>
  110. </view>
  111. </view>
  112. </view>
  113. <!-- 支付总额卡片 -->
  114. <view class="card-wrap payment-card">
  115. <view class="payment-section">
  116. <view class="payment-total-container">
  117. <text class="payment-label">支付总额</text>
  118. <u-input
  119. v-model="paymentAmount"
  120. class="payment-amount"
  121. type="number"
  122. decimal="2"
  123. prefix="¥"
  124. />
  125. </view>
  126. <view class="payment-buttons-row">
  127. <view class="payment-button" @click="handleUnpaidClick">
  128. <u-icon name="star" size="40rpx" color="#ff9500" />
  129. <text class="button-text">未收</text>
  130. </view>
  131. <view class="payment-button" @click="handleFollowUpClick">
  132. <u-icon name="chat" size="40rpx" color="#108cff" />
  133. <text class="button-text">待跟进</text>
  134. </view>
  135. </view>
  136. <view class="pay-now-button" @click="handlePayNowClick">
  137. <text class="button-text">立即支付</text>
  138. </view>
  139. </view>
  140. </view>
  141. <!-- 下一步按钮 -->
  142. <u-button
  143. class="next-btn"
  144. @click="handleNext"
  145. type="primary"
  146. size="middle"
  147. >
  148. 下一步
  149. </u-button>
  150. <!-- 未收评级模态窗 -->
  151. <u-modal
  152. showCancelButton
  153. showConfirmButton
  154. @confirm="confirmUnpaid"
  155. @cancel="unpaidModalVisible = false"
  156. :show="unpaidModalVisible"
  157. title="未收评级"
  158. >
  159. <view class="modal-content">
  160. <u-rate
  161. v-model="unpaidRating"
  162. :count="5"
  163. :size="50"
  164. active-color="#ff9500"
  165. />
  166. </view>
  167. </u-modal>
  168. <!-- 待跟进模态窗 -->
  169. <u-modal
  170. showCancelButton
  171. showConfirmButton
  172. @confirm="confirmFollowUp"
  173. @cancel="followUpModalVisible = false"
  174. :show="followUpModalVisible"
  175. title="填写跟进细节"
  176. >
  177. <view class="modal-content">
  178. <u--textarea
  179. v-model="followUpNotes"
  180. placeholder="请输入情况"
  181. confirm-type="done"
  182. style="width: 100%; margin-bottom: 30rpx;"
  183. />
  184. </view>
  185. </u-modal>
  186. <!-- 确认支付模态窗 -->
  187. <u-modal
  188. :show="payNowModalVisible"
  189. title="确认支付信息"
  190. :showConfirmButton="false"
  191. >
  192. <view class="modal-content">
  193. <view class="payment-amount-display">¥{{ paymentAmount }}</view>
  194. <view class="payment-info-section">
  195. <view class="info-item">
  196. <text class="info-label">收款姓名:</text>
  197. <text class="info-value">{{ paymentInfo.customName || '未填写' }}</text>
  198. </view>
  199. <view class="info-item">
  200. <text class="info-label">开户银行:</text>
  201. <text class="info-value">{{ paymentInfo.bankName || '未填写' }}</text>
  202. </view>
  203. <view class="info-item">
  204. <text class="info-label">银行卡号:</text>
  205. <text class="info-value">{{ paymentInfo.bankAccount || '未填写' }}</text>
  206. </view>
  207. <view class="info-item">
  208. <text class="info-label">支付方式:</text>
  209. <text class="info-value">{{ paymentMethod || '未填写' }}</text>
  210. </view>
  211. </view>
  212. <u-button
  213. type="primary"
  214. size="large"
  215. @click="confirmTransfer"
  216. style="margin-top: 40rpx;"
  217. >
  218. 确认转账
  219. </u-button>
  220. <u-button
  221. type="primary"
  222. :plain="true"
  223. @click="payNowModalVisible = false"
  224. size="large"
  225. style="margin-top: 20rpx;"
  226. >
  227. 取消
  228. </u-button>
  229. </view>
  230. </u-modal>
  231. </view>
  232. </template>
  233. <script>
  234. import PicComp from './PicComp.vue'
  235. import imageUpload from '../utils/imageUpload.js'
  236. export default {
  237. name: 'PageThree',
  238. components: {
  239. PicComp
  240. },
  241. props: {
  242. orderDetail: {
  243. type: Object,
  244. default: () => ({})
  245. },
  246. orderId: {
  247. type: String,
  248. default: ''
  249. },
  250. currentReceipt: {
  251. type: Object,
  252. default: () => ({})
  253. }
  254. },
  255. data() {
  256. return {
  257. paymentInfo: {
  258. customName: '',
  259. bankName: '',
  260. bankAccount: '',
  261. idNumber: ''
  262. },
  263. paymentMethodRadio: 'offline',
  264. paymentMethod: '',
  265. paymentAmount: '0.00',
  266. detailImages: [],
  267. // 拖拽相关
  268. draggingIndex: -1,
  269. canDropIndex: -1,
  270. startX: 0,
  271. startY: 0,
  272. // 模态窗
  273. unpaidModalVisible: false,
  274. followUpModalVisible: false,
  275. payNowModalVisible: false,
  276. unpaidRating: 0,
  277. followUpNotes: ''
  278. }
  279. },
  280. watch: {
  281. orderDetail: {
  282. handler(newVal) {
  283. if (newVal) {
  284. this.paymentInfo.customName = newVal.customName || ''
  285. this.paymentInfo.bankName = newVal.bankName || ''
  286. this.paymentInfo.bankAccount = newVal.bankCardNumber || ''
  287. this.paymentInfo.idNumber = newVal.idCard || ''
  288. this.initPaymentMethod(newVal.paymentMethod)
  289. }
  290. },
  291. deep: true,
  292. immediate: true
  293. },
  294. currentReceipt: {
  295. handler(newVal) {
  296. if (newVal) {
  297. this.paymentAmount = newVal.tableFee || '0.00'
  298. this.loadDetailImages()
  299. }
  300. },
  301. deep: true,
  302. immediate: true
  303. }
  304. },
  305. methods: {
  306. /**
  307. * 刷新图片列表(供父组件调用)
  308. */
  309. async refreshImageList() {
  310. await this.loadDetailImages()
  311. },
  312. /**
  313. * 加载细节图
  314. */
  315. async loadDetailImages() {
  316. if (!this.currentReceipt.id || !this.orderDetail.itemBrand) return
  317. try {
  318. const list = await imageUpload.getFileList(
  319. '2',
  320. '3',
  321. this.currentReceipt.id,
  322. this.orderDetail.itemBrand,
  323. this.currentReceipt.clueId
  324. )
  325. this.detailImages = list || []
  326. } catch (error) {
  327. console.error('加载细节图失败:', error)
  328. }
  329. },
  330. /**
  331. * 初始化支付方式
  332. */
  333. initPaymentMethod(value) {
  334. if (value === '小葫芦线上支付') {
  335. this.paymentMethod = '小葫芦线上支付'
  336. this.paymentMethodRadio = 'online'
  337. } else {
  338. this.paymentMethod = value || ''
  339. this.paymentMethodRadio = 'offline'
  340. }
  341. },
  342. /**
  343. * 支付方式选择改变
  344. */
  345. handlePaymentMethodRadioChange(value) {
  346. if (value === 'online') {
  347. this.paymentMethod = '小葫芦线上支付'
  348. } else {
  349. this.paymentMethod = ''
  350. }
  351. },
  352. /**
  353. * 银行名称输入处理
  354. */
  355. handleBankNameInput() {
  356. const strValue = String(this.paymentInfo.bankName || '')
  357. const reg = /[0-9]/g
  358. this.paymentInfo.bankName = strValue.replace(reg, '')
  359. },
  360. /**
  361. * 获取图片类型
  362. */
  363. getImageType(index) {
  364. const types = ['正面', '反面', '侧面', '扣子', '编号']
  365. return types[index] || `细节${index - 4}`
  366. },
  367. /**
  368. * 触摸开始
  369. */
  370. onTouchStart(event, index) {
  371. if (this.draggingIndex !== -1) return
  372. this.draggingIndex = index
  373. this.startX = event.touches[0].clientX
  374. this.startY = event.touches[0].clientY
  375. },
  376. /**
  377. * 触摸移动
  378. */
  379. onTouchMove(event) {
  380. if (this.draggingIndex === -1) return
  381. const moveX = event.touches[0].clientX
  382. const moveY = event.touches[0].clientY
  383. this.findTargetIndex(moveX, moveY)
  384. },
  385. /**
  386. * 触摸结束
  387. */
  388. onTouchEnd() {
  389. if (this.draggingIndex === -1) return
  390. if (this.canDropIndex !== -1 && this.canDropIndex !== this.draggingIndex) {
  391. const temp = this.detailImages[this.draggingIndex]
  392. this.detailImages[this.draggingIndex] = this.detailImages[this.canDropIndex]
  393. this.detailImages[this.canDropIndex] = temp
  394. }
  395. this.resetDragState()
  396. },
  397. /**
  398. * 查找目标索引
  399. */
  400. findTargetIndex(x, y) {
  401. const query = uni.createSelectorQuery().in(this)
  402. query.selectAll('.detail-image-item').boundingClientRect(rects => {
  403. let targetIndex = -1
  404. for (let i = 0; i < rects.length; i++) {
  405. if (i === this.draggingIndex) continue
  406. const rect = rects[i]
  407. if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) {
  408. targetIndex = i
  409. break
  410. }
  411. }
  412. this.canDropIndex = targetIndex
  413. }).exec()
  414. },
  415. /**
  416. * 重置拖拽状态
  417. */
  418. resetDragState() {
  419. this.draggingIndex = -1
  420. this.canDropIndex = -1
  421. this.startX = 0
  422. this.startY = 0
  423. },
  424. /**
  425. * 上传图片
  426. */
  427. async handleUploadImage() {
  428. try {
  429. const filePaths = await imageUpload.chooseImage(9)
  430. const uploadResults = await imageUpload.uploadFiles(filePaths)
  431. await imageUpload.bindOrderFile(
  432. this.currentReceipt.clueId,
  433. this.currentReceipt.id,
  434. '3',
  435. uploadResults
  436. )
  437. this.loadDetailImages()
  438. } catch (error) {
  439. console.error('上传失败:', error)
  440. }
  441. },
  442. /**
  443. * 隐藏图片
  444. */
  445. handleHideImage(item, index) {
  446. const itemIndex = this.detailImages.findIndex(img => img.fileUrl === item.fileUrl)
  447. if (itemIndex !== -1) {
  448. this.detailImages.splice(itemIndex, 1)
  449. uni.$u.toast('图片已隐藏')
  450. }
  451. },
  452. /**
  453. * 预览图片
  454. */
  455. previewImageDetail(src) {
  456. const urlList = this.detailImages.map(item => item.fileUrl)
  457. uni.previewImage({
  458. urls: urlList,
  459. current: src
  460. })
  461. },
  462. /**
  463. * 未收点击
  464. */
  465. handleUnpaidClick() {
  466. this.unpaidModalVisible = true
  467. },
  468. /**
  469. * 待跟进点击
  470. */
  471. handleFollowUpClick() {
  472. this.followUpModalVisible = true
  473. },
  474. /**
  475. * 立即支付点击
  476. */
  477. async handlePayNowClick() {
  478. // 保存支付信息
  479. await uni.$u.api.updateReceiptForm({
  480. id: this.currentReceipt.id,
  481. tableFee: this.paymentAmount,
  482. fileIds: this.detailImages.map(item => item.id).join(',')
  483. })
  484. await uni.$u.api.updateClueOrderForm({
  485. id: this.orderDetail.id,
  486. customName: this.paymentInfo.customName || '',
  487. bankName: this.paymentInfo.bankName || '',
  488. bankCardNumber: this.paymentInfo.bankAccount || '',
  489. idCard: this.paymentInfo.idNumber || '',
  490. paymentMethod: this.paymentMethod || ''
  491. })
  492. if (!this.paymentInfo.customName || !this.paymentInfo.bankName ||
  493. !this.paymentInfo.bankAccount || !this.paymentInfo.idNumber || !this.paymentMethod) {
  494. uni.$u.toast('请填写完整的支付信息')
  495. return
  496. }
  497. if (this.paymentAmount <= 0) {
  498. uni.$u.toast('请填写正确的支付总额')
  499. return
  500. }
  501. this.payNowModalVisible = true
  502. },
  503. /**
  504. * 确认转账
  505. */
  506. confirmTransfer() {
  507. this.payNowModalVisible = false
  508. this.$emit('confirm-pay')
  509. },
  510. /**
  511. * 确认未收
  512. */
  513. async confirmUnpaid() {
  514. try {
  515. await uni.$u.api.addOrderFollow({
  516. orderId: this.orderId,
  517. content: `未收评分_${this.unpaidRating}`
  518. })
  519. await uni.$u.api.oderForm({
  520. status: '4',
  521. id: this.orderId
  522. })
  523. uni.$u.toast('提交未收评级成功')
  524. this.unpaidModalVisible = false
  525. } catch (error) {
  526. console.error('提交失败:', error)
  527. uni.$u.toast('提交失败')
  528. }
  529. },
  530. /**
  531. * 确认跟进
  532. */
  533. async confirmFollowUp() {
  534. try {
  535. await uni.$u.api.addOrderFollow({
  536. orderId: this.orderId,
  537. content: `待跟进_${this.followUpNotes}`
  538. })
  539. uni.$u.toast('提交待跟进记录成功')
  540. this.followUpModalVisible = false
  541. this.followUpNotes = ''
  542. } catch (error) {
  543. console.error('提交失败:', error)
  544. uni.$u.toast('提交失败')
  545. }
  546. },
  547. /**
  548. * 下一步
  549. */
  550. async handleNext() {
  551. await uni.$u.api.updateReceiptForm({
  552. id: this.currentReceipt.id,
  553. tableFee: this.paymentAmount,
  554. fileIds: this.detailImages.map(item => item.id).join(',')
  555. })
  556. await uni.$u.api.updateClueOrderForm({
  557. id: this.orderDetail.id,
  558. customName: this.paymentInfo.customName || '',
  559. bankName: this.paymentInfo.bankName || '',
  560. bankCardNumber: this.paymentInfo.bankAccount || '',
  561. idCard: this.paymentInfo.idNumber || ''
  562. })
  563. this.$emit('save', {
  564. nowPage: 'formThree',
  565. form: {
  566. ...this.paymentInfo
  567. },
  568. fileIds: this.detailImages.map(item => item.id).join(',')
  569. })
  570. this.$emit('next', {
  571. nowPage: 'formThree',
  572. form: {
  573. ...this.paymentInfo
  574. }
  575. })
  576. }
  577. }
  578. }
  579. </script>
  580. <style scoped lang="scss">
  581. @import '../styles/common.scss';
  582. .page-three-container {
  583. @extend .page-container;
  584. padding-bottom: 100rpx;
  585. }
  586. .info-card {
  587. @extend .card-wrap;
  588. padding: 20rpx;
  589. margin-top: 20rpx;
  590. }
  591. .info-card-title {
  592. @include font-styles($size: title, $weight: bold, $color: primary);
  593. margin-bottom: 25rpx;
  594. padding-bottom: 15rpx;
  595. border-bottom: 1rpx solid map-get($colors, border);
  596. }
  597. .info-row {
  598. margin-bottom: 20rpx;
  599. }
  600. .info-label {
  601. @include font-styles($size: tiny, $weight: regular, $color: tertiary);
  602. margin-bottom: 8rpx;
  603. display: block;
  604. }
  605. .info-input {
  606. border-radius: 8rpx;
  607. border: 1rpx solid #e5e7eb;
  608. padding: 12rpx 16rpx;
  609. width: 100%;
  610. box-sizing: border-box;
  611. }
  612. .detail-image-section {
  613. padding: 20rpx;
  614. }
  615. .detail-image-header {
  616. display: flex;
  617. justify-content: space-between;
  618. align-items: center;
  619. margin-bottom: 20rpx;
  620. padding-bottom: 20rpx;
  621. border-bottom: 1rpx solid map-get($colors, border);
  622. }
  623. .detail-image-title {
  624. @include font-styles($size: content, $weight: bold, $color: primary);
  625. }
  626. .detail-image-list {
  627. display: flex;
  628. flex-wrap: wrap;
  629. gap: 20rpx;
  630. position: relative;
  631. }
  632. .detail-image-item {
  633. position: relative;
  634. width: 200rpx;
  635. height: 200rpx;
  636. touch-action: none;
  637. transition: all 0.2s ease;
  638. z-index: 1;
  639. cursor: move;
  640. &.dragging {
  641. opacity: 0.5;
  642. transform: scale(1.05);
  643. z-index: 100;
  644. }
  645. &.can-drop {
  646. border: 2rpx dashed #108cff;
  647. background-color: rgba(16, 140, 255, 0.1);
  648. }
  649. }
  650. .image-type-tag {
  651. position: absolute;
  652. top: 10rpx;
  653. left: 10rpx;
  654. background-color: rgba(0, 0, 0, 0.6);
  655. color: white;
  656. padding: 5rpx 10rpx;
  657. border-radius: 12rpx;
  658. font-size: 22rpx;
  659. z-index: 1;
  660. }
  661. .detail-delete-btn {
  662. position: absolute;
  663. top: -10rpx;
  664. right: -10rpx;
  665. width: 40rpx;
  666. height: 40rpx;
  667. background-color: #ff4d4f;
  668. color: #fff;
  669. border-radius: 50%;
  670. display: flex;
  671. align-items: center;
  672. justify-content: center;
  673. font-weight: bold;
  674. z-index: 10;
  675. cursor: pointer;
  676. }
  677. .detail-upload-btn {
  678. width: 200rpx;
  679. height: 200rpx;
  680. border: 8rpx dashed #ddd;
  681. border-radius: 30rpx;
  682. display: flex;
  683. align-items: center;
  684. justify-content: center;
  685. background-color: #f9f9f9;
  686. cursor: pointer;
  687. }
  688. .payment-card {
  689. margin-top: 20rpx;
  690. }
  691. .payment-section {
  692. padding: 20rpx;
  693. }
  694. .payment-total-container {
  695. background-color: #f5f7fa;
  696. border: 2rpx solid #e5e7eb;
  697. border-radius: 12rpx;
  698. padding: 0rpx 30rpx;
  699. display: flex;
  700. align-items: center;
  701. justify-content: space-between;
  702. margin-bottom: 24rpx;
  703. }
  704. .payment-label {
  705. font-size: 36rpx;
  706. font-weight: 700;
  707. min-width: 140rpx;
  708. }
  709. .payment-amount {
  710. font-size: 48rpx;
  711. font-weight: 600;
  712. color: #f53f3f;
  713. width: auto;
  714. min-width: 150rpx;
  715. border: none;
  716. text-align: right !important;
  717. }
  718. .payment-buttons-row {
  719. display: flex;
  720. gap: 20rpx;
  721. margin-bottom: 24rpx;
  722. }
  723. .payment-button {
  724. flex: 1;
  725. border-radius: 12rpx;
  726. padding: 5rpx 0;
  727. display: flex;
  728. flex-direction: column;
  729. align-items: center;
  730. justify-content: center;
  731. background-color: #f5f7fa;
  732. border: 2rpx solid #e5e7eb;
  733. cursor: pointer;
  734. gap: 12rpx;
  735. }
  736. .pay-now-button {
  737. width: 100%;
  738. border-radius: 12rpx;
  739. padding: 32rpx 0;
  740. display: flex;
  741. flex-direction: column;
  742. align-items: center;
  743. justify-content: center;
  744. background-color: #108cff;
  745. color: #fff;
  746. cursor: pointer;
  747. box-shadow: 0 4rpx 12rpx rgba(16, 140, 255, 0.2);
  748. }
  749. .button-text {
  750. font-size: 28rpx;
  751. font-weight: 500;
  752. color: inherit;
  753. }
  754. .modal-content {
  755. width: 100%;
  756. padding: 40rpx 20rpx;
  757. display: flex;
  758. flex-direction: column;
  759. align-items: center;
  760. }
  761. .payment-amount-display {
  762. font-size: 64rpx;
  763. font-weight: bold;
  764. color: #108cff;
  765. text-align: center;
  766. margin-bottom: 40rpx;
  767. width: 100%;
  768. }
  769. .payment-info-section {
  770. width: 100%;
  771. background-color: #f5f7fa;
  772. border: 2rpx solid #e5e7eb;
  773. border-radius: 12rpx;
  774. padding: 30rpx 20rpx;
  775. margin-bottom: 40rpx;
  776. }
  777. .info-item {
  778. display: flex;
  779. margin-bottom: 20rpx;
  780. align-items: center;
  781. justify-content: space-between;
  782. &:last-child {
  783. margin-bottom: 0;
  784. }
  785. }
  786. .next-btn {
  787. position: fixed;
  788. bottom: 10rpx;
  789. left: 2.5%;
  790. width: 95%;
  791. height: 80rpx;
  792. line-height: 80rpx;
  793. text-align: center;
  794. border-radius: 20rpx;
  795. }
  796. </style>