| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- <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>
|