shop-applet/pages/nongKe/supply_chain/merchant.vue

666 lines
17 KiB
Vue
Raw Normal View History

2024-05-14 17:25:13 +08:00
<template>
<view class="merchant">
<view class="head_search flex_a_c">
<view class="search_content flex_a_c_j_sb">
<view class="flex_a_c">
<view class="iconfont icon-sousuo"></view>
<input type="text" v-model="infoData.keyword" placeholder="请搜索">
</view>
<button class="search_btn" @click="searchBtn">搜索</button>
</view>
</view>
<view style="background-color: #fff;width: 100%;">
<view class="tabs_box flex_a_c_j_sb">
<view v-for="(item,index) in tabsList" :key="index" class="flex_a_c" :class="active==index?'active':''">
<view @click="tabsChange(index,order)">{{item}}</view>
</view>
</view>
</view>
<block v-for="(item,index) in list" :key="index">
<view class="item_list flex" @click="navToGoodsDetails(item)">
<view>
<image class="goods_image" :lazy-load="true" :src="item.image" mode="aspectFit"></image>
</view>
<view class="left_goods_msg">
<view class="name">{{ item.store_name }}</view>
<view class="classify flex_a_c">
<text>分类{{ item.cate_name ? item.cate_name : '无' }}</text>
<text style="margin-left: 17.54rpx;">单位{{ item.unit_name ? item.unit_name : '无' }}</text>
</view>
<view class="bar_code">条形码{{item.bar_code?item.bar_code : '无'}}</view>
</view>
<view class="right_goods_msg">
<view class="num">
<text style="margin-right: 5rpx;">¥</text>
<text>{{$wholesale_price(item)}}</text>
</view>
<!-- <view class="add_goods" @click="getGoodsDetails(item)">加入购物单</view> -->
</view>
</view>
</block>
<u-loadmore :status="status" :loading-text="loadingText" :loadmore-text="loadmoreText" :nomore-text="nomoreText" />
<navigator class="bottom_purchase" :url="source==12?'./shopping_trolley_other?source=12':'./shopping_trolley_a' " open-type="navigate">采购清单<text v-if="goodsNum">{{ ` (${goodsNum}) ` }}</text></navigator>
<goodsPopup :goodsStatu="isPopupShow" @colses="isPopupShow=false" :goods_info="goodsInfo"></goodsPopup>
<shortPopup ref="shortPopupRef" :source="source" @addCart="cartFn"></shortPopup>
<u-popup :show="show" @close="close">
<view>
<h3 style=" margin: 15px 5px 5px 24px;">颜色规格</h3>
<scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y">
<view class="scroll-view-item" v-for="(item,index) in attrValue" :key="index">
<view class="scroll_item_top">
<image :src="Image" mode="" :lazy-load="true"></image>
<view class="text">
<view>{{item.sku}}</view>
<view>库存: <text>{{item.stock}}</text> </view>
</view>
</view>
<view class="scroll_item_bon">
<view class="reduce" @click.stop='subCart(item,index)'>-</view>
<input type="text" disabled="true" v-model="goods[index].cart_num" />
<view class="plus" :class="goods.numAdd ? 'on' : ''" @click.stop='addCart(item,index)'>+</view>
<!-- <u-number-box
button-size="36"
color="#ffffff"
bgColor="#2979ff"
iconStyle="color: #fff"
v-model="number.cart_num"
></u-number-box> -->
</view>
</view>
</scroll-view>
<button class="btn" @click="addshopcart">确定</button>
</view>
</u-popup>
</view>
</template>
<script>
import {
getStoreGoods,
getProductDetail,
postCartAdd,
getStoreDetail,
} from '@/api/store.js'
import { Toast } from '@/libs/uniApi'
import goodsPopup from '../cpns/goodsPopup.vue'
import {
changeCartNum
} from '@/api/order.js';
import {
getCartCounts
} from '@/api/requesta.js';
import shortPopup from "@/components/shortPopup.vue"
export default {
components: {
goodsPopup,
shortPopup
},
data() {
return {
status: 'loadmore',
loadingText: '努力加载中',
loadmoreText: '轻轻上拉',
nomoreText: '我也是有底线的~~',
myCount: 0,
goodsInfo: {},
isPopupShow: false,
cartCount: 0,
isAllSelect: false,
search: '',
active: 0,
src: 'https://cdn.uviewui.com/uview/album/1.jpg',
tabsList: ['综合', '新品', '价格(升)', '销量'],
value: 5,
list: [],
attr: {
cartAttr: false,
productAttr: [],
productSelect: {}
},
productValue: [], // 系统属性
attrValue: '', // 已选属性,
infoData: {
page: 1,
limit: 10,
product_type: 98,
keyword: ''
},
id: '',
order: true,
num: '',
show: false,
scrollTop: 0,
attrValue: [],
Image: '',
goods: [{
cart_num: 0
}],
goodsLite: {},
goodsindexL: '',
goodsNum: 0,
source: 11
}
},
onLoad(e) {
this.source = e.value || 11;
this.id = e.id
this.initStore()
this.getStoreGoodsList()
// getStoreGoods(e.id, this.infoData).then(res => {
// this.list = res.data.list
// })
},
onShow() {
this.cartFn()
},
methods: {
initStore(){
getStoreDetail(this.id).then(res=>{
console.log(res);
}).catch(e=>{
console.log(e);
})
},
// 购物车信息
cartFn() {
getCartCounts({
product_type: 98,
source: this.source
}).then(res => {
this.goodsNum = res.data[0].count
})
},
async searchBtn() {
this.infoData.page = 1
const res = await getStoreGoods(this.id, this.infoData)
this.list = res.data.list
},
// jian() {
// Toast('请到购物清单减少数量')
// },
// goodsPopupClick(item) {
// this.goodsInfo = item
// this.isPopupShow = true
// },
navGoodsDetails(id) {
uni.navigateTo({
url: `/pages/goods_details/index?id=${id}&type=town`
})
},
valChange(e) {
// console.log('当前值为: ' + e.value)
},
//添加购物车 *data是修改过后的参数
handelInfo(data) {},
//获取商品数据
async getStoreGoodsList() {
// console.log(this.infoData);
const res = await getStoreGoods(this.id, this.infoData)
this.list.push(...res.data.list)
if (res.data.list.length < 10) this.status = 'nomore'
// this.publicMethods1(res)
},
//上拉刷新
publicMethods1(res) {
this.num = res.data.count
this.list = [...this.list, ...res.data.list]
if (this.list.length < this.num) {
this.status = 'loadmore'
} else {
this.status = 'nomore'
}
},
tabsChange(i, order) {
this.active = i
this.list = []
this.infoData.page = 1
this.order = !this.order
if (i == 0) {
this.infoData.order = ''
this.getStoreGoodsList()
}
if (i == 1) {
this.infoData.order = 'is_new'
this.getStoreGoodsList()
}
//价格升序
if (i == 2) {
if (order) {
this.infoData.order = 'price_asc'
this.getStoreGoodsList()
this.tabsList[2] = '价格(升)'
} else {
this.infoData.order = 'price_desc'
this.getStoreGoodsList()
this.tabsList[2] = '价格(降)'
}
}
if (i == 3) {
this.infoData.order = 'sales'
this.getStoreGoodsList()
}
},
/**
* 获取产品详情
*/
getGoodsDetails(item) {
console.log(item);
if (item.product.attrValue.length == 1) {
let that = this;
const count = '1'
getProductDetail(item.product_id, { product_type: 98 }).then(res => {
const unique = Object.values(res.data.sku)[0].unique
that.goCat(res.data.product_id, count, unique)
}).catch(err => {
Toast(err)
})
} else {
this.show = true
this.attrValue = item.product.attrValue
this.Image = item.image
for (let i = 1; i < item.product.attrValue.length; i++) {
this.goods.push({
cart_num: 0
})
}
}
},
/**
* 跳转到产品详情
*/
navToGoodsDetails(item){
this.$refs.shortPopupRef.setDatas(item, this.goodsNum);
this.$refs.shortPopupRef.open();
// uni.navigateTo({
// url: `/pages/goods_details/index?id=${item.product_id}&referer=`
// })
},
/*
* 加入购物车
*/
goCat: function(id, count, unique) {
let that = this
let q = {
is_new: 0,
product_id: id,
cart_num: count,
product_attr_unique: unique,
// source: this.source,
product_type: 98,
spread_id: ''
};
postCartAdd(q)
.then(res => {
that.$util.Tips({
title: "添加购物车成功",
});
})
.catch(res => {
return that.$util.Tips({
title: res
});
});
},
close() {
this.show = false
},
//购物车增加
addCart(item, index) {
let that = this
that.goods[index].cart_num = that.goods[index].cart_num + 1
that.goods.numAdd = true
that.goodsLite = item
that.goodsindexL = index
let q = {
is_new: 0,
product_id: that.goodsLite.product_id,
cart_num: that.goods[that.goodsindexL].cart_num,
product_attr_unique: that.goodsLite.unique,
// source: this.source,
product_type: 98,
spread_id: ''
};
postCartAdd(q).then(res => {
that.$util.Tips({
title: "添加购物车成功",
});
})
.catch(res => {
this.show = false
return that.$util.Tips({
title: res
});
});
},
subCart(item, index) {
let that = this
if (that.goods[index].cart_num == 0) {
return
} else {
that.goods[index].cart_num = that.goods[index].cart_num - 1
that.goods.numAdd = true
that.goodsLite = item
that.goodsindexL = index
let q = {
is_new: 0,
product_id: that.goodsLite.product_id,
cart_num: that.goods[that.goodsindexL].cart_num,
product_attr_unique: that.goodsLite.unique,
// source: this.source,
product_type: 98,
spread_id: ''
};
postCartAdd(q).then(res => {
that.$util.Tips({
title: "添加购物车成功",
});
})
.catch(res => {
this.show = false
return that.$util.Tips({
title: res
});
});
}
},
addshopcart() {
console.log(this.goodsLite);
console.log(this.goodsindexL);
this.show = false
// let that = this
// let q = {
// is_new: 0,
// product_id: that.goodsLite.product_id,
// cart_num: that.goods[that.goodsindexL].cart_num,
// product_attr_unique: that.goodsLite.unique,
// // source: this.source,
// product_type: 98,
// spread_id: ''
// };
// postCartAdd(q).then(res => {
// this.show = false
// that.$util.Tips({
// title: "添加购物车成功",
// });
// })
// .catch(res => {
// this.show = false
// return that.$util.Tips({
// title: res
// });
// });
},
},
onReachBottom() {
//如果状态为nomore 则不能在触发上拉事件
if (this.status != 'nomore') {
this.infoData.page++
this.getStoreGoodsList()
}
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
},
onBackPress() {
if(this.$refs.shortPopupRef.isShow){
this.$refs.shortPopupRef.close();
return true;
}
}
}
</script>
<style lang="scss" scoped>
//减号
/deep/.uicon-minus {
font-weight: 700 !important;
color: #000 !important;
}
.minus {
color: #000;
display: inline-block;
width: 70rpx;
height: 60rpx;
background-color: rgb(235, 236, 238);
padding-top: 20rpx;
padding-left: 24rpx;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
.reduce {
font-weight: bold !important;
font-weight: 700;
}
}
.merchant {
padding-bottom: 175.44rpx;
}
.icon-xuanzhong1 {
color: $uni-theme-color;
}
.head_search {
width: 100%;
background-color: #fff;
height: 108.77rpx;
.search_content {
margin: 0 auto;
width: 694.74rpx;
height: 66.67rpx;
padding: 2px 2px 2px 21.05rpx;
border: 1px solid $uni-theme-color;
border-radius: 100px;
.icon-sousuo {
font-weight: bold;
color: $uni-theme-color;
margin-right: 17.54rpx;
}
.search_btn {
color: #fff;
width: 135.09rpx;
height: 59.65rpx;
line-height: 59.65rpx;
background: $uni-theme-bg-color;
border-radius: 100px;
}
}
}
.tabs_box {
justify-content: space-around;
width: 694.74rpx;
margin: 0 auto;
height: 80.7rpx;
border-top: 1px solid #E7E6E4;
background-color: #fff;
}
.active {
font-weight: 700;
color: $uni-theme-color;
}
.item_list {
margin: 0 auto;
margin-top: 28.07rpx;
padding: 21.05rpx;
width: 694.74rpx;
background: #FFFFFF;
border-radius: 8px;
font-size: 24.56rpx;
.goods_image {
width: 119.3rpx;
height: 119.3rpx;
border-radius: 8px;
margin-right: 26.32rpx;
}
.left_goods_msg {
width: 100%;
flex: 1;
.name {
font-size: 28.07rpx;
font-weight: 700;
width: 315.79rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.price {
width: 100%;
margin-bottom: 0;
}
}
.right_goods_msg {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: flex-end;
.num {
font-size: 24.56rpx;
color: $uni-theme-color;
}
.purchase_btn {
color: #fff;
padding: 7.02rpx 21.05rpx;
background: $uni-theme-color;
border-radius: 100px;
margin-left: 21.05rpx;
}
.add_goods {
text-align: center;
width: 180rpx;
height: 60rpx;
line-height: 60rpx;
background: $uni-theme-bg-color;
border-radius: 100px;
color: #fff;
}
}
}
.bottom_purchase {
z-index: 50;
position: fixed;
left: 50%;
bottom: 52.63rpx;
transform: translate(-50%);
width: 526.32rpx;
height: 80.7rpx;
text-align: center;
line-height: 80.7rpx;
border-radius: 100px;
background-color: $uni-theme-color;
color: #fff;
}
.scroll-Y {
height: 50vh;
width: 90%;
margin: auto;
}
.scroll-view-item {
font-size: 36rpx;
border-bottom: 1px solid #ccc;
.scroll_item_top {
height: 60px;
display: flex;
justify-content: flex-start;
align-items: center;
image {
width: 50px;
height: 50px;
margin: 5px;
}
.text {
width: 200px;
height: 60px;
float: left;
view {
height: 30px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text {
color: #F84221;
}
}
}
}
.scroll_item_bon {
width: 100%;
height: 40px;
display: flex;
justify-content: flex-end;
align-items: center;
.reduce {
width: 30px;
height: 30px;
text-align: center;
color: #BDC4CE;
background: #EEEEEE;
}
input {
width: 50px;
height: 30px;
text-align: center;
}
.plus {
width: 30px;
text-align: center;
height: 30px;
color: #FFFFFF;
background: linear-gradient(180deg, #F98649 0%, #F34E45 100%);
}
.on {
background-color: #e3e3e3;
color: #dedede;
}
}
}
.btn {
width: 100%;
height: 50px;
background: linear-gradient(84deg, #F98649 0%, #F34E45 100%);
border-radius: 24px 24px 24px 24px;
line-height: 50px;
color: white;
}
</style>