|
|
@@ -0,0 +1,305 @@
|
|
|
+<template>
|
|
|
+ <view class="page">
|
|
|
+ <!-- 收货地址 -->
|
|
|
+ <view class="address">
|
|
|
+ <AddressCard :data="addressInfo" v-if="addressInfo.id"></AddressCard>
|
|
|
+ <view class="addbtn" v-else @click="selAddress()">
|
|
|
+ +选择地址
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="conbg">
|
|
|
+ <!-- 商品列表 -->
|
|
|
+ <view class="goods">
|
|
|
+ <SubmitGoodsCard v-for="(goods, index) in goodsList" :key="index" :data="goods" :showBorderBottom="index != goodsList.length - 1"></SubmitGoodsCard>
|
|
|
+ </view>
|
|
|
+ <!-- 优惠信息 -->
|
|
|
+ <SubmitDiscounts :data="priceInfo" :couponList="canUseCouponList" :usingCoupon="usingCoupon" @selCoupon="selCouponFun"></SubmitDiscounts>
|
|
|
+ <u-field v-model="remark" label="留言" placeholder="请输入您的留言"></u-field>
|
|
|
+ </view>
|
|
|
+ <!-- 提交订单 -->
|
|
|
+ <!-- {{priceInfo}} -->
|
|
|
+ <selCouponPopup :priceInfo="priceInfo" ref="selCouponPopupRef" @done="confirmSelCoupon"></selCouponPopup>
|
|
|
+
|
|
|
+ <!-- 底部按钮 -->
|
|
|
+ <SubmitOperate :data="priceInfo" @submitOrder="submitOrder"></SubmitOperate>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import SubmitDiscounts from '@/pages-mall/components/order/submit-discounts.vue';
|
|
|
+import SubmitGoodsCard from '@/pages-mall/components/order/submit-goods-card.vue';
|
|
|
+import SubmitOperate from '@/pages-mall/components/order/submit-operate.vue';
|
|
|
+import AddressCard from '@/pages/mine/components/address-card.vue';
|
|
|
+import selCouponPopup from '@/pages-mall/components/order/sel-coupon-popup.vue';
|
|
|
+
|
|
|
+var _self;
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ AddressCard,
|
|
|
+ SubmitDiscounts,
|
|
|
+ SubmitGoodsCard,
|
|
|
+ SubmitOperate,
|
|
|
+ selCouponPopup
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ orderType:'single',// cart,购物车订单 single 详情页直接下的订单
|
|
|
+ cartIds:'',//有的话代表是购物车订单,无 常规订单
|
|
|
+ expresstemplate:{},
|
|
|
+ priceInfo: {
|
|
|
+ countPrice:0,//商品总价
|
|
|
+ discount:0,//优惠券
|
|
|
+ freight:0,//运费
|
|
|
+ },
|
|
|
+ usingCoupon:{},//使用中的优惠券信息
|
|
|
+ // canUseCoupon:[], //可用优惠券
|
|
|
+ // notUseCoupon:[],//不可用优惠券
|
|
|
+ thisTimeNum:Date.now(),
|
|
|
+ remark:'',
|
|
|
+ addressInfo: {},
|
|
|
+ goodsList: [],
|
|
|
+ };
|
|
|
+ },
|
|
|
+ async onLoad(opt) {
|
|
|
+ _self = this;
|
|
|
+ if(!opt.orderInfo){
|
|
|
+ uni.navigateBack();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(opt.cartIds){
|
|
|
+ this.cartIds = opt.cartIds;
|
|
|
+ }
|
|
|
+ let orders = JSON.parse(decodeURIComponent(opt.orderInfo));
|
|
|
+ this.goodsList = [].concat(orders);
|
|
|
+
|
|
|
+ // 获取默认地址
|
|
|
+ await this.getDefaultAddress();
|
|
|
+ console.log('默认地址设置成功')
|
|
|
+ console.log('执行2222222')
|
|
|
+ // 是否有运费模板 express_type 运费类型
|
|
|
+ if(!this.baseConfig.express_type){
|
|
|
+ await this.getExpressInfo();
|
|
|
+ }
|
|
|
+ console.log('已经有运费模板了哦')
|
|
|
+ this.expressPipei();
|
|
|
+
|
|
|
+ this.comoutedPrice();
|
|
|
+ this.getUserCouponList();
|
|
|
+ },
|
|
|
+ onShow() {
|
|
|
+ uni.$once('addressInfo',function(data){
|
|
|
+ _self.addressInfo = data;
|
|
|
+ _self.expressPipei();
|
|
|
+ // TODO 下面执行刷新的方法
|
|
|
+ })
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ couponList() {
|
|
|
+ return this.$store.state.user.couponList;
|
|
|
+ },
|
|
|
+ canUseCouponList(){
|
|
|
+ // 是否可用优惠券
|
|
|
+ // this.priceInfo.countPrice status==2 未使用
|
|
|
+ let coupon = this.couponList.filter(item => item.status==2&&(item.min_amount<=this.priceInfo.countPrice));
|
|
|
+ return coupon;
|
|
|
+ },
|
|
|
+ // 运费模板
|
|
|
+ baseConfig() {
|
|
|
+ return this.$store.state.pub.baseConfig;
|
|
|
+ },
|
|
|
+ // 商品数量
|
|
|
+ goodsListCountNums(){
|
|
|
+ let nums = 0;
|
|
|
+ this.goodsList.forEach(e=>nums+=e.nums);
|
|
|
+ return nums;
|
|
|
+ },
|
|
|
+
|
|
|
+ },
|
|
|
+ methods:{
|
|
|
+ // 获取运费模板信息
|
|
|
+ async getExpressInfo(){
|
|
|
+ console.log('来获取运费模板信息了哦')
|
|
|
+ await this.$u.api.getBaseInfoAjax().then(({data})=>{
|
|
|
+ this.$store.commit('pub/commitBaseConfig',data);
|
|
|
+ console.log('运费模板信息获取成功')
|
|
|
+ }).catch(()=>{
|
|
|
+
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 邮费匹配
|
|
|
+ expressPipei(){
|
|
|
+ // extra_express_fee
|
|
|
+ if(!_self.addressInfo.id){
|
|
|
+ // 没有地址
|
|
|
+ console.log('没有地址')
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(!this.baseConfig.express_type){
|
|
|
+ // 没有邮费模板
|
|
|
+ console.log('没有邮费模板')
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const base_express_fee = Number(this.baseConfig.base_express_fee);
|
|
|
+ const extra_express_fee = Number(this.baseConfig.extra_express_fee);
|
|
|
+ if(this.baseConfig.express_type=='2'){
|
|
|
+ // 不包邮
|
|
|
+ console.log('不包邮>>>>本书',_self.goodsListCountNums);
|
|
|
+ this.priceInfo.freight = base_express_fee+extra_express_fee*(_self.goodsListCountNums-1);
|
|
|
+ console.log(this.priceInfo.freight);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(this.baseConfig.express_type=='3'){
|
|
|
+ // 全场满x包邮
|
|
|
+ console.log('全场满x包邮')
|
|
|
+ if(this.priceInfo.countPrice>=this.baseConfig.min_buy_amount){
|
|
|
+ // 价格满了,包邮
|
|
|
+ this.priceInfo.freight = 0;
|
|
|
+ }else{
|
|
|
+ this.priceInfo.freight = base_express_fee+extra_express_fee*(_self.goodsListCountNums-1);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(this.baseConfig.express_type=='4'){
|
|
|
+ // 全场满x包邮
|
|
|
+ console.log('全场满x包邮')
|
|
|
+ const codes = this.baseConfig.codes.split(',');
|
|
|
+ const ucodes = this.addressInfo.addressCode.split(',')[0];
|
|
|
+ console.log(codes,ucodes);
|
|
|
+ if(codes.includes(ucodes)){
|
|
|
+ // 片段是否偏远地区
|
|
|
+ this.priceInfo.freight = base_express_fee+extra_express_fee*(_self.goodsListCountNums-1);
|
|
|
+ }else if(this.priceInfo.countPrice>=this.baseConfig.min_buy_amount){
|
|
|
+ this.priceInfo.freight = 0;
|
|
|
+ }else{
|
|
|
+ this.priceInfo.freight = base_express_fee+extra_express_fee*(_self.goodsListCountNums-1);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 选择地址
|
|
|
+ selAddress(){
|
|
|
+ uni.navigateTo({
|
|
|
+ url: '/pages-mine/pages/address/list?isSelect=true&isBack=true'
|
|
|
+ });
|
|
|
+ },
|
|
|
+ async getDefaultAddress(){
|
|
|
+ console.log('执行11111111111')
|
|
|
+ await this.$u.api.getDefaultAddressAjax().then(({data})=>{
|
|
|
+ if(!data) return
|
|
|
+ this.addressInfo = {
|
|
|
+ ...data,
|
|
|
+ address:data.province+data.city+data.area,
|
|
|
+ detail_address:data.province+data.city+data.area+data.street,
|
|
|
+ };
|
|
|
+
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 计算总价
|
|
|
+ comoutedPrice(){
|
|
|
+ let price = 0;
|
|
|
+ this.goodsList.map(item => {
|
|
|
+ price += Number(item.selectdSku.price_selling) * item.nums
|
|
|
+ });
|
|
|
+ this.priceInfo.countPrice = parseFloat(price).toFixed(2);
|
|
|
+ },
|
|
|
+
|
|
|
+ // 选择优惠券
|
|
|
+ selCouponFun(){
|
|
|
+ this.$refs.selCouponPopupRef.showPopup({couponList:this.couponList,usingCoupon:this.usingCoupon})
|
|
|
+ },
|
|
|
+ // 确认选择
|
|
|
+ confirmSelCoupon(e){
|
|
|
+ console.log('使用中,,',e);
|
|
|
+ this.usingCoupon = e;
|
|
|
+ this.priceInfo.discount = e.amount||0;
|
|
|
+ // this.$forceUpdate();
|
|
|
+ },
|
|
|
+ // 提交订单
|
|
|
+ submitOrder(){
|
|
|
+ if(!this.addressInfo?.id){
|
|
|
+ this.$u.toast('请选择收货地址');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(this.cartIds){
|
|
|
+ // 购物车订单
|
|
|
+ this.submitCartGoods();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 常规订单
|
|
|
+ this.submitGoods();
|
|
|
+ },
|
|
|
+ // 提交购物车商品
|
|
|
+ submitCartGoods(){
|
|
|
+ let json = {
|
|
|
+ address_id:this.addressInfo.id,
|
|
|
+ cart_ids:this.cartIds,
|
|
|
+ remark: this.remark,
|
|
|
+ user_coupon_id:this.usingCoupon.id,
|
|
|
+ }
|
|
|
+ this.$u.api.submitCartOrderAjax(json).then(({code,data})=>{
|
|
|
+ if(code==1){
|
|
|
+ console.log(data);
|
|
|
+ uni.redirectTo({
|
|
|
+ url: '/pages-mall/pages/order/pay?orderInfo='+encodeURIComponent(JSON.stringify(data))
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 直接购买单个商品
|
|
|
+ submitGoods(){
|
|
|
+ const info = this.goodsList[0];
|
|
|
+ let json = {
|
|
|
+ goods_id: info.id,
|
|
|
+ nums: info.nums,
|
|
|
+ address_id: this.addressInfo.id,
|
|
|
+ pay_type: 'wx_miniapp',
|
|
|
+ sku_id: info.selectdSku.id,
|
|
|
+ remark: this.remark,
|
|
|
+ user_coupon_id:this.usingCoupon.id,
|
|
|
+ };
|
|
|
+ this.$u.api.submitOrderAjax(json).then(({code,data})=>{
|
|
|
+ if(code==1){
|
|
|
+ console.log(data);
|
|
|
+ uni.redirectTo({
|
|
|
+ url: '/pages-mall/pages/order/pay?orderInfo='+encodeURIComponent(JSON.stringify(data))
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getUserCouponList(){
|
|
|
+ if(this.loading)return false;
|
|
|
+ this.$u.api.getUserCouponListAjax(1).then(({code,data})=>{
|
|
|
+ // this.discountsList = data.data;
|
|
|
+ this.$store.commit('user/commitCouponList',data.data);
|
|
|
+ }).catch(()=>{
|
|
|
+ // this.$store.commit('user/commitCouponList');
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+<style lang="scss" scoped>
|
|
|
+.page {
|
|
|
+ padding-top: 1rpx;
|
|
|
+ padding-bottom: 140rpx;
|
|
|
+}
|
|
|
+.address{
|
|
|
+ margin: 20rpx 0;
|
|
|
+ padding: 0 30rpx;
|
|
|
+ background-color: $app-theme-bg-color;
|
|
|
+}
|
|
|
+.goods {
|
|
|
+ // background-color: $app-theme-bg-color;
|
|
|
+ padding: 0 30rpx;
|
|
|
+}
|
|
|
+.conbg{
|
|
|
+ background-color: #fff;
|
|
|
+}
|
|
|
+.addbtn{
|
|
|
+ padding: 25rpx;
|
|
|
+ font-size: 36rpx;
|
|
|
+ color: $app-theme-color;
|
|
|
+ background-color: #fff;
|
|
|
+}
|
|
|
+</style>
|