card-order.vue 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030
  1. <template>
  2. <view class="container cashier">
  3. <tui-skeleton
  4. v-if="skeletonShow"
  5. backgroundColor="#fafafa"
  6. borderRadius="10rpx"
  7. :isLoading="true"
  8. :loadingType="5"
  9. />
  10. <template v-else>
  11. <cu-custom :navbar-data="nvabarData" @navigateBack="hanldNavigateBack"></cu-custom>
  12. <view class="container-cash clearfix" :style="{ marginTop: CustomBar + 'px' }">
  13. <view class="container-wrapper">
  14. <view class="pay-content">
  15. <view class="pay-top">
  16. <view class="pay-paid">
  17. <text class="txt-m">待付金额</text>
  18. <text class="txt-b"><text class="small">¥</text>{{ obligation | NumFormat }}</text>
  19. </view>
  20. <view class="pay-payd">
  21. <view class="pay-paids">
  22. <text class="txt-m">应付总额</text>
  23. <text class="txt-b">¥{{ payableAmount | NumFormat }}</text>
  24. </view>
  25. <view class="pay-paids">
  26. <text class="txt-m">已支付金额</text>
  27. <text class="txt-b">¥{{ receiptAmount | NumFormat }}</text>
  28. </view>
  29. </view>
  30. </view>
  31. <view class="pay-bot">
  32. <view class="bot-title"><text>本次支付金额</text></view>
  33. <view class="bot-input">
  34. <text>¥</text>
  35. <input
  36. class="input"
  37. type="digit"
  38. v-model="payAmount"
  39. @focus="focusInput"
  40. @blur="blurInput"
  41. placeholder="输入金额不能大于待付金额"
  42. placeholder-class="placeholder"
  43. />
  44. </view>
  45. <view class="bot-resid">
  46. <text class="bot-resid-le">应付剩余¥{{ balanceAmount | NumFormat }}</text>
  47. <text class="bot-resid-ri" @click="hanldeShowPopup(0)"
  48. >支付记录 <text class="iconfont icon-xiayibu"></text>
  49. </text>
  50. </view>
  51. </view>
  52. </view>
  53. <view class="pay-checked">
  54. <template v-if="showQuickpayMode">
  55. <view class="pay-card-main" v-if="cardsList.length > 0">
  56. <view class="pay-item-cell" @click="tabClick(3)">
  57. <view class="item-icon">
  58. <image
  59. :src="
  60. 'https://static.caimei365.com/app/img/pay/icon_' +
  61. defaultCards.bankCode +
  62. '_@2x.png'
  63. "
  64. ></image>
  65. </view>
  66. <view class="item-texts"
  67. >{{ defaultCards.bankName }}(
  68. {{ defaultCards.quickPayBankNumber | bankNumeberFilter }} )</view
  69. >
  70. <view class="item-checked">
  71. <text
  72. class="iconfont"
  73. :class="[tabCurrentIndex === 3 ? 'icon-yixuanze3' : 'icon-weixuanze']"
  74. ></text>
  75. </view>
  76. </view>
  77. <view class="pay-item-cell add" @click="hanldeShowPopup(1)">
  78. <view class="item-texts add"><text>查看全部银行卡 / 添加新卡支付</text></view>
  79. <view class="item-checked"> <text class="iconfont icon-xiayibu"></text> </view>
  80. </view>
  81. </view>
  82. <view class="pay-item" @click="handleAddCard(2)" v-else>
  83. <view class="pay-item-cell">
  84. <view class="item-texts add"><text>添加银行卡快捷付款</text></view>
  85. <view class="item-checked"> <text class="iconfont icon-xiayibu"></text> </view>
  86. </view>
  87. </view>
  88. </template>
  89. <!-- <view class="pay-item" @click="tabClick(0)" v-if="showWeChatPayMode">
  90. <view class="pay-item-cell">
  91. <view class="item-icon"><text class="iconfont icon-weixinzhifu"></text></view>
  92. <view class="item-texts"><text>微信支付</text></view>
  93. <view class="item-checked">
  94. <text
  95. class="iconfont"
  96. :class="[tabCurrentIndex === 0 ? 'icon-yixuanze3' : 'icon-weixuanze']"
  97. ></text>
  98. </view>
  99. </view>
  100. </view> -->
  101. <view class="pay-item" @click="tabClick(1)" v-if="showB2BpayMode">
  102. <view class="pay-item-cell">
  103. <view class="item-icon"><text class="iconfont icon-qiyewangyinzhifu"></text></view>
  104. <view class="item-texts"><text>企业网银支付</text></view>
  105. <view class="item-checked">
  106. <text
  107. class="iconfont"
  108. :class="[tabCurrentIndex === 1 ? 'icon-yixuanze3' : 'icon-weixuanze']"
  109. ></text>
  110. </view>
  111. </view>
  112. </view>
  113. <view class="pay-item" @click="tabClick(2)">
  114. <view class="pay-item-cell">
  115. <view class="item-icon"><text class="iconfont icon-gerenwangyinzhifu"></text></view>
  116. <view class="item-texts"><text>个人网银支付</text></view>
  117. <view class="item-checked">
  118. <text
  119. class="iconfont"
  120. :class="[tabCurrentIndex === 2 ? 'icon-yixuanze3' : 'icon-weixuanze']"
  121. ></text>
  122. </view>
  123. </view>
  124. </view>
  125. </view>
  126. <view class="pay-statustext">
  127. <view class="pay-statustext-inner">
  128. <view class="pay-icon"> <text class="iconfont icon-gantanhao-yuankuang"></text> </view>
  129. <view class="pay-text">
  130. <view
  131. >使用任何一种线上支付方式支付全部金额后,供应商会在24小时后发货(周末、节假日顺延)。</view
  132. >
  133. </view>
  134. </view>
  135. </view>
  136. </view>
  137. <view class="pay-button" :style="{ paddingBottom: isIphoneX ? '68rpx' : '24rpx' }">
  138. <view class="btn" @click.stop="buttonSubMit" :class="isSubLoding ? 'disabled' : ''" :style="{ background: btnColor }">{{
  139. buttonText
  140. }}</view>
  141. </view>
  142. </view>
  143. </template>
  144. <!-- 支付链接弹窗 -->
  145. <view class="alert spec" v-if="isShowTip">
  146. <!-- 选择支付弹窗说明 -->
  147. <view class="freight-alert" @tap="hideTips">
  148. <view class="content">
  149. <view class="title">
  150. <text>支付链接</text> <text class="iconfont icon-iconfontguanbi" @click.stop="hideTips"></text>
  151. </view>
  152. <view class="text-content">
  153. <view class="text"
  154. >请复制以下链接,并发送至电脑端,在浏览器访问该链接并选择银行尽快完成支付</view
  155. >
  156. <view class="text-p">{{ payHttpUrl }}</view> <view class="text-b">链接有效期为72小时</view>
  157. </view>
  158. <view class="text-button" @click.stop="clipboard(payHttpUrl)">复制链接</view>
  159. </view>
  160. </view>
  161. </view>
  162. <!-- 支付记录 -->
  163. <cm-record :show="popupShow" :list="discernReceipt" v-if="popupShow" />
  164. <!-- 选择快捷支付银行 -->
  165. <cm-cards
  166. :show="popupShow1"
  167. :list="cardsList"
  168. @handleChoiceaCards="handleChoiceaCards"
  169. @addCards="handleAddCard"
  170. v-if="popupShow1"
  171. />
  172. <!-- 弹窗提示 -->
  173. <tui-modal
  174. :show="modal"
  175. @click="handleClick"
  176. :content="contentModalText"
  177. :button="modalButton"
  178. color="#333"
  179. :size="32"
  180. shape="circle"
  181. :maskClosable="false"
  182. >
  183. </tui-modal>
  184. </view>
  185. </template>
  186. <script>
  187. import authorize from '@/common/config/authorize.js'
  188. import thorui from '@/components/clipboard/clipboard.thorui.js'
  189. import payMixins from '@/mixins/payMixins.js'
  190. import cardMixins from './mixins/cardMixins.js'
  191. import cmCards from './components/cm-cards-popup'
  192. import cmRecord from './components/cm-record-popup'
  193. export default {
  194. mixins: [payMixins, cardMixins],
  195. components: {
  196. cmRecord,
  197. cmCards
  198. },
  199. data() {
  200. return {
  201. skeletonShow: true,
  202. orderId: 0,
  203. shopOrderId: 0,
  204. shopOrderInfo: {},
  205. payType: '',
  206. realPay: 0, //应付金额
  207. payableAmount: 0, // 应付总额
  208. receiptAmount: 0, // 已付金额
  209. obligation: 0, //待付金额
  210. balanceAmount: 0,
  211. payAmount: 0,
  212. nvabarData: {
  213. //顶部自定义导航
  214. showCapsule: 1, // 是否显示左上角图标 1表示显示 0表示不显示,
  215. showSearch: 0,
  216. title: '收银台', // 导航栏 中间的标题
  217. haveBack: true,
  218. textLeft: this.$store.state.isIphone
  219. },
  220. idCardList: [],
  221. isIphoneX: this.$store.state.isIphoneX,
  222. CustomBar: this.CustomBar, // 顶部导航栏高度
  223. isShowTip: false,
  224. discernReceipt: [],
  225. showDigitKeyboard: false,
  226. payHttpUrl: '',
  227. mbOrderId: 0, // 支付记录订单Id
  228. modal: false,
  229. contentModalText: '本次支付金额已超出微信支付限额,请输入小于20万的金额。', //操作文字提示语句
  230. modalButton: [
  231. {
  232. text: '知道了',
  233. customStyle: {
  234. color: '#fff',
  235. bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)'
  236. },
  237. plain: false
  238. }
  239. ],
  240. quickParams: {
  241. userId: 0, //机构UserId
  242. quickPayBankNumber: '', //快捷支付用户银行卡号/信用卡号
  243. quickPayMobile: '', //快捷支付银行卡绑定手机号
  244. quickPayBankExpireTime: '', //快捷支付信用卡过期时间,只包含年月,格式yy-MM
  245. quickPayUserName: '', //快捷支付用户姓名
  246. idCard: '', //身份证号
  247. cvvCode: '', //信用卡安全码
  248. quickPayFlag: 1,
  249. payAmount: 0,
  250. shopOrderId: 0
  251. },
  252. isSubLoding:false
  253. }
  254. },
  255. onLoad(option) {
  256. this.initData(option)
  257. },
  258. filters: {
  259. NumFormat(value) {
  260. if (!value) return '0.00'
  261. /*原来用的是Number(value).toFixed(0),这样取整时有问题,例如0.51取整之后为1,感谢Nils指正*/
  262. /*后来改成了 Number(value)|0,但是输入超过十一位就为负数了,具体见评论 */
  263. var intPart = Number(value) - (Number(value) % 1) //获取整数部分(这里是windy93的方法)
  264. var intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') //将整数部分逢三一断
  265. var floatPart = '.00' //预定义小数部分
  266. var value2Array = value.toString().split('.')
  267. //=2表示数据有小数位
  268. if (value2Array.length == 2) {
  269. floatPart = value2Array[1].toString() //拿到小数部分
  270. if (floatPart.length == 1) {
  271. //补0,实际上用不着
  272. return intPartFormat + '.' + floatPart + '0'
  273. } else {
  274. return intPartFormat + '.' + floatPart
  275. }
  276. } else {
  277. return intPartFormat + floatPart
  278. }
  279. }
  280. },
  281. methods: {
  282. initData(e) {
  283. this.shopOrderId = e.shopOrderId
  284. this.GetPayOrderInfo()
  285. this.GetUserClubBanks()
  286. },
  287. GetPayOrderInfo() {
  288. //初始化支付信息
  289. this.PayService.PayOrderCheckoutShoporders({ shopOrderId: this.shopOrderId })
  290. .then(response => {
  291. let data = response.data
  292. this.discernReceipt = data.discernReceipt // 支付记录
  293. this.shopOrderInfo = data.shopOrder // 子订单
  294. this.obligation = data.shopOrder.obligation // 待付金额
  295. this.orderId = data.shopOrder.orderId // 主订单Id
  296. this.receiptAmount = data.shopOrder.receiptAmount // 已付金额
  297. this.payableAmount = data.shopOrder.realPay // 应付金额
  298. this.payAmount = this.toFixedFn(this.obligation) // 自定义金额
  299. this.balanceAmount = this.obligation - this.payAmount // 计算剩余支付金额
  300. // 支付方式配置
  301. this.checkPayMode(data.onlinePayWays,data.weChatFlag)
  302. setTimeout(() => {
  303. this.skeletonShow = false
  304. }, 500)
  305. })
  306. .catch(error => {
  307. this.$util.msg(error.msg, 2000)
  308. })
  309. },
  310. async GetUserClubBanks() {
  311. //获取列表
  312. try {
  313. const user = await this.$api.getStorage()
  314. const res = await this.UserService.userClubBanks({ userId:user.userId })
  315. this.cardsList = res.data
  316. this.defaultCards = this.cardsList[0]
  317. this.quickParams.userId = user.userId
  318. this.quickParams.shopOrderId = Number(this.shopOrderId)
  319. this.quickParams.quickPayBankNumber = this.defaultCards.quickPayBankNumber
  320. this.quickParams.quickPayMobile = this.defaultCards.quickPayMobile
  321. this.quickParams.quickPayBankExpireTime = this.defaultCards.quickPayBankExpireTime ? this.defaultCards.quickPayBankExpireTime : ''
  322. this.quickParams.quickPayUserName = this.defaultCards.quickPayUserName
  323. this.quickParams.idCard = this.defaultCards.idCard
  324. this.quickParams.cvvCode = this.defaultCards.cvvCode ? this.defaultCards.cvvCode : ''
  325. } catch (error) {
  326. console.log(error)
  327. }
  328. },
  329. handleAddCard(index) {
  330. //跳转添加卡号支付
  331. //quickPayFlag 1普通订单 ,payAmount 支付金额,单位元,shopOrderId 子订单Id
  332. const data = {
  333. payData: {
  334. quickPayFlag: 1,
  335. payAmount: this.payAmount,
  336. shopOrderId: Number(this.shopOrderId)
  337. },
  338. orderId: this.orderId
  339. }
  340. this.$api.navigateTo(`/pages/user/pay/card-comfirm?type=${index}&data=${JSON.stringify(data)}`)
  341. },
  342. buttonSubMit() {
  343. if(this.isSubLoding){ return }
  344. switch (this.tabCurrentIndex) {
  345. case 0: // 微信支付
  346. this.handleUmTrackEvent('Um_Event_ConfirmWechatPay', '微信支付')
  347. this.MiniWxPayFor()
  348. break
  349. case 1: // 企业网银
  350. this.payType = '1'
  351. this.handleUmTrackEvent('Um_Event_ConfirmEbankPay', '企业网银')
  352. this.handlePayOrderPayLink()
  353. break
  354. case 2: // 个人网银
  355. this.payType = '2'
  356. this.handleUmTrackEvent('Um_Event_ConfirmAbankPay', '个人网银')
  357. this.handlePayOrderPayLink()
  358. break
  359. case 3: // 快捷支付
  360. this.handleUmTrackEvent('Um_Event_ConfirmAbankPay', '快捷支付')
  361. if(!this.quickParams.quickPayBankNumber){
  362. this.$util.msg('请先添加快捷支付银行卡', 2000)
  363. return
  364. }
  365. this.orderPayQuickPay()
  366. break
  367. }
  368. this.isSubLoding = true
  369. },
  370. handleUmTrackEvent(UmName, UmPageName) {
  371. // 友盟埋点收集
  372. if (process.env.NODE_ENV != 'development') {
  373. this.$uma.trackEvent(UmName, {
  374. Um_Key_PageName: UmPageName,
  375. Um_Key_SourcePage: '线上支付',
  376. Um_Key_PayName: `${this.buttonText}`,
  377. Um_Key_PayOrderID: `${this.shopOrderId}`
  378. })
  379. }
  380. },
  381. async orderPayQuickPay() {
  382. //快捷支付
  383. try {
  384. this.quickParams.payAmount = this.payAmount
  385. console.log('payAmount',this.quickParams.payAmount)
  386. const res = await this.PayService.orderPayQuickPay(this.quickParams)
  387. const data = {
  388. params: this.quickParams,
  389. payData: res.data,
  390. orderId: this.orderId,
  391. payAmount: this.payAmount
  392. }
  393. this.isSubLoding = false
  394. this.$api.navigateTo(
  395. `/pages/user/pay/card-comfirm-sub?type=3&data=${JSON.stringify(data)}`
  396. )
  397. } catch (error) {
  398. this.$util.msg(error.msg, 2000)
  399. this.isSubLoding = false
  400. }
  401. },
  402. async handlePayOrderPayLink() {
  403. // 企业网银 个人网银
  404. if (this.payAmount == 0) {
  405. this.$util.msg('请输入本次支付的金额', 2000)
  406. return
  407. }
  408. if (this.payAmount <= 10) {
  409. this.$util.msg('网银支付的金额必须大于¥10.00', 2000)
  410. return
  411. }
  412. if (this.payType == '1') {
  413. if (this.payAmount != this.obligation) {
  414. this.contentModalText = '企业网银支付每次收取的手续费较高,建议一次性全额付款。'
  415. this.modal = true
  416. return
  417. }
  418. }
  419. try {
  420. const linkParams = {
  421. unpaidAmount: this.payAmount,
  422. shopOrderId: this.shopOrderId,
  423. payType: this.payType
  424. }
  425. const res = await this.PayService.PayOrderPayLink(linkParams)
  426. this.payHttpUrl = res.data
  427. this.isSubLoding = false
  428. this.isShowTip = true
  429. console.log('isShowTip',this.isShowTip)
  430. } catch (error) {
  431. console.log(error)
  432. this.isSubLoding = false
  433. }
  434. },
  435. async MiniWxPayFor() {
  436. // 微信支付
  437. if (this.payAmount > 200000) {
  438. this.modal = true
  439. return
  440. }
  441. if (this.payAmount == 0) {
  442. this.$util.msg('请输入本次支付的金额', 2000)
  443. return
  444. }
  445. if (this.payAmount * 100 < 2) {
  446. this.$util.msg('本次支付的金额必须大于¥0.02', 2000)
  447. return
  448. }
  449. // 获取微信code
  450. const wechatCode = await authorize.getCode('weixin')
  451. const params = {
  452. payAmount: this.payAmount,
  453. payType: 'XCX',
  454. code: wechatCode,
  455. shopOrderId: this.shopOrderId
  456. }
  457. this.weChatMiniOrderWxPay(params)
  458. this.isSubLoding = false
  459. },
  460. handleClick() {
  461. this.modal = false
  462. this.isSubLoding = false
  463. },
  464. confirmEvent(value) {
  465. //点击自定义键盘完成的回调函数
  466. this.chechValue(value)
  467. this.showDigitKeyboard = false
  468. },
  469. blurInput(e) {
  470. this.chechValue(e.detail.value)
  471. },
  472. focusInput() {
  473. // this.showDigitKeyboard = true
  474. },
  475. hideKeyboard() {
  476. this.showDigitKeyboard = false
  477. },
  478. chechValue(value) {
  479. let patern = /\d+\.\d+/g
  480. if (value && value.split('.').length > 2) {
  481. value = patern.exec(value)
  482. }
  483. if (value == '' || value < 0) {
  484. this.payAmount = this.quickParams.payAmount = ''
  485. this.balanceAmount = this.obligation
  486. } else if (value > this.obligation) {
  487. this.payAmount = this.quickParams.payAmount = this.toFixedFn(this.obligation)
  488. this.balanceAmount = this.toFixedFn(this.obligation - this.payAmount)
  489. } else {
  490. this.payAmount = this.quickParams.payAmount = this.toFixedFn(value)
  491. this.balanceAmount = this.toFixedFn(this.obligation - this.payAmount)
  492. }
  493. },
  494. hanldNavigateBack() {
  495. //页面返回
  496. uni.navigateBack({
  497. delta: 1
  498. })
  499. },
  500. hideTips() {
  501. //隐藏弹窗
  502. this.isShowTip = false
  503. },
  504. toFixedFn(text) {
  505. //处理小数点后两位数
  506. return Number(text).toFixed(2)
  507. },
  508. copyClipboard(data) {
  509. //复制账号
  510. thorui.getClipboardData(data, res => {
  511. if (res) {
  512. this.$util.msg('已复制', 2000)
  513. } else {
  514. this.$util.msg('复制失败', 2000)
  515. }
  516. })
  517. },
  518. clipboard(data) {
  519. //复制链接
  520. console.log('data', data)
  521. thorui.getClipboardData(data, res => {
  522. if (res) {
  523. this.isShowTip = false
  524. this.$util.msg('已复制', 2000)
  525. // 友盟埋点收集复制网银链接
  526. if (process.env.NODE_ENV != 'development') {
  527. this.$uma.trackEvent('Um_Event_CopyUnionPay', {
  528. Um_Key_PageName: '网银支付',
  529. Um_Key_SourcePage: '线上支付',
  530. Um_Key_PayName: `${this.buttonText}`,
  531. Um_Key_PayOrderID: `${this.shopOrderId}`
  532. })
  533. }
  534. } else {
  535. this.$util.msg('复制失败', 2000)
  536. }
  537. })
  538. },
  539. discard() {
  540. //丢弃
  541. }
  542. },
  543. onShow() {}
  544. }
  545. </script>
  546. <style lang="scss">
  547. page {
  548. height: auto !important;
  549. background-color: #ffffff;
  550. }
  551. .container-cash {
  552. width: 100%;
  553. .container-wrapper {
  554. width: 100%;
  555. margin: 0 auto;
  556. .pay-content {
  557. width: 100%;
  558. height: 420rpx;
  559. box-sizing: border-box;
  560. padding: 64rpx 35rpx 0 35rpx;
  561. background: url(https://img.caimei365.com/group1/M00/03/BD/Cmis218elN6AY6VeAAqw4n3n4nw186.png) no-repeat;
  562. background-size: cover;
  563. float: left;
  564. position: relative;
  565. .pay-top {
  566. width: 100%;
  567. height: auto;
  568. float: left;
  569. margin-bottom: 44rpx;
  570. .pay-paid {
  571. width: 100%;
  572. height: auto;
  573. margin-bottom: 38rpx;
  574. text {
  575. line-height: 48rpx;
  576. text-align: left;
  577. color: #ffffff;
  578. width: 100%;
  579. }
  580. .txt-m {
  581. font-size: $font-size-26;
  582. opacity: 0.7;
  583. display: inline-block;
  584. }
  585. .txt-b {
  586. font-size: $font-size-48;
  587. display: inline-block;
  588. .small {
  589. font-size: $font-size-32;
  590. }
  591. }
  592. }
  593. .pay-payd {
  594. width: 100%;
  595. height: auto;
  596. .pay-paids {
  597. height: auto;
  598. float: left;
  599. margin-right: 48rpx;
  600. text {
  601. line-height: 48rpx;
  602. text-align: left;
  603. color: #ffffff;
  604. }
  605. .txt-m {
  606. width: 100%;
  607. display: inline-block;
  608. font-size: $font-size-26;
  609. opacity: 0.7;
  610. }
  611. .txt-b {
  612. width: 100%;
  613. display: inline-block;
  614. font-size: $font-size-32;
  615. }
  616. }
  617. }
  618. }
  619. .pay-bot {
  620. width: 680rpx;
  621. height: 240rpx;
  622. padding: 24rpx;
  623. box-sizing: border-box;
  624. background: #ffffff;
  625. border-radius: 28rpx;
  626. box-shadow: 0 2px 6px rgba(255, 77, 0, 0.17);
  627. position: absolute;
  628. bottom: -150rpx;
  629. left: 35rpx;
  630. .bot-title {
  631. line-height: 36rpx;
  632. font-size: $font-size-26;
  633. color: #666666;
  634. }
  635. .bot-input {
  636. width: 100%;
  637. height: 66rpx;
  638. margin: 15rpx 0;
  639. border-bottom: 1px solid #ebebeb;
  640. line-height: 66rpx;
  641. font-size: $font-size-32;
  642. color: $text-color;
  643. text {
  644. display: block;
  645. float: left;
  646. }
  647. .input {
  648. font-size: $font-size-40;
  649. width: 500rpx;
  650. height: 66rpx;
  651. padding: 0 10rpx;
  652. line-height: 66rpx;
  653. float: left;
  654. .none {
  655. color: $text-color;
  656. opacity: 0.3;
  657. }
  658. .text {
  659. color: $text-color;
  660. }
  661. }
  662. .placeholder {
  663. font-size: $font-size-26;
  664. }
  665. }
  666. .bot-resid {
  667. line-height: 36rpx;
  668. font-size: $font-size-26;
  669. margin-top: 24rpx;
  670. .bot-resid-le {
  671. display: inline-block;
  672. float: left;
  673. color: $color-system;
  674. }
  675. .bot-resid-ri {
  676. display: inline-block;
  677. float: right;
  678. color: #1890f9;
  679. .iconfont {
  680. font-size: 32rpx;
  681. }
  682. }
  683. }
  684. }
  685. }
  686. .pay-checked {
  687. width: 100%;
  688. height: auto;
  689. float: left;
  690. box-sizing: border-box;
  691. padding: 0 0 32rpx 0;
  692. border-top: 1px solid #e1e1e1;
  693. margin-top: 180rpx;
  694. .pay-card-main {
  695. width: 100%;
  696. height: auto;
  697. float: left;
  698. border-top: 12px solid #f7f7f7;
  699. border-bottom: 12px solid #f7f7f7;
  700. box-sizing: border-box;
  701. padding: 0 32rpx;
  702. .pay-item-cell {
  703. height: 100rpx;
  704. box-sizing: border-box;
  705. padding: 26rpx 0;
  706. background-color: #ffffff;
  707. border-bottom: 1px solid #e1e1e1;
  708. &.add {
  709. border-bottom: none;
  710. padding-left: 66rpx;
  711. }
  712. .item-icon {
  713. width: 48rpx;
  714. height: 48rpx;
  715. margin-right: 20rpx;
  716. float: left;
  717. image {
  718. width: 48rpx;
  719. height: 48rpx;
  720. display: block;
  721. }
  722. }
  723. .item-texts {
  724. line-height: 48rpx;
  725. font-size: $font-size-28;
  726. color: $text-color;
  727. float: left;
  728. &.add {
  729. font-weight: bold;
  730. }
  731. }
  732. .item-checked {
  733. width: 48rpx;
  734. height: 48rpx;
  735. float: right;
  736. text-align: center;
  737. line-height: 48rpx;
  738. font-size: $font-size-40;
  739. color: #ffffff;
  740. .icon-weixuanze {
  741. color: #b2b2b2;
  742. }
  743. .icon-yixuanze3 {
  744. color: #ff5b00;
  745. }
  746. .icon-xiayibu {
  747. color: #b2b2b2;
  748. }
  749. }
  750. }
  751. }
  752. .pay-item {
  753. width: 100%;
  754. height: auto;
  755. box-sizing: border-box;
  756. float: left;
  757. padding: 0 32rpx;
  758. .pay-item-cell {
  759. height: 100rpx;
  760. box-sizing: border-box;
  761. padding: 26rpx 0;
  762. background-color: #ffffff;
  763. border-bottom: 1px solid #e1e1e1;
  764. .item-icon {
  765. width: 48rpx;
  766. height: 48rpx;
  767. float: left;
  768. text-align: center;
  769. line-height: 48rpx;
  770. margin-right: 20rpx;
  771. .iconfont {
  772. font-size: 48rpx;
  773. }
  774. .icon-weixinzhifu {
  775. color: #0abc64;
  776. }
  777. .icon-gerenwangyinzhifu {
  778. color: #16afe8;
  779. }
  780. .icon-qiyewangyinzhifu {
  781. color: #007acc;
  782. }
  783. }
  784. .item-texts {
  785. line-height: 48rpx;
  786. font-size: $font-size-28;
  787. color: $text-color;
  788. float: left;
  789. &.add {
  790. font-weight: bold;
  791. }
  792. }
  793. .item-checked {
  794. width: 48rpx;
  795. height: 48rpx;
  796. float: right;
  797. text-align: center;
  798. line-height: 48rpx;
  799. font-size: $font-size-40;
  800. color: #ffffff;
  801. .icon-weixuanze {
  802. color: #b2b2b2;
  803. }
  804. .icon-yixuanze3 {
  805. color: #ff5b00;
  806. }
  807. .icon-xiayibu {
  808. color: #b2b2b2;
  809. }
  810. }
  811. }
  812. }
  813. }
  814. .pay-statustext {
  815. width: 100%;
  816. height: auto;
  817. float: left;
  818. margin-top: 40rpx;
  819. padding-bottom: 160rpx;
  820. .pay-statustext-inner {
  821. width: 662rpx;
  822. height: 80rpx;
  823. margin: 0 auto;
  824. border: 1px solid #cccccc;
  825. padding: 20rpx;
  826. border-radius: 8rpx;
  827. .pay-icon {
  828. width: 62rpx;
  829. height: 100%;
  830. float: left;
  831. text-align: center;
  832. .iconfont {
  833. color: #999999;
  834. font-size: $font-size-36;
  835. line-height: 20rpx;
  836. }
  837. }
  838. .pay-text {
  839. width: 560rpx;
  840. height: 100%;
  841. float: left;
  842. line-height: 40rpx;
  843. font-size: $font-size-24;
  844. color: #999999;
  845. text-align: justify;
  846. }
  847. }
  848. }
  849. }
  850. .pay-button {
  851. width: 600rpx;
  852. background-color: #ffffff;
  853. position: fixed;
  854. height: 88rpx;
  855. padding: 24rpx 75rpx 0 75rpx;
  856. bottom: 0;
  857. .btn {
  858. width: 100%;
  859. height: 88rpx;
  860. border-radius: 44rpx;
  861. font-size: $font-size-28;
  862. line-height: 88rpx;
  863. color: #ffffff;
  864. margin: 0 auto;
  865. text-align: center;
  866. background: $btn-confirm;
  867. &.disabled{
  868. background: #e1e1e1 !important;
  869. }
  870. }
  871. }
  872. }
  873. .freight-alert {
  874. width: 100%;
  875. height: 100%;
  876. background: rgba(0, 0, 0, 0.5);
  877. position: fixed;
  878. top: 0;
  879. left: 0;
  880. z-index: 8888;
  881. transition: all 0.4s;
  882. &.none {
  883. display: none;
  884. }
  885. &.show {
  886. display: block;
  887. }
  888. .content {
  889. width: 422rpx;
  890. height: 434rpx;
  891. position: absolute;
  892. background: $bg-color;
  893. left: 0;
  894. right: 0;
  895. bottom: 0;
  896. top: 0;
  897. margin: auto;
  898. padding: 20rpx 32rpx;
  899. border-radius: 12rpx;
  900. .title {
  901. width: 100%;
  902. height: 68rpx;
  903. line-height: 68rpx;
  904. font-size: $font-size-28;
  905. color: $text-color;
  906. text-align: center;
  907. position: relative;
  908. .icon-iconfontguanbi {
  909. width: 68rpx;
  910. height: 68rpx;
  911. text-align: center;
  912. line-height: 68rpx;
  913. position: absolute;
  914. right: 0;
  915. top: 0;
  916. font-size: $font-size-36;
  917. color: #999999;
  918. }
  919. }
  920. .text-content {
  921. width: 100%;
  922. height: auto;
  923. .text {
  924. padding: 20rpx 0 0 0;
  925. line-height: 44rpx;
  926. font-size: $font-size-26;
  927. color: #666666;
  928. text-align: justify;
  929. }
  930. .text-p {
  931. width: 100%;
  932. line-height: 44rpx;
  933. font-size: $font-size-26;
  934. color: $color-system;
  935. text-align: left;
  936. text-overflow: ellipsis;
  937. display: -webkit-box;
  938. word-break: break-all;
  939. -webkit-box-orient: vertical;
  940. -webkit-line-clamp: 1;
  941. overflow: hidden;
  942. }
  943. .text-b {
  944. line-height: 44rpx;
  945. font-size: $font-size-24;
  946. color: #999999;
  947. text-align: left;
  948. }
  949. }
  950. .text-button {
  951. width: 100%;
  952. height: 88rpx;
  953. line-height: 88rpx;
  954. background: $btn-confirm;
  955. font-size: $font-size-28;
  956. border-radius: 44rpx;
  957. color: #ffffff;
  958. text-align: center;
  959. margin-top: 20rpx;
  960. }
  961. }
  962. }
  963. .tui-prompt-title {
  964. width: 100%;
  965. height: 44rpx;
  966. line-height: 44rpx;
  967. padding: 20rpx 0;
  968. text-align: center;
  969. color: #333333;
  970. border-bottom: 1px solid #e2e7ef;
  971. }
  972. .tui-prompt-text {
  973. padding-top: 20rpx;
  974. .tui-prompt-tips {
  975. width: 100%;
  976. line-height: 36rpx;
  977. font-size: $font-size-22;
  978. color: #ff5b00;
  979. text-align: justify;
  980. margin-bottom: 24rpx;
  981. }
  982. .tui-prompt-item {
  983. width: 100%;
  984. line-height: 60rpx;
  985. color: #333333;
  986. font-size: $font-size-26;
  987. .text {
  988. font-weight: bold;
  989. }
  990. .copy {
  991. height: 38rpx;
  992. box-sizing: border-box;
  993. padding: 0 24rpx;
  994. text-align: center;
  995. line-height: 36rpx;
  996. display: inline-block;
  997. .iconfont {
  998. font-size: $font-size-40;
  999. color: #666666;
  1000. }
  1001. }
  1002. }
  1003. }
  1004. .tui-prompt-flex {
  1005. width: 100%;
  1006. height: auto;
  1007. margin-top: 20rpx;
  1008. box-sizing: border-box;
  1009. padding: 0 35rpx;
  1010. .btn {
  1011. width: 100%;
  1012. line-height: 84rpx;
  1013. font-size: $font-size-26;
  1014. text-align: center;
  1015. color: #ffffff;
  1016. border-radius: 44rpx;
  1017. margin: 20rpx 0;
  1018. &.btn-cancel {
  1019. background: #ffffff;
  1020. color: #333333;
  1021. border: 1px solid #979797;
  1022. }
  1023. &.btn-confirm {
  1024. background: $btn-confirm;
  1025. }
  1026. }
  1027. }
  1028. </style>