index.vue 18 KB

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