list.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853
  1. <template>
  2. <view class="content" v-if="isShow">
  3. <view class="navbar">
  4. <view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{current: tabCurrentIndex === index}"
  5. @click="tabClick(index)">
  6. {{item.text}}
  7. </view>
  8. </view>
  9. <swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab">
  10. <swiper-item class="tab-content" v-for="(tabItem,tabIndex) in navList" :key="tabIndex">
  11. <scroll-view v-if="tabItem.loadingState != 'first_loading'&&tabItem.orderList.length == 0 && tabItem.state == 1" class="list-scroll-content" scroll-y @scrolltolower="loadData">
  12. <view v-if="tabItem.loadingState != 'first_loading'&&tabItem.orderList.length == 0" class="empty_part flex_column_start_center">
  13. <image :src="imgUrl+'empty_goods.png'" />
  14. <text>{{$L('这里空空如也~快去商品中心加购商品吧')}}!</text>
  15. <button class="flex_row_center_center" @click="goGoodsList" :plain="true">{{$L('马上去逛逛')}}</button>
  16. </view>
  17. <view v-if="recommendShow && (navList[tabCurrentIndex].state != 1 || (navList[tabCurrentIndex].state == 1 && navList[tabCurrentIndex].orderList.length == 0))">
  18. <recommendList ref="recommendList"></recommendList>
  19. </view>
  20. </scroll-view>
  21. <scroll-view v-else class="list-scroll-content" scroll-y @scrolltolower="loadData">
  22. <!-- 订单列表 -->
  23. <template v-if="tabItem.orderList.length > 0">
  24. <view v-for="(item,index) in tabItem.orderList" :key="index" class="order-item flex_column_start_start" @click="goOrderDetail(item.orderSn)">
  25. <view class="i-top">
  26. <text class="order_sn">{{$L('订单编号')}}:{{item.orderSn}}</text>
  27. <text class="state" :style="{color: item.stateTipColor}">{{item.orderStateValue}}</text>
  28. </view>
  29. <view v-if="item.orderProductList" class="goods-box flex_row_start_start" v-for="(goodsItem, goodsIndex) in item.orderProductList"
  30. :key="goodsIndex">
  31. <view class="left flex_row_start_start">
  32. <view class="goods-img" :style="{backgroundImage: 'url('+goodsItem.productImage+')'}"></view>
  33. </view>
  34. <view class="right flex_column_between_start">
  35. <view class="right_top">
  36. <view class="goods_name">{{goodsItem.goodsName}}</view>
  37. <view class='goods_info flex_row_between_center'>
  38. <text class="spec_info">{{goodsItem.specValues ? goodsItem.specValues : ''}}</text>
  39. <text class="goods_num">*{{goodsItem.productNum}}</text>
  40. </view>
  41. </view>
  42. <view class="goods_point_price flex_row_start_end">
  43. <view class="goods_point" v-if="goodsItem.integralPrice">{{goodsItem.integral}}{{$L('积分')}}</view>
  44. <view class="goods_point" v-if="goodsItem.integralPrice && goodsItem.cashAmount">+</view>
  45. <view class="goods_price" v-if="goodsItem.cashAmount">¥{{filters.toFix(goodsItem.cashAmount)}}</view>
  46. </view>
  47. </view>
  48. </view>
  49. <view class="price-box flex_row_end_end">
  50. <text class="order_mount">{{$L('合计')}}:</text>
  51. <view class="integral_des">
  52. <text class="integral_des_point">{{item.integral}}{{$L('积分')}}+</text>
  53. <text class="total_price">¥{{$getPartNumber(item.cashAmount,'int')}}{{$getPartNumber(item.cashAmount,'decimal')}}</text>
  54. </view>
  55. </view>
  56. <view class="action-box" v-show="item.orderState != 20">
  57. <!-- 待收货、已完成订单可以查看物流 -->
  58. <button v-if="item.orderState == 30||item.orderState == 40" class="action-btn flex_row_center_center"
  59. @click.stop="lookLogistics(item.orderSn,item.productLeadLittle)">{{$L('查看物流')}}</button>
  60. <!-- 待收货订单可以确认收货 -->
  61. <button v-if="item.orderState == 30" class="action-btn recom flex_row_center_center" @click.stop="confirmReceipt(item.orderSn)">{{$L('确认收货')}}</button>
  62. <!-- 待付款订单可以取消订单 -->
  63. <button v-if="item.orderState == 10" class="action-btn flex_row_center_center" @click.stop="cancelPopup(item.orderSn)">{{$L('取消订单')}}</button>
  64. <!-- 待付款订单可以立即支付 -->
  65. <button v-if="item.orderState == 10" class="action-btn recom flex_row_center_center" @click.stop="goPay(item.paySn)">{{$L('立即支付')}}</button>
  66. <!-- 已取消、全部评价完成订单可以删除订单 -->
  67. <button v-if='item.orderState==0 || item.orderState==40' class="action-btn flex_row_center_center"
  68. @click.stop="delOrder(item.orderSn)">{{$L('删除订单')}}</button>
  69. </view>
  70. </view>
  71. </template>
  72. <view v-if="tabItem.loadingState != 'first_loading'&&tabItem.orderList.length == 0" class="empty_part flex_column_start_center">
  73. <image :src="imgUrl+'empty_goods.png'" />
  74. <text>{{$L('这里空空如也~快去商品中心加购商品吧')}}!</text>
  75. <button class="flex_row_center_center" @click="goGoodsList" :plain="true">{{$L('马上去逛逛')}}</button>
  76. </view>
  77. <block v-if="tabCurrentIndex != 1">
  78. <loadingState v-if="!recommendShow&&navList[tabCurrentIndex].loadingState != 'no_more_data' && (tabItem.loadingState == 'first_loading'||tabItem.orderList.length > 0)" :state='tabItem.loadingState' />
  79. </block>
  80. <block v-if="tabCurrentIndex == 1">
  81. <loadingState :state='tabItem.loadingState' />
  82. </block>
  83. <view v-if="recommendShow && (navList[tabCurrentIndex].state != 1 || (navList[tabCurrentIndex].state == 1 && navList[tabCurrentIndex].orderList.length == 0))">
  84. <recommendList ref="recommendList"></recommendList>
  85. </view>
  86. </scroll-view>
  87. </swiper-item>
  88. </swiper>
  89. <!-- 取消订单选择原因弹框 -->
  90. <uni-popup ref="cancelPopup" type="bottom">
  91. <view class="cancel_popup">
  92. <view class="popup_top">
  93. <text>{{$L('取消原因')}}</text>
  94. <image :src="imgUrl+'order-detail/guanbi.png'" mode="" @click="notCancel"></image>
  95. </view>
  96. <scroll-view class="uni-list cancel_list" scroll-x="true">
  97. <radio-group @change="radioChange">
  98. <label class="cancle_pre" v-for="(item,index) in cancelList" :key="index">
  99. <text>{{item.content}}</text>
  100. <radio :value="item.value" :checked="item.value === current" color="#fc1c1c" style="transform:scale(0.8);margin-right:0;" />
  101. </label>
  102. </radio-group>
  103. </scroll-view>
  104. <view class="cancel_popup_btn">
  105. <text class="" @click="notCancel()">{{$L('暂不取消')}}</text>
  106. <text class="" @click="confirmCancel()">{{$L('确定取消')}}</text>
  107. </view>
  108. </view>
  109. </uni-popup>
  110. </view>
  111. </template>
  112. <script module="filters" lang="wxs" src="../../../utils/filter.wxs"></script>
  113. <script>
  114. import loadingState from "@/components/loading-state.vue";
  115. import selectionGoods from "@/components/selection-goods.vue";
  116. import recommendList from "../components/recommend_list.vue";
  117. import {
  118. mapState
  119. } from 'vuex';
  120. export default {
  121. components: {
  122. loadingState,
  123. selectionGoods,
  124. recommendList
  125. },
  126. data() {
  127. return {
  128. imgUrl: getApp().globalData.imgUrl,
  129. tabCurrentIndex: 0,
  130. navList: [{
  131. state: 0,
  132. text: '全部',
  133. loadingState: 'first_loading',
  134. orderList: [],
  135. current: 1, //分页
  136. },
  137. {
  138. state: 1,
  139. text: '待付款',
  140. loadingState: 'first_loading',
  141. orderList: [],
  142. current: 1, //分页
  143. },
  144. {
  145. state: 2,
  146. text: '待发货',
  147. loadingState: 'first_loading',
  148. orderList: [],
  149. current: 1, //分页
  150. },
  151. {
  152. state: 3,
  153. text: '已发货',
  154. loadingState: 'first_loading',
  155. orderList: [],
  156. current: 1, //分页
  157. }
  158. ],
  159. stopPullDownRefresh: false, //是否下拉刷新中
  160. current: '0', //取消原因当前点击的是第0项
  161. reasonId: -1, //取消原因当前点击的原因id
  162. cancelList: [], //取消原因列表
  163. curOrderSn: '', //当前订单的订单号
  164. isHasMore: true,
  165. pn: 1,
  166. recGoodsList: [],
  167. isloading: 'first_loading',
  168. isShow:false,
  169. recommendShow:false, //推荐商品是否显示
  170. ifOnShow:false
  171. };
  172. },
  173. onLoad(options) {
  174. /**
  175. * 修复app端点击除全部订单外的按钮进入时不加载数据的问题
  176. * 替换onLoad下代码即可
  177. */
  178. if (options.state) {
  179. this.tabCurrentIndex = +options.state;
  180. } else {
  181. this.tabCurrentIndex = 0;
  182. }
  183. // #ifdef MP
  184. if (options.state == 0) {
  185. this.loadData()
  186. }
  187. // #endif
  188. uni.showLoading({
  189. title:'加载中',
  190. icon:'none'
  191. })
  192. },
  193. onShow() {
  194. let index = this.tabCurrentIndex;
  195. let navItem = this.navList[index];
  196. navItem.loadingState = 'first_loading';
  197. navItem.orderList = [];
  198. navItem.current = 1;
  199. this.loadData();
  200. },
  201. computed: {
  202. ...mapState(['userInfo'])
  203. },
  204. //下拉刷新
  205. onPullDownRefresh() {
  206. let index = this.tabCurrentIndex;
  207. let navItem = this.navList[index];
  208. navItem.loadingState = 'first_loading';
  209. navItem.orderList = [];
  210. navItem.current = 1;
  211. this.stopPullDownRefresh = true; //下拉刷新状态
  212. this.loadData();
  213. },
  214. methods: {
  215. //推荐商品
  216. getData() {
  217. if(this.tabCurrentIndex != 1){
  218. this.$refs.recommendList[this.tabCurrentIndex].getMoreData();
  219. }
  220. },
  221. //获取订单列表
  222. loadData(source) {
  223. //将订单挂载到tab列表下,起到缓存的效果,避免多次请求
  224. let index = this.tabCurrentIndex;
  225. let navItem = this.navList.filter(item => item.state == index)[0];
  226. let state = navItem.state;
  227. if (source === 'tabChange' && navItem.loadingState !== 'first_loading') {
  228. //tab切换只有第一次需要加载数据
  229. return;
  230. }
  231. if (navItem.loadingState === 'loading') {
  232. //防止重复加载
  233. return;
  234. }
  235. if (navItem.loadingState == 'no_more_data') {
  236. //已经没有数据,无需再请求
  237. // return;
  238. //加载推荐商品
  239. this.getData();
  240. }
  241. this.getOrderList();
  242. },
  243. //此方法只有删除订单,取消订单等需要从列表中删除订单时调用,其余获取订单列表请调用loadData
  244. getOrderList(){
  245. let index = this.tabCurrentIndex;
  246. let navItem = this.navList.filter(item => item.state == index)[0];
  247. let state = navItem.state;
  248. let param = {};
  249. param.url = 'v3/integral/front/integral/order/list';
  250. param.data = {};
  251. param.data.pageSize = 10;
  252. param.data.current = navItem.current;
  253. navItem.loadingState = navItem.loadingState == 'first_loading' ? navItem.loadingState : 'loading';
  254. //状态处理 订单状态:0-已取消;10-待付款订单;20-代发货订单;30-待收货订单;40-已完成
  255. if (navItem.state == 0) {
  256. param.data.state = ''; //全部订单
  257. } else if (navItem.state == 1) {
  258. param.data.orderState = 10; //待付款
  259. } else if (navItem.state == 2) {
  260. param.data.orderState = 20; //待发货
  261. } else if (navItem.state == 3) {
  262. param.data.orderState = 30; //待收货
  263. }
  264. this.$request(param).then(res => {
  265. if (res.state == 200) {
  266. if(navItem.current==1){
  267. navItem.orderList=res.data.list
  268. }else{
  269. navItem.orderList = navItem.orderList.concat(res.data.list);
  270. }
  271. let hasMore = this.$checkPaginationHasMore(res.data.pagination); //是否还有数据
  272. if (hasMore) {
  273. navItem.current++;
  274. navItem.loadingState = 'allow_loading_more';
  275. } else {
  276. navItem.loadingState = 'no_more_data';
  277. this.recommendShow = true;
  278. }
  279. uni.hideLoading();
  280. this.isShow = true;
  281. } else {
  282. this.$api.msg(res.msg);
  283. }
  284. if (this.stopPullDownRefresh) {
  285. this.stopPullDownRefresh = false;
  286. uni.stopPullDownRefresh();
  287. }
  288. }).catch((e) => {
  289. //异常处理
  290. })
  291. },
  292. //刷新当前列表
  293. refreshOrderList(){
  294. let index = this.tabCurrentIndex;
  295. let navItem = this.navList.filter(item => item.state == index)[0];
  296. navItem.current=1
  297. this.getOrderList()
  298. },
  299. //swiper 切换
  300. changeTab(e) {
  301. this.tabCurrentIndex = e.target.current;
  302. this.isHasMore = true;
  303. this.pn = 1;
  304. this.recGoodsList = [];
  305. this.isloading = 'first_loading';
  306. this.loading = false;
  307. this.loadData('tabChange');
  308. },
  309. //顶部tab点击
  310. tabClick(index) {
  311. this.tabCurrentIndex = index;
  312. this.isHasMore = true;
  313. this.pn = 1;
  314. this.isloading = 'first_loading';
  315. this.loading = false;
  316. this.recGoodsList = [];
  317. },
  318. //马上去逛逛事件
  319. goGoodsList() {
  320. uni.navigateTo({
  321. url: `/standard/point/index/index`
  322. })
  323. },
  324. //跳转订单详情页
  325. goOrderDetail(orderSn) {
  326. uni.navigateTo({
  327. url: `/standard/point/order/detail?orderSn=` + orderSn,
  328. })
  329. },
  330. //删除订单操作
  331. delOrder(orderSn) {
  332. let that = this;
  333. uni.showModal({
  334. title: '提示',
  335. content: '确定删除该订单?',
  336. success: function(res) {
  337. if (res.confirm) {
  338. let param = {};
  339. param.url = 'v3/integral/front/integral/orderOperate/delete';
  340. param.method = 'POST';
  341. param.data = {};
  342. param.data.orderSn = orderSn;
  343. that.$request(param).then(res => {
  344. if (res.state == 200) {
  345. that.refreshOrderList();
  346. that.$api.msg(res.msg);
  347. } else {
  348. that.$api.msg(res.msg);
  349. }
  350. }).catch((e) => {
  351. //异常处理
  352. })
  353. }
  354. }
  355. })
  356. },
  357. //立即支付
  358. goPay(paySn) {
  359. uni.navigateTo({
  360. url: '/standard/point/product/pay?paySn=' + paySn + '&payMethodType=orderList'
  361. })
  362. },
  363. //打开取消订单弹框
  364. cancelPopup(parentSn) {
  365. this.$refs.cancelPopup.open();
  366. this.curOrderSn = parentSn;
  367. this.getCancelList();
  368. },
  369. //获取取消订单原因列表
  370. getCancelList() {
  371. let param = {};
  372. param.url = 'v3/system/front/reason/list';
  373. param.method = 'GET';
  374. param.data = {};
  375. param.data.type = 104;
  376. this.$request(param).then(res => {
  377. if (res.state == 200) {
  378. this.cancelList = res.data || [];
  379. this.cancelList && this.cancelList.map((item, index) => item.value = '' + index);
  380. this.reasonId = this.cancelList[0].reasonId;
  381. } else {
  382. this.$api.msg(res.msg);
  383. }
  384. }).catch((e) => {
  385. //异常处理
  386. })
  387. },
  388. //取消原因单选框切换
  389. radioChange(e) {
  390. for (let i = 0; i < this.cancelList.length; i++) {
  391. if (this.cancelList[i].value === e.target.value) {
  392. this.reasonId = this.cancelList[i].reasonId;
  393. break;
  394. }
  395. }
  396. },
  397. //暂不取消订单
  398. notCancel() {
  399. this.$refs.cancelPopup.close();
  400. // this.goRefresh();
  401. },
  402. //确定取消订单
  403. confirmCancel() {
  404. let that = this;
  405. uni.showModal({
  406. title: '提示',
  407. content: '确定取消该订单?',
  408. success: function(res) {
  409. if (res.confirm) {
  410. let param = {};
  411. param.url = 'v3/integral/front/integral/orderOperate/cancel';
  412. param.method = 'POST';
  413. param.data = {};
  414. param.data.orderSn = that.curOrderSn;
  415. param.data.reasonId = that.reasonId;
  416. that.$request(param).then(res => {
  417. if (res.state == 200) {
  418. that.refreshOrderList()
  419. that.$api.msg(res.msg);
  420. that.$refs.cancelPopup.close();
  421. } else {
  422. that.$api.msg(res.msg);
  423. }
  424. }).catch((e) => {
  425. //异常处理
  426. })
  427. } else if (res.cancel) {
  428. that.$refs.cancelPopup.close();
  429. }
  430. }
  431. })
  432. },
  433. //更新当前页面方法
  434. goRefresh() {
  435. let pages = getCurrentPages();
  436. let currPage = pages[pages.length - 1]; //当前页面
  437. let index = this.tabCurrentIndex;
  438. let navItem = this.navList[index];
  439. navItem.loadingState = 'first_loading';
  440. navItem.orderList = [];
  441. navItem.current = 1;
  442. currPage.loadData(); //更新当前页面数据
  443. },
  444. //查看物流
  445. lookLogistics(orderSn, productLeadLittle) {
  446. uni.navigateTo({
  447. url: '/standard/point/order/lookLogistics?orderSn=' + orderSn + '&productLeadLittle=' + productLeadLittle
  448. })
  449. },
  450. // 确认收货
  451. confirmReceipt(orderSn) {
  452. let _this = this
  453. uni.showModal({
  454. title: '提示',
  455. content: '确认收货?',
  456. success: function(res) {
  457. if (res.confirm) {
  458. let param = {}
  459. param.url = 'v3/integral/front/integral/orderOperate/receive'
  460. param.method = 'POST'
  461. param.data = {
  462. orderSn: orderSn
  463. }
  464. _this.$request(param).then(res => {
  465. if (res.state == 200) {
  466. uni.showToast({
  467. title: '收货成功!',
  468. icon: 'none',
  469. duration: 700
  470. })
  471. _this.getOrderList();
  472. }
  473. })
  474. }
  475. }
  476. })
  477. }
  478. }
  479. }
  480. </script>
  481. <style lang="scss">
  482. page,
  483. .content {
  484. background: $bg-color-split;
  485. height: 100%;
  486. width: 750rpx;
  487. margin: 0 auto;
  488. }
  489. .swiper-box {
  490. height: calc(100% - 40px);
  491. }
  492. .list-scroll-content {
  493. height: 100%;
  494. }
  495. .navbar {
  496. display: flex;
  497. height: 80rpx;
  498. padding: 0 5px;
  499. background: #fff;
  500. position: relative;
  501. z-index: 10;
  502. .nav-item {
  503. flex: 1;
  504. display: flex;
  505. justify-content: center;
  506. align-items: center;
  507. height: 100%;
  508. font-size: 32rpx;
  509. color: $main-font-color;
  510. position: relative;
  511. &.current {
  512. color: $main-color;
  513. font-size: 32rpx;
  514. font-weight: bold;
  515. &:after {
  516. content: '';
  517. position: absolute;
  518. left: 50%;
  519. bottom: 0;
  520. transform: translateX(-50%);
  521. width: 35rpx;
  522. height: 8rpx;
  523. background-color: $main-color;
  524. border-radius: 4rpx;
  525. }
  526. }
  527. }
  528. }
  529. .uni-swiper-item {
  530. height: auto;
  531. }
  532. .order-item {
  533. width: 100%;
  534. padding-left: 20rpx;
  535. background: #fff;
  536. margin-top: 20rpx;
  537. .i-top {
  538. display: flex;
  539. justify-content: space-between;
  540. align-items: center;
  541. padding-right: 20rpx;
  542. position: relative;
  543. width: 100%;
  544. margin-top: 30rpx;
  545. padding-bottom: 30rpx;
  546. .order_sn{
  547. font-size: 28rpx;
  548. color: #2d2d2d;
  549. margin-left: 10rpx;
  550. }
  551. .state {
  552. font-size: 26rpx;
  553. color: $main-color;
  554. }
  555. }
  556. .goods-box {
  557. position: relative;
  558. padding: 20rpx 0;
  559. width: 100%;
  560. border-bottom: 1rpx solid #f2f2f2;
  561. .goods_return_status {
  562. position: absolute;
  563. bottom: 24rpx;
  564. right: 21rpx;
  565. font-size: 22rpx;
  566. color: #FC1C1C;
  567. }
  568. .left {
  569. .goods-img {
  570. background-size: cover;
  571. background-position: center center;
  572. background-repeat: no-repeat;
  573. width: 200rpx;
  574. height: 200rpx;
  575. overflow: hidden;
  576. background-color: #F8F6F7;
  577. border-radius: 14rpx;
  578. flex-shrink: 0;
  579. }
  580. }
  581. .right {
  582. padding: 7rpx 0 22rpx 20rpx;
  583. overflow: hidden;
  584. flex-shrink: 0;
  585. height: 200rpx;
  586. .right_top{
  587. .goods_name {
  588. width: 485rpx;
  589. color: #2D2D2D;
  590. font-size: 28rpx;
  591. overflow: hidden;
  592. text-overflow: ellipsis;
  593. display: -webkit-box;
  594. -webkit-line-clamp: 2;
  595. -webkit-box-orient: vertical;
  596. word-break: break-word;
  597. line-height: 38rpx;
  598. }
  599. .goods_info {
  600. padding-top: 10rpx;
  601. .spec_info {
  602. color: #949494;
  603. font-size: 24rpx;
  604. line-height: 28rpx;
  605. background-color: #F8F8F8;
  606. padding: 3rpx 7rpx;
  607. border-radius: 6rpx;
  608. margin-top: 10rpx;
  609. }
  610. .goods_num {
  611. color: #2D2D2D;
  612. font-size: 24rpx;
  613. text-align: right;
  614. }
  615. }
  616. }
  617. .goods_point_price{
  618. font-size: 30rpx;
  619. font-family: PingFang SC;
  620. font-weight: bold;
  621. color: #FC1C1C;
  622. line-height: 30rpx;
  623. }
  624. .title {
  625. font-size: 24rpx;
  626. color: $font-color-dark;
  627. line-height: 1;
  628. }
  629. .attr-box {
  630. font-size: 22rpx;
  631. color: $font-color-light;
  632. padding: 10rpx 12rpx;
  633. }
  634. }
  635. }
  636. .price-box {
  637. display: flex;
  638. justify-content: flex-end;
  639. align-items: baseline;
  640. padding: 0 18rpx;
  641. font-size: 24rpx;
  642. color: #949494;
  643. width: 100%;
  644. margin: 30rpx 0;
  645. .order_mount{
  646. color: #333333;
  647. font-size: 24rpx;
  648. margin-left: 20rpx;
  649. }
  650. .integral_des{
  651. font-size: 24rpx;
  652. font-family: PingFang SC;
  653. font-weight: 500;
  654. color: #FC1C1C;
  655. line-height: 30rpx;
  656. }
  657. }
  658. .action-box {
  659. display: flex;
  660. justify-content: flex-end;
  661. align-items: flex-start;
  662. max-height: 70rpx;
  663. position: relative;
  664. padding-right: 20rpx;
  665. width: 100%;
  666. padding-bottom: 20rpx;
  667. }
  668. .action-btn {
  669. width: 125rpx;
  670. height: 50rpx;
  671. margin: 0;
  672. margin-left: 10rpx;
  673. padding: 0;
  674. text-align: center;
  675. line-height: 50rpx;
  676. font-size: 24rpx;
  677. color: $main-font-color;
  678. background: #fff;
  679. border-radius: 25rpx;
  680. border: 1rpx solid #eeeeee;
  681. &:after {
  682. border: none;
  683. }
  684. &.recom {
  685. color: #fff;
  686. background: #F30300;
  687. border: none;
  688. }
  689. }
  690. }
  691. .empty_part {
  692. padding-top: 108rpx;
  693. image {
  694. width: 210rpx;
  695. height: 210rpx;
  696. }
  697. text {
  698. color: $main-third-color;
  699. font-size: 26rpx;
  700. margin-top: 57rpx;
  701. }
  702. button {
  703. width: 245rpx;
  704. height: 66rpx;
  705. background: rgba(252, 28, 28, .05);
  706. border-radius: 33rpx;
  707. color: $main-color;
  708. font-size: 30rpx;
  709. font-weight: bold;
  710. margin-top: 29rpx;
  711. border: none;
  712. }
  713. uni-button:after {
  714. border-radius: 200rpx;
  715. border-color: #fff;
  716. }
  717. }
  718. .cancel_popup {
  719. width: 100%;
  720. height: 700rpx;
  721. background: #FFFFFF;
  722. border-radius: 15rpx 15rpx 0 0;
  723. position: fixed;
  724. width: 100% !important;
  725. z-index: 20;
  726. bottom: 0;
  727. .popup_top {
  728. height: 100rpx;
  729. width: 100%;
  730. display: flex;
  731. padding: 0 39rpx;
  732. align-items: center;
  733. justify-content: space-between;
  734. border-bottom: 1rpx solid #F8F8F8;
  735. text {
  736. font-size: 32rpx;
  737. font-family: PingFang SC;
  738. font-weight: 500;
  739. color: #343434;
  740. line-height: 32rpx;
  741. }
  742. image {
  743. width: 30rpx;
  744. height: 30rpx;
  745. }
  746. }
  747. .cancel_list {
  748. padding-bottom: 128rpx;
  749. box-sizing: border-box;
  750. height: 600rpx;
  751. .cancle_pre {
  752. width: 100%;
  753. padding: 29rpx 40rpx;
  754. box-sizing: border-box;
  755. display: flex;
  756. justify-content: space-between;
  757. text {
  758. font-size: 28rpx;
  759. font-family: PingFang SC;
  760. font-weight: 500;
  761. color: #666666;
  762. line-height: 32rpx;
  763. }
  764. }
  765. }
  766. .cancel_popup_btn {
  767. position: fixed;
  768. bottom: 40rpx;
  769. z-index: 30;
  770. display: flex;
  771. width: 100%;
  772. justify-content: center;
  773. text:nth-child(1) {
  774. width: 334rpx;
  775. height: 70rpx;
  776. background: linear-gradient(45deg, #FF963B 0%, #9A540A 0%, #FF8622 0%);;
  777. border-radius: 35rpx 0 0 35rpx;
  778. font-size: 28rpx;
  779. font-family: PingFang SC;
  780. font-weight: 500;
  781. color: #FFFFFF;
  782. line-height: 32rpx;
  783. display: flex;
  784. align-items: center;
  785. justify-content: center;
  786. }
  787. text:nth-child(2) {
  788. width: 334rpx;
  789. height: 70rpx;
  790. background: #F30300;
  791. border-radius: 0 35rpx 35rpx 0;
  792. font-size: 28rpx;
  793. font-family: PingFang SC;
  794. font-weight: 500;
  795. color: #FFFFFF;
  796. line-height: 32rpx;
  797. display: flex;
  798. align-items: center;
  799. justify-content: center;
  800. }
  801. }
  802. }
  803. </style>