瀏覽代碼

feat: 添加次卡逻辑

黎海 3 年之前
父節點
當前提交
7a42b9b059

+ 16 - 7
src/pages/confirmOrder/addOrder/index.vue

@@ -243,8 +243,12 @@
243
                        :label="item.name"
243
                        :label="item.name"
244
                        :value="item.id">
244
                        :value="item.id">
245
               <span style="float: left">{{ item.name }}</span>
245
               <span style="float: left">{{ item.name }}</span>
246
-              <span v-if="item.recommend==1"
247
-                    style="float: right;color: #fa7d22ff;font-size: 13px;background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">推荐</span>
246
+              <span>
247
+                <span v-if="item.recommend==1"
248
+                      style="float: right;color: #fa7d22ff;font-size: 13px;margin:0 5px;  background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">推荐</span>
249
+                <span v-if="item.card==1"
250
+                      style="float: right;color: #fa7d22ff;font-size: 13px;margin: 0 5px; background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">次卡</span>
251
+              </span>
248
             </el-option>
252
             </el-option>
249
           </el-select>
253
           </el-select>
250
         </div>
254
         </div>
@@ -261,8 +265,12 @@
261
                        :label="item.name"
265
                        :label="item.name"
262
                        :value="item.id">
266
                        :value="item.id">
263
               <span style="float: left">{{ item.name |ellipsis(14) }}</span>
267
               <span style="float: left">{{ item.name |ellipsis(14) }}</span>
264
-              <span v-if="item.recommend==1"
265
-                    style="float: right;color: #fa7d22ff;font-size: 13px;background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">推荐</span>
268
+              <span>
269
+                <span v-if="item.recommend==1"
270
+                      style="float: right;color: #fa7d22ff;font-size: 13px; margin:0 5px ; background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">推荐</span>
271
+                <span v-if="item.card==1"
272
+                      style="float: right;color: #fa7d22ff;font-size: 13px; margin:0 5px ; background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">次卡</span>
273
+              </span>
266
             </el-option>
274
             </el-option>
267
           </el-select>
275
           </el-select>
268
         </div>
276
         </div>
@@ -461,12 +469,12 @@ export default {
461
       this.$router.replace("/home");
469
       this.$router.replace("/home");
462
     },
470
     },
463
     getProjectClassify () {
471
     getProjectClassify () {
464
-      api.projectClassify().then(res => {
472
+      api.projectClassify({user_id:this.userInfo.user_id}).then(res => {
465
         this.classifyList = res.data.list
473
         this.classifyList = res.data.list
466
       })
474
       })
467
     },
475
     },
468
     getProjectList (e) {
476
     getProjectList (e) {
469
-      api.getProjectList({ id: e }).then(res => {
477
+      api.getProjectList({ id: e,user_id:this.userInfo.user_id }).then(res => {
470
         this.projectList = res.data.list;
478
         this.projectList = res.data.list;
471
       });
479
       });
472
     },
480
     },
@@ -661,7 +669,8 @@ export default {
661
           that.$router.push({
669
           that.$router.push({
662
             path: "/confirmOrder/details",
670
             path: "/confirmOrder/details",
663
             query: {
671
             query: {
664
-              id: res.data.order_id
672
+              id: res.data.order_id,
673
+              user_id:this.userInfo.user_id
665
             }
674
             }
666
           });
675
           });
667
         }
676
         }

+ 252 - 25
src/pages/confirmOrder/details/index.vue

@@ -141,6 +141,33 @@
141
           <div>预约费用</div>
141
           <div>预约费用</div>
142
           <div>¥{{reservationPrice}}</div>
142
           <div>¥{{reservationPrice}}</div>
143
         </div>
143
         </div>
144
+        <!-- 次卡 -->
145
+        <div class="cost-coupon-list">
146
+          <div class="coupon"
147
+               @click="isCard = true">
148
+            <div class="coupon-tips">
149
+              <div class="coupon-icon"><img src="https://we-spa.oss-cn-shenzhen.aliyuncs.com/pad_clerk/icon/slices/couponIcon.png"
150
+                     alt=""></div>
151
+              <div class="coupon-title">次卡</div>
152
+              <div class="coupon-tip"
153
+                   v-if="order_data.coupon_list&&order_data.coupon_list.length>0">已选择次卡</div>
154
+            </div>
155
+            <div class="on-icon">></div>
156
+          </div>
157
+
158
+          <div v-if="1==1">
159
+            <div>
160
+              <div class="coupon-ps"
161
+                   v-for="item,index in isSelectCardList"
162
+                   :key="index">
163
+                <div>{{item.name}}</div>
164
+                <div class="cou-price">-¥{{item.price}}</div>
165
+              </div>
166
+            </div>
167
+          </div>
168
+        </div>
169
+
170
+        <!-- 优惠券 -->
144
         <div class="cost-coupon-list">
171
         <div class="cost-coupon-list">
145
           <div class="coupon"
172
           <div class="coupon"
146
                @click="onCoupon">
173
                @click="onCoupon">
@@ -154,15 +181,6 @@
154
             <div class="on-icon">></div>
181
             <div class="on-icon">></div>
155
           </div>
182
           </div>
156
 
183
 
157
-          <!-- <div v-if="order_data.coupon_list&&order_data.coupon_list.length>0">
158
-            <div class="coupon-ps"
159
-                 v-for="item,index in order_data.coupon_list"
160
-                 :key="index">
161
-              <div>{{item.coupon_name}}</div>
162
-              <div class="cou-price">-¥{{price}}</div>
163
-            </div>
164
-          </div> -->
165
-
166
           <div v-if="1==1">
184
           <div v-if="1==1">
167
             <div>
185
             <div>
168
               <div class="coupon-ps"
186
               <div class="coupon-ps"
@@ -197,6 +215,28 @@
197
       <div class="payment"
215
       <div class="payment"
198
            @click="determine">{{isChange?'确定订单':'立即支付'}}</div>
216
            @click="determine">{{isChange?'确定订单':'立即支付'}}</div>
199
     </div>
217
     </div>
218
+    <!-- 次卡 -->
219
+    <mine-pupop :show="isCard">
220
+      <div class="coupon-block"
221
+           style="background: #F7F8FA;">
222
+        <div class="delete-pupop"
223
+             @click="isCard=false"><img src="https://we-spa.oss-cn-shenzhen.aliyuncs.com/pad_clerk/icon/slices/delete.png"
224
+               alt=""></div>
225
+        <div class="coupon-pupop-title">选择次卡</div>
226
+        <div class="card-content">
227
+          <div class="card-info"
228
+               v-for="item,index in cardList"
229
+               :key="index"
230
+               @click="isSelectCard(item,index)">
231
+            <div class="frequency"> <span style="color: #FF3007FF;font-size: 18px;">{{item.used_num}}</span>/{{item.total_num}}</div>
232
+            <div class="card-title">{{item.name}}</div>
233
+            <div class="card-choice-icon"><img :src="item.isSelect?select:unSelect"></div>
234
+          </div>
235
+        </div>
236
+        <div class="coupon-confirm"
237
+             @click="isCardAdd">确认</div>
238
+      </div>
239
+    </mine-pupop>
200
     <!-- 选择优惠券 -->
240
     <!-- 选择优惠券 -->
201
     <mine-pupop :show="isCoupun">
241
     <mine-pupop :show="isCoupun">
202
       <div class="coupon-block">
242
       <div class="coupon-block">
@@ -275,8 +315,12 @@
275
                        :label="item.name"
315
                        :label="item.name"
276
                        :value="item.id">
316
                        :value="item.id">
277
               <span style="float: left">{{ item.name }}</span>
317
               <span style="float: left">{{ item.name }}</span>
278
-              <span v-if="item.recommend==1"
279
-                    style="float: right;color: #fa7d22ff;font-size: 13px;background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">推荐</span>
318
+              <span>
319
+                <span v-if="item.recommend==1"
320
+                      style="float: right;color: #fa7d22ff;font-size: 13px;margin:0 5px;  background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">推荐</span>
321
+                <span v-if="item.card==1"
322
+                      style="float: right;color: #fa7d22ff;font-size: 13px;margin: 0 5px; background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">次卡</span>
323
+              </span>
280
             </el-option>
324
             </el-option>
281
           </el-select>
325
           </el-select>
282
         </div>
326
         </div>
@@ -294,8 +338,12 @@
294
                        style=" display: flex;justify-content: space-between ;align-items: center;line-height: inherit; padding: 0 12px;"
338
                        style=" display: flex;justify-content: space-between ;align-items: center;line-height: inherit; padding: 0 12px;"
295
                        :value="item.id">
339
                        :value="item.id">
296
               <span style="float: left">{{ item.name |ellipsis(14) }}</span>
340
               <span style="float: left">{{ item.name |ellipsis(14) }}</span>
297
-              <span v-if="item.recommend==1"
298
-                    style="float: right;color: #fa7d22ff;font-size: 13px;background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">推荐</span>
341
+              <span>
342
+                <span v-if="item.recommend==1"
343
+                      style="float: right;color: #fa7d22ff;font-size: 13px; margin:0 5px ; background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">推荐</span>
344
+                <span v-if="item.card==1"
345
+                      style="float: right;color: #fa7d22ff;font-size: 13px; margin:0 5px ; background: #ffefeb;border-radius: 4px;border: 1px solid #fa7d22;height: 18px;padding: 2px 6px;">次卡</span>
346
+              </span>
299
             </el-option>
347
             </el-option>
300
           </el-select>
348
           </el-select>
301
         </div>
349
         </div>
@@ -478,6 +526,7 @@ export default {
478
       //执行方案
526
       //执行方案
479
       programmeList: [],
527
       programmeList: [],
480
       order_data: {},//门店
528
       order_data: {},//门店
529
+      isSelectCardList: [],
481
       //项目分类列表
530
       //项目分类列表
482
       classifyList: [],
531
       classifyList: [],
483
       //项目列表
532
       //项目列表
@@ -497,6 +546,8 @@ export default {
497
       isEdit: false,
546
       isEdit: false,
498
       //优惠券列表
547
       //优惠券列表
499
       couponList: [],
548
       couponList: [],
549
+      card_data: [],//已选择的列表
550
+      cardList: [],//次卡列表
500
       //已选择的优惠券
551
       //已选择的优惠券
501
       selectCouponList: [],
552
       selectCouponList: [],
502
       //已选择优惠券的id(同一个id只能选择一张优惠券)
553
       //已选择优惠券的id(同一个id只能选择一张优惠券)
@@ -551,6 +602,7 @@ export default {
551
       programmeIndex: '',
602
       programmeIndex: '',
552
       remarks: '',
603
       remarks: '',
553
       isCoupun: false,//是否展示优惠券弹窗
604
       isCoupun: false,//是否展示优惠券弹窗
605
+      isCard: false,//是否展示次卡弹窗
554
       isOver: false,//优惠券注释
606
       isOver: false,//优惠券注释
555
       isProject: false,//是否展示选择项目弹窗
607
       isProject: false,//是否展示选择项目弹窗
556
       isTs: false,//是否展示选择时间弹窗
608
       isTs: false,//是否展示选择时间弹窗
@@ -575,6 +627,7 @@ export default {
575
       discount: 0,//折扣类型
627
       discount: 0,//折扣类型
576
       device_name: '',//支付成功后的设备
628
       device_name: '',//支付成功后的设备
577
       room: '',//设备房间
629
       room: '',//设备房间
630
+      user_id: '',
578
       // showRuleText: 10086,
631
       // showRuleText: 10086,
579
 
632
 
580
     };
633
     };
@@ -605,9 +658,14 @@ export default {
605
           console.log(_problem, '_problem');
658
           console.log(_problem, '_problem');
606
         })
659
         })
607
         this.lableList = _problem
660
         this.lableList = _problem
661
+        this.getProjectClassify()
608
         this.randomColor();
662
         this.randomColor();
609
         this.remarks = res.data.remark
663
         this.remarks = res.data.remark
610
         this.programmeList = res.data.scheme_list
664
         this.programmeList = res.data.scheme_list
665
+        res.data.order_data.project_list.forEach(e => {
666
+          e["isCard"] = false
667
+          e["isCoupon"] = false
668
+        })
611
         this.order_data = res.data.order_data
669
         this.order_data = res.data.order_data
612
         if (this.order_data.coupon_list.length > 0) {
670
         if (this.order_data.coupon_list.length > 0) {
613
           this.isSelectCoup = this.order_data.coupon_list
671
           this.isSelectCoup = this.order_data.coupon_list
@@ -629,13 +687,101 @@ export default {
629
         this.calculationPrice()
687
         this.calculationPrice()
630
       })
688
       })
631
     },
689
     },
690
+    onCard () {
691
+      api.getOrderCard({ id: this.id }).then(res => {
692
+        if (res.code == 200) {
693
+          res.data.list.forEach(item => {
694
+            item["isSelect"] = false
695
+          })
696
+          this.cardList = res.data.list
697
+
698
+        }
699
+      })
700
+    },
701
+    isSelectCard (item, index) {
702
+      let isSelect = false
703
+      let isRepeat = false
704
+      this.cardList.forEach(res => {
705
+        if (res.isSelect && item.id != res.id && item.name == res.name) {
706
+          isRepeat = true
707
+        }
708
+      })
709
+      if (isRepeat) {
710
+        this.$message.error("不能选择相同的次卡");
711
+        return
712
+      }
713
+      this.isSelectCoup.forEach(e => {
714
+        if (item.project_ids.indexOf(e.projectids) > -1) {
715
+          isSelect = true
716
+        }
717
+      })
718
+      if (isSelect) {
719
+        this.$message.error("该项目已选择优惠券");
720
+        return
721
+      }
722
+      console.log(item);
723
+      this.cardList[index].isSelect = !this.cardList[index].isSelect
724
+    },
725
+    //确定选择的次卡
726
+    isCardAdd () {
727
+      let isSelectCardList = []
728
+      let project_list = this.order_data.project_list
729
+      let card_data = []
730
+       let price =this.order_data.price
731
+        console.log(price,'price');
732
+      if (this.isSelectCoup.length > 0) {
733
+        this.isSelectCoup.forEach(res => {
734
+          this.order_data.project_list.forEach(item => {
735
+            if (res.projectids == item.id) {
736
+              price = price - item.price
737
+            }
738
+          })
739
+        })
740
+      }
741
+      project_list.forEach(res => {
742
+        this.cardList.forEach(e => {
743
+          if (e.isSelect && e.project_ids.indexOf(res.id) > -1) {
744
+            price = price - res.price
745
+            price = price.toFixed(2)
746
+            isSelectCardList.push(res)
747
+          }
748
+        })
749
+      })
750
+      isSelectCardList.forEach(e => {
751
+        this.cardList.forEach(res => {
752
+          let card_data_info = {}
753
+          if (res.isSelect, res.project_ids.indexOf(e.id) > -1) {
754
+            card_data_info = {
755
+              id: e.id,
756
+              card_id: res.id
757
+            }
758
+            card_data.push(card_data_info)
759
+          }
760
+        })
761
+      })
762
+       if (isSelectCardList.length==0&&this.isSelectCoup.length==0) {
763
+        price = price- this.order_data.discountPrice
764
+       }
765
+
766
+      this.card_data = card_data
767
+      if (price < 0) {
768
+        price = 0
769
+      }
770
+      // if (this.isSelectCoup.length > 0) {
771
+        this.showMoney = price
772
+      // } else {
773
+      //   this.discountPrice = price
774
+      // }
775
+      this.isSelectCardList = isSelectCardList
776
+      this.isCard = false
777
+    },
632
     getProjectClassify () {
778
     getProjectClassify () {
633
-      api.projectClassify().then(res => {
779
+      api.projectClassify({ user_id: this.userInfo.user_id }).then(res => {
634
         this.classifyList = res.data.list
780
         this.classifyList = res.data.list
635
       })
781
       })
636
     },
782
     },
637
     getProjectList (e) {
783
     getProjectList (e) {
638
-      api.getProjectList({ id: e }).then(res => {
784
+      api.getProjectList({ id: e, user_id: this.userInfo.user_id }).then(res => {
639
         this.projectList = res.data.list
785
         this.projectList = res.data.list
640
       })
786
       })
641
     },
787
     },
@@ -668,14 +814,9 @@ export default {
668
       console.log(item, 'item========');
814
       console.log(item, 'item========');
669
       this.order_data.project_list.forEach((res, index) => {
815
       this.order_data.project_list.forEach((res, index) => {
670
         if (item.id == res.id) {
816
         if (item.id == res.id) {
671
-          this.order_data.project_list.splice(index, 1)
672
           this.reservationPrice = 0
817
           this.reservationPrice = 0
673
           this.confirmOrder("delete")
818
           this.confirmOrder("delete")
674
           this.isSelectCoup = []
819
           this.isSelectCoup = []
675
-          this.$message({
676
-            message: '删除成功',
677
-            type: 'success'
678
-          });
679
         }
820
         }
680
       })
821
       })
681
     },
822
     },
@@ -786,7 +927,7 @@ export default {
786
       }
927
       }
787
       this.tsTableList = tsTableList
928
       this.tsTableList = tsTableList
788
     },
929
     },
789
-    confirmOrder () {
930
+    confirmOrder (type) {
790
       let order_data = []
931
       let order_data = []
791
       this.order_data.project_list.forEach(item => {
932
       this.order_data.project_list.forEach(item => {
792
         let order_data_info = {}
933
         let order_data_info = {}
@@ -815,6 +956,13 @@ export default {
815
           this.getOrderInfo()
956
           this.getOrderInfo()
816
           this.isTs = false
957
           this.isTs = false
817
           this.isChange = false
958
           this.isChange = false
959
+          if (type&&type=='delete') {
960
+            this.order_data.project_list.splice(index, 1)
961
+           this.$message({
962
+            message: '删除成功',
963
+            type: 'success'
964
+          });
965
+          }
818
         }
966
         }
819
       })
967
       })
820
     },
968
     },
@@ -931,6 +1079,7 @@ export default {
931
         return res.isSelect == true
1079
         return res.isSelect == true
932
       })
1080
       })
933
       // 卡券,项目券数据包, id:订单项目ID, coupon_id:优惠券ID, 如:[{ "id": 1220, coupon_id: 199 }]isSelectCoup
1081
       // 卡券,项目券数据包, id:订单项目ID, coupon_id:优惠券ID, 如:[{ "id": 1220, coupon_id: 199 }]isSelectCoup
1082
+      this.discount = this.card_data.length>0?0:this.discount
934
       let params = {
1083
       let params = {
935
         id: this.id,
1084
         id: this.id,
936
         pay_way: payWayList[0].pay_way,
1085
         pay_way: payWayList[0].pay_way,
@@ -955,6 +1104,10 @@ export default {
955
         })
1104
         })
956
       }
1105
       }
957
       params['coupon_data'] = coupon_data.length > 0 ? JSON.stringify(coupon_data) : null
1106
       params['coupon_data'] = coupon_data.length > 0 ? JSON.stringify(coupon_data) : null
1107
+      if (this.card_data.length > 0) {
1108
+        params['card_data'] = JSON.stringify(this.card_data)
1109
+      }
1110
+      console.log(params, '=====');
958
       api.orderPay(params).then(res => {
1111
       api.orderPay(params).then(res => {
959
         if (res.code == 200) {
1112
         if (res.code == 200) {
960
           this.choicePayType = false
1113
           this.choicePayType = false
@@ -975,7 +1128,6 @@ export default {
975
                 correctLevel: QRCode.CorrectLevel.L//容错率,L/M/H
1128
                 correctLevel: QRCode.CorrectLevel.L//容错率,L/M/H
976
               })
1129
               })
977
             })
1130
             })
978
-
979
           }
1131
           }
980
         }
1132
         }
981
       })
1133
       })
@@ -1011,12 +1163,31 @@ export default {
1011
        * 点击使用按钮、勾选按钮
1163
        * 点击使用按钮、勾选按钮
1012
        */
1164
        */
1013
     selectPupop: function (item, index) {
1165
     selectPupop: function (item, index) {
1014
-
1166
+      this.card_data.forEach(res => {
1167
+        if (item.project_ids.indexOf(res.id) > -1) {
1168
+          item.project_ids.forEach((e, i) => {
1169
+            if (res.id == e) {
1170
+              item.project_ids.splice(i, 1)
1171
+            }
1172
+          })
1173
+        }
1174
+      })
1175
+      let isReturn = false
1176
+      this.isSelectCardList.forEach(value => {
1177
+        if (item.project_ids.indexOf(value.id) > -1) {
1178
+          isReturn = true
1179
+        }
1180
+      })
1181
+      if (isReturn || (item.type != 4 && this.card_data.length != 0)) {
1182
+        this.$message.error('该项目已选择次卡');
1183
+        return
1184
+      }
1015
       let CouPonIndex = this.couponList
1185
       let CouPonIndex = this.couponList
1016
       let selectIndex = index
1186
       let selectIndex = index
1017
       let curreValue = !CouPonIndex[selectIndex].isSelect
1187
       let curreValue = !CouPonIndex[selectIndex].isSelect
1018
       let project_list = this.order_data.project_list //这里是项目列表
1188
       let project_list = this.order_data.project_list //这里是项目列表
1019
 
1189
 
1190
+
1020
       // 判断是否是不相同的项目券
1191
       // 判断是否是不相同的项目券
1021
       if (this.couponList[selectIndex].type != 4) {
1192
       if (this.couponList[selectIndex].type != 4) {
1022
         for (let i = 0; i < CouPonIndex.length; i++) {
1193
         for (let i = 0; i < CouPonIndex.length; i++) {
@@ -1146,7 +1317,15 @@ export default {
1146
     // 计算总额
1317
     // 计算总额
1147
     calculateMoney () {
1318
     calculateMoney () {
1148
       let that = this
1319
       let that = this
1149
-      let money = Number(this.order_data.original_price)
1320
+      let _price = 0
1321
+      if (this.isSelectCardList.length > 0) {
1322
+        this.isSelectCardList.forEach(res => {
1323
+          _price = _price + Number(res.price)
1324
+        })
1325
+      }
1326
+      console.log(this.order_data.original_price,_price,'_price_price');
1327
+      let money = this.isSelectCardList.length > 0 ? this.order_data.original_price - _price : Number(this.order_data.original_price)
1328
+      console.log(money,'========');
1150
       let isSelectCoup = this.isSelectCoup
1329
       let isSelectCoup = this.isSelectCoup
1151
       let project_list = this.order_data.project_list //这里是项目列表
1330
       let project_list = this.order_data.project_list //这里是项目列表
1152
 
1331
 
@@ -1241,10 +1420,14 @@ export default {
1241
 
1420
 
1242
   created () {
1421
   created () {
1243
     let id = this.$route.query.id
1422
     let id = this.$route.query.id
1423
+    // let user_id = this.$route.query.user_id
1244
     if (id) {
1424
     if (id) {
1245
       this.id = id
1425
       this.id = id
1246
     }
1426
     }
1247
-    this.getProjectClassify()
1427
+    // if (user_id) {
1428
+    //   this.user_id = user_id
1429
+    // }
1430
+    this.onCard()
1248
 
1431
 
1249
     this.getOrderDiscount()
1432
     this.getOrderDiscount()
1250
 
1433
 
@@ -2264,5 +2447,49 @@ export default {
2264
       transform: translateX(-50%);
2447
       transform: translateX(-50%);
2265
     }
2448
     }
2266
   }
2449
   }
2450
+  .card-content {
2451
+    margin-top: 24px;
2452
+    height: 230px;
2453
+    padding: 0 15px;
2454
+    overflow: scroll;
2455
+    display: flex;
2456
+    justify-content: space-between;
2457
+    flex-wrap: wrap;
2458
+    .card-info {
2459
+      position: relative;
2460
+      margin-bottom: 10px;
2461
+      width: 225px;
2462
+      height: 70px;
2463
+      background: url("https://we-spa.oss-cn-shenzhen.aliyuncs.com/pad_clerk/bg.png")
2464
+        no-repeat;
2465
+      background-size: 100% 100%;
2466
+      padding: 12px 13px 0 22px;
2467
+      .frequency {
2468
+        text-align: end;
2469
+        font-size: 14px;
2470
+        font-family: SourceHanSansCN-Regular, SourceHanSansCN;
2471
+        font-weight: 400;
2472
+        color: #666666ff;
2473
+      }
2474
+      .card-title {
2475
+        font-size: 16px;
2476
+        font-family: SourceHanSansCN-Regular, SourceHanSansCN;
2477
+        font-weight: 400;
2478
+        color: #333333;
2479
+        line-height: 24px;
2480
+      }
2481
+      .card-choice-icon {
2482
+        width: 24px;
2483
+        height: 24px;
2484
+        position: absolute;
2485
+        right: 13px;
2486
+        bottom: 8px;
2487
+        img {
2488
+          width: 100%;
2489
+          height: 100%;
2490
+        }
2491
+      }
2492
+    }
2493
+  }
2267
 }
2494
 }
2268
 </style>
2495
 </style>

+ 1 - 2
src/pages/confirmOrder/index.vue

@@ -55,8 +55,7 @@ export default {
55
             this.$router.push({
55
             this.$router.push({
56
               path: "/confirmOrder/addOrder",
56
               path: "/confirmOrder/addOrder",
57
               query: {   //user_id
57
               query: {   //user_id
58
-                data: JSON.stringify(res.data),
59
-                // user_id:res.data.user.user_id
58
+                data: JSON.stringify(res.data)
60
               }
59
               }
61
             });
60
             });
62
           return
61
           return

+ 2 - 2
src/pages/customerMan/details/index.vue

@@ -108,9 +108,9 @@
108
                @click="toOrder(2)">
108
                @click="toOrder(2)">
109
             <div class="">
109
             <div class="">
110
               <img src="https://we-spa.oss-cn-shenzhen.aliyuncs.com/pad_clerk/icon/coupon/coupon_icon.png" />
110
               <img src="https://we-spa.oss-cn-shenzhen.aliyuncs.com/pad_clerk/icon/coupon/coupon_icon.png" />
111
-              <div>卡订单</div>
111
+              <div>卡订单</div>
112
             </div>
112
             </div>
113
-            <span>{{order_total.card}}</span>
113
+            <span>{{order_total.card_order}}</span>
114
           </div>
114
           </div>
115
           <div class="dataList"
115
           <div class="dataList"
116
                @click="toOrder(3)">
116
                @click="toOrder(3)">

+ 247 - 34
src/pages/customerMan/myOrder/index.vue

@@ -58,38 +58,35 @@
58
             </div>
58
             </div>
59
           </div>
59
           </div>
60
         </el-tab-pane>
60
         </el-tab-pane>
61
-        <el-tab-pane label="卡订单"
61
+        <el-tab-pane label="卡订单"
62
                      name="second">
62
                      name="second">
63
           <div class="user-list">
63
           <div class="user-list">
64
             <el-table ref="multipleTable"
64
             <el-table ref="multipleTable"
65
                       :data="cardOrderData"
65
                       :data="cardOrderData"
66
                       tooltip-effect="dark"
66
                       tooltip-effect="dark"
67
                       height="354"
67
                       height="354"
68
+                      @row-click="openDetail"
68
                       style="width: 100%;border-radius: 8px;">
69
                       style="width: 100%;border-radius: 8px;">
69
-
70
-              <!-- create_time: "2022-03-10 10:39:19"
71
-ex_time: "2022.03.17 23:59"
72
-id: 2517
73
-name: "新人体验券"
74
-status: 2
75
-type: "全额券" -->
76
-
77
-              <el-table-column prop="id"
78
-                               label="订单编号">
79
-              </el-table-column>
80
-              <el-table-column prop="goods"
81
-                               label="商品名称"
70
+              <el-table-column prop="name"
71
+                               label="卡券名称"
82
                                width="200">
72
                                width="200">
83
                 <template slot-scope="scope">
73
                 <template slot-scope="scope">
84
-                  <div v-for="(val,index) in scope.row.goods"
85
-                       :key="index">
86
-                    <div>{{val.name}}</div>
87
-                  </div>
74
+                  <div>{{scope.row.name | ellipsis(8)}}</div>
88
                 </template>
75
                 </template>
89
-                               
76
+
90
               </el-table-column>
77
               </el-table-column>
91
-              <el-table-column prop="price"
92
-                               label="实付"
78
+              <el-table-column prop="type"
79
+                               label="分类"
80
+                               show-overflow-tooltip>
81
+              </el-table-column>
82
+              <el-table-column prop="create_time"
83
+                               label="总价格"
84
+                               width="180"
85
+                               show-overflow-tooltip></el-table-column>
86
+
87
+              <el-table-column prop="ex_time"
88
+                               label="到期时间"
89
+                               width="180"
93
                                show-overflow-tooltip></el-table-column>
90
                                show-overflow-tooltip></el-table-column>
94
               <el-table-column prop="create_time"
91
               <el-table-column prop="create_time"
95
                                label="创建时间"
92
                                label="创建时间"
@@ -99,13 +96,9 @@ type: "全额券" -->
99
                                label="状态"
96
                                label="状态"
100
                                show-overflow-tooltip>
97
                                show-overflow-tooltip>
101
                 <template slot-scope="scope">
98
                 <template slot-scope="scope">
102
-                  <div :class="'color'+scope.row.status">{{ cardOrderStatus[scope.row.status]}}</div>
99
+                  <div :class="'color'+scope.row.status">{{scope.row.status==-1?'已过期':scope.row.status==-0?'已使用':'待使用'}}</div>
103
                 </template>
100
                 </template>
104
               </el-table-column>
101
               </el-table-column>
105
-              <el-table-column prop="create_time"
106
-                               label="下单时间"
107
-                               width="180"
108
-                               show-overflow-tooltip></el-table-column>
109
             </el-table>
102
             </el-table>
110
 
103
 
111
             <div class="pagin">
104
             <div class="pagin">
@@ -228,13 +221,64 @@ type: "全额券" -->
228
         </el-tab-pane>
221
         </el-tab-pane>
229
       </el-tabs>
222
       </el-tabs>
230
     </div>
223
     </div>
224
+    <!-- 次卡详情 -->
225
+    <mine-pupop :show="isPore">
226
+      <div class="pore-block">
227
+        <div class="delete-pupop"
228
+             @click="isPore=false">
229
+          <img src="https://we-spa.oss-cn-shenzhen.aliyuncs.com/pad_clerk/icon/slices/delete.png"
230
+               alt />
231
+        </div>
232
+        <div class="pore-content">
233
+          <div class="card-title">订单详情</div>
234
+          <div class="project">
235
+            <div class="project-title">项目名称:</div>
236
+            <div class="project-list">
237
+              <div class="project-info"
238
+                   v-for="item,index in cardInfo.project_list"
239
+                   :key="index">
240
+                <div class="name-text"> {{item.project_name}}</div>
241
+                <div class="change-num">
242
+                  <div class="num-content">
243
+                    <div class="content-left"
244
+                         @click="reduce(index)">-</div>
245
+                    <div class="content-num">{{item.num || 0}}</div>
246
+                    <div class="content-right"
247
+                         @click="item.num++">+</div>
248
+                  </div>
249
+                </div>
250
+              </div>
251
+            </div>
252
+          </div>
253
+          <div class="common"><span class="common-title">支付方式:</span><span>{{cardInfo.pay_way}}</span></div>
254
+          <div class="common"><span class="common-title">有效期限:</span><span>{{cardInfo.ex_time}}</span></div>
255
+          <div class="common"><span class="common-title">实付金额:</span><span>¥{{cardInfo.price}}</span></div>
256
+          <div class="consume-list">
257
+            <div class="consume-title">消耗信息:</div>
258
+            <div class="consume-info min-size"
259
+                 v-for="item,index in cardLogList"
260
+                 :key="index">
261
+              <div class="shop">{{item.store_name}}</div>
262
+              <div class="project-tips">{{item.remark}}</div>
263
+              <div class="project-ts">{{item.create_time}}</div>
264
+            </div>
265
+          </div>
266
+        </div>
267
+        <div class="confirm"
268
+             @click="confirm">确定</div>
269
+      </div>
270
+    </mine-pupop>
231
   </div>
271
   </div>
232
 </template>
272
 </template>
233
 
273
 
234
 <script>
274
 <script>
235
 import api from "../../../server/home";
275
 import api from "../../../server/home";
276
+import minePupop from "../../../components/minePupop/index.vue";
236
 
277
 
237
 export default {
278
 export default {
279
+  components: {
280
+    minePupop
281
+  },
238
   data () {
282
   data () {
239
     return {
283
     return {
240
       couponList: [
284
       couponList: [
@@ -278,13 +322,6 @@ export default {
278
         "已结算",
322
         "已结算",
279
         "已取消"
323
         "已取消"
280
       ],
324
       ],
281
-      cardOrderStatus: [
282
-        // 状态:0已预约,未支付,1已支付,2/3已完成
283
-        '已预约,未支付',
284
-        '已支付',
285
-        '已完成',
286
-        '已完成'
287
-      ],
288
       couponStatus: [
325
       couponStatus: [
289
         '待使用',
326
         '待使用',
290
         '已使用',
327
         '已使用',
@@ -302,7 +339,10 @@ export default {
302
       projectData: [],
339
       projectData: [],
303
       cardOrderData: [],
340
       cardOrderData: [],
304
       total: 100,
341
       total: 100,
305
-      limit: 10
342
+      limit: 10,
343
+      isPore: false,
344
+      cardInfo: {},//订单详情
345
+      cardLogList: [],//次卡消耗记录
306
     };
346
     };
307
   },
347
   },
308
   computed: {},
348
   computed: {},
@@ -321,6 +361,44 @@ export default {
321
         this.total = res.data.total;
361
         this.total = res.data.total;
322
       });
362
       });
323
     },
363
     },
364
+    reduce (index) {
365
+      this.cardInfo.project_list[index].num--
366
+      if (this.cardInfo.project_list[index].num < 0) {
367
+        this.cardInfo.project_list[index].num = 0
368
+      }
369
+    },
370
+    //次卡订单详情
371
+    openDetail (row, column, event) {
372
+      this.isPore = true
373
+      api.cardInfo({ id: row.id }).then(res => {
374
+        if (res.code == 200) {
375
+          this.cardInfo = res.data
376
+        }
377
+      })
378
+      api.cardLog({ id: row.id }).then(res => {
379
+        if (res.code == 200) {
380
+          this.cardLogList = res.data.list
381
+        }
382
+      })
383
+    },
384
+    confirm () {
385
+      // 项目ID,json字符,格式如:[{"project_id":"10","num":5}],project_id:适用项目ID,num:剩余次数
386
+      let project_data = [], project_info = {}
387
+      this.cardInfo.project_list.forEach(res=>{
388
+        project_info = {
389
+          project_id:res.id,
390
+          num:res.num
391
+        }
392
+        project_data.push(project_info)
393
+      })
394
+      api.cardUpdate({ id: this.cardInfo.id, project_data: JSON.stringify(project_data) }).then(res => {
395
+        if (res.code == 200) {
396
+          this.$message.success('更改成功!')
397
+          this.isPore = false
398
+        }
399
+      })
400
+
401
+    },
324
 
402
 
325
     // 获取商品订单
403
     // 获取商品订单
326
     getUserGoods () {
404
     getUserGoods () {
@@ -454,4 +532,139 @@ export default {
454
 .priceColor {
532
 .priceColor {
455
   color: #ff3007;
533
   color: #ff3007;
456
 }
534
 }
535
+.pore-block {
536
+  width: 540px;
537
+  height: 400px;
538
+  background: #ffffff;
539
+  border-radius: 8px;
540
+  position: relative;
541
+  padding: 26px 72px 80px 30px;
542
+  .delete-pupop {
543
+    width: 32px;
544
+    position: absolute;
545
+    right: 5px;
546
+    top: 5px;
547
+    img {
548
+      width: 100%;
549
+    }
550
+  }
551
+  .pore-content {
552
+    overflow: scroll;
553
+    height: 310px;
554
+    .card-title {
555
+      font-size: 14px;
556
+      font-family: PingFangSC-Medium, PingFang SC;
557
+      font-weight: 500;
558
+      color: #333333;
559
+      line-height: 20px;
560
+      text-align: center;
561
+    }
562
+    .project {
563
+      display: flex;
564
+      font-size: 13px;
565
+      font-family: PingFangSC-Regular, PingFang SC;
566
+      font-weight: 400;
567
+      color: #333333;
568
+      line-height: 18px;
569
+      .project-title {
570
+        color: #999999;
571
+      }
572
+      .project-list {
573
+        flex: 1;
574
+        .project-info {
575
+          flex: 1;
576
+          .change-num {
577
+            margin-top: 6px;
578
+            width: 100%;
579
+            display: flex;
580
+            justify-content: end;
581
+            .num-content {
582
+              width: 104px;
583
+              height: 28px;
584
+              background: #ffffff;
585
+              border-radius: 2px;
586
+              border: 1px solid #fa7d22;
587
+              display: flex;
588
+              align-items: center;
589
+
590
+              .content-left,
591
+              .content-right {
592
+                width: 28px;
593
+                height: 100%;
594
+                background: #fa7d22;
595
+                font-size: 20px;
596
+                line-height: 24px;
597
+                color: #ffffff;
598
+                text-align: center;
599
+              }
600
+              .content-num {
601
+                flex: 1;
602
+                font-size: 12px;
603
+                font-family: PingFangSC-Regular, PingFang SC;
604
+                font-weight: 400;
605
+                color: rgba(0, 0, 0, 0.65);
606
+                text-align: center;
607
+              }
608
+            }
609
+          }
610
+        }
611
+      }
612
+    }
613
+    .common {
614
+      margin-top: 6px;
615
+      font-size: 13px;
616
+      font-family: PingFangSC-Regular, PingFang SC;
617
+      font-weight: 400;
618
+      color: #333333;
619
+      line-height: 18px;
620
+      .common-title {
621
+        color: #999999;
622
+      }
623
+    }
624
+    .consume-list {
625
+      margin-top: 6px;
626
+      .consume-title {
627
+        font-size: 13px;
628
+        font-family: PingFangSC-Regular, PingFang SC;
629
+        font-weight: 400;
630
+        color: #999999;
631
+        line-height: 18px;
632
+      }
633
+      .consume-info {
634
+        margin-top: 6px;
635
+        font-size: 10px;
636
+        font-family: PingFangSC-Regular, PingFang SC;
637
+        font-weight: 400;
638
+        color: #333333;
639
+        line-height: 14px;
640
+        display: flex;
641
+        justify-content: space-between;
642
+        .shop {
643
+        }
644
+        .project-tips {
645
+          flex: 1;
646
+          margin: 0 10px;
647
+        }
648
+        .project-ts {
649
+        }
650
+      }
651
+    }
652
+  }
653
+  .confirm {
654
+    background: #fa7d22;
655
+    border-radius: 14px;
656
+    position: absolute;
657
+    bottom: 42px;
658
+    left: 50%;
659
+    transform: translateX(-50%);
660
+    width: 176px;
661
+    height: 28px;
662
+    font-size: 14px;
663
+    font-family: PingFangSC-Medium, PingFang SC;
664
+    font-weight: 500;
665
+    color: #ffffff;
666
+    line-height: 28px;
667
+    text-align: center;
668
+  }
669
+}
457
 </style>
670
 </style>

+ 20 - 1
src/pages/historicalOrder/details/index.vue

@@ -91,6 +91,25 @@
91
           <div>¥{{order_data.original_price}}</div>
91
           <div>¥{{order_data.original_price}}</div>
92
         </div>
92
         </div>
93
         <div class="cost-coupon-list">
93
         <div class="cost-coupon-list">
94
+          <!-- 次卡 -->
95
+          <div class="coupon">
96
+            <div class="coupon-tips">
97
+              <div class="coupon-icon">
98
+                <img src="https://we-spa.oss-cn-shenzhen.aliyuncs.com/pad_clerk/icon/slices/couponIcon.png"
99
+                     alt />
100
+              </div>
101
+              <div class="coupon-title">次卡</div>
102
+              <div class="coupon-tip" v-if="coupon_list.length>0">已选择次卡</div>
103
+            </div>
104
+            <div class="on-icon">></div>
105
+          </div>
106
+          <div class="coupon-ps"
107
+               v-for="(item,index) in coupon_list"
108
+               :key="index">
109
+            <div>{{item.coupon_name}}</div>
110
+            <div class="cou-price">-¥{{item.price}}</div>
111
+          </div>
112
+          <!-- 优惠券 -->
94
           <div class="coupon">
113
           <div class="coupon">
95
             <div class="coupon-tips">
114
             <div class="coupon-tips">
96
               <div class="coupon-icon">
115
               <div class="coupon-icon">
@@ -98,7 +117,7 @@
98
                      alt />
117
                      alt />
99
               </div>
118
               </div>
100
               <div class="coupon-title">优惠卷</div>
119
               <div class="coupon-title">优惠卷</div>
101
-              <div class="coupon-tip">已选推荐优惠</div>
120
+              <div class="coupon-tip" v-if="coupon_list.length>0">已选推荐优惠</div>
102
             </div>
121
             </div>
103
             <div class="on-icon">></div>
122
             <div class="on-icon">></div>
104
           </div>
123
           </div>

+ 16 - 0
src/server/home.js

@@ -191,4 +191,20 @@ export default class Home {
191
   static getCardOrders (params) {
191
   static getCardOrders (params) {
192
     return $http.get(url.getCardOrders, params)
192
     return $http.get(url.getCardOrders, params)
193
   }
193
   }
194
+  // 次卡订单详情
195
+  static cardInfo (params) {
196
+    return $http.get(url.cardInfo, params)
197
+  }
198
+  // 次卡消耗详情
199
+  static cardLog (params) {
200
+    return $http.get(url.cardLog, params)
201
+  }
202
+  // 修改次数
203
+  static cardUpdate (params) {
204
+    return $http.post(url.cardUpdate, params)
205
+  }
206
+  // 获取项目可用的次卡
207
+  static getOrderCard (params) {
208
+    return $http.get(url.getOrderCard, params)
209
+  }
194
 }
210
 }

+ 9 - 1
src/server/urls.js

@@ -47,6 +47,14 @@ export default {
47
   timesAdd: '/v2/pad/scheme/times_add',
47
   timesAdd: '/v2/pad/scheme/times_add',
48
   //新增项目
48
   //新增项目
49
   addUpdate: '/v2/pad/scheme/update',
49
   addUpdate: '/v2/pad/scheme/update',
50
+  //次卡订单详情
51
+  cardInfo:'/v2/pad/card/info',
52
+  //消耗详情
53
+  cardLog:'/v2/pad/card/log',
54
+  //修改次数
55
+  cardUpdate:'/v2/pad/card/update',
56
+  //获取项目可用的次卡
57
+  getOrderCard:'/v2/pad/order/card',
50
 
58
 
51
   /**
59
   /**
52
    *  by ListKer
60
    *  by ListKer
@@ -116,5 +124,5 @@ export default {
116
   updateUserProfile: '/v2/pad/user/update',
124
   updateUserProfile: '/v2/pad/user/update',
117
 
125
 
118
   // 获取用户卡券订单
126
   // 获取用户卡券订单
119
-  getCardOrders: '/v2/pad/user/order/coupon'
127
+  getCardOrders: '/v2/pad/user/card'
120
 }
128
 }