order-list.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844
  1. <template>
  2. <view class="container">
  3. <Navbar title="订单" background-color="#fff" color="#333333"></Navbar>
  4. <view class="tabs">
  5. <view class="tab" :class="{active: item.value === active}" v-for="item in tabList"
  6. @click="changeTab(item.value)" :key="item.value">
  7. {{item.name}}
  8. <view class="bar"></view>
  9. </view>
  10. </view>
  11. <view class="no-data" v-if="!currentList.length">
  12. <NoData :show="!currentList.length" topNum="30" imgUrl="no-data.png" title="您还没有相关订单!"></NoData>
  13. </view>
  14. <view class="order-list">
  15. <view v-for="(item, i) in currentList" :key="i" class="order-item" @click="toDetail('normal', item.oid)">
  16. <view class="order-wrap">
  17. <view class="order-between">
  18. <text class="oid">订单号:{{ item.oid }}</text>
  19. <text class="status">{{ statusMap[item.status]}}</text>
  20. </view>
  21. <OrderItem :sku="item.skuList" :total="item.payment"></OrderItem>
  22. <view class="total">共{{item.skuList | numFormat}}件 合计:<text>¥{{ item.payment | moneyFormat }}</text>
  23. </view>
  24. <view class="btn-box" v-if="item.status === 2">
  25. <view class="btn btn2" @click.stop="cancelOrderModal(item.oid)">取消订单</view>
  26. <view class="btn" @click.stop="payPop(item)">付款</view>
  27. </view>
  28. <view class="btn-box" v-if="item.status === 8">
  29. <view class="btn btn2" @click.stop="handleRemind">提醒发货</view>
  30. </view>
  31. <view class="btn-box" v-if="item.status === 16">
  32. <!-- <view class="btn btn2" @click.stop="tologistics(item.oid)">查看物流</view> -->
  33. <view class="btn" @click.stop="confirmOrderModal(item.oid)">确认收货</view>
  34. </view>
  35. </view>
  36. </view>
  37. <view class="tips" v-if="currentList.length">
  38. <text v-if="finish[active]">没有更多了</text>
  39. <text v-else>加载更多</text>
  40. </view>
  41. </view>
  42. <uni-popup ref="payPopup" :safe-area="false">
  43. <view class="select-pay-type" @click.stop>
  44. <view class="title">选择支付方式</view>
  45. <view class="amount">{{payInfo.payment | moneyFormat}}元</view>
  46. <view class="time-tip">页面有效期10分钟</view>
  47. <view class="pay-item-box">
  48. <view class="pay-item" @click="selectPayType('wxPayMini')">
  49. <view class="item-left">
  50. <IconText :code="`\ue761`" color="#40BA49" class="icon" size="20"></IconText>
  51. 微信支付
  52. </view>
  53. <view class="item-right">
  54. <IconText :code="`\ue77a`" :color="payType === 'wxPayMini' ? '#E32733' : '#DEDEDE'"
  55. class="icon" size="16">
  56. </IconText>
  57. </view>
  58. </view>
  59. <!-- <view class="pay-item" @click="selectPayType('aliPayApp')">
  60. <view class="item-left">
  61. <IconText :code="`\ue760`" color="#06B4FD" class="icon" size="20"></IconText>
  62. 支付宝支付
  63. </view>
  64. <view class="item-right">
  65. <IconText :code="`\ue77a`" :color="payType === 'aliPayApp' ? '#E32733' : '#DEDEDE'"
  66. class="icon" size="16">
  67. </IconText>
  68. </view>
  69. </view>
  70. <view class="pay-item" @click="selectPayType('balance')">
  71. <view class="item-left">
  72. <IconText :code="`\ue747`" color="#E6456A" class="icon" size="16"></IconText>
  73. 余额支付(余额:{{balanceInfo.balance | moneyFormat}})
  74. </view>
  75. <view class="item-right">
  76. <IconText :code="`\ue77a`" :color="payType === 'balance' ? '#E32733' : '#DEDEDE'"
  77. class="icon" size="16"></IconText>
  78. </view>
  79. </view> -->
  80. </view>
  81. <view class="popup-btn-box">
  82. <!-- <view class="cancel-btn btn" @click="closePay">取消</view> -->
  83. <view class="confirm-btn btn" @click="selectType">支付</view>
  84. </view>
  85. </view>
  86. </uni-popup>
  87. <Password ref="password" @finish="passwordFinish"></Password>
  88. <ShowModal ref="cancelOrder" title="提示" @submit="cancelOrder" leftBtnText="取消" content="确定要取消该订单吗"
  89. btnText="确认" />
  90. <ShowModal ref="confirmOrder" title="提示" @submit="confirmOrder" leftBtnText="取消" content="是否确定收货"
  91. btnText="确认" />
  92. <!-- <TabBar></TabBar> -->
  93. </view>
  94. </template>
  95. <script lang="ts">
  96. import {
  97. Component,
  98. Vue,
  99. } from 'vue-property-decorator';
  100. // import {
  101. // APPID
  102. // } from '@/common/constants';
  103. import {
  104. types
  105. } from '@/common/store';
  106. import {
  107. namespace
  108. } from 'vuex-class';
  109. const baseModule = namespace('base');
  110. @Component({
  111. filters: {
  112. moneyFormat(val: any) {
  113. if (!+val) return '0.00';
  114. return (+val).toFixed(2);
  115. },
  116. numFormat(list: any) {
  117. return list.reduce((pre: any, cur: any) => {
  118. return pre + cur.num
  119. }, 0);
  120. }
  121. }
  122. })
  123. export default class OrderList extends Vue {
  124. @baseModule.Mutation(types.SET_TABBARINDEX) setTabBarIndex: any;
  125. tabList: any = [{
  126. name: '全部',
  127. value: 0
  128. },
  129. {
  130. name: '待付款',
  131. value: 2
  132. },
  133. {
  134. name: '待发货',
  135. value: 8
  136. },
  137. {
  138. name: '待收货',
  139. value: 16
  140. },
  141. {
  142. name: '已收货',
  143. value: 18
  144. }
  145. ];
  146. statusMap: any = {
  147. 2: '待付款',
  148. 8: '待发货',
  149. 16: '待收货',
  150. 18: '已收货'
  151. };
  152. active: number = 0; // tab栏选中index
  153. size: number = 20;
  154. currentList: any[] = [];
  155. orderList: any = {
  156. 0: [],
  157. 2: [],
  158. 8: [],
  159. 16: [],
  160. 18: []
  161. };
  162. page: any = {
  163. 0: 1,
  164. 2: 1,
  165. 8: 1,
  166. 16: 1,
  167. 18: 1
  168. };
  169. isfirst: boolean = false;
  170. isLoading: boolean = false;
  171. finish: any = {
  172. 0: false,
  173. 2: false,
  174. 8: false,
  175. 16: false,
  176. 18: false
  177. }; // 数据到底
  178. isGet: boolean = true; // 是否可以拉去数据
  179. oid: any = null;
  180. payType: string = 'wxPayMini';
  181. payInfo: any = {};
  182. balanceInfo: any = {};
  183. providerMap: any = {
  184. wxPayMini: 'wxpay',
  185. aliPayApp: 'alipay'
  186. }
  187. onLoad() {
  188. // let query = this.$Route.query;
  189. // this.active = +query.status || 0;
  190. // this.pullList();
  191. }
  192. onShow() {
  193. // if (this.isfirst) {
  194. // this.updateData()
  195. // } else {
  196. // this.isfirst = true
  197. // }
  198. //tabBar下标更改
  199. // this.setTabBarIndex(3);
  200. let query = this.$Route.query;
  201. this.active = +query.status || 0;
  202. this.resetData();
  203. }
  204. resetData() {
  205. console.log('reset');
  206. this.page = {
  207. 0: 1,
  208. 2: 1,
  209. 8: 1,
  210. 16: 1,
  211. 18: 1
  212. };
  213. this.finish = {
  214. 0: false,
  215. 2: false,
  216. 8: false,
  217. 16: false,
  218. 18: false
  219. };
  220. this.isGet = true;
  221. this.orderList = {
  222. 0: [],
  223. 2: [],
  224. 8: [],
  225. 16: [],
  226. 18: []
  227. };
  228. this.currentList = []
  229. this.getList();
  230. };
  231. pullList() {
  232. this.getList();
  233. }
  234. changeTab(index: number) {
  235. // 如果请求未结束,禁止切换
  236. if (!this.isGet) {
  237. return false;
  238. }
  239. this.active = index;
  240. this.currentList = this.orderList[this.active]
  241. // 如果切换时未获取过数据,获取一次
  242. if (this.page[this.active] == 1) {
  243. this.pullList();
  244. }
  245. }
  246. onReachBottom() {
  247. this.getList();
  248. }
  249. updateData() {
  250. console.log('更新');
  251. this.page[this.active] = 1;
  252. this.finish[this.active] = false;
  253. this.isGet = true;
  254. this.orderList[this.active] = [];
  255. this.currentList = this.orderList[this.active]
  256. this.getList();
  257. }
  258. getList(): void | boolean {
  259. console.log('已更新数据');
  260. if (this.finish[this.active] || !this.isGet) {
  261. // 已经没有更多了或者上次请求未结束
  262. return false;
  263. }
  264. this.isGet = false;
  265. let data = {
  266. page: this.page[this.active],
  267. size: this.size,
  268. status: this.active,
  269. };
  270. // if (this.active == 0) {
  271. // delete data.status;
  272. // }
  273. uni.showLoading({
  274. title: '加载中'
  275. });
  276. this.isLoading = true;
  277. this.$http
  278. .get({
  279. url: this.$api.orderList,
  280. data: data
  281. })
  282. .then((res: any) => {
  283. res.list = res.list || [];
  284. uni.hideLoading();
  285. this.isLoading = false;
  286. if (this.page[this.active] == 1) {
  287. this.orderList[this.active] = [];
  288. this.currentList = this.orderList[this.active]
  289. }
  290. this.orderList[this.active].push(...res.list);
  291. this.currentList = this.orderList[this.active]
  292. console.log('真正拉数据', this.currentList)
  293. this.page[this.active]++;
  294. this.isGet = true;
  295. // 没有更多了
  296. if (res.list.length < this.size) {
  297. this.finish[this.active] = true;
  298. }
  299. })
  300. .catch((err: any) => {
  301. uni.hideLoading();
  302. this.isLoading = false;
  303. console.log(err);
  304. });
  305. }
  306. toDetail(type: string, id: number): void {
  307. this.$Router.push({
  308. path: '/packages/order/order-detail',
  309. query: {
  310. id: id
  311. }
  312. });
  313. }
  314. async payPop(info: any) {
  315. this.payInfo = info;
  316. // await this.getBalance();
  317. (this.$refs.payPopup as any).open('bottom');
  318. }
  319. getBalance() {
  320. uni.showLoading({
  321. title: '加载中'
  322. });
  323. return this.$http
  324. .get({
  325. url: this.$api.getBalance
  326. })
  327. .then((res: any) => {
  328. this.balanceInfo = res;
  329. uni.hideLoading();
  330. }, (err: any) => {
  331. console.log(err);
  332. uni.hideLoading();
  333. });
  334. }
  335. closePop(){
  336. (this.$refs.payPopup as any).close();
  337. }
  338. selectPayType(type: any) {
  339. this.payType = type;
  340. }
  341. passwordFinish(val: any) {
  342. this.getParmas(val);
  343. }
  344. selectType() {
  345. if (this.payType === 'wxPayMini' || this.payType === 'aliPayApp') {
  346. this.getParmas()
  347. return;
  348. };
  349. // if (this.payType === 'balance')(this.$refs.password as any).open();
  350. if (this.payType === 'balance') {
  351. if(!this.balanceInfo.setSafe){
  352. uni.showToast({
  353. title:"请设置支付密码",
  354. icon: 'none'
  355. })
  356. return;
  357. }
  358. (this.$refs.password as any).open();
  359. };
  360. }
  361. async getParmas(safe: any = {}) {
  362. let info = this.payInfo;
  363. // 拉取支付参数
  364. // this.canSubmit = false;
  365. uni.showLoading({
  366. title: '加载中'
  367. });
  368. let eve: any = {};
  369. // #ifdef MP-WEIXIN
  370. if (this.payType === 'wxPayMini') eve = await this.getCode();
  371. // #endif
  372. let mode = this.payType;
  373. // #ifdef APP-PLUS
  374. if (this.payType === 'wxPayMini') mode = 'wxPayApp';
  375. // #endif
  376. this.$http
  377. .post({
  378. url: this.$api.getPayParmas,
  379. data: {
  380. payBill: {
  381. // id: info.payBillId, //支付票据ID
  382. amount: info.payment, //支付金额
  383. oid: info.oid,
  384. payType: 2, //支付类型:2,订单支付;
  385. mode: mode
  386. },
  387. third: {
  388. code: eve.code,
  389. },
  390. safe: safe
  391. }
  392. })
  393. .then((res: any) => {
  394. if (this.payType === 'wxPayMini' || this.payType === 'aliPayApp') {
  395. this.moneyPay(res, info);
  396. } else {
  397. // this.canSubmit = true;
  398. // this.payBillId = null;
  399. uni.showToast({
  400. title: '支付成功!',
  401. icon: 'none',
  402. duration: 2000
  403. });
  404. this.$Router.replace({
  405. path: '/packages/order/pay-success',
  406. query: {
  407. oid: info.oid,
  408. payment: info.payment
  409. }
  410. });
  411. }
  412. uni.hideLoading();
  413. })
  414. .catch((err: any) => {
  415. console.log(err);
  416. // this.canSubmit = true;
  417. uni.hideLoading();
  418. });
  419. }
  420. getCode() {
  421. return new Promise((resolve: any, reject: any) => {
  422. uni.login({
  423. provider: 'weixin',
  424. success: (eve) => {
  425. resolve(eve);
  426. },
  427. fail: (err) => {
  428. console.log(err);
  429. reject();
  430. // this.canSubmit = true;
  431. }
  432. });
  433. })
  434. }
  435. moneyPay(pay_info: any, info: any): any {
  436. // 拉起微信支付
  437. let that: any = this;
  438. let option = {};
  439. // #ifdef MP-WEIXIN
  440. option = {
  441. timeStamp: pay_info.timeStamp,
  442. nonceStr: pay_info.nonceStr,
  443. package: pay_info.package,
  444. signType: pay_info.signType,
  445. paySign: pay_info.paySign,
  446. };
  447. // #endif
  448. // #ifdef APP-PLUS
  449. option = {
  450. appid: pay_info.appId,
  451. partnerid: pay_info.partnerid,
  452. prepayid: pay_info.prepay_id,
  453. sign: pay_info.paySign,
  454. timestamp: pay_info.timeStamp,
  455. noncestr: pay_info.nonceStr,
  456. package: pay_info.package,
  457. };
  458. // #endif
  459. let orderInfo: any = JSON.stringify(option);
  460. if (this.payType === 'aliPayApp') orderInfo = this.objToCookie(pay_info);
  461. // console.log(JSON.stringify(option), 121231)
  462. uni.requestPayment({
  463. "provider": this.providerMap[this.payType],
  464. ...option,
  465. "orderInfo": orderInfo,
  466. success: function(result) {
  467. console.log('微信回调', result);
  468. if (result.errMsg == 'requestPayment:ok') {
  469. that.payBillId = null;
  470. // that.canSubmit = true;
  471. uni.showToast({
  472. title: '支付成功!',
  473. icon: 'none',
  474. duration: 2000
  475. });
  476. that.$Router.replace({
  477. path: '/packages/order/pay-success',
  478. query: {
  479. oid: info.oid,
  480. payment: info.payment
  481. }
  482. });
  483. } else {
  484. // that.canSubmit = true;
  485. }
  486. },
  487. fail: function(err: any) {
  488. console.log('微信支付失败', err);
  489. // that.canSubmit = true;
  490. }
  491. });
  492. }
  493. objToCookie(obj: any) {
  494. {
  495. if (obj.constructor == Object) {
  496. var cssStr = '';
  497. for (var key in obj) {
  498. cssStr += key + '=' + encodeURIComponent(obj[key]) + '&';
  499. }
  500. return cssStr.substring(0, cssStr.length - 1);
  501. }
  502. }
  503. }
  504. cancelOrderModal(oid: any) {
  505. this.oid = oid;
  506. (this.$refs.cancelOrder as any).open();
  507. }
  508. cancelOrder() {
  509. this.$http
  510. .put({
  511. url: this.$api.cancelOrder,
  512. data: {
  513. oid: this.oid
  514. }
  515. })
  516. .then((res: any) => {
  517. uni.showToast({
  518. title: '取消成功',
  519. icon: 'none'
  520. });
  521. this.resetData();
  522. })
  523. }
  524. tologistics(oid: any) {
  525. this.$Router.push({
  526. path: '/packages/order/logistics',
  527. query: {
  528. oid
  529. }
  530. });
  531. }
  532. confirmOrderModal(oid: any) {
  533. this.oid = oid;
  534. (this.$refs.confirmOrder as any).open();
  535. }
  536. confirmOrder() {
  537. this.$http
  538. .post({
  539. url: this.$api.confirmOrder,
  540. data: {
  541. oid: this.oid
  542. }
  543. })
  544. .then((res: any) => {
  545. uni.showToast({
  546. title: '已确认收货',
  547. icon: 'none'
  548. });
  549. this.resetData();
  550. })
  551. }
  552. handleRemind() {
  553. uni.showToast({
  554. title: '发货提醒已发送至商家',
  555. icon: 'none'
  556. });
  557. }
  558. closePay() {
  559. this.$http
  560. .post({
  561. url: this.$api.closePay,
  562. data: {
  563. // id: this.payBillId //支付票据ID
  564. }
  565. })
  566. .then((res: any) => {
  567. // this.canSubmit = true;
  568. uni.showToast({
  569. title: '支付失败!',
  570. icon: 'none',
  571. duration: 2000
  572. });
  573. })
  574. .catch((err: any) => {
  575. // this.canSubmit = true;
  576. });
  577. }
  578. }
  579. </script>
  580. <style lang="scss" scoped>
  581. .container{
  582. padding-bottom: vw(80);
  583. }
  584. .word16 {
  585. @include word-vw(16, $gray9);
  586. }
  587. .word18 {
  588. @include word-vw(18, $gray3);
  589. font-weight: bold;
  590. }
  591. .word12 {
  592. @include word-vw(12, $gray9);
  593. }
  594. .noData {
  595. width: 100vw;
  596. margin-top: vw(90);
  597. @include flex-y(center, center);
  598. .image {
  599. width: vw(150);
  600. }
  601. .word16 {
  602. margin-left: vw(20);
  603. }
  604. }
  605. .tabs {
  606. background: #fff;
  607. @include flex-x();
  608. height: vw(40);
  609. width: 100%;
  610. margin-top: vw(1);
  611. .tab {
  612. flex: 1;
  613. text-align: center;
  614. @include word-vw(12, #999);
  615. height: vw(40);
  616. @include flex-y(center, center);
  617. &.active {
  618. @include word-vw(12, #333);
  619. font-weight: 450;
  620. position: relative;
  621. .bar {
  622. width: vw(25);
  623. height: vw(3);
  624. border-radius: vw(3);
  625. background: $btn-color;
  626. position: absolute;
  627. bottom: vw(3);
  628. }
  629. }
  630. }
  631. }
  632. .tips {
  633. width: 100vw;
  634. text-align: center;
  635. @include word-vw(12, $gray9);
  636. margin-top: 10px;
  637. }
  638. .order-list {
  639. width: 100%;
  640. @include flex-y();
  641. margin-bottom: vw(10);
  642. .order-item {
  643. margin-top: vw(10);
  644. }
  645. .order-wrap {
  646. width: 100%;
  647. .order-between {
  648. @include flex-x();
  649. padding: 0 vw(15);
  650. box-sizing: border-box;
  651. height: vw(40);
  652. background: #fff;
  653. // border-bottom: vw(1) solid #F1EDED;
  654. }
  655. .oid {
  656. flex: 4;
  657. box-sizing: border-box;
  658. @include word-vw(12);
  659. }
  660. .status {
  661. box-sizing: border-box;
  662. @include word-vw(14, #D6392D);
  663. padding: 0 vw(3);
  664. height: vw(18);
  665. line-height: vw(20);
  666. // border-bottom: 2px solid $btn-color;
  667. // font-weight: bold;
  668. }
  669. .oid-refund {
  670. flex: 3;
  671. padding: vw(15);
  672. box-sizing: border-box;
  673. text-align: right;
  674. @include word-vw(12, $gray9);
  675. }
  676. .status-red {
  677. flex: 2;
  678. text-align: left;
  679. padding: vw(15);
  680. box-sizing: border-box;
  681. @include word-vw(14, $main-color);
  682. }
  683. .total {
  684. width: 100%;
  685. height: vw(40);
  686. text-align: right;
  687. padding: 0 vw(15);
  688. box-sizing: border-box;
  689. @include flex-x(flex-end);
  690. background: #fff;
  691. @include word-vw(14, #999);
  692. text {
  693. @include word-vw(16, #333);
  694. }
  695. }
  696. .btn-box {
  697. height: vw(50);
  698. @include flex-x(flex-end);
  699. width: 100%;
  700. padding: 0 vw(15);
  701. box-sizing: border-box;
  702. background: #fff;
  703. border-top: vw(1) solid #F1EDED;
  704. .btn {
  705. height: vw(30);
  706. width: vw(90);
  707. line-height: vw(30);
  708. @include word-vw(12, #fff);
  709. background: $btn-color;
  710. border-radius: vw(15);
  711. margin-left: vw(10);
  712. text-align: center;
  713. box-sizing: border-box;
  714. }
  715. .btn2 {
  716. color: #333;
  717. border: vw(1) solid #BF2071;
  718. background: #FFEBF1;
  719. }
  720. }
  721. }
  722. }
  723. .select-pay-type {
  724. background: #FAFAFA;
  725. border-top-right-radius: vw(34);
  726. border-top-left-radius: vw(34);
  727. overflow: hidden;
  728. padding: vw(20) vw(10);
  729. box-sizing: border-box;
  730. @include flex-y();
  731. .title {
  732. @include word-vw(18, #333);
  733. font-weight: bold;
  734. }
  735. .time-tip {
  736. @include word-vw(10, #999);
  737. margin-top: vw(5);
  738. }
  739. .amount {
  740. @include word-vw(40, #000);
  741. font-weight: 450;
  742. margin-top: vw(20);
  743. }
  744. .price {
  745. @include word-vw(14, #999);
  746. margin-top: vw(3);
  747. }
  748. .pay-item-box {
  749. border-radius: vw(10);
  750. overflow: hidden;
  751. width: 100%;
  752. margin-top: vw(36);
  753. }
  754. .pay-item {
  755. background: #fff;
  756. // margin-bottom: vw(10);
  757. height: vw(70);
  758. line-height: vw(70);
  759. padding: 0 vw(18);
  760. // border-radius: vw(10);
  761. @include word-vw(16, #333);
  762. @include flex-x();
  763. overflow: hidden;
  764. margin-bottom: vw(1);
  765. .item-left {
  766. @include flex-x(flex-start);
  767. }
  768. .icon {
  769. margin-right: vw(10);
  770. }
  771. .item-right {
  772. .icon {
  773. margin: 0;
  774. }
  775. }
  776. }
  777. .popup-btn-box {
  778. width: 100%;
  779. @include flex-x();
  780. margin-top: vw(20);
  781. .btn {
  782. font-weight: bold;
  783. border-radius: vw(24);
  784. height: vw(48);
  785. @include flex-x(center);
  786. }
  787. .cancel-btn {
  788. width: vw(127);
  789. background: #fff;
  790. @include word-vw(16, $btn-color);
  791. }
  792. .confirm-btn {
  793. width: vw(355);
  794. background: $btn-color;
  795. @include word-vw(16, #fff);
  796. }
  797. }
  798. }
  799. </style>