card-order.vue 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028
  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. ></tui-skeleton>
  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-xiangyou"></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-xiangyou"></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-xiangyou"></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"></cm-record>
  164. <!-- 选择快捷支付银行 -->
  165. <cm-cards
  166. :show="popupShow1"
  167. :list="cardsList"
  168. @handleChoiceaCards="handleChoiceaCards"
  169. @addCards="handleAddCard"
  170. v-if="popupShow1"
  171. ></cm-cards>
  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: 0,
  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: '本次支付金额已超出微信支付限额,请输入小于5千的金额。', //操作文字提示语句
  230. modalButton: [
  231. {
  232. text: '知道了',
  233. customStyle: {
  234. color: '#fff',
  235. bgColor: 'linear-gradient(90deg, #F28F31 0%, #F3B574 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. if(data.onlinePayWays){
  302. this.checkPayMode(data.onlinePayWays)
  303. }
  304. setTimeout(() => {
  305. this.skeletonShow = false
  306. }, 500)
  307. })
  308. .catch(error => {
  309. this.$util.msg(error.msg, 2000)
  310. })
  311. },
  312. async GetUserClubBanks() {
  313. //获取列表
  314. try {
  315. const user = await this.$api.getStorage()
  316. const res = await this.UserService.userClubBanks({ userId:user.userId })
  317. this.cardsList = res.data
  318. this.defaultCards = this.cardsList[0]
  319. this.quickParams.userId = user.userId
  320. this.quickParams.shopOrderId = Number(this.shopOrderId)
  321. this.quickParams.quickPayBankNumber = this.defaultCards.quickPayBankNumber
  322. this.quickParams.quickPayMobile = this.defaultCards.quickPayMobile
  323. this.quickParams.quickPayBankExpireTime = this.defaultCards.quickPayBankExpireTime ? this.defaultCards.quickPayBankExpireTime : ''
  324. this.quickParams.quickPayUserName = this.defaultCards.quickPayUserName
  325. this.quickParams.idCard = this.defaultCards.idCard
  326. this.quickParams.cvvCode = this.defaultCards.cvvCode ? this.defaultCards.cvvCode : ''
  327. } catch (error) {
  328. console.log(error)
  329. }
  330. },
  331. handleAddCard(index) {
  332. //跳转添加卡号支付
  333. //quickPayFlag 1普通订单 ,payAmount 支付金额,单位元,shopOrderId 子订单Id
  334. const data = {
  335. payData: {
  336. quickPayFlag: 1,
  337. payAmount: this.payAmount,
  338. shopOrderId: Number(this.shopOrderId)
  339. },
  340. orderId: this.orderId
  341. }
  342. this.$api.navigateTo(`/pages/user/pay/card-comfirm?type=${index}&data=${JSON.stringify(data)}`)
  343. },
  344. buttonSubMit() {
  345. if(this.isSubLoding){ return }
  346. switch (this.tabCurrentIndex) {
  347. case 0: // 微信支付
  348. this.handleUmTrackEvent('Um_Event_ConfirmWechatPay', '微信支付')
  349. this.MiniWxPayFor()
  350. break
  351. case 1: // 企业网银
  352. this.payType = '1'
  353. this.handleUmTrackEvent('Um_Event_ConfirmEbankPay', '企业网银')
  354. this.handlePayOrderPayLink()
  355. break
  356. case 2: // 个人网银
  357. this.payType = '2'
  358. this.handleUmTrackEvent('Um_Event_ConfirmAbankPay', '个人网银')
  359. this.handlePayOrderPayLink()
  360. break
  361. case 3: // 快捷支付
  362. this.handleUmTrackEvent('Um_Event_ConfirmAbankPay', '快捷支付')
  363. this.orderPayQuickPay()
  364. break
  365. }
  366. this.isSubLoding = true
  367. },
  368. handleUmTrackEvent(UmName, UmPageName) {
  369. // 友盟埋点收集
  370. if (process.env.NODE_ENV != 'development') {
  371. this.$uma.trackEvent(UmName, {
  372. Um_Key_PageName: UmPageName,
  373. Um_Key_SourcePage: '线上支付',
  374. Um_Key_PayName: `${this.buttonText}`,
  375. Um_Key_PayOrderID: `${this.shopOrderId}`
  376. })
  377. }
  378. },
  379. async orderPayQuickPay() {
  380. //快捷支付
  381. try {
  382. this.quickParams.payAmount = this.payAmount
  383. console.log('payAmount',this.quickParams.payAmount)
  384. const res = await this.PayService.orderPayQuickPay(this.quickParams)
  385. const data = {
  386. params: this.quickParams,
  387. payData: res.data,
  388. orderId: this.orderId,
  389. payAmount: this.payAmount
  390. }
  391. this.isSubLoding = false
  392. this.$api.navigateTo(
  393. `/pages/user/pay/card-comfirm-sub?type=3&data=${JSON.stringify(data)}`
  394. )
  395. } catch (error) {
  396. this.$util.msg(error.msg, 2000)
  397. this.isSubLoding = false
  398. }
  399. },
  400. async handlePayOrderPayLink() {
  401. // 企业网银 个人网银
  402. if (this.payAmount == 0) {
  403. this.$util.msg('请输入本次支付的金额', 2000)
  404. return
  405. }
  406. if (this.payAmount <= 10) {
  407. this.$util.msg('网银支付的金额必须大于¥10.00', 2000)
  408. return
  409. }
  410. if (this.payType == '1') {
  411. if (this.payAmount != this.obligation) {
  412. this.contentModalText = '企业网银支付每次收取的手续费较高,建议一次性全额付款。'
  413. this.modal = true
  414. return
  415. }
  416. }
  417. try {
  418. const linkParams = {
  419. unpaidAmount: this.payAmount,
  420. shopOrderId: this.shopOrderId,
  421. payType: this.payType
  422. }
  423. const res = await this.PayService.PayOrderPayLink(linkParams)
  424. this.payHttpUrl = res.data
  425. this.isSubLoding = false
  426. this.isShowTip = true
  427. console.log('isShowTip',this.isShowTip)
  428. } catch (error) {
  429. console.log(error)
  430. this.isSubLoding = false
  431. }
  432. },
  433. async MiniWxPayFor() {
  434. // 微信支付
  435. if (this.payAmount > 5000) {
  436. this.modal = true
  437. return
  438. }
  439. if (this.payAmount == 0) {
  440. this.$util.msg('请输入本次支付的金额', 2000)
  441. return
  442. }
  443. if (this.payAmount * 100 < 2) {
  444. this.$util.msg('本次支付的金额必须大于¥0.02', 2000)
  445. return
  446. }
  447. // 获取微信code
  448. const wechatCode = await authorize.getCode('weixin')
  449. const params = {
  450. payAmount: this.payAmount,
  451. payType: 'XCX',
  452. code: wechatCode,
  453. shopOrderId: this.shopOrderId
  454. }
  455. this.weChatMiniOrderWxPay(params)
  456. this.isSubLoding = false
  457. },
  458. handleClick() {
  459. this.modal = false
  460. this.isSubLoding = false
  461. },
  462. confirmEvent(value) {
  463. //点击自定义键盘完成的回调函数
  464. this.chechValue(value)
  465. this.showDigitKeyboard = false
  466. },
  467. blurInput(e) {
  468. this.chechValue(e.detail.value)
  469. },
  470. focusInput() {
  471. // this.showDigitKeyboard = true
  472. },
  473. hideKeyboard() {
  474. this.showDigitKeyboard = false
  475. },
  476. chechValue(value) {
  477. let patern = /\d+\.\d+/g
  478. if (value && value.split('.').length > 2) {
  479. value = patern.exec(value)
  480. }
  481. if (value == '' || value < 0) {
  482. this.payAmount = this.quickParams.payAmount = ''
  483. this.balanceAmount = this.obligation
  484. } else if (value > this.obligation) {
  485. this.payAmount = this.quickParams.payAmount = this.toFixedFn(this.obligation)
  486. this.balanceAmount = this.toFixedFn(this.obligation - this.payAmount)
  487. } else {
  488. this.payAmount = this.quickParams.payAmount = this.toFixedFn(value)
  489. this.balanceAmount = this.toFixedFn(this.obligation - this.payAmount)
  490. }
  491. },
  492. hanldNavigateBack() {
  493. //页面返回
  494. uni.navigateBack({
  495. delta: 1
  496. })
  497. },
  498. hideTips() {
  499. //隐藏弹窗
  500. this.isShowTip = false
  501. },
  502. toFixedFn(text) {
  503. //处理小数点后两位数
  504. return Number(text).toFixed(2)
  505. },
  506. copyClipboard(data) {
  507. //复制账号
  508. thorui.getClipboardData(data, res => {
  509. if (res) {
  510. this.$util.msg('已复制', 2000)
  511. } else {
  512. this.$util.msg('复制失败', 2000)
  513. }
  514. })
  515. },
  516. clipboard(data) {
  517. //复制链接
  518. console.log('data', data)
  519. thorui.getClipboardData(data, res => {
  520. if (res) {
  521. this.isShowTip = false
  522. this.$util.msg('已复制', 2000)
  523. // 友盟埋点收集复制网银链接
  524. if (process.env.NODE_ENV != 'development') {
  525. this.$uma.trackEvent('Um_Event_CopyUnionPay', {
  526. Um_Key_PageName: '网银支付',
  527. Um_Key_SourcePage: '线上支付',
  528. Um_Key_PayName: `${this.buttonText}`,
  529. Um_Key_PayOrderID: `${this.shopOrderId}`
  530. })
  531. }
  532. } else {
  533. this.$util.msg('复制失败', 2000)
  534. }
  535. })
  536. },
  537. discard() {
  538. //丢弃
  539. }
  540. },
  541. onShow() {}
  542. }
  543. </script>
  544. <style lang="scss">
  545. page {
  546. height: auto !important;
  547. background-color: #ffffff;
  548. }
  549. .container-cash {
  550. width: 100%;
  551. .container-wrapper {
  552. width: 100%;
  553. margin: 0 auto;
  554. .pay-content {
  555. width: 100%;
  556. height: 420rpx;
  557. box-sizing: border-box;
  558. padding: 64rpx 35rpx 0 35rpx;
  559. background: url(https://static.caimei365.com/app/mini-mcare/icon/icon_payment@2x.png) no-repeat;
  560. background-size: cover;
  561. float: left;
  562. position: relative;
  563. .pay-top {
  564. width: 100%;
  565. height: auto;
  566. float: left;
  567. margin-bottom: 44rpx;
  568. .pay-paid {
  569. width: 100%;
  570. height: auto;
  571. margin-bottom: 38rpx;
  572. text {
  573. line-height: 48rpx;
  574. text-align: left;
  575. color: #ffffff;
  576. width: 100%;
  577. }
  578. .txt-m {
  579. font-size: $font-size-26;
  580. opacity: 0.7;
  581. display: inline-block;
  582. }
  583. .txt-b {
  584. font-size: $font-size-48;
  585. display: inline-block;
  586. .small {
  587. font-size: $font-size-32;
  588. }
  589. }
  590. }
  591. .pay-payd {
  592. width: 100%;
  593. height: auto;
  594. .pay-paids {
  595. height: auto;
  596. float: left;
  597. margin-right: 48rpx;
  598. text {
  599. line-height: 48rpx;
  600. text-align: left;
  601. color: #ffffff;
  602. }
  603. .txt-m {
  604. width: 100%;
  605. display: inline-block;
  606. font-size: $font-size-26;
  607. opacity: 0.7;
  608. }
  609. .txt-b {
  610. width: 100%;
  611. display: inline-block;
  612. font-size: $font-size-32;
  613. }
  614. }
  615. }
  616. }
  617. .pay-bot {
  618. width: 680rpx;
  619. height: 240rpx;
  620. padding: 24rpx;
  621. box-sizing: border-box;
  622. background: #ffffff;
  623. border-radius: 28rpx;
  624. box-shadow: 0 2px 6px rgba(255, 77, 0, 0.17);
  625. position: absolute;
  626. bottom: -150rpx;
  627. left: 35rpx;
  628. .bot-title {
  629. line-height: 36rpx;
  630. font-size: $font-size-26;
  631. color: #666666;
  632. }
  633. .bot-input {
  634. width: 100%;
  635. height: 66rpx;
  636. margin: 15rpx 0;
  637. border-bottom: 1px solid #ebebeb;
  638. line-height: 66rpx;
  639. font-size: $font-size-32;
  640. color: $text-color;
  641. text {
  642. display: block;
  643. float: left;
  644. }
  645. .input {
  646. font-size: $font-size-40;
  647. width: 500rpx;
  648. height: 66rpx;
  649. padding: 0 10rpx;
  650. line-height: 66rpx;
  651. float: left;
  652. .none {
  653. color: $text-color;
  654. opacity: 0.3;
  655. }
  656. .text {
  657. color: $text-color;
  658. }
  659. }
  660. .placeholder {
  661. font-size: $font-size-26;
  662. }
  663. }
  664. .bot-resid {
  665. line-height: 36rpx;
  666. font-size: $font-size-26;
  667. margin-top: 24rpx;
  668. .bot-resid-le {
  669. display: inline-block;
  670. float: left;
  671. color: $color-system;
  672. }
  673. .bot-resid-ri {
  674. display: inline-block;
  675. float: right;
  676. color: #1890f9;
  677. .iconfont {
  678. font-size: 32rpx;
  679. }
  680. }
  681. }
  682. }
  683. }
  684. .pay-checked {
  685. width: 100%;
  686. height: auto;
  687. float: left;
  688. box-sizing: border-box;
  689. padding: 0 0 32rpx 0;
  690. border-top: 1px solid #e1e1e1;
  691. margin-top: 180rpx;
  692. .pay-card-main {
  693. width: 100%;
  694. height: auto;
  695. float: left;
  696. border-top: 12px solid #f7f7f7;
  697. border-bottom: 12px solid #f7f7f7;
  698. box-sizing: border-box;
  699. padding: 0 32rpx;
  700. .pay-item-cell {
  701. height: 100rpx;
  702. box-sizing: border-box;
  703. padding: 26rpx 0;
  704. background-color: #ffffff;
  705. border-bottom: 1px solid #e1e1e1;
  706. &.add {
  707. border-bottom: none;
  708. padding-left: 66rpx;
  709. }
  710. .item-icon {
  711. width: 48rpx;
  712. height: 48rpx;
  713. margin-right: 20rpx;
  714. float: left;
  715. image {
  716. width: 48rpx;
  717. height: 48rpx;
  718. display: block;
  719. }
  720. }
  721. .item-texts {
  722. line-height: 48rpx;
  723. font-size: $font-size-28;
  724. color: $text-color;
  725. float: left;
  726. &.add {
  727. font-weight: bold;
  728. }
  729. }
  730. .item-checked {
  731. width: 48rpx;
  732. height: 48rpx;
  733. float: right;
  734. text-align: center;
  735. line-height: 48rpx;
  736. font-size: $font-size-40;
  737. color: #ffffff;
  738. .icon-weixuanze {
  739. color: #b2b2b2;
  740. }
  741. .icon-yixuanze3 {
  742. color: #F3B574;
  743. }
  744. .icon-xiangyou {
  745. color: #b2b2b2;
  746. }
  747. }
  748. }
  749. }
  750. .pay-item {
  751. width: 100%;
  752. height: auto;
  753. box-sizing: border-box;
  754. float: left;
  755. padding: 0 32rpx;
  756. .pay-item-cell {
  757. height: 100rpx;
  758. box-sizing: border-box;
  759. padding: 26rpx 0;
  760. background-color: #ffffff;
  761. border-bottom: 1px solid #e1e1e1;
  762. .item-icon {
  763. width: 48rpx;
  764. height: 48rpx;
  765. float: left;
  766. text-align: center;
  767. line-height: 48rpx;
  768. margin-right: 20rpx;
  769. .iconfont {
  770. font-size: 48rpx;
  771. }
  772. .icon-weixinzhifu {
  773. color: #0abc64;
  774. }
  775. .icon-gerenwangyinzhifu {
  776. color: #16afe8;
  777. }
  778. .icon-qiyewangyinzhifu {
  779. color: #007acc;
  780. }
  781. }
  782. .item-texts {
  783. line-height: 48rpx;
  784. font-size: $font-size-28;
  785. color: $text-color;
  786. float: left;
  787. &.add {
  788. font-weight: bold;
  789. }
  790. }
  791. .item-checked {
  792. width: 48rpx;
  793. height: 48rpx;
  794. float: right;
  795. text-align: center;
  796. line-height: 48rpx;
  797. font-size: $font-size-40;
  798. color: #ffffff;
  799. .icon-weixuanze {
  800. color: #b2b2b2;
  801. }
  802. .icon-yixuanze3 {
  803. color: #F3B574;
  804. }
  805. .icon-xiangyou {
  806. color: #b2b2b2;
  807. }
  808. }
  809. }
  810. }
  811. }
  812. .pay-statustext {
  813. width: 100%;
  814. height: auto;
  815. float: left;
  816. margin-top: 40rpx;
  817. padding-bottom: 160rpx;
  818. .pay-statustext-inner {
  819. width: 662rpx;
  820. height: 80rpx;
  821. margin: 0 auto;
  822. border: 1px solid #cccccc;
  823. padding: 20rpx;
  824. border-radius: 8rpx;
  825. .pay-icon {
  826. width: 62rpx;
  827. height: 100%;
  828. float: left;
  829. text-align: center;
  830. .iconfont {
  831. color: #999999;
  832. font-size: $font-size-36;
  833. line-height: 20rpx;
  834. }
  835. }
  836. .pay-text {
  837. width: 560rpx;
  838. height: 100%;
  839. float: left;
  840. line-height: 40rpx;
  841. font-size: $font-size-24;
  842. color: #999999;
  843. text-align: justify;
  844. }
  845. }
  846. }
  847. }
  848. .pay-button {
  849. width: 600rpx;
  850. background-color: #ffffff;
  851. position: fixed;
  852. height: 88rpx;
  853. padding: 24rpx 75rpx 0 75rpx;
  854. bottom: 0;
  855. .btn {
  856. width: 100%;
  857. height: 88rpx;
  858. border-radius: 44rpx;
  859. font-size: $font-size-28;
  860. line-height: 88rpx;
  861. color: #ffffff;
  862. margin: 0 auto;
  863. text-align: center;
  864. background: $btn-confirm;
  865. &.disabled{
  866. background: #e1e1e1 !important;
  867. }
  868. }
  869. }
  870. }
  871. .freight-alert {
  872. width: 100%;
  873. height: 100%;
  874. background: rgba(0, 0, 0, 0.5);
  875. position: fixed;
  876. top: 0;
  877. left: 0;
  878. z-index: 8888;
  879. transition: all 0.4s;
  880. &.none {
  881. display: none;
  882. }
  883. &.show {
  884. display: block;
  885. }
  886. .content {
  887. width: 422rpx;
  888. height: 434rpx;
  889. position: absolute;
  890. background: $bg-color;
  891. left: 0;
  892. right: 0;
  893. bottom: 0;
  894. top: 0;
  895. margin: auto;
  896. padding: 20rpx 32rpx;
  897. border-radius: 12rpx;
  898. .title {
  899. width: 100%;
  900. height: 68rpx;
  901. line-height: 68rpx;
  902. font-size: $font-size-28;
  903. color: $text-color;
  904. text-align: center;
  905. position: relative;
  906. .icon-iconfontguanbi {
  907. width: 68rpx;
  908. height: 68rpx;
  909. text-align: center;
  910. line-height: 68rpx;
  911. position: absolute;
  912. right: 0;
  913. top: 0;
  914. font-size: $font-size-36;
  915. color: #999999;
  916. }
  917. }
  918. .text-content {
  919. width: 100%;
  920. height: auto;
  921. .text {
  922. padding: 20rpx 0 0 0;
  923. line-height: 44rpx;
  924. font-size: $font-size-26;
  925. color: #666666;
  926. text-align: justify;
  927. }
  928. .text-p {
  929. width: 100%;
  930. line-height: 44rpx;
  931. font-size: $font-size-26;
  932. color: $color-system;
  933. text-align: left;
  934. text-overflow: ellipsis;
  935. display: -webkit-box;
  936. word-break: break-all;
  937. -webkit-box-orient: vertical;
  938. -webkit-line-clamp: 1;
  939. overflow: hidden;
  940. }
  941. .text-b {
  942. line-height: 44rpx;
  943. font-size: $font-size-24;
  944. color: #999999;
  945. text-align: left;
  946. }
  947. }
  948. .text-button {
  949. width: 100%;
  950. height: 88rpx;
  951. line-height: 88rpx;
  952. background: $btn-confirm;
  953. font-size: $font-size-28;
  954. border-radius: 44rpx;
  955. color: #ffffff;
  956. text-align: center;
  957. margin-top: 20rpx;
  958. }
  959. }
  960. }
  961. .tui-prompt-title {
  962. width: 100%;
  963. height: 44rpx;
  964. line-height: 44rpx;
  965. padding: 20rpx 0;
  966. text-align: center;
  967. color: #333333;
  968. border-bottom: 1px solid #e2e7ef;
  969. }
  970. .tui-prompt-text {
  971. padding-top: 20rpx;
  972. .tui-prompt-tips {
  973. width: 100%;
  974. line-height: 36rpx;
  975. font-size: $font-size-22;
  976. color: #F3B574;
  977. text-align: justify;
  978. margin-bottom: 24rpx;
  979. }
  980. .tui-prompt-item {
  981. width: 100%;
  982. line-height: 60rpx;
  983. color: #333333;
  984. font-size: $font-size-26;
  985. .text {
  986. font-weight: bold;
  987. }
  988. .copy {
  989. height: 38rpx;
  990. box-sizing: border-box;
  991. padding: 0 24rpx;
  992. text-align: center;
  993. line-height: 36rpx;
  994. display: inline-block;
  995. .iconfont {
  996. font-size: $font-size-40;
  997. color: #666666;
  998. }
  999. }
  1000. }
  1001. }
  1002. .tui-prompt-flex {
  1003. width: 100%;
  1004. height: auto;
  1005. margin-top: 20rpx;
  1006. box-sizing: border-box;
  1007. padding: 0 35rpx;
  1008. .btn {
  1009. width: 100%;
  1010. line-height: 84rpx;
  1011. font-size: $font-size-26;
  1012. text-align: center;
  1013. color: #ffffff;
  1014. border-radius: 44rpx;
  1015. margin: 20rpx 0;
  1016. &.btn-cancel {
  1017. background: #ffffff;
  1018. color: #333333;
  1019. border: 1px solid #979797;
  1020. }
  1021. &.btn-confirm {
  1022. background: $btn-confirm;
  1023. }
  1024. }
  1025. }
  1026. </style>