index.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. <template>
  2. <view>
  3. <view style="width: 100%;text-align: center;position: fixed;height: 96rpx;z-index: 999;">
  4. <u-tabs :list="list" sticky :current="current" @change="change" active-color="#007AFF"></u-tabs>
  5. </view>
  6. <view style="padding-top: 96rpx;">
  7. <view v-if="!order.length" class="noData">您暂无相关订单哦~</view>
  8. <view v-else v-for="(item, index) in order" style="padding: 20rpx 20rpx 0rpx 20rpx" class="lisChild">
  9. <view class="item">
  10. <view style="display: flex;justify-content: space-between;align-items: center;height: 50rpx;" @click="openPopup(index)">
  11. <view style="color: #666666;font-size: 24rpx;">订单编号:{{ item.orderSn }}</view>
  12. <view style="color: #999999;font-size: 24rpx;">{{ $method.timestampToTime(item.createTime) }}</view>
  13. </view>
  14. <u-line color="#D6D6DB" />
  15. <view
  16. style="display: flex;justify-content: space-between;padding: 25rpx 0;border-bottom: 1rpx solid #eee;"
  17. v-for="(items, indexs) in item.orderGoodsList"
  18. :key="indexs"
  19. >
  20. <image :src="$method.splitImgHost(items.coverUrl)" style="height: 134rpx;width: 278rpx;border-radius: 16rpx;flex-shrink: 0;"></image>
  21. <view style="margin-left: 20rpx;flex:1;display: flex;flex-direction: column;">
  22. <view style="color: #333333;font-size: 30rpx;font-weight: bold;flex:1">{{ items.goodsName }}</view>
  23. <view class="priceTag">¥ {{ items.goodsRealPrice }}</view>
  24. </view>
  25. </view>
  26. <view style="height: 80rpx;display: flex;justify-content: space-between;align-items: center;">
  27. <view>
  28. <text style="color:#999;font-size: 24rpx;margin-right: 8rpx;">共{{ item.orderGoodsList.length }}项</text>
  29. <text style="color: #333;font-size: 30rpx;font-weight: bold;">合计</text>
  30. <text style="color:#ff2d55;font-size: 30rpx;font-weight: bold;">¥{{ item.payPrice }}</text>
  31. </view>
  32. <view style="display: flex;align-items: center;">
  33. <view class="btn2" v-if="item.orderStatus === 0" @click="resumeOrder(item)">继续支付</view>
  34. <!-- <view class="btn2" v-if="item.orderStatus === -1 || item.orderStatus === -2" @click="againBuy(item)">重新购买</view> -->
  35. <view class="btn2" v-if="item.orderStatus === 1 || item.orderStatus === 2">退款</view>
  36. <view class="btn1" v-if="item.orderStatus === -1 || item.orderStatus === -2" @click="delOrder(item)">删除订单</view>
  37. <view class="btn1" @click="closeOrder(item)" v-if="item.orderStatus === 0">取消订单</view>
  38. </view>
  39. </view>
  40. </view>
  41. </view>
  42. </view>
  43. </view>
  44. </template>
  45. <script>
  46. import { mapGetters } from 'vuex';
  47. export default {
  48. components: {},
  49. data() {
  50. return {
  51. list: [
  52. {
  53. name: '待支付'
  54. },
  55. {
  56. name: '已支付'
  57. },
  58. {
  59. name: '已取消'
  60. }
  61. ],
  62. current: 0,
  63. order: [],
  64. formData: {
  65. status: '0,1',
  66. pageNum: 1,
  67. pageSize: 5
  68. },
  69. pageNum1: 0,
  70. pageNum2: 0,
  71. pageNum3: 0
  72. };
  73. },
  74. // onPullDownRefresh() {},
  75. onLoad(option) {
  76. this.current = option.current || 0;
  77. },
  78. onShow() {
  79. this.getOrderList();
  80. /* if(this.current === 2 && this.$method.isLogin()){
  81. this.$refs.refMy.init();
  82. } */
  83. },
  84. //分享功能
  85. onShareAppMessage(res) {
  86. var self = this;
  87. return {
  88. title: '中正',
  89. path: `/pages/index/index?inviteCode=` + userInfo == null ? '' : userInfo.userAccount
  90. };
  91. },
  92. onReachBottom() {
  93. this.formData.pageNum++;
  94. this.getFY();
  95. },
  96. methods: {
  97. resumeOrder(item){
  98. let data = {orderSn:item.orderSn}
  99. this.$api.resumeSmallOrder(data).then(res => {
  100. if(res.data.code==200){
  101. let data = res.data.data
  102. uni.requestPayment({
  103. provider: data.provider,
  104. nonceStr: data.nonceStr,
  105. package: data.package,
  106. signType: data.signType,
  107. paySign: data.sign,
  108. timeStamp: String(data.timeStamp),
  109. success: function (res) {
  110. uni.redirectTo({
  111. url: '/pages2/order/confirm_success?sn='+data.orderSn
  112. });
  113. console.log('success:' + JSON.stringify(res));
  114. },
  115. fail: function (err) {
  116. console.log('fail:' + JSON.stringify(err));
  117. }
  118. });
  119. }else{
  120. uni.showModal({
  121. title: "提示",
  122. content: res.data.msg,
  123. showCancel: false
  124. })
  125. }
  126. });
  127. },
  128. openPopup() {},
  129. //删除订单
  130. delOrder(item) {
  131. var self = this;
  132. uni.showModal({
  133. content: '确定要删除该订单吗',
  134. success: function(res) {
  135. if (res.confirm) {
  136. self.$api
  137. .eddOrder({
  138. orderId: item.orderId,
  139. status: -1
  140. })
  141. .then(res => {
  142. if (res.data.code === 200) {
  143. self.$method.showToast('订单删除成功');
  144. self.getOrderList();
  145. }
  146. });
  147. }
  148. }
  149. });
  150. },
  151. //取消订单
  152. closeOrder(item) {
  153. var self = this;
  154. uni.showModal({
  155. content: '确定要取消该订单吗',
  156. success: function(res) {
  157. if (res.confirm) {
  158. self.$api
  159. .eddOrder({
  160. orderId: item.orderId,
  161. orderStatus: -1
  162. })
  163. .then(res => {
  164. if (res.data.code === 200) {
  165. self.$method.showToast('订单取消成功', 'success');
  166. self.getOrderList();
  167. }
  168. });
  169. }
  170. }
  171. });
  172. },
  173. getFY() {
  174. if (this.current === 0) {
  175. this.formData.orderStatus = '0';
  176. if (this.order.length >= this.pageNum1) {
  177. return;
  178. }
  179. }
  180. if (this.current === 1) {
  181. this.formData.orderStatus = '1,2';
  182. if (this.order.length >= this.pageNum2) {
  183. return;
  184. }
  185. }
  186. if (this.current === 2) {
  187. this.formData.orderStatus = '-1,-2';
  188. if (this.order.length >= this.pageNum3) {
  189. return;
  190. }
  191. }
  192. this.$api.getorderlists(this.formData).then(res => {
  193. if (res.data.code === 200) {
  194. if (res.data.rows.length) {
  195. this.order = this.order.concat(res.data.rows);
  196. }
  197. }
  198. });
  199. },
  200. //获取订单
  201. getOrderList() {
  202. this.formData.pageNum = 1;
  203. if (this.current === 0) {
  204. this.formData.orderStatus = '0';
  205. }
  206. if (this.current === 1) {
  207. this.formData.orderStatus = '1,2';
  208. }
  209. if (this.current === 2) {
  210. this.formData.orderStatus = '-1,-2';
  211. }
  212. this.$api.getorderlists(this.formData).then(res => {
  213. if (res.data.code === 200) {
  214. if (this.current === 0) {
  215. this.pageNum1 = res.data.total;
  216. }
  217. if (this.current === 1) {
  218. this.pageNum2 = res.data.total;
  219. }
  220. if (this.current === 2) {
  221. this.pageNum3 = res.data.total;
  222. }
  223. this.order = res.data.rows;
  224. }
  225. });
  226. },
  227. change(index) {
  228. if (this.current === index) {
  229. return;
  230. }
  231. this.current = index;
  232. this.getOrderList();
  233. uni.pageScrollTo({
  234. scrollTop: 0
  235. });
  236. }
  237. },
  238. computed: { ...mapGetters(['userInfo']) }
  239. };
  240. </script>
  241. <style>
  242. page {
  243. background: #eaeef1;
  244. }
  245. </style>
  246. <style scoped>
  247. .lisChild:last-child {
  248. margin-bottom: 34rpx;
  249. }
  250. .noData {
  251. text-align: center;
  252. font-size: 32rpx;
  253. font-family: PingFang SC;
  254. font-weight: 500;
  255. color: #999999;
  256. margin: 160rpx 0;
  257. }
  258. .btn2 {
  259. width: 144rpx;
  260. height: 46rpx;
  261. background: #ffffff;
  262. border: 2rpx solid #007aff;
  263. border-radius: 16rpx;
  264. text-align: center;
  265. line-height: 48rpx;
  266. color: #007aff;
  267. margin: 0 8rpx;
  268. }
  269. .btn1 {
  270. width: 144rpx;
  271. height: 48rpx;
  272. background: #ffffff;
  273. border: 2rpx solid #999999;
  274. border-radius: 16rpx;
  275. text-align: center;
  276. line-height: 48rpx;
  277. color: #999999;
  278. margin: 0 8rpx;
  279. }
  280. .item {
  281. width: 100%;
  282. background: #ffffff;
  283. border-radius: 16rpx;
  284. /* margin-bottom: 20rpx; */
  285. padding: 15rpx;
  286. }
  287. .priceTag {
  288. font-size: 30rpx;
  289. font-family: PingFang SC;
  290. font-weight: bold;
  291. color: #ff2d55;
  292. display: flex;
  293. flex-direction: row-reverse;
  294. }
  295. .bottomBox {
  296. position: fixed;
  297. bottom: 0;
  298. width: 100%;
  299. left: 0;
  300. height: 98rpx;
  301. background-color: #ffffff;
  302. display: flex;
  303. justify-content: space-between;
  304. align-items: center;
  305. padding: 0 30rpx;
  306. }
  307. </style>