index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968
  1. <template>
  2. <view class="content">
  3. <view class="nav">
  4. <view class="nav-item" v-for="item in navList" :key="item.ctype" :class="{'action': ctype == item.ctype}"
  5. @click="getYjList('re',item.ctype)">
  6. {{item.name}}
  7. </view>
  8. </view>
  9. <view class="" style="height: 20rpx;">
  10. </view>
  11. <view class="search-box flex">
  12. <input type="text" v-model="phone" placeholder="输入手机号码" />
  13. <view class="search-btn" @click="goCz()">
  14. 充值
  15. </view>
  16. </view>
  17. <template v-if="ctype == 2 || ctype == 3">
  18. <picker @change="bindPickerChange" :value="chooseId" :range="provinces" range-key="label">
  19. <view class="search-box sf-wrap flex" v-if="ctype == 3">
  20. <view class="">
  21. 省份
  22. </view>
  23. <view class="">{{province || '请选择省份'}}</view>
  24. </view>
  25. </picker>
  26. <view class="search-box sf-wrap flex" v-if="ctype == 2">
  27. <view class="">
  28. 省市
  29. </view>
  30. <view class="" style="width: 150px;height: 100%;text-align: right;">
  31. <qiaoSelect :keyId="1" :dataList="dataList" phText="选择省市" phColor="#999999" showField="name" searchKey="name"
  32. :showObj="showObj" :showBorder="false" :disabled="false" @change="selectChange" @input='inputChange'></qiaoSelect>
  33. </view>
  34. </view>
  35. <view class="search-box sf-wrap flex">
  36. <view class="">
  37. 姓名
  38. </view>
  39. <input type="text" placeholder="请输入户主姓名" class="name-inp" v-model="userName" />
  40. </view>
  41. <!-- 户号 -->
  42. <view class="search-box sf-wrap flex">
  43. <view class="">
  44. 户号
  45. </view>
  46. <input type="text" placeholder="请输入户号" class="name-inp" v-model="rechargeno" />
  47. </view>
  48. <view class="search-box sf-wrap flex" v-if="ctype == 3">
  49. <view class="">
  50. 金额
  51. </view>
  52. <input type="text" placeholder="请输入充值金额" class="name-inp" v-model="sbjzt" />
  53. </view>
  54. <!-- jfjg -->
  55. <view class="search-box sf-wrap flex" v-if="ctype == 3">
  56. <view class="">
  57. 缴费机构
  58. </view>
  59. <input type="text" placeholder="请输入缴费机构" class="name-inp" v-model="jfjg" />
  60. </view>
  61. </template>
  62. <view class='search-box sf-wrap flex' v-if="userInfo.integral > 0">
  63. <view>积分抵扣</view>
  64. <view class='discount acea-row row-middle'>
  65. <view style="margin-right: 10rpx;"> 当前积分
  66. <text class='num font-color'>{{userInfo.integral || 0}}</text>
  67. </view>
  68. <view class="cb" @click="changeUseIntegral">
  69. <view v-show="useIntegral" class="cb-in">
  70. </view>
  71. </view>
  72. </view>
  73. </view>
  74. <view v-if="ctype != 3" class="item-wrap" v-for="item in info">
  75. <view class="tit">
  76. {{item.cname}}
  77. </view>
  78. <view class="item-list flex">
  79. <view class="item " v-for="itemt in item.goods" :class="{'action': itemt.goods_id == choose.goods_id}"
  80. @click="chooseGood(itemt)">
  81. <view class="num">
  82. {{itemt.num}}元
  83. </view>
  84. <!-- <view class="base-price">
  85. {{itemt.price}}
  86. </view> -->
  87. </view>
  88. </view>
  89. <template v-if="item.area">
  90. <view class="tit-area">
  91. 地区:
  92. </view>
  93. <view class="area-item">
  94. <text v-for="area in item.area">{{area}}</text>
  95. </view>
  96. </template>
  97. </view>
  98. <view class="item-wrap" v-if="content && ctype == 1 && info.length > 0">
  99. <view class="tit">
  100. 注意事项
  101. </view>
  102. <view class="tip" v-html="content">
  103. </view>
  104. </view>
  105. <uni-popup ref="popup" type="bottom">
  106. <view class="cz-model">
  107. <view class="price">
  108. {{priceInfo.payPrice}}
  109. </view>
  110. <view class="">
  111. {{choose.goods_name}}
  112. </view>
  113. <view class="">
  114. 到账时间:1-96小时 (高峰期96小时内)
  115. </view>
  116. <view class="">
  117. 充值号码:<text class="tip">{{phone}}</text>
  118. </view>
  119. <view class="tip tips">
  120. 请仔细核对号码。输错号码后果自负
  121. </view>
  122. <view class="pay-type-list ">
  123. </view>
  124. <!-- <view class='item acea-row row-between-wrapper' v-if="userInfo.integral > 0"> -->
  125. <view class="btn" @click="goNew">
  126. 立即充值
  127. </view>
  128. </view>
  129. </uni-popup>
  130. <payment :payMode="cartArr" :pay_close="pay_close" :isCall="true" :totalPrice="totalPrice"
  131. @changePayType="changePayType" @onChangeFun="onChangeFun"></payment>
  132. </view>
  133. </template>
  134. <script>
  135. import qiaoSelect from '@/uni_modules/qiao-select/components/qiao-select/qiaoSelect.vue'
  136. import payment from '@/components/payment';
  137. import {
  138. getCzList,
  139. createCz,
  140. computedCz,
  141. getCity
  142. } from '@/api/three'
  143. import {
  144. getUserInfo
  145. } from '@/api/user.js'
  146. import {
  147. getCityData
  148. } from '@/api/api.js'
  149. // import { passUser } from '@/api/zero.js'
  150. export default {
  151. components: {
  152. payment,
  153. qiaoSelect
  154. },
  155. data() {
  156. return {
  157. dataList: [],
  158. jfjg: '',
  159. sbjzt: 0,
  160. rechargeno: '',
  161. toPay: false,
  162. paying: false,
  163. navList: [{
  164. name: '话费充值',
  165. ctype: 0
  166. },
  167. // {
  168. // name: '话费快充',
  169. // ctype: 1
  170. // },
  171. {
  172. name: '电费充值',
  173. ctype: 2
  174. },
  175. {
  176. name: '水费充值',
  177. ctype: 3
  178. }
  179. ],
  180. useIntegral: false,
  181. phone: '',
  182. info: [],
  183. content: '',
  184. choose: {
  185. goods_id: 0
  186. },
  187. payType: 1,
  188. payName: 'weixin',
  189. userInfo: {},
  190. ctype: 0,
  191. province: '', //省份
  192. provinces: [],
  193. chooseId: 0,
  194. priceInfo: {},
  195. userName: '',
  196. totalPrice: 0,
  197. pay_close: false,
  198. cartArr: [{
  199. "name": "微信支付",
  200. "icon": "icon-weixin2",
  201. value: 'weixin',
  202. title: '使用微信快捷支付',
  203. payStatus: 1,
  204. },
  205. {
  206. "name": "余额支付",
  207. "icon": "icon-yuezhifu",
  208. value: 'yue',
  209. title: '可用余额:',
  210. payStatus: 1,
  211. },
  212. ],
  213. }
  214. },
  215. onLoad() {
  216. this.getUserInfo()
  217. this.getCzList()
  218. this.getCityData()
  219. this.getCity()
  220. },
  221. onShow() {},
  222. onReachBottom() {
  223. },
  224. onReady() {
  225. },
  226. watch: {
  227. sbjzt(n, o) {
  228. // if(this.choos)
  229. if (n > this.userInfo.integral) {
  230. this.useIntegral = false
  231. }
  232. }
  233. },
  234. methods: {
  235. getCity() {
  236. getCity().then(res => {
  237. console.log(res)
  238. let arr = []
  239. res.data.forEach((item,index) => {
  240. arr.push({
  241. name: item,
  242. id: index
  243. })
  244. })
  245. this.dataList = arr
  246. console.log(this.dataList)
  247. })
  248. },
  249. selectChange(e) {
  250. console.log(e,'selectChange')
  251. if(e) {
  252. this.province = e.name
  253. }else {
  254. this.province = ''
  255. }
  256. },
  257. inputChange(e) {
  258. console.log(e,'inputChange')
  259. },
  260. changePayType(type) {
  261. console.log(type)
  262. // this.payType = type
  263. },
  264. getCityData() {
  265. getCityData().then(res => {
  266. console.log(res)
  267. this.provinces = res.data
  268. })
  269. },
  270. bindPickerChange(e) {
  271. console.log(e)
  272. this.province = this.provinces[e.detail.value].label
  273. },
  274. getYjList(tip, ctype) {
  275. this.ctype = ctype
  276. this.info = []
  277. this.choose = {}
  278. this.getCzList()
  279. },
  280. changeUseIntegral: function() {
  281. if (this.ctype == 3) {
  282. if (!this.sbjzt) {
  283. return this.$util.Tips({
  284. title: '请输入充值金额'
  285. });
  286. }
  287. if (this.sbjzt > this.userInfo.integral) {
  288. this.useIntegral = false
  289. } else {
  290. this.useIntegral = !this.useIntegral
  291. this.computedPrice();
  292. }
  293. } else {
  294. if (this.choose.price > this.userInfo.integral) {
  295. this.useIntegral = false
  296. } else {
  297. this.useIntegral = !this.useIntegral
  298. }
  299. if (this.choose.price) {
  300. this.computedPrice();
  301. }
  302. }
  303. },
  304. // 计算价格
  305. computedPrice(tit) {
  306. computedCz({
  307. integral: this.useIntegral ? 1 : 0,
  308. price: this.ctype == 3 ? this.sbjzt : this.choose.price,
  309. uid: this.userInfo.uid
  310. }).then(res => {
  311. this.priceInfo = res.data
  312. this.totalPrice = res.data.payPrice
  313. if(tit == 'open') {
  314. this.pay_close = true
  315. }
  316. })
  317. },
  318. getUserInfo: function() {
  319. let that = this;
  320. getUserInfo().then(res => {
  321. that.userInfo = res.data
  322. this.cartArr[1].number = res.data.now_money
  323. });
  324. },
  325. //选择支付方式
  326. changePayType(type) {
  327. this.payType = type;
  328. if (this.payType == 1) {
  329. this.payName = 'weixin';
  330. }
  331. if (this.payType == 2) {
  332. this.payName = 'ali';
  333. }
  334. if (this.payType == 3) {
  335. this.payName = 'yue';
  336. }
  337. },
  338. goCz() {
  339. if (!this.phone) {
  340. return this.$util.Tips({
  341. title: '请输入手机号'
  342. });
  343. }
  344. var pattern = /^1[0-9]{10}$/;
  345. if (!pattern.test(this.phone)) {
  346. return this.$util.Tips({
  347. title: '请输入正确的手机号'
  348. });
  349. }
  350. if (this.ctype == 2) {
  351. if (!this.choose.goods_id) {
  352. return this.$util.Tips({
  353. title: '请选择需要充值的套餐'
  354. });
  355. }
  356. if (!this.province) {
  357. return this.$util.Tips({
  358. title: '请选择省份'
  359. });
  360. }
  361. if (!this.userName) {
  362. return this.$util.Tips({
  363. title: '请输入姓名'
  364. });
  365. }
  366. } else if (this.ctype == 3) {
  367. if(!this.sbjzt) {
  368. return this.$util.Tips({
  369. title: '请输入充值金额'
  370. });
  371. }
  372. if(!this.jfjg) {
  373. return this.$util.Tips({
  374. title: '请输入缴费机构'
  375. });
  376. }
  377. } else {
  378. if (!this.choose.goods_id) {
  379. return this.$util.Tips({
  380. title: '请选择需要充值的套餐'
  381. });
  382. }
  383. // 校验手机
  384. let phoneType = this.getMobileOperator(this.phone)
  385. if (this.choose.goods_name.indexOf(phoneType) == -1) {
  386. this.choose = {}
  387. return uni.showModal({
  388. title: '温馨提醒',
  389. content: `您当前的手机号为${phoneType}号码,与充值套餐的运营商不一致,请重新选择套餐!`,
  390. showCancel: false
  391. })
  392. }
  393. }
  394. if(this.ctype == 3) {
  395. this.computedPrice('open')
  396. }else {
  397. this.pay_close = true
  398. }
  399. // this.$refs.popup.open()
  400. },
  401. getMobileOperator(phoneNumber) {
  402. // 移动号段
  403. var cmccPrefixes = ['134', '135', '136', '137', '138', '139', '150', '151', '152', '157', '158', '159',
  404. '182', '183', '184', '187', '188', '178', '147', '172', '198'
  405. ];
  406. // 联通号段
  407. var cuccPrefixes = ['130', '131', '132', '155', '156', '185', '186', '145', '176', '175', '166'];
  408. // 电信号段
  409. var ctcPrefixes = ['133', '153', '180', '181', '189', '177', '173', '199'];
  410. // 虚拟运营商号段
  411. var virtualPrefixes = ['170', '171'];
  412. var prefix = phoneNumber.substring(0, 3);
  413. if (cmccPrefixes.includes(prefix)) {
  414. return '移动';
  415. } else if (cuccPrefixes.includes(prefix)) {
  416. return '联通';
  417. } else if (ctcPrefixes.includes(prefix)) {
  418. return '电信';
  419. } else if (virtualPrefixes.includes(prefix)) {
  420. return '虚拟运营商';
  421. } else {
  422. return '未知运营商';
  423. }
  424. },
  425. onChangeFun(e) {
  426. //
  427. console.log(e)
  428. let that = this
  429. if (e.action == 'payClose') {
  430. this.pay_close = false
  431. return
  432. } else {
  433. if (e.value == 'yue') {
  434. if (that.priceInfo.payPrice * 1 > that.userInfo.now_money) {
  435. return this.$util.Tips({
  436. title: '当前余额不足'
  437. });
  438. }
  439. }
  440. let qdata = {
  441. goods_id: this.ctype== 3?"": this.choose.goods_id,
  442. rechargeno: this.phone,
  443. province: this.province,
  444. pay_type: e.value,
  445. num: this.ctype == 3? this.sbjzt: this.choose.num,
  446. pay_price: this.priceInfo.payPrice,
  447. store_id: 0,
  448. user_phone: this.phone,
  449. real_name: this.userName,
  450. deduction_price: this.priceInfo.deductionPrice,
  451. deduction_integral: this.priceInfo.usedIntegral,
  452. cid:this.ctype==3?"": this.choose.cid,
  453. goods_name:this.ctype==3?this.jfjg: this.choose.goods_name,
  454. type: this.ctype == 0? 1: this.ctype,
  455. // #ifdef MP
  456. 'from': 'routine',
  457. // #endif
  458. // #ifdef H5
  459. 'from': this.$wechat.isWeixin() ? 'weixin' : 'weixinh5',
  460. // #endif
  461. }
  462. if (this.ctype == 2) {
  463. qdata.rechargeno = this.rechargeno
  464. }
  465. if (that.paying) {
  466. return
  467. }
  468. that.paying = true
  469. createCz(qdata).then(res => {
  470. setTimeout(() => {
  471. that.paying = false
  472. that.getUserInfo()
  473. }, 2500)
  474. let status = res.data.status,
  475. // orderId = res.data.result.order_id,
  476. jsConfig = res.data.result.jsConfig
  477. // goPages = '/pages/goods/order_pay_status/index?order_id=' + orderId + '&msg=' + res
  478. // .msg +
  479. // '&type=6' + '&totalPrice=' + this.totalPrice + '&pay_type=' + e.value
  480. switch (status) {
  481. case 'ORDER_EXIST':
  482. case 'EXTEND_ORDER':
  483. case 'PAY_ERROR':
  484. uni.hideLoading();
  485. that.pay_close = false
  486. return that.$util.Tips({
  487. title: res.msg
  488. });
  489. break;
  490. case 'SUCCESS':
  491. uni.hideLoading();
  492. // if (that.BargainId || that.combinationId || that.pinkId || that.seckillId ||
  493. // that
  494. // .discountId)
  495. // return that.$util.Tips({
  496. // title: res.msg,
  497. // icon: 'success'
  498. // }, {
  499. // tab: 4,
  500. // url: goPages+ '&pay_end=SUCCESS'
  501. // });
  502. that.pay_close = false
  503. return that.$util.Tips({
  504. title: res.msg,
  505. icon: 'success'
  506. });
  507. break;
  508. case 'WECHAT_PAY':
  509. that.toPay = true;
  510. // #ifdef MP
  511. /* that.toPay = true; */
  512. let mp_pay_name = ''
  513. if (uni.requestOrderPayment) {
  514. mp_pay_name = 'requestOrderPayment'
  515. } else {
  516. mp_pay_name = 'requestPayment'
  517. }
  518. uni[mp_pay_name]({
  519. timeStamp: jsConfig.timestamp,
  520. nonceStr: jsConfig.nonceStr,
  521. package: jsConfig.package,
  522. signType: jsConfig.signType,
  523. paySign: jsConfig.paySign,
  524. success: function(res) {
  525. uni.hideLoading();
  526. return that.$util.Tips({
  527. title: '支付成功',
  528. icon: 'success'
  529. });
  530. },
  531. fail: function(e) {
  532. uni.hideLoading();
  533. return that.$util.Tips({
  534. title: '取消支付'
  535. });
  536. },
  537. complete: function(e) {
  538. uni.hideLoading();
  539. //关闭当前页面跳转至订单状态
  540. if (res.errMsg == 'requestPayment:cancel') return that
  541. .$util
  542. .Tips({
  543. title: '取消支付'
  544. });
  545. },
  546. })
  547. // #endif
  548. // #ifdef H5
  549. this.$wechat.pay(res.data.result.jsConfig).then(res => {
  550. return that.$util.Tips({
  551. title: '支付成功',
  552. icon: 'success'
  553. });
  554. }).catch(res => {
  555. if (!this.$wechat.isWeixin()) {
  556. // uni.redirectTo({
  557. // url: goPages +
  558. // '&msg=支付失败&status=2' + '&pay_end=SUCCESS'
  559. // })
  560. }
  561. if (res.errMsg == 'chooseWXPay:cancel') return that.$util.Tips({
  562. title: '取消支付'
  563. });
  564. })
  565. // #endif
  566. break;
  567. case 'PAY_DEFICIENCY':
  568. uni.hideLoading();
  569. //余额不足
  570. return that.$util.Tips({
  571. title: res.msg
  572. });
  573. break;
  574. case "WECHAT_H5_PAY":
  575. uni.hideLoading();
  576. that.$util.Tips({
  577. title: '订单创建成功!'
  578. });
  579. setTimeout(() => {
  580. location.href = res.data.result.jsConfig.mweb_url;
  581. }, 2000);
  582. break;
  583. case 'ALIPAY_PAY':
  584. //#ifdef H5
  585. if (this.from === 'weixin') {
  586. } else {
  587. uni.hideLoading();
  588. that.formContent = res.data.result.jsConfig;
  589. that.$nextTick(() => {
  590. document.getElementById('alipaysubmit').submit();
  591. })
  592. }
  593. //#endif
  594. // #ifdef MP
  595. uni.navigateTo({
  596. url: `/pages/users/alipay_invoke/index?id=${orderId}&link=${jsConfig.qrCode}`
  597. });
  598. // #endif
  599. // #ifdef APP-PLUS
  600. uni.requestPayment({
  601. provider: 'alipay',
  602. orderInfo: jsConfig,
  603. success: (e) => {
  604. uni.showToast({
  605. title: "支付成功"
  606. })
  607. let url = '/pages/goods/order_pay_status/index?order_id=' +
  608. orderId +
  609. '&msg=支付成功';
  610. setTimeout(res => {
  611. uni.redirectTo({
  612. url: url
  613. })
  614. }, 2000)
  615. },
  616. fail: (e) => {
  617. let url = '/pages/goods/order_pay_status/index?order_id=' +
  618. orderId +
  619. '&msg=支付失败';
  620. uni.showModal({
  621. content: "支付失败",
  622. showCancel: false,
  623. success: function(res) {
  624. if (res.confirm) {
  625. uni.redirectTo({
  626. url: url
  627. })
  628. } else if (res.cancel) {
  629. console.log('用户点击取消');
  630. }
  631. }
  632. })
  633. },
  634. complete: () => {
  635. uni.hideLoading();
  636. },
  637. });
  638. // #endif
  639. break;
  640. }
  641. }).catch(err => {
  642. that.paying = false
  643. })
  644. }
  645. },
  646. chooseGood(item) {
  647. this.choose = item
  648. if (this.choose.price > this.userInfo.integral) {
  649. this.useIntegral = false
  650. }
  651. // if(this.userInfo)
  652. this.computedPrice()
  653. },
  654. getCzList() {
  655. let that = this
  656. if (this.ctype == 3) return
  657. uni.showLoading({
  658. title: '加载中...'
  659. })
  660. getCzList({
  661. ctype: that.ctype
  662. }).then(res => {
  663. uni.hideLoading()
  664. this.info = res.data
  665. this.info.forEach(item => {
  666. if (item.goods.length > 0) {
  667. item.goods.forEach(itemt => {
  668. if (itemt.desc && itemt.desc.split('<p>').length > 1) {
  669. that.content = itemt.desc
  670. }
  671. })
  672. }
  673. })
  674. })
  675. },
  676. }
  677. }
  678. </script>
  679. <style lang="scss" scoped>
  680. .flex {
  681. display: flex;
  682. align-items: center;
  683. // justify-content: space-between;
  684. }
  685. .content {
  686. // padding-top: 20rpx;
  687. padding-bottom: 20rpx;
  688. }
  689. .phone {
  690. width: 690rpx;
  691. height: 80rpx;
  692. background-color: #fff;
  693. border-radius: 220rpx;
  694. margin: 0 auto 20rpx;
  695. }
  696. .item-wrap {
  697. width: 690rpx;
  698. background-color: #fff;
  699. margin: 0 auto 20rpx;
  700. padding: 20rpx 34rpx;
  701. border-radius: 20rpx;
  702. .tip {
  703. width: 620rpx;
  704. margin: auto;
  705. background-color: #e9f1fe;
  706. padding: 20rpx;
  707. border-radius: 20rpx;
  708. margin-top: 40rpx;
  709. }
  710. .tit {
  711. font-size: 30rpx;
  712. font-weight: bold;
  713. }
  714. .item-list {
  715. justify-content: flex-start;
  716. padding-top: 40rpx;
  717. .item {
  718. // width: 192rpx;
  719. border-radius: 20rpx;
  720. margin-right: 20rpx;
  721. background-color: #e9f1fe;
  722. text-align: center;
  723. padding: 40rpx;
  724. .num {
  725. color: #409EFF;
  726. font-weight: bold;
  727. font-size: 28rpx;
  728. }
  729. .base-price {
  730. padding-top: 10rpx;
  731. font-size: 22rpx;
  732. }
  733. .price {
  734. font-size: 28rpx;
  735. color: #f3253a;
  736. padding-top: 10rpx;
  737. }
  738. }
  739. .action {
  740. border: 1px solid #f3253a;
  741. }
  742. }
  743. }
  744. .top-search {
  745. height: 80rpx;
  746. padding: 0 20rpx;
  747. width: 100%;
  748. height: 116rpx;
  749. z-index: 99;
  750. .search {
  751. width: 24rpx;
  752. margin-right: 20rpx;
  753. }
  754. }
  755. .search-box {
  756. justify-content: flex-start;
  757. width: 690rpx;
  758. height: 72rpx;
  759. background: rgb(255, 255, 255);
  760. border-radius: 30rpx;
  761. padding: 0 10rpx 0 20rpx;
  762. margin: 0 auto 20rpx;
  763. input {
  764. flex-grow: 1;
  765. height: 72rpx;
  766. line-height: 72rpx;
  767. }
  768. .search-btn {
  769. flex-shrink: 0;
  770. width: 110rpx;
  771. height: 52rpx;
  772. text-align: center;
  773. line-height: 50rpx;
  774. color: #fff;
  775. background-color: #409EFF;
  776. border-radius: 26rpx;
  777. }
  778. }
  779. .cz-model {
  780. width: 750rpx;
  781. background-color: #fff;
  782. padding: 60rpx 0 30rpx;
  783. text-align: center;
  784. border-radius: 25rpx 25rpx 0 0;
  785. view {
  786. padding: 10rpx 0;
  787. }
  788. .price {
  789. color: #409eff;
  790. font-size: 48rpx;
  791. font-weight: bold;
  792. }
  793. .tip {
  794. color: #409eff;
  795. }
  796. .tips {
  797. padding-bottom: 20rpx;
  798. }
  799. .btn {
  800. width: 690rpx;
  801. text-align: center;
  802. line-height: 60rpx;
  803. color: #fff;
  804. background-color: #409eff;
  805. border-radius: 40rpx;
  806. margin: auto;
  807. }
  808. }
  809. .pay-type-list {
  810. margin-top: 20upx;
  811. background-color: #fff;
  812. padding-left: 60upx;
  813. .type-item {
  814. height: 120upx;
  815. padding: 20upx 0;
  816. display: flex;
  817. justify-content: flex-start;
  818. align-items: center;
  819. padding-right: 60upx;
  820. font-size: 30upx;
  821. position: relative;
  822. }
  823. .icon {
  824. width: 100upx;
  825. font-size: 52upx;
  826. }
  827. .iconyue {
  828. color: #fe8e2e;
  829. }
  830. .iconweixin {
  831. color: #36cb59;
  832. }
  833. .iconzhifubao {
  834. color: #01aaef;
  835. }
  836. .tit {
  837. font-size: 28rpx;
  838. color: #000;
  839. margin-bottom: 4upx;
  840. }
  841. .con {
  842. flex: 1;
  843. display: flex;
  844. flex-direction: column;
  845. font-size: 26rpx;
  846. color: #000;
  847. }
  848. }
  849. .tit-area {
  850. font-size: 26rpx;
  851. padding: 20rpx 0;
  852. }
  853. .area-item {
  854. padding-left: 20rpx;
  855. font-size: 24rpx;
  856. }
  857. .nav {
  858. display: flex;
  859. justify-content: space-evenly;
  860. .nav-item {
  861. width: 50%;
  862. line-height: 60rpx;
  863. text-align: center;
  864. color: #1890FF;
  865. border: 1px solid #1890FF;
  866. font-size: 28rpx;
  867. background-color: #fff;
  868. }
  869. .action {
  870. background-color: #1890FF;
  871. color: #fff;
  872. font-weight: bold;
  873. }
  874. }
  875. .sf-wrap {
  876. justify-content: space-between;
  877. padding: 0 20rpx;
  878. }
  879. .cb {
  880. width: 30rpx;
  881. border-radius: 50%;
  882. height: 30rpx;
  883. border: 1px solid #1890FF;
  884. // position: absolute;
  885. display: flex;
  886. justify-content: center;
  887. align-items: center;
  888. .cb-in {
  889. width: 20rpx;
  890. height: 20rpx;
  891. border-radius: 50%;
  892. background-color: #1890FF;
  893. }
  894. }
  895. .name-inp {
  896. // width: ;
  897. flex-grow: 1;
  898. text-align: right;
  899. }
  900. </style>