467 lines
12 KiB
Vue
467 lines
12 KiB
Vue
<template>
|
|
<view class="wrapper">
|
|
<!-- 筛选弹出层 TODO后续版本更新 -->
|
|
<!-- <u-popup width="90%" v-model="popup" mode="right">
|
|
<view class="screen-title">商品筛选</view>
|
|
|
|
<view class="screen-view">
|
|
<view class="screen-item">
|
|
<h4>价格区间</h4>
|
|
<view class="flex">
|
|
<u-input class="u-bg" placeholder-style="font-size:22rpx;" type="number" input-align="center" placeholder="最低价"></u-input>
|
|
<view class="line"></view>
|
|
<u-input class="u-bg" placeholder-style="font-size:22rpx;" type="number" input-align="center" placeholder="最高价"></u-input>
|
|
</view>
|
|
</view>
|
|
<view class="screen-item">
|
|
<h4>销量</h4>
|
|
<view class="flex">
|
|
<u-input class="u-bg w200 flex1" placeholder-style="font-size:22rpx;" type="number" input-align="center" placeholder="销量"></u-input>
|
|
<view class="flex1">笔以上</view>
|
|
</view>
|
|
</view>
|
|
<view class="screen-item">
|
|
<h4>收入比率</h4>
|
|
<view class="flex">
|
|
<u-input class="u-bg" placeholder-style="font-size:22rpx;" type="number" input-align="center" placeholder="最低%"></u-input>
|
|
<view class="line"></view>
|
|
<u-input class="u-bg" placeholder-style="font-size:22rpx;" type="number" input-align="center" placeholder="最高%"></u-input>
|
|
</view>
|
|
</view>
|
|
<view class="screen-item">
|
|
<h4>包邮</h4>
|
|
<view class="flex">
|
|
<u-tag class="u-tag" shape="circle" text="包邮" mode="plain" type="info" />
|
|
</view>
|
|
</view>
|
|
<view class="screen-item">
|
|
<h4>促销活动</h4>
|
|
<view class="flex">
|
|
<u-tag class="u-tag" shape="circle" text="限时抢购" mode="plain" type="info" />
|
|
<u-tag class="u-tag" shape="circle" text="拼团秒杀" mode="plain" type="info" />
|
|
</view>
|
|
</view>
|
|
<view class="screen-item">
|
|
<h4>经营类型</h4>
|
|
<view class="flex">
|
|
<u-tag class="u-tag" shape="circle" text="平台自营" mode="plain" type="info" />
|
|
<u-tag class="u-tag" shape="circle" text="三方店铺" mode="plain" type="info" />
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="screen-btn">
|
|
<view class="screen-clear"> 重置 </view>
|
|
<view class="screen-submit"> 确定 </view>
|
|
</view>
|
|
</u-popup> -->
|
|
|
|
<!-- 导航栏 -->
|
|
<view class="nav">
|
|
<view class="nav-item" @click="handleMyGoods(true)" :class="{ checked: params.checked }">已选择</view>
|
|
<view class="nav-item" @click="handleMyGoods(false)" :class="{ checked: !params.checked }">未选择</view>
|
|
|
|
<!-- <view class="nav-item" @click="popup = !popup">筛选</view> -->
|
|
</view>
|
|
<!-- 商品列表 -->
|
|
|
|
<view class="goods-list">
|
|
<u-swipe-action v-for="(item, index) in goodsList" :disabled="!params.checked" :show="item.___selected" @open="openAction(item)" :index="index" :options="options" bg-color="#fff"
|
|
ref="swiperAction" :key="item.id" @click="changeActionTab(item)">
|
|
|
|
<div class="goods-item">
|
|
<view class="goods-item-img" @click="handleNavgationGoods(item)">
|
|
<u-image width="176rpx" height="176rpx" :src="item.thumbnail"></u-image>
|
|
</view>
|
|
<view class="goods-item-desc">
|
|
<!-- 商品描述 -->
|
|
<view class="-item-title" @click="handleNavgationGoods(item)">
|
|
{{ item.goodsName }}
|
|
</view>
|
|
<!-- 商品金额 -->
|
|
<view class="-item-price" @click="handleNavgationGoods(item)">
|
|
佣金:
|
|
<span> ¥{{ item.commission | unitPrice }}</span>
|
|
</view>
|
|
<!-- 比率佣金 -->
|
|
<view class="-item-bottom">
|
|
<view class="-item-bootom-money" @click="handleNavgationGoods(item)">
|
|
<!-- <view class="-item-bl">
|
|
比率:
|
|
<span>{{ "5.00%" }}</span>
|
|
</view> -->
|
|
<view class="-item-yj">
|
|
<span>¥{{ item.price | unitPrice }}</span>
|
|
</view>
|
|
</view>
|
|
<view>
|
|
<view class="click" v-if="!params.checked" @click="handleClickGoods(item)">立即选取</view>
|
|
<view class="click" v-if="params.checked" @click="handleLink(item)">分销商品</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</div>
|
|
</u-swipe-action>
|
|
|
|
<view class="empty">
|
|
<!-- <u-empty v-if="empty" text="没有分销商品了" mode="list"></u-empty> -->
|
|
</view>
|
|
</view>
|
|
<canvas class="canvas-hide" canvas-id="qrcode" />
|
|
<drawCanvas ref="drawCanvas" v-if="showFlag" :res="res" />
|
|
<u-modal v-model="deleteShow" :confirm-style="{'color':lightColor}" @confirm="delectConfirm" show-cancel-button :content="deleteContent" :async-close="true"></u-modal>
|
|
|
|
</view>
|
|
</template>
|
|
<script>
|
|
import {
|
|
distributionGoods,
|
|
checkedDistributionGoods,
|
|
getMpCode,
|
|
} from "@/api/goods";
|
|
|
|
import drawCanvas from "@/components/m-canvas";
|
|
export default {
|
|
data() {
|
|
return {
|
|
lightColor: this.$lightColor,
|
|
deleteContent: "解绑该商品?", //删除显示的信息
|
|
// 商品栏右侧滑动按钮
|
|
options: [
|
|
{
|
|
text: "解绑",
|
|
style: {
|
|
backgroundColor: this.$lightColor, //高亮颜色
|
|
},
|
|
},
|
|
],
|
|
showFlag: false, //分销分享开关
|
|
empty: false,
|
|
popup: false, //弹出层开关
|
|
active_color: this.$mainColor,
|
|
current: 0,
|
|
params: {
|
|
pageNumber: 1,
|
|
pageSize: 10,
|
|
checked: true,
|
|
},
|
|
goodsList: [],
|
|
|
|
// 分销分享 实例
|
|
res: {
|
|
container: {
|
|
width: 600,
|
|
height: 960,
|
|
background: "#fff",
|
|
title: "分享背景",
|
|
},
|
|
// 分销分享
|
|
bottom: {
|
|
img: "",
|
|
code: "",
|
|
price: 0,
|
|
},
|
|
},
|
|
|
|
routers: "",
|
|
deleteShow: false, //删除模态框
|
|
goodsVal: false, //分销商铺信息
|
|
};
|
|
},
|
|
components: {
|
|
drawCanvas,
|
|
},
|
|
onLoad(options) {
|
|
this.routers = options;
|
|
},
|
|
watch: {},
|
|
onShow() {
|
|
this.goodsList = [];
|
|
this.init();
|
|
},
|
|
methods: {
|
|
/**
|
|
* 滑动删除
|
|
*/
|
|
changeActionTab(val) {
|
|
this.deleteShow = true;
|
|
this.goodsVal = val;
|
|
},
|
|
|
|
/**
|
|
* 点击解绑商品
|
|
*/
|
|
delectConfirm() {
|
|
checkedDistributionGoods({ id: this.goodsVal.id, checked: false }).then(
|
|
(res) => {
|
|
if (res.data.success) {
|
|
uni.showToast({
|
|
title: "此商品解绑成功",
|
|
duration: 2000,
|
|
});
|
|
this.deleteShow = false;
|
|
this.goodsList = [];
|
|
this.init();
|
|
}
|
|
}
|
|
);
|
|
},
|
|
|
|
/**
|
|
* 左滑打开删除
|
|
*/
|
|
openAction(val) {
|
|
this.goodsList.forEach((item) => {
|
|
this.$set(item, "___selected", false);
|
|
});
|
|
this.$set(val, "___selected", true);
|
|
},
|
|
|
|
/**
|
|
* 查看图片
|
|
*/
|
|
handleNavgationGoods(val) {
|
|
this.$navigateTo({
|
|
url: `/pages/product/goods?id=${val.skuId}&goodsId=${val.goodsId}`,
|
|
});
|
|
},
|
|
|
|
async handleLink(goods) {
|
|
uni.showToast({
|
|
title: "请请按住保存图片",
|
|
duration: 2000,
|
|
icon: "none",
|
|
});
|
|
let page = `pages/product/goods`;
|
|
let scene = `${goods.skuId},${goods.goodsId},${this.routers.id}`;
|
|
let result = await getMpCode({ page, scene });
|
|
if (result.data.success) {
|
|
let callback = result.data.result;
|
|
this.res.container.title = `${goods.goodsName}`;
|
|
this.res.bottom.code = `data:image/png;base64,${callback}`;
|
|
this.res.bottom.price = this.$options.filters.unitPrice(
|
|
goods.price,
|
|
"¥"
|
|
);
|
|
this.res.bottom.desc = `${goods.goodsName}`;
|
|
this.res.bottom.img = `${goods.thumbnail}`;
|
|
|
|
if (this.showFlag) {
|
|
this.$refs.drawCanvas.init();
|
|
}
|
|
this.showFlag = true;
|
|
} else {
|
|
uni.showToast({
|
|
title: `制作二维码失败!请稍后重试`,
|
|
duration: 2000,
|
|
icon: "none",
|
|
});
|
|
}
|
|
},
|
|
|
|
change(index) {
|
|
this.current = index;
|
|
},
|
|
// 点击我的选品库
|
|
handleMyGoods(flag) {
|
|
this.goodsList = [];
|
|
this.params.checked = flag;
|
|
this.init();
|
|
},
|
|
|
|
// 选择商品
|
|
handleClickGoods(val) {
|
|
checkedDistributionGoods({ id: val.id, checked: true }).then((res) => {
|
|
if (res.data.success) {
|
|
uni.showToast({
|
|
title: "已添加到我的选品库",
|
|
duration: 2000,
|
|
icon: "none",
|
|
});
|
|
|
|
setTimeout(() => {
|
|
this.goodsList = [];
|
|
this.init();
|
|
}, 500);
|
|
}
|
|
});
|
|
},
|
|
|
|
init() {
|
|
distributionGoods(this.params).then((res) => {
|
|
if (res.data.success && res.data.result.records.length >= 1) {
|
|
res.data.result.records.forEach((item) => {
|
|
this.$set(item, "___selected", false);
|
|
});
|
|
this.goodsList.push(...res.data.result.records);
|
|
}
|
|
if (this.goodsList.length == 0) {
|
|
this.empty = true;
|
|
}
|
|
});
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.canvas-hide {
|
|
/* 1 */
|
|
position: fixed;
|
|
right: 100vw;
|
|
bottom: 100vh;
|
|
/* 2 */
|
|
z-index: -9999;
|
|
/* 3 */
|
|
opacity: 0;
|
|
}
|
|
.empty {
|
|
margin: 40rpx 0;
|
|
}
|
|
.checked {
|
|
color: $main-color;
|
|
font-weight: bold;
|
|
}
|
|
.screen-btn {
|
|
display: flex;
|
|
width: 100%;
|
|
height: 88rpx;
|
|
line-height: 88rpx;
|
|
position: fixed;
|
|
bottom: 0;
|
|
> .screen-clear,
|
|
.screen-submit {
|
|
width: 50%;
|
|
text-align: center;
|
|
}
|
|
.screen-submit {
|
|
background: $main-color;
|
|
color: #fff;
|
|
}
|
|
}
|
|
.screen-item {
|
|
margin-bottom: 40rpx;
|
|
}
|
|
.flex1 {
|
|
padding-left: 10rpx;
|
|
}
|
|
.u-tag {
|
|
margin-right: 20rpx;
|
|
}
|
|
.line {
|
|
width: 40rpx;
|
|
height: 2rpx;
|
|
background: #999;
|
|
margin: 0 10rpx;
|
|
}
|
|
.u-bg {
|
|
background: #eff1f4;
|
|
border-radius: 0.4em;
|
|
font-size: 22rpx;
|
|
}
|
|
.screen-title {
|
|
height: 88rpx;
|
|
text-align: center;
|
|
font-size: 28upz;
|
|
line-height: 88rpx;
|
|
border-bottom: 1px solid #ededed;
|
|
}
|
|
.flex {
|
|
display: flex;
|
|
margin: 20rpx 0;
|
|
align-items: center;
|
|
}
|
|
.screen-view {
|
|
padding: 32rpx;
|
|
}
|
|
.bar {
|
|
padding: 0 20rpx;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
height: 88rpx;
|
|
width: 100%;
|
|
background: #fff;
|
|
z-index: 8;
|
|
> .bar-btn {
|
|
display: flex;
|
|
}
|
|
}
|
|
.nav {
|
|
background: #fff;
|
|
width: 100%;
|
|
display: flex;
|
|
height: 88rpx;
|
|
box-sizing: border-box;
|
|
border-top: 1px solid #ededed;
|
|
border-bottom: 1px solid #ededed;
|
|
> .nav-item {
|
|
line-height: 88rpx;
|
|
height: 88rpx;
|
|
flex: 1;
|
|
text-align: center;
|
|
}
|
|
}
|
|
.click {
|
|
background: $main-color;
|
|
color: #fff;
|
|
margin: 0 4rpx;
|
|
font-size: 22rpx;
|
|
padding: 10rpx 20rpx;
|
|
border-radius: 100px;
|
|
}
|
|
.goods-list {
|
|
// #ifdef H5
|
|
height: calc(100vh - 176rpx);
|
|
// #endif
|
|
// #ifndef H5
|
|
height: calc(100vh - 88rpx);
|
|
// #endif
|
|
overflow: auto;
|
|
}
|
|
.goods-item {
|
|
border-radius: 20rpx;
|
|
background: #fff;
|
|
display: flex;
|
|
padding: 22rpx;
|
|
margin: 20rpx;
|
|
justify-content: space-between;
|
|
> .goods-item-desc {
|
|
flex: 2;
|
|
padding: 0 16rpx;
|
|
line-height: 1.7;
|
|
> .-item-bottom {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
|
|
padding-bottom: 20rpx;
|
|
> .-item-bootom-money {
|
|
> .-item-bl,
|
|
.-item-yj {
|
|
margin-right: 10rpx;
|
|
font-size: 24rpx;
|
|
color: $font-color-base;
|
|
}
|
|
}
|
|
}
|
|
> .-item-title {
|
|
display: -webkit-box;
|
|
|
|
-webkit-box-orient: vertical;
|
|
|
|
-webkit-line-clamp: 1;
|
|
|
|
overflow: hidden;
|
|
}
|
|
> .-item-price {
|
|
color: $price-color;
|
|
> span {
|
|
font-size: 36rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.wrapper {
|
|
width: 100%;
|
|
}
|
|
</style> |