You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

305 lines
8.4 KiB

<template>
<view style="display: flex;flex-direction: column; height: 100vh;box-sizing: border-box; background-color: #fff;"
id="page">
<view class="top">
<NavBar ref="nav" navTitle="详情" :showIcon="true" :start-change-height="page.startHeight"
:end-change-height="page.endHeight">
</NavBar>
</view>
<view
style="margin-top: -15vh; background-color: #fff;height: 20vh;border-top-left-radius: 25px;border-top-right-radius: 25px;">
<loading-state ref="pageView" @request="request">
<view style="display: flex;flex-direction: column;
margin:20px 10px 0px 20px;padding-bottom:10px; border-bottom: 2px #EFEFEF solid;">
<view
style="display: flex;flex-direction: row;align-items: center; justify-content: space-between;">
<view style="display: flex;flex-direction: row;align-items: center;">
<view style="background: #FF9900; border-radius: 50%;width: 12px;height: 12px;"></view>
<view style="background: #FFCC7F; border-radius: 50%;width: 12px;height: 12px;"></view>
<text
style="margin-left: 8px;font-size: 16px;color: #FF9900;font-weight: 600;font-family: sans-serif;">自选组合</text>
</view>
<view style="display: flex;flex-direction: row;align-items: center;margin-right: 10px;">
<view style="color: #888;font-size: 12px;">定制</view>
<input type="number" @input="numbers" v-model="page.number" maxlength="3"
style="font-size: 12px; border: 1px #AEAEAE solid;border-radius: 5px;text-align: center; width: 25px;margin-left: 5px;margin-right: 5px;padding-left: 3px;padding-right: 3px;" />
<view style="color: #888;font-size: 12px;">个菜窖</view>
</view>
</view>
</view>
<view v-for="(item,index) in data" :key="index" @click="itemClick(item.goodsSid)"
style="display: flex;flex-direction: column;margin-top: 14px;">
<view :style="{'border-bottom':(index===data.length-1 ? 'none':'1px #EFEFEF solid')}" style="display: flex;flex-direction: column;
margin-left: 20px;margin-right: 20px;padding-bottom: 10px;">
<view
style=" display: flex;flex-direction: row;align-items: center; margin-right: 10px;margin-top: 5px; margin-left: 10px;">
<image :src='item.iconUrl' style="width: 70px;height: 70px;" mode="aspectFit"></image>
<view style="display: flex;flex-direction: column;margin-left: 20px;width: 100%;">
<view style="display: flex;flex-direction: row;align-items: center;">
<text
style="flex: 1;margin-right: 10px;color: #000;font-size: 14px;">{{item.name}}</text>
<uni-number-box ref="box" :showTextView="true" background="#fff"
v-model="item.goodsNumber" @change="numberChange($event,item)"></uni-number-box>
</view>
<text
style="color: #AEAEAE;font-size: 14px;margin-top: 5px;line-height: 20px;">{{item.remark}}</text>
<view
style="display: flex;flex-direction: row;justify-content:space-between;margin-top: 5px;">
<view style="display: flex;flex-direction: row;height: 20px;align-items: center;">
<text style="border: 1px #EE752F solid; border-radius: 10px; color:#EE752F ; font-size: 10px;
margin-right: 20px;padding: 0px 5px;">{{convertPrice(item.jprice)}}元/{{item.specificationUnit}}</text>
<text
style="border: 1px #EE752F solid; border-radius: 10px; color: #EE752F;font-size: 10px;;padding: 0px 5px;">{{item.weight}}斤/{{item.unitName}}</text>
</view>
<text style="color: #FF5006;font-size: 15px;">¥{{convertPrice(item.price)}}</text>
</view>
</view>
</view>
</view>
</view>
<view style="height: 200px;background: #fff; "></view>
<view style="background-color: #fff;position: fixed;bottom: 0;overflow:hidden;
display: flex;flex-direction: column; width: 100%;flex-shrink: 1;">
<view
style="display: flex;flex-direction: row;align-items: center; border-bottom: 1px #F0F0F0 solid;padding-top: 5px; padding-bottom: 5px;padding-left: 20px;">
<view style="color: #888;font-size: 10px;">温馨提示:已定制了</view>
<view style="color: #FF5006;font-size: 15px;">{{page.weight}}斤</view>
<view style="color: #888;font-size: 10px;">,满200斤可定制云菜窖</view>
</view>
<view
style="display: flex;flex-direction: row;align-items: center; margin-top: 5px; padding: 10px 20px; width: 100%;">
<view style="flex: 1; display: flex;flex-direction: row;align-items: center; ;
justify-content: space-between;">
<view style="display: flex;flex-direction: row;align-items: center;">
<text style="color: #888;font-size: 14px;">合计:</text>
<text style="color: #F0752F;font-size: 18px;">{{convertPrice(page.price)}}元</text>
</view>
</view>
<text
style="background: #EE752F; text-align: center; color: #fff; border-radius: 5px;padding: 5px 20px; margin-right: 40px; "
@click="settlement()">结算</text>
</view>
</view>
</loading-state>
</view>
</view>
</template>
<script>
//引入bus
import bus from '@/common/bus';
export default {
data() {
return {
page: {
sid: '',
name: "",
price: "",
startHeight: 0,
endHeight: 0,
number: "1",
weight: "--",
},
data: []
}
},
onPageScroll(res) {
// 渐变
this.$refs.nav.defaultColorBgAlpha(res)
},
onLoad(options) {
let info = uni.getSystemInfoSync();
this.page.startHeight = info.windowWidth * 0.6
this.page.endHeight = info.windowWidth * 0.8
this.request()
uni.$on("pay", (e) => {
uni.switchTab({
url: '/pages/home/pickUpCard'
})
})
},
onUnload() {
uni.$off('pay');
},
methods: {
itemClick(goodsSid) {
uni.navigateTo({
url: '/pages/good/goodsDetail?sid=' + goodsSid
})
},
numberChange(event, item) {
console.log("event", event)
console.log("item", item)
this.getallPrice()
this.getweight()
this.getPrice(item)
},
request() {
let _this = this
_this.$api.getAllGiftBag().then((resp) => {
_this.data = resp
this.getallPrice()
this.getweight()
_this.$nextTick(() => {
_this.$refs.pageView.setLoadState(2)
})
}).catch(e => {
_this.$nextTick(() => {
_this.$refs.pageView.setLoadState(1)
})
})
},
numbers(event) {
this.page.number = event.target.value
this.getallPrice()
this.getweight()
},
getallPrice() {
let num = 0;
for (var i = 0; i < this.data.length; i++) {
num += Number(this.data[i].jprice) * Number(this.data[i].goodsNumber) * Number(this.data[i].weight);
}
console.log("num", num)
this.page.price = Number(num * this.page.number).toFixed(2)
},
getPrice(item) {
if (item.goodsNumber > 0)
item.price = Number(item.goodsNumber * item.jprice * item.weight).toFixed(2)
else
item.price = "0"
},
getweight() {
let num = 0;
for (var i = 0; i < this.data.length; i++) {
num += Number(this.data[i].weight) * Number(this.data[i].goodsNumber);
}
this.page.weight = num
},
settlement() {
// 支付
if (this.page.weight < 200) {
this.shortToast('满200斤才可定制云菜窖哦,请继续选菜吧。')
return
}
if (!Number(this.page.number) > 0) {
this.shortToast('请输入要定制几份云菜窖')
return
}
let list = []
for (var i = 0; i < this.data.length; i++) {
var item = this.data[i]
if (item.goodsNumber > 0)
list.push({
goodsSid: item.goodsSid,
goodsName: item.name,
partNumber: item.goodsNumber,
numofPart: item.weight,
priceUnit: item.jprice,
pricePart: item.price,
})
}
// console.log("ddd", list);
if (list.length == 0) {
this.shortToast('请添加商品')
return
}
var params = {
customerSid: getApp().globalData.sid,
cardNumber: this.page.number,
totalTee: this.page.price,
ordOrderDetailsVoList: list
}
// console.log("params", params);
let _this = this
_this.$api.createOrder(params).then((resp) => {
// console.log("resp", resp);
this.$pay(resp)
}).catch(e => {})
}
}
}
</script>
<style>
.top {
width: 100vw;
/* height: 126.66vw; */
height: 95vw;
/* 加载背景图 */
background-image: url(https://ordermall.yxtsoft.com/image/home_bj1.png);
/* 让背景图基于容器大小伸缩 */
background-size: 100% 100%;
}
</style>