566 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			566 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Vue
		
	
	
	
<template>
 | 
						||
  <view class="content">
 | 
						||
    <view class="index_header"> </view>
 | 
						||
    <view class="context">
 | 
						||
      <u-form
 | 
						||
        :model="form"
 | 
						||
        labelAlign="right"
 | 
						||
        labelWidth="75"
 | 
						||
        :rules="rules"
 | 
						||
        ref="uForm"
 | 
						||
      >
 | 
						||
        <view class="kuang">
 | 
						||
          <u-form-item :label="'发货方式'">
 | 
						||
            <view class="pickerHui">
 | 
						||
              <u-input
 | 
						||
                v-model="form.deliveryName"
 | 
						||
                disabled
 | 
						||
                :placeholder="'请选择发货方式'"
 | 
						||
                border="none"
 | 
						||
              ></u-input>
 | 
						||
              <u-icon name="arrow-down"></u-icon>
 | 
						||
            </view>
 | 
						||
          </u-form-item>
 | 
						||
        </view>
 | 
						||
 | 
						||
        <view class="kuang">
 | 
						||
          <view class="disFlex tit_t">
 | 
						||
            <view>{{ '收货人信息' }}</view>
 | 
						||
            <!-- <view class="lan" @click="addAdress">新增收货人地址</view> -->
 | 
						||
          </view>
 | 
						||
          <u-form-item :label="'收货人'" prop="recName">
 | 
						||
            <u-input
 | 
						||
              v-model.trim="form.recName"
 | 
						||
              :placeholder="'请输入收货人'"
 | 
						||
            />
 | 
						||
          </u-form-item>
 | 
						||
          <u-form-item :label="'收货电话'" prop="recPhone">
 | 
						||
            <u-input
 | 
						||
              v-model.trim="form.recPhone"
 | 
						||
              maxlength="20"
 | 
						||
              type="number"
 | 
						||
              :placeholder="'请输入收货电话'"
 | 
						||
            />
 | 
						||
          </u-form-item>
 | 
						||
          <u-form-item :label="'收货地址'" prop="diqu" @click="getDiqu">
 | 
						||
            <view class="picker">
 | 
						||
              <u-input
 | 
						||
                v-model.trim="form.diqu"
 | 
						||
                :placeholder="'请选收货地址'"
 | 
						||
                border="none"
 | 
						||
              ></u-input>
 | 
						||
              <u-icon name="arrow-down"></u-icon>
 | 
						||
            </view>
 | 
						||
          </u-form-item>
 | 
						||
          <u-form-item :label="'详细地址'" prop="recAddress">
 | 
						||
            <u--textarea
 | 
						||
              v-model.trim="form.recAddress"
 | 
						||
              maxlength="200"
 | 
						||
              :placeholder="'请输入详细地址'"
 | 
						||
            ></u--textarea>
 | 
						||
          </u-form-item>
 | 
						||
          <u-form-item :label="'邮费'">
 | 
						||
            <u-input disabled v-model="form.postage" />
 | 
						||
          </u-form-item>
 | 
						||
          <u-form-item :label="'备注'">
 | 
						||
            <u--textarea
 | 
						||
              v-model="form.remark"
 | 
						||
              :placeholder="'请输入备注'"
 | 
						||
            ></u--textarea>
 | 
						||
          </u-form-item>
 | 
						||
        </view>
 | 
						||
      </u-form>
 | 
						||
      <view class="kuang" v-for="item in goodList">
 | 
						||
        <view class="kuang_t">
 | 
						||
          <view class="kuang_tl">
 | 
						||
            <view class="sTit">{{ '商品主图' }}</view>
 | 
						||
            <img :src="item.cover" alt="" />
 | 
						||
            <view class="sTit">{{ '商品名称' }}</view>
 | 
						||
            <view class="cTit">{{ item.productName }}</view>
 | 
						||
          </view>
 | 
						||
          <view class="kuang_tr">
 | 
						||
            <view class="sTit">{{ '产品' }}</view>
 | 
						||
            <view v-for="(ctem, index) in item.waresSkuList" :key="index">
 | 
						||
              <view class="cTit">{{ ctem.specValueNames }} </view>
 | 
						||
            </view>
 | 
						||
          </view>
 | 
						||
        </view>
 | 
						||
        <view class="kuang_t">
 | 
						||
          <view class="kuang_tl">
 | 
						||
            <view class="sTit">{{ '商品业绩' }}(¥)</view>
 | 
						||
            <view class="cTit">{{ item.waresPrice | numberToCurrency }}</view>
 | 
						||
          </view>
 | 
						||
          <view class="kuang_tr">
 | 
						||
            <view class="sTit">{{ '商品业绩' }}</view>
 | 
						||
            <view class="cTit">{{ item.pv | numberToCurrency }}</view>
 | 
						||
          </view>
 | 
						||
        </view>
 | 
						||
        <!-- <view class="kuang_t">
 | 
						||
          <view class="kuang_tl">
 | 
						||
            <view class="sTit">{{'商品数量'}}</view>
 | 
						||
            <u-number-box :min="1"
 | 
						||
                          v-model="goodsNum"
 | 
						||
                          @change="valChange"></u-number-box>
 | 
						||
          </view>
 | 
						||
          <view></view>
 | 
						||
        </view> -->
 | 
						||
      </view>
 | 
						||
      <view class="kuang">
 | 
						||
        <view class="disFlex just">
 | 
						||
          <view>{{ '商品金额总计' }}(¥):</view>
 | 
						||
          <view>{{ allDataObj.price | numberToCurrency }}</view>
 | 
						||
        </view>
 | 
						||
        <view class="disFlex just">
 | 
						||
          <view>{{ '商品业绩总计' }}:</view>
 | 
						||
          <view>{{ allDataObj.pv | numberToCurrency }}</view>
 | 
						||
        </view>
 | 
						||
        <view class="disFlex just">
 | 
						||
          <view>{{ '邮费' }}:</view>
 | 
						||
          <view>{{ form.postage | numberToCurrency }}</view>
 | 
						||
        </view>
 | 
						||
      </view>
 | 
						||
      <view class="kuang disFlex">
 | 
						||
        <u-checkbox-group v-model="checkboxValue1" @change="checkboxChange">
 | 
						||
          <u-checkbox :name="1"> </u-checkbox>
 | 
						||
        </u-checkbox-group>
 | 
						||
        <view class="tit3">{{ '请阅读并同意' }}</view>
 | 
						||
        <view class="tit2" @click="toAgree"> 《{{ '购买协议' }}》</view>
 | 
						||
      </view>
 | 
						||
    </view>
 | 
						||
    <!-- 占空 -->
 | 
						||
    <view style="height: 150rpx"></view>
 | 
						||
    <!-- 底部 -->
 | 
						||
    <view class="footer_f">
 | 
						||
      <view class="footer">
 | 
						||
        <view class="footer_l">
 | 
						||
          <view class="disFlex">
 | 
						||
            <view class="h1">{{ '总价' }}</view>
 | 
						||
            <view class="r1">¥{{ totalMont | numberToCurrency }}</view>
 | 
						||
          </view>
 | 
						||
          <view class="disFlex">
 | 
						||
            <view class="h1">{{ '业绩' }}</view>
 | 
						||
            <view class="l1">¥{{ achiveAmount | numberToCurrency }}</view>
 | 
						||
          </view>
 | 
						||
        </view>
 | 
						||
        <view class="footer_r">
 | 
						||
          <u-button
 | 
						||
            type="success"
 | 
						||
            class="uBtn"
 | 
						||
            shape="circle"
 | 
						||
            :loading="isLoading"
 | 
						||
            :loadingText="'购买中'"
 | 
						||
            @tap="goBuy"
 | 
						||
            color="linear-gradient(to right, #005BAC, #005BAC )"
 | 
						||
            >{{ '立即购买' }}
 | 
						||
          </u-button>
 | 
						||
        </view>
 | 
						||
      </view>
 | 
						||
    </view>
 | 
						||
    <agreement ref="agreement"></agreement>
 | 
						||
    <v-address
 | 
						||
      ref="address"
 | 
						||
      :defaultCode="defaultCode"
 | 
						||
      @addressData="addressData"
 | 
						||
    ></v-address>
 | 
						||
  </view>
 | 
						||
</template>
 | 
						||
 | 
						||
<script>
 | 
						||
import address from '@/components/address.vue'
 | 
						||
import * as api from '@/config/goods'
 | 
						||
import agreement from '@/components/agreement.vue'
 | 
						||
export default {
 | 
						||
  components: {
 | 
						||
    'v-address': address,
 | 
						||
    agreement,
 | 
						||
  },
 | 
						||
  data() {
 | 
						||
    return {
 | 
						||
      postList: [],
 | 
						||
      allGoodsData: {},
 | 
						||
      allDataObj: {},
 | 
						||
      goodList: [],
 | 
						||
      defaultCode: [],
 | 
						||
      specialArea: 21,
 | 
						||
      form: {
 | 
						||
        deliveryName: '快递发货',
 | 
						||
        deliveryWay: 1,
 | 
						||
        postage: 0,
 | 
						||
        transType: 1,
 | 
						||
      },
 | 
						||
      deliList: [],
 | 
						||
      diqu: '',
 | 
						||
      allData: [],
 | 
						||
      goodsNum: 1,
 | 
						||
      checkboxValue1: [],
 | 
						||
      priceAmount: 0, //商品总价
 | 
						||
      achiveAmount: 0, //总业绩
 | 
						||
      totalMont: 0,
 | 
						||
      orderItemsParams: [],
 | 
						||
      isLoading: false,
 | 
						||
      hasChecked: '',
 | 
						||
      rules: {
 | 
						||
        recName: [
 | 
						||
          {
 | 
						||
            required: true,
 | 
						||
            message: '请输入收货人',
 | 
						||
            trigger: ['change', 'blur'],
 | 
						||
          },
 | 
						||
        ],
 | 
						||
        recPhone: [
 | 
						||
          {
 | 
						||
            required: true,
 | 
						||
            message: '请输入收货电话',
 | 
						||
            trigger: ['change', 'blur'],
 | 
						||
          },
 | 
						||
        ],
 | 
						||
        diqu: [
 | 
						||
          {
 | 
						||
            required: true,
 | 
						||
            message: '请选择收货地址',
 | 
						||
            trigger: ['change', 'blur'],
 | 
						||
          },
 | 
						||
        ],
 | 
						||
        recAddress: [
 | 
						||
          {
 | 
						||
            required: true,
 | 
						||
            message: '请输入详细地址',
 | 
						||
            trigger: ['change', 'blur'],
 | 
						||
          },
 | 
						||
        ],
 | 
						||
      },
 | 
						||
    }
 | 
						||
  },
 | 
						||
  onLoad(options) {
 | 
						||
    // this.allData = JSON.parse(options.allData)
 | 
						||
    // this.hasChecked = options.hasChecked
 | 
						||
 | 
						||
    this.allData = JSON.parse(options.allData)
 | 
						||
    console.log(
 | 
						||
      '%c [ this.allData ]-248',
 | 
						||
      'font-size:13px; background:#5a9c24; color:#9ee068;',
 | 
						||
      this.allData
 | 
						||
    )
 | 
						||
    let confirmOrderWaresInfoParamsList = []
 | 
						||
    this.hasChecked = options.hasChecked || ''
 | 
						||
    this.allData.forEach(item => {
 | 
						||
      item.waresSkuList.forEach(ctem => {
 | 
						||
        confirmOrderWaresInfoParamsList.push({
 | 
						||
          pkTWares: ctem.pkTWares,
 | 
						||
          pkTWaresSku: ctem.pkTWaresSku || ctem.pkThWaresSku,
 | 
						||
          quantity: item.quantity,
 | 
						||
          source: item.source,
 | 
						||
        })
 | 
						||
      })
 | 
						||
    })
 | 
						||
    // 获取购物车详情
 | 
						||
    this.getCatDetail(confirmOrderWaresInfoParamsList)
 | 
						||
    this.getGenerate()
 | 
						||
    this.valChange({ value: 1 })
 | 
						||
  },
 | 
						||
  onShow() {},
 | 
						||
  methods: {
 | 
						||
    getCatDetail(confirmOrderWaresInfoParamsList) {
 | 
						||
      api
 | 
						||
        .waresinfo({
 | 
						||
          confirmOrderWaresInfoParamsList: confirmOrderWaresInfoParamsList,
 | 
						||
        })
 | 
						||
        .then(res => {
 | 
						||
          this.goodList = res.data
 | 
						||
          let price = 0
 | 
						||
          let pv = 0
 | 
						||
          this.goodList.forEach(item => {
 | 
						||
            item.waresItemsParamList = []
 | 
						||
            price += Number(item.priceAmount)
 | 
						||
            pv += Number(item.pv)
 | 
						||
            item.waresSkuList.forEach(ctem => {
 | 
						||
              item.waresItemsParamList.push({
 | 
						||
                pkWaresSpecsSku: ctem.pkId,
 | 
						||
              })
 | 
						||
            })
 | 
						||
          })
 | 
						||
          this.allDataObj.price = price
 | 
						||
          this.allDataObj.pv = pv
 | 
						||
          this.totalMont = price
 | 
						||
          this.achiveAmount = pv
 | 
						||
          this.totalAmont = this.allDataObj.price
 | 
						||
          let arr = []
 | 
						||
          this.goodList.forEach(item => {
 | 
						||
            arr.push({
 | 
						||
              channel: item.source,
 | 
						||
              pkId: item.pkId,
 | 
						||
              quantity: item.quantity,
 | 
						||
              waresItemsParamList: item.waresItemsParamList,
 | 
						||
            })
 | 
						||
          })
 | 
						||
          this.postList = arr
 | 
						||
          this.allGoodsData.specialArea = 21
 | 
						||
        })
 | 
						||
    },
 | 
						||
    addAdress() {
 | 
						||
      uni.navigateTo({
 | 
						||
        url: '/pages/address/index',
 | 
						||
      })
 | 
						||
    },
 | 
						||
    toAgree() {
 | 
						||
      // agreeMent
 | 
						||
      this.$refs.agreement.openDig()
 | 
						||
    },
 | 
						||
    getGenerate() {
 | 
						||
      api.generate().then(res => {
 | 
						||
        uni.setStorageSync('mToken', res.msg)
 | 
						||
      })
 | 
						||
    },
 | 
						||
    goBuy() {
 | 
						||
      if (this.checkboxValue1.length == 0) {
 | 
						||
        uni.showToast({
 | 
						||
          title: '请阅读并同意购买协议',
 | 
						||
          icon: 'none',
 | 
						||
          duration: 1500,
 | 
						||
        })
 | 
						||
        return
 | 
						||
      }
 | 
						||
      this.$refs.uForm.validate().then(res => {
 | 
						||
        this.isLoading = true
 | 
						||
        api
 | 
						||
          .confirmShareOrder(
 | 
						||
            Object.assign({}, this.form, {
 | 
						||
              orderItemsParams: this.postList,
 | 
						||
              specialArea: 21,
 | 
						||
            })
 | 
						||
          )
 | 
						||
          .then(res => {
 | 
						||
            this.isLoading = false
 | 
						||
            if (res.code == 200) {
 | 
						||
              uni.navigateTo({
 | 
						||
                url:
 | 
						||
                  '/pages/pay/index?paramsPost=' +
 | 
						||
                  JSON.stringify(res.data) +
 | 
						||
                  '&businessType=1',
 | 
						||
              })
 | 
						||
            }
 | 
						||
          })
 | 
						||
      })
 | 
						||
    },
 | 
						||
    setGoodlistType() {
 | 
						||
      let carList = {
 | 
						||
        channel: this.allData.source,
 | 
						||
        pkId: this.allData.pkId,
 | 
						||
        quantity: this.goodsNum,
 | 
						||
        waresItemsParamList: [
 | 
						||
          {
 | 
						||
            pkWaresSpecsSku: this.hasChecked,
 | 
						||
          },
 | 
						||
        ],
 | 
						||
      }
 | 
						||
      this.orderItemsParams = [carList]
 | 
						||
    },
 | 
						||
    checkboxChange() {},
 | 
						||
    valChange(e) {
 | 
						||
      this.goodsNum = e.value
 | 
						||
      this.priceAmount = this.allData.waresPrice * this.goodsNum
 | 
						||
      this.achiveAmount = this.allData.waresAchieve * this.goodsNum
 | 
						||
      this.totalMont = this.priceAmount.toFixed(3)
 | 
						||
      this.setGoodlistType()
 | 
						||
      if (this.form.recProvince) {
 | 
						||
        this.queryAdressPostage()
 | 
						||
      }
 | 
						||
    },
 | 
						||
    getDiqu() {
 | 
						||
      this.$refs.address.setShow()
 | 
						||
    },
 | 
						||
    confirmPopup() {},
 | 
						||
    queryAdressPostage() {
 | 
						||
      api
 | 
						||
        .queryAdressPostage(
 | 
						||
          Object.assign({}, this.form, {
 | 
						||
            orderItemsParams: this.postList,
 | 
						||
          })
 | 
						||
        )
 | 
						||
        .then(res => {
 | 
						||
          this.form.postage = Number(res.data.postage).toFixed(2)
 | 
						||
          this.totalMont =
 | 
						||
            parseFloat(this.allDataObj.price) + parseFloat(res.data.postage)
 | 
						||
          this.totalMont = this.totalMont.toFixed(3)
 | 
						||
        })
 | 
						||
    },
 | 
						||
    addressData(diqu, obj) {
 | 
						||
      this.form.diqu = diqu
 | 
						||
      this.form.recProvince = obj.province
 | 
						||
      this.form.recCity = obj.city
 | 
						||
      this.form.recCounty = obj.county
 | 
						||
      this.$forceUpdate()
 | 
						||
      this.setGoodlistType()
 | 
						||
      this.queryAdressPostage()
 | 
						||
    },
 | 
						||
  },
 | 
						||
}
 | 
						||
</script>
 | 
						||
 | 
						||
<style lang="scss" scoped>
 | 
						||
.content {
 | 
						||
  background: #f9f9f9;
 | 
						||
}
 | 
						||
.index_header {
 | 
						||
  background: #f9f9f9;
 | 
						||
  height: 330rpx;
 | 
						||
}
 | 
						||
.context {
 | 
						||
  position: relative;
 | 
						||
  padding: 24rpx;
 | 
						||
  margin-top: -360rpx;
 | 
						||
}
 | 
						||
.disFlex {
 | 
						||
  display: flex;
 | 
						||
  align-items: center;
 | 
						||
}
 | 
						||
.just {
 | 
						||
  justify-content: space-between;
 | 
						||
  font-size: 12px;
 | 
						||
  font-family:
 | 
						||
    PingFang SC-Medium,
 | 
						||
    PingFang SC;
 | 
						||
  font-weight: 500;
 | 
						||
  color: #333333;
 | 
						||
  margin-bottom: 10rpx;
 | 
						||
}
 | 
						||
.kuang {
 | 
						||
  margin-top: 20rpx;
 | 
						||
  padding: 20rpx 40rpx;
 | 
						||
  background: #fff;
 | 
						||
  box-shadow: 0px 2px 10px 0px rgba(204, 204, 204, 0.5);
 | 
						||
  border-radius: 10px 10px 10px 10px;
 | 
						||
  .tit_t {
 | 
						||
    justify-content: space-between;
 | 
						||
    font-size: 14px;
 | 
						||
    font-family:
 | 
						||
      PingFang SC-Semibold,
 | 
						||
      PingFang SC;
 | 
						||
    font-weight: 600;
 | 
						||
    color: #333333;
 | 
						||
  }
 | 
						||
  .lan {
 | 
						||
    font-size: 10px;
 | 
						||
    font-family:
 | 
						||
      PingFang SC-Regular,
 | 
						||
      PingFang SC;
 | 
						||
    font-weight: 400;
 | 
						||
    color: #289fff;
 | 
						||
  }
 | 
						||
}
 | 
						||
.picker {
 | 
						||
  display: flex;
 | 
						||
  justify-content: space-between;
 | 
						||
  width: 100%;
 | 
						||
  border-width: 0.5px !important;
 | 
						||
  border-color: #dadbde !important;
 | 
						||
  border-style: solid;
 | 
						||
  border-radius: 4px;
 | 
						||
  padding: 6px 9px;
 | 
						||
}
 | 
						||
.pickerHui {
 | 
						||
  display: flex;
 | 
						||
  justify-content: space-between;
 | 
						||
  width: 100%;
 | 
						||
  border-width: 0.5px !important;
 | 
						||
  border-color: #dadbde !important;
 | 
						||
  border-style: solid;
 | 
						||
  border-radius: 4px;
 | 
						||
  padding: 6px 9px;
 | 
						||
  background: #f5f7fa;
 | 
						||
}
 | 
						||
.kuang_t {
 | 
						||
  display: flex;
 | 
						||
  .kuang_tl {
 | 
						||
    flex: 1;
 | 
						||
    img {
 | 
						||
      width: 40px;
 | 
						||
      height: 40px;
 | 
						||
      border-radius: 6px 6px 6px 6px;
 | 
						||
    }
 | 
						||
  }
 | 
						||
  .kuang_tr {
 | 
						||
    flex: 1;
 | 
						||
  }
 | 
						||
}
 | 
						||
.sTit {
 | 
						||
  font-size: 12px;
 | 
						||
  font-family:
 | 
						||
    PingFang SC-Medium,
 | 
						||
    PingFang SC;
 | 
						||
  font-weight: 500;
 | 
						||
  color: #999999;
 | 
						||
  margin: 14rpx 0;
 | 
						||
}
 | 
						||
.cTit {
 | 
						||
  font-size: 13px;
 | 
						||
  font-family:
 | 
						||
    PingFang SC-Medium,
 | 
						||
    PingFang SC;
 | 
						||
  font-weight: 500;
 | 
						||
  color: #333333;
 | 
						||
 | 
						||
  margin-bottom: 14rpx;
 | 
						||
}
 | 
						||
.footer_f {
 | 
						||
  position: fixed;
 | 
						||
  bottom: 0;
 | 
						||
  width: 100%;
 | 
						||
  z-index: 10;
 | 
						||
  box-shadow: 0px -2px 20px 0px rgba(204, 204, 204, 0.5);
 | 
						||
}
 | 
						||
.footer {
 | 
						||
  display: flex;
 | 
						||
  justify-content: space-between;
 | 
						||
  padding: 20rpx 24rpx 40rpx 20rpx;
 | 
						||
  background: #fff;
 | 
						||
  .footer_l {
 | 
						||
  }
 | 
						||
  .footer_r {
 | 
						||
    // flex: 1;
 | 
						||
    display: flex;
 | 
						||
    align-items: center;
 | 
						||
    font-size: 20rpx;
 | 
						||
    font-weight: 500;
 | 
						||
    color: #333333;
 | 
						||
  }
 | 
						||
}
 | 
						||
.h1 {
 | 
						||
  font-size: 10px;
 | 
						||
  font-family:
 | 
						||
    PingFang SC-Medium,
 | 
						||
    PingFang SC;
 | 
						||
  font-weight: 500;
 | 
						||
  color: #333333;
 | 
						||
  margin-right: 20rpx;
 | 
						||
}
 | 
						||
.r1 {
 | 
						||
  font-size: 18px;
 | 
						||
  font-family:
 | 
						||
    PingFang SC-Semibold,
 | 
						||
    PingFang SC;
 | 
						||
  font-weight: 600;
 | 
						||
  color: #ed4623;
 | 
						||
}
 | 
						||
.l1 {
 | 
						||
  font-size: 16px;
 | 
						||
  font-family:
 | 
						||
    PingFang SC-Semibold,
 | 
						||
    PingFang SC;
 | 
						||
  font-weight: 600;
 | 
						||
  color: #384a8a;
 | 
						||
}
 | 
						||
.tit2 {
 | 
						||
  font-size: 26rpx;
 | 
						||
  font-family: Source Han Sans CN;
 | 
						||
  font-weight: bold;
 | 
						||
  color: #005bac;
 | 
						||
}
 | 
						||
.tit3 {
 | 
						||
  font-size: 26rpx;
 | 
						||
  font-family: Source Han Sans CN;
 | 
						||
  font-weight: 400;
 | 
						||
  color: #333;
 | 
						||
}
 | 
						||
</style>
 |