card-order.vue 26 KB

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