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.
 
 
 
 

719 lines
21 KiB

<template>
<view
style="display: flex;flex-direction: column;height: 100vh;background: -webkit-linear-gradient(left,#FEA65F,#FB9440);">
<view class="top">
<NavBar ref="nav" navTitle=" " :showIcon="false" :start-change-height="page.startHeight"
:end-change-height="page.endHeight">
</NavBar>
<!-- <view style="background: #F7F7F7; opacity: 0.5; border-radius: 20px;display: flex;flex-direction: row;align-items: center;
padding-left: 10px; margin-left: 20px;width: 40vw; margin-top: 5vh;">
<image src="../../static/search_icon.png" mode="aspectFill" style="width: 25px;height: 25px;">
</image>
<input placeholder="搜索"
style="font-size: 25rpx;flex: 1;height: 35px;line-height: 35px;padding-left: 10px;padding-right: 10px;"
:value="searchInfo.name" @input="onKeyInput" />
</view> -->
<view style="display: flex;flex-direction: row;align-items: center;justify-content: center;;
padding-left: 10vw;padding-right: 10vw; margin-top: 40vw;">
<view style="display: flex;flex-direction: column; flex: 1;justify-content: center;align-items: center;"
@click.stop="brandClick('0')">
<image src="https://supervise.yxtsoft.com/lpk/image/family_icon.png" mode="aspectFill"
:class="brandType=='0'?'top_img1':'top_img2'"
style="width: 60px;height:60px;border-radius: 50%;padding:5px;"></image>
<text :class="brandType=='0'?'top_text1':'top_text2'">百姓菜窖</text>
</view>
<view style="display: flex;flex-direction: column;flex: 1;justify-content: center;align-items: center;"
@click.stop="brandClick('1')">
<image src="https://supervise.yxtsoft.com/lpk/image/love_icon.png" mode="aspectFill"
:class="brandType=='1'?'top_img1':'top_img2'"
style="width: 60px;height: 60px;border-radius: 50%;padding: 5px;"></image>
<text :class="brandType=='1'?'top_text1':'top_text2'">精品菜窖</text>
</view>
<view style="display: flex;flex-direction: column;flex: 1;justify-content: center;align-items: center;"
@click.stop="brandClick('2')">
<image src="https://supervise.yxtsoft.com/lpk/image/enterprise_icon.png" mode="aspectFill"
:class="brandType=='2'?'top_img1':'top_img2'"
style="width: 60px;height: 60px;border-radius: 50%;padding: 5px;"></image>
<text :class="brandType=='2'?'top_text1':'top_text2'">企业菜窖</text>
</view>
</view>
</view>
<view style="background: #fff;flex-flow: 1; height: calc(100vh - 65vw - 50px);
width: 100%; margin-top: -13vw;
border-radius: 25px;display: flex;flex-direction: column; box-sizing: border-box;">
<view style="display: flex;flex-direction: row;height: 25px; width: 100%; flex-shrink: 0;">
<view style="width: 20%;background: #F7F7F7;border-top-left-radius: 25px;"></view>
<view style="width: 80%;background: #fff; border-top-right-radius: 25px;"></view>
</view>
<view style="display: flex;flex-direction: row;min-height: calc(100% - 115px); ">
<scroll-view scroll-y="true" style="height: 100%; width: 21%;border-bottom-left-radius: 25px;"
:scroll-top="scrollLeftTop" bindscrolltoupper="upper" bindscrolltolower="lower"
:show-scrollbar="false" :enhanced="true" bindscroll="scroll">
<view
style="width: 100%;; display: flex;flex-direction: column; background: #F7F7F7;border-bottom-left-radius: 25px;">
<view v-for="(item,index) in data" @click="labelClick(index,item)"
style="display: flex;flex-direction: column;justify-content: center; margin-top: 15px; ">
<text class="label" :class="{ label2: selectIndex==index }">{{item.name}}</text>
</view>
</view>
</scroll-view>
<view
style="width: 80%;min-height: calc(100% - 115px); display: flex;flex-direction: column; margin-left: 10px; margin-right: 10px;">
<view style=" border: 1px #bbb solid; border-radius: 8px;display: flex;flex-direction: row;align-items: center;
padding-left: 10px; margin-left: 20px;margin-right: 20px;">
<image src="../../static/search_icon.png" mode="aspectFill" style="width: 25px;height: 25px;">
</image>
<input placeholder="请输入"
style="font-size: 25rpx;flex: 1;height: 35px;line-height: 35px;padding-left: 10px;padding-right: 10px;"
:value="searchInfo.name" @input="onKeyInput" />
</view>
<scroll-view scroll-y="true" style="min-height: calc(100% - 150px); width: 100%; margin-top: 10px;"
bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" :show-scrollbar="false"
:scroll-top="scrollRightTop" :enhanced="true">
<view style="width: 100%; display: flex;flex-direction: column;">
<view v-for="(item,index) in goods" @click="itemClick(item.goodsSid)"
style="display: flex;flex-direction: column;justify-content: center;width: 100%; margin-top: 15px; ">
<view style="display: flex;flex-direction: row;align-items: center;width: 100%; ">
<image :src="item.iconUrl" style="width: 90px;height: 90px; border-radius: 10px; "
mode="aspectFill"></image>
<view
style="display: flex;flex-direction: column;flex: 1; padding-bottom: 15px; margin-left: 10px;"
:style="{'border-bottom':(index == goods.length-1 ? 'none' : '1px #EFEFEF solid')}">
<text style="font-size: 13px;color: #000;">{{item.name}}</text>
<text
style="font-size: 10px;color: #999;margin-top: 5px;">{{item.remark}}</text>
<view
style="display: flex;flex-direction: row;align-items: center;margin-top: 8px;">
<text style="border: 1px #EE752F solid; border-radius: 5px; padding: 0px 8px;
font-size: 10px;color: #EE752F;">{{item.jprice}}元/{{item.specificationUnit}}</text>
<text
style="border: 1px #EE752F solid; border-radius: 5px; padding: 0px 8px;
font-size: 10px;color: #EE752F; margin-left: 10px; margin-right: 10px; ">{{item.weight}}{{item.specificationUnit}}/{{item.unitName}}</text>
<!-- <text
style="background: #FF9900; color: #fff; font-size: 10px;padding: 0px 8px; border-radius: 5px;">¥{{item.mefenPrice}}</text> -->
</view>
<view style="display: flex;flex-direction: row;align-items: center;justify-content: space-between; margin-top: 15px;
margin-right: 15px;">
<text style="font-size: 14px;color: #FF5006;">¥{{item.mefenPrice}}</text>
<!--
<image src="../../static/inCart.png" mode="aspectFill"
style="width: 25px;height: 25px;" @click.stop="itemShow(item)"
v-if="!item.showCart"></image> -->
<view style="display: flex;flex-direction: row;align-items: center;">
<image src="../../static/jian_icon.png" mode="aspectFill"
style="width: 20px;height: 20px;" @click.stop="jian(item)"></image>
<text
style="font-size: 14px;margin-left: 8px;margin-right: 8px;">{{item.goodsNumber}}</text>
<image src="../../static/jia_icon.png" mode="aspectFill"
style="width: 20px;height: 20px;" @click.stop="jia(item)"></image>
<!-- <text
style="margin-left: 10px;color: #fff; font-size: 12px; border: 1px #EE752F solid; border-radius: 5px; padding: 0px 5px; background: #FF9900;"
@click.stop="itemShow2(item)">确定</text> -->
</view>
</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
<view style="display: flex;flex-direction: column;border-top: 1px solid #F8F8F8; border-bottom-left-radius: 25px;border-bottom-right-radius: 25px;
padding-top: 5px; flex-shrink: 0;">
<view style="display: flex;flex-direction: row;align-items: center; padding-left: 30px;">
<view style="width: 35px;height: 35px;position: relative; visibility: hidden; ">
<image style="width: 25px;height: 25px;margin-left: 5px; margin-top: 5px; "
src="../../static/basket_icon.png" mode="aspectFill"></image>
<view style="border-radius: 50%;text-align: center;background: #f00;color: #fff;font-size: 8px;
position: absolute;
top: 2px;
right: 0px;
padding: 2px 5px;
width: auto;">{{page.count}}</view>
</view>
<view id="bomView"
style="display: flex;flex-direction: row;align-items: center; margin-left: 15px;">
<view style="color: #888;font-size: 10px;">温馨提示:已定制了</view>
<view style="color: #FF5006;font-size: 15px;">{{page.weight}}斤</view>
<!-- <view style="color: #FF5006;font-size: 15px;" v-if="brandType=='1'">{{page.weight2}}斤</view> -->
<!-- <view style="color: #FF5006;font-size: 15px;" v-if="brandType=='2'">{{page.weight3}}斤</view> -->
<view style="color: #888;font-size: 10px;">,满200斤可定制云菜窖</view>
</view>
</view>
<view
style="display: flex;flex-direction: row; justify-content: center;align-items: center;padding-bottom: 10px;margin-top: 5px;">
<text style="background: #FF9900; color: #fff;font-size: 13px; padding: 8px 15px;
border: 1px #FF5006 solid; border-top-left-radius: 25px; border-bottom-left-radius: 25px;">分享新人有礼</text>
<view style="border: 1px #FF5006 solid;margin-left: 5px;margin-right: 5px;padding: 5px 10px;
display: flex;flex-direction: row;align-items: center;" @click="gotoCart()">
<image src="../../static/shoppCart_icon.png" mode="aspectFill"
style="height: 20px;width: 25px;"></image>
<text style="font-size: 15px;color: #FF5006;margin-left: 10px; ">¥{{page.price}}</text>
<text style="font-size: 10px;color: #666;margin-left: 10px; ">共减:¥{{page.reduce}}</text>
</view>
<!-- <view style="border: 1px #FF5006 solid;margin-left: 5px;margin-right: 5px;padding: 5px 10px;
display: flex;flex-direction: row;align-items: center;" v-if="brandType=='1'">
<image src="../../static/shoppCart_icon.png" mode="aspectFill"
style="height: 20px;width: 25px;"></image>
<text style="font-size: 15px;color: #FF5006;margin-left: 10px; ">¥{{page.price2}}</text>
<text style="font-size: 10px;color: #666;margin-left: 10px; ">共减:¥{{page.reduce2}}</text>
</view>
<view style="border: 1px #FF5006 solid;margin-left: 5px;margin-right: 5px;padding: 5px 10px;
display: flex;flex-direction: row;align-items: center;" v-if="brandType=='2'">
<image src="../../static/shoppCart_icon.png" mode="aspectFill"
style="height: 20px;width: 25px;"></image>
<text style="font-size: 15px;color: #FF5006;margin-left: 10px; ">¥{{page.price3}}</text>
<text style="font-size: 10px;color: #666;margin-left: 10px; ">共减:¥{{page.reduce3}}</text>
</view> -->
<text style="background: #FF9900; color: #fff;font-size: 13px; padding: 8px 15px;
border: 1px #FF5006 solid; border-top-right-radius: 25px; border-bottom-right-radius: 25px;"
@click="settlement()">结算</text>
</view>
</view>
</view>
<uni-popup ref="inputDialog" type="dialog">
<uni-popup-dialog ref="inputClose" mode="base" title="订购协议" :showConfirm="true"
:beforeClose="dialogBeforeClose" @confirm="dialogInputConfirm" :content="dialogContent"
:confirm-text="confirmText"></uni-popup-dialog>
</uni-popup>
</view>
</template>
<script>
export default {
data() {
return {
dialogContent: "这里是协议内容,这里是协议内容,这里是协议内容,这里是协议内容,这里是协议内容,这里是协议内容,这里是协议内容,这里是协议内容这里是协议内容,这里是协议内容",
confirmText: "我知道了(5s)",
dialogBeforeClose: false,
countdown: 5,
scrollHeight: "",
scrollLeftTop: "0",
scrollRightTop: "0",
searchInfo: {
sid: "0",
name: "",
affiliation: "",
customerSid: ""
},
brandType: "0",
styleObject: {
// 'position': 'fixed',
// 'top':'80vw',
'margin-top': '62vw',
'border-top-left-radius': '25px',
'border-top-right-radius': '25px',
'border-bottom-left-radius': '25px',
'border-bottom-right-radius': '25px',
'background': '#fff',
'padding-top': '10px',
'margin-bottom': "60px"
},
page: {
price: '0',
reduce: "0",
weight: "0",
// price2: '0',
// reduce2: "0",
// weight2: "0",
// price3: '0',
// reduce3: "0",
// weight3: "0",
count: "0",
startHeight: 0,
endHeight: 0
},
data: [],
goods: [],
selectIndex: 0,
initPrice: '0',
initReduce: "0",
initWeight: "0",
}
},
onShow() {
if (typeof this.$mp.page.getTabBar === 'function' && this.$mp.page.getTabBar()) {
this.$mp.page.getTabBar().setData({
selected: 0
})
}
this.getAllPriceOrWeight()
this.getgoods()
},
onLoad() {
let info = uni.getSystemInfoSync();
this.page.startHeight = info.windowWidth * 0.6
this.page.endHeight = info.windowWidth * 0.8
this.request()
// this.getallPrice()
// this.getweight()
// this.getcount()
},
methods: {
// searchBtn() {
// this.setData({
// scrollLeftTop: 0,
// scrollRightTop:0
// })
// // this.scrollLeftTop =1 //可以在每次搜索的时候先初始一下
// // this.scrollRightTop = 1 //然后每次加0.01 别问为啥要加0.01 反正直接给0就是没效果 无解 也可能是本人代码有误 但是亲测有效
// },
labelClick(index, item) {
this.selectIndex = index
this.searchInfo.sid = item.sid
this.getgoods()
},
onKeyInput(event) {
this.searchInfo.name = event.target.value
this.getgoods()
},
brandClick(val) {
this.brandType = val
this.request()
},
request() {
let _this = this
_this.$api.getAllGoodsType(_this.brandType).then((resp) => {
_this.data = resp
_this.searchInfo.sid = _this.data[0].sid
_this.selectIndex = 0
_this.getgoods()
_this.getAllPriceOrWeight()
_this.scrollLeftTop = _this.scrollLeftTop == 0 ? -1 : 0
_this.scrollRightTop = _this.scrollRightTop == 0 ? -1 : 0
}).catch(e => {})
},
getAllPriceOrWeight() {
let _this = this
var params = {
customerSid: getApp().globalData.sid,
affiliation: this.brandType,
}
_this.$api.getGoodsWeight(params).then((resp) => {
console.log("getGoodsWeight", resp);
_this.page.price = resp.totalPrice
_this.page.weight = resp.totalWeight
_this.initPrice = resp.totalPrice
_this.initWeight = resp.totalWeight
}).catch(e => {})
},
getgoods() {
let _this = this
_this.searchInfo.customerSid = getApp().globalData.sid
_this.searchInfo.affiliation = this.brandType
_this.$api.getGoodsByType(_this.searchInfo).then((resp) => {
_this.goods = resp
}).catch(e => {})
},
itemShow(item) {
item.showCart = true
console.log("item", item.showCart);
},
itemShow2(item) {
if (item.goodsNumber == 0) {
this.shortToast('请添加商品。')
return
}
var good = {
goodsSid: item.goodsSid,
goodsName: item.name,
goodsNumber: item.goodsNumber,
affiliation: this.brandType,
price: item.mefenPrice,
weight: item.weight,
customerSid: getApp().globalData.sid
}
console.log("itemShow2", good);
let _this = this
_this.$api.addShoppingCart(good).then((resp) => {
item.showCart = false
console.log("item2", item.showCart);
}).catch(e => {})
},
jian(item) {
const that = this
console.log("item》》》》", item)
if (Number(item.goodsNumber) == 1) {
wx.showModal({
content: '确定不要了吗',
cancelText: "再想想",
confirmText: "删除",
confirmColor: "#FF9900",
success(res) {
if (res.confirm) {
console.log('用户点击确定')
item.goodsNumber = 0
item.subtotal = 0
that.getallPrice()
that.getweight()
that.upDateShoppCart(item)
} else if (res.cancel) {
}
}
})
} else {
if (Number(item.goodsNumber) > 0) {
item.goodsNumber = Number(item.goodsNumber) - 1
}
item.subtotal = Number(item.goodsNumber) * Number(item.mefenPrice)
that.getallPrice()
that.getweight()
that.upDateShoppCart(item)
}
},
jia(item) {
item.goodsNumber = Number(item.goodsNumber) + 1
item.subtotal = Number(item.goodsNumber) * Number(item.mefenPrice)
this.getallPrice()
this.getweight()
this.upDateShoppCart(item)
},
getallPrice() {
let num = 0;
for (var i = 0; i < this.goods.length; i++) {
num += Number(this.goods[i].subtotal);
}
this.page.price = num
// if (this.brandType == '0')
// this.page.price1 = num
// if (this.brandType == '1')
// this.page.price2 = num
// if (this.brandType == '2')
// this.page.price3 = num
},
getweight() {
let num = 0;
for (var i = 0; i < this.goods.length; i++) {
num += Number(this.goods[i].weight) * Number(this.goods[i].goodsNumber);
}
this.page.weight = num
// if (this.brandType == '0')
// this.page.weight1 = num
// if (this.brandType == '1')
// this.page.weight2 = num
// if (this.brandType == '2')
// this.page.weight3 = num
},
// getcount() {
// let num = 0;
// for (var i = 0; i < this.goods.length; i++) {
// num += Number(this.goods[i].goodsNumber);
// }
// this.page.goodsNumber = num
// },
upDateShoppCart(item) {
var good = {
goodsSid: item.goodsSid,
goodsName: item.name,
goodsNumber: item.goodsNumber,
affiliation: this.brandType,
price: item.mefenPrice,
weight: item.weight,
customerSid: getApp().globalData.sid
}
let _this = this
_this.$api.addShoppingCart(good).then((resp) => {
}).catch(e => {})
},
detail(item) {
// 详情
uni.navigateTo({
url: '/pages/cloud/detail_cloudCard?sid=' + item.sid + "&name=" + item.name
})
},
settlement() {
// 支付
if (this.page.weight < 20) {
this.shortToast('满200斤才可定制云菜窖哦,请继续选菜吧。')
return
}
let list = []
for (var i = 0; i < this.goods.length; i++) {
var item = this.goods[i]
if (item.goodsNumber > 0)
list.push({
goodsSid: item.goodsSid,
goodsName: item.name,
partNumber: item.goodsNumber,
numofPart: item.weight,
priceUnit: item.jprice, // 斤单价
pricePart: item.mefenPrice, // 份单价
})
}
// console.log("ddd", list);
if (list.length == 0) {
this.shortToast('请添加商品')
return
}
this.showPop()
// console.log("params", params);
// let _this = this
// _this.$api.createOrder(params).then((resp) => {
// // console.log("resp", resp);
// this.$pay(resp)
// }).catch(e => {})
},
showPop() {
this.$refs.inputDialog.open()
let timeOut = setInterval(() => {
if (this.countdown == 1) {
this.confirmText = "确定"
this.countdown = 5
this.dialogBeforeClose = false
clearInterval(timeOut)
} else {
this.dialogBeforeClose = true
this.countdown = this.countdown - 1;
this.confirmText = "我知道了" + "(" + this.countdown + "s)"
}
}, 1000)
},
dialogInputConfirm(val) {
if (this.confirmText == "确定") {
this.confirmText = "我知道了(5s)",
this.dialogBeforeClose = true,
this.countdown = 5
this.saveGoods()
}
},
saveGoods() {
let list = []
for (var i = 0; i < this.goods.length; i++) {
var item = this.goods[i]
if (item.goodsNumber > 0)
list.push({
goodsSid: item.goodsSid,
goodsNumber: item.goodsNumber,
})
}
// console.log("ddd", list);
if (list.length == 0) {
this.shortToast('请添加商品')
return
}
var params = {
customerSid: getApp().globalData.sid,
affiliation: this.brandType,
vos: list
}
// console.log("params", params);
let _this = this
_this.$api.saveGoods(params).then((resp) => {
_this.request()
}).catch(e => {})
},
itemClick(goodsSid) {
uni.navigateTo({
url: '/pages/good/goodsDetail?sid=' + goodsSid
})
},
gotoCart() {
uni.navigateTo({
url: '/pages/good/shoppCart?affiliation=' + this.brandType
})
}
}
}
</script>
<style>
.top {
width: 100vw;
/* height: 126.66vw; */
height: 75vw;
/* 加载背景图 */
background-image: url(https://supervise.yxtsoft.com/lpk/image/clound_bj1.png);
/* background-image: url(../../static/clound_bj1.png); */
/* 让背景图基于容器大小伸缩 */
background-size: 100% 100%;
}
.label {
background: #fff;
color: #FF9900;
font-size: 13px;
padding-top: 15px;
padding-bottom: 15px;
text-align: center;
}
.label2 {
background: #FF9900;
color: #fff;
font-size: 13px;
padding-top: 15px;
padding-bottom: 15px;
text-align: center;
}
.top_img1 {
border: 1px #FF9900 solid;
}
.top_img2 {
border: none
}
.top_text1 {
border: 1px #FF9900 solid;
background: #FF5006;
color: #fff;
font-weight: 800;
font-family: sans-serif;
padding: 2px 5px;
border-radius: 5px;
margin-top: -25px;
}
.top_text2 {
border: 1px #FF9900 solid;
background: #fff;
color: #F6894B;
font-weight: 800;
font-family: sans-serif;
padding: 2px 5px;
border-radius: 5px;
margin-top: -25px;
}
</style>