商品选择器回显

This commit is contained in:
mabo
2021-05-24 18:14:06 +08:00
parent 44c88468d4
commit 882e222c5a
12 changed files with 164 additions and 134 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -119,8 +119,10 @@
<p>使用范围{{useScope(item.scopeType)}}</p>
<p>有效期{{item.endTime}}</p>
</div>
<img class="used" v-if="usedCouponId.includes(item.id)" src="../../assets/images/geted.png" alt="">
<b></b>
<a class="c-right" @click="useCoupon(item.id)">立即使用</a>
<a class="c-right" @click="useCoupon(item.id, true)">立即使用</a>
<a class="c-right" v-if="usedCouponId.includes(item.id)" @click="useCoupon(item.id, false)">放弃优惠</a>
<i class="circle-top"></i>
<i class="circle-bottom"></i>
</li>
@@ -207,7 +209,9 @@ export default {
moreAddr: false, // 更多地址
canUseCouponNum: 0, // 可用优惠券数量
couponList: [], // 可用优惠券列表
logoImg: '' // 平台logo
logoImg: '', // 平台logo
usedCouponId: [], // 已使用优惠券id
selectedCoupon: {} // 已选优惠券对象
};
},
mounted () {
@@ -250,7 +254,10 @@ export default {
this.goodsList = res.result.cartList;
this.priceDetailDTO = res.result.priceDetailDTO;
this.skuList = res.result.skuList;
let notSupArea = res.result.notSupportFreight
let notSupArea = res.result.notSupportFreight;
this.selectedCoupon = {}
if (res.result.platformCoupon) this.selectedCoupon.platformCoupon = res.result.platformCoupon
Object.assign(this.selectedCoupon, res.result.storeCoupons)
if (notSupArea) {
let content = [];
let title = ''
@@ -295,8 +302,22 @@ export default {
storeId: storeArr.toString(),
totalPrice: this.priceDetailDTO.goodsPrice
}
canUseCouponList(params).then(res => {
canUseCouponList(params).then(res => { // 可用优惠券列表
if (res.success) this.couponList = res.result.records
const couponKeys = Object.keys(this.selectedCoupon)
this.usedCouponId = []
if (couponKeys.length) {
this.couponList.forEach(e => {
if (e.id === this.selectedCoupon[couponKeys].memberCoupon.id) {
this.usedCouponId.push(e.id)
}
})
this.$nextTick(() => {
this.$forceUpdate()
})
}
})
}
})
@@ -361,16 +382,14 @@ export default {
});
},
useCoupon (id) { // 使用优惠券
useCoupon (id, used) { // 使用优惠券
let params = {
way: this.$route.query.way,
memberCouponId: id,
used: true
used: used // true 为使用, false为弃用
}
selectCoupon(params).then(res => {
if (res.success) {
this.init()
}
if (res.success) this.init()
})
},
editInvoice () { // 编辑发票信息
@@ -774,5 +793,16 @@ export default {
.circle-top,.circle-bottom{
right: 22px;
}
.used {
position: absolute;
top: 60px;
right: 40px;
width: 50px;
height: 50px;
}
}
.coupon-list {
max-height: 260px;
overflow: scroll;
}
</style>

View File

@@ -41,12 +41,17 @@
<script>
import * as API_Goods from "@/api/goods";
export default {
data() {
props: {
selectedWay: {
type: Array,
default: new Array()
}
},
data () {
return {
type: "multiple", //单选或者多选 single multiple
cateList: [], // 商品分类列表
selectedWay: [], //选中商品集合
total: "", // 商品总数
goodsParams: { // 请求商品列表参数
pageNumber: 1,
@@ -64,18 +69,17 @@ export default {
loading: false, // 商品加载loading
};
},
props: ["clearFlag"],
watch: {
category(val) {
this.goodsParams.categoryPath = val[2];
},
selectedWay: {
handler() {
handler(val) {
this.$emit("selected", this.selectedWay);
},
deep: true,
immediate: true
},
"goodsParams.categoryPath": {
handler: function () {
this.goodsData = [];
@@ -88,7 +92,7 @@ export default {
this.init();
},
methods: {
handleReachBottom() {
handleReachBottom() { // 页面触底触发加载
setTimeout(() => {
if (
this.goodsParams.pageNumber * this.goodsParams.pageSize <=
@@ -99,17 +103,24 @@ export default {
}
}, 1500);
},
getQueryGoodsList() {
getQueryGoodsList() { // 根据商品分类筛选商品
API_Goods.getGoodsSkuData(this.goodsParams).then((res) => {
this.initGoods(res);
});
},
initGoods(res) {
initGoods(res) { // 获取商品列表
if (res.result.records.length !=0) {
res.result.records.forEach((item) => {
let data = res.result.records;
data.forEach((item) => {
item.selected = false;
item.___type = "goods"; //设置为goods让pc wap知道标识
this.selectedWay.forEach(e => {
if (e.id === item.id) {
item.selected = true
}
})
});
/**
* 解决数据请求中,滚动栏会一直上下跳动
@@ -141,7 +152,6 @@ export default {
deepGroup(val) {
val.forEach((item) => {
let childWay = []; //第二级
let grandWay = []; //第三级
// 第二层
if (item.children) {
item.children.forEach((child) => {
@@ -196,7 +206,12 @@ export default {
this.selectedWay.push(val);
} else {
val.selected = false;
this.selectedWay.splice(index, 1);
for (let i = 0; i<this.selectedWay.length; i++ ) {
if (this.selectedWay[i].id===val.id) {
this.selectedWay.splice(i,1)
break;
}
}
}
},
},

View File

@@ -10,20 +10,13 @@
scrollable
>
<goodsDialog
@selected="
(val) => {
goodsData = val;
}
"
@selected="(val) => {goodsData = val;}"
:selectedWay='goodsData'
ref="goodsDialog"
v-if="goodsFlag"
/>
<linkDialog
@selectedLink="
(val) => {
linkData = val;
}
"
@selectedLink="(val) => {linkData = val;}"
v-else
class="linkDialog"
/>
@@ -41,14 +34,11 @@ export default {
return {
title: "选择", // 模态框标题
goodsFlag: false, // 是否商品选择器
goodsData: "", //选择的商品
goodsData: [], //选择的商品
linkData: "", //选择的链接
flag: false, // 控制模态框显隐
};
},
props: ["types"],
watch: {},
mounted() {},
methods: {
// 关闭弹窗
clickClose() {
@@ -58,7 +48,6 @@ export default {
// 单选商品
singleGoods(){
var timer = setInterval(() => {
if (this.$refs.goodsDialog) {
@@ -66,19 +55,16 @@ export default {
clearInterval(timer);
}
}, 100);
},
clickOK() {
clickOK() { // 确定按钮回调,
if (this.goodsFlag) {
this.$emit("selectedGoodsData", this.goodsData);
} else {
this.$emit("selectedLink", this.linkData);
}
this.clickClose();
// this.clearFlag = false
},
open(type){
open (type) { // 父组件通过ref调用打开商品选择器
this.flag = true;
if(type == 'goods'){
this.goodsFlag = true;
@@ -87,7 +73,7 @@ export default {
}
},
close(){
close(){ // 关闭组件
this.flag = false;
}
},

View File

@@ -223,7 +223,7 @@ export default {
{
title: "状态",
key: "promotionStatus",
minWidth: 100,
width: 100,
fixed: "right",
render: (h, params) => {
let text = "未知",
@@ -250,9 +250,9 @@ export default {
},
},
text
),
)
]);
},
}
},
{
title: "操作",

View File

@@ -114,9 +114,8 @@
v-if="form.scopeType == 'PORTION_GOODS'"
>
<div style="display: flex; margin-bottom: 10px">
<Button type="primary" @click="$refs.skuSelect.open('goods')"
>选择商品</Button
>
<Button type="primary" @click="openSkuList"
>选择商品</Button>
<Button
type="error"
ghost
@@ -466,6 +465,14 @@ export default {
name: "coupon",
});
},
openSkuList() { // 显示商品选择器
this.$refs.skuSelect.open("goods");
let data = JSON.parse(JSON.stringify(this.form.promotionGoodsList))
data.forEach(e => {
e.id = e.skuId
})
this.$refs.skuSelect.goodsData = data;
},
changeSelect(e) {
// 已选商品批量选择
this.selectedGoods = e;
@@ -497,15 +504,9 @@ export default {
this.form.promotionGoodsList.splice(index, 1);
},
selectedGoodsData(item) {
console.log(item);
// 回显已选商品
let ids = [];
let list = [];
this.form.promotionGoodsList.forEach((e) => {
ids.push(e.skuId);
});
item.forEach((e) => {
if (!ids.includes(e.id)) {
list.push({
goodsName: e.goodsName,
price: e.price,
@@ -515,9 +516,8 @@ export default {
sellerName: e.sellerName,
skuId: e.id,
});
}
});
this.form.promotionGoodsList.push(...list);
this.form.promotionGoodsList = list;
},
getGoodsCategory(e) {
// 获取级联选择器商品分类id

View File

@@ -140,12 +140,12 @@ export default {
{
title: "活动类型",
slot: "promotionType",
minWidth: 60,
width: 100,
},
{
title: "活动状态",
key: "promotionStatus",
minWidth: 60,
width: 100,
render: (h, params) => {
let text = "未知",
color = "default";

View File

@@ -183,7 +183,7 @@
style="display: flex; margin-bottom: 10px"
v-if="form.promotionStatus == 'NEW'"
>
<Button type="primary" @click="$refs.skuSelect.open('goods')"
<Button type="primary" @click="openSkuList"
>选择商品</Button
>
<Button
@@ -376,6 +376,14 @@ export default {
);
this.$router.go(-1);
},
openSkuList() { // 显示商品选择器
this.$refs.skuSelect.open("goods");
let data = JSON.parse(JSON.stringify(this.form.promotionGoodsList))
data.forEach(e => {
e.id = e.skuId
})
this.$refs.skuSelect.goodsData = data;
},
getDetail() {
// 获取活动详情
getFullDiscountById(this.id).then((res) => {
@@ -496,15 +504,9 @@ export default {
this.form.promotionGoodsList.splice(index, 1);
},
selectedGoodsData(item) {
console.log(item);
// 回显已选商品
let ids = [];
let list = [];
this.form.promotionGoodsList.forEach((e) => {
ids.push(e.skuId);
});
item.forEach((e) => {
if (!ids.includes(e.id)) {
list.push({
goodsName: e.goodsName,
price: e.price,
@@ -514,10 +516,8 @@ export default {
thumbnail: e.thumbnail,
skuId: e.id,
});
}
});
console.log(list);
this.form.promotionGoodsList.push(...list);
this.form.promotionGoodsList = list;
},
getCouponList(query) {
// 优惠券列表

View File

@@ -155,17 +155,15 @@ export default {
{
title: "活动开始时间",
key: "startTime",
minWidth: 120
},
{
title: "活动结束时间",
key: "endTime",
minWidth: 120
},
{
title: "状态",
key: "promotionStatus",
minWidth: 100,
width: 100,
render: (h, params) => {
let text = "未知",
color = "default";

View File

@@ -36,7 +36,7 @@
</Row>
</Card>
<sku-select ref="skuSelect" @selectedGoodsData="selectedGoodsData"></sku-select>
<sku-select ref="skuSelect" :goodsData="goodsData" @selectedGoodsData="selectedGoodsData"></sku-select>
</div>
</template>
<script>
@@ -65,7 +65,7 @@ export default {
data: [], // 表单数据
total: 0, // 表单数据总数
status: this.$route.query.status, // 查看还是修改
columns: [
columns: [ // 活动详情表头
{
title: "活动名称",
key: "promotionName",
@@ -111,7 +111,7 @@ export default {
},
},
],
goodsColumns: [
goodsColumns: [ // 活动商品表头
{ type: "selection", width: 60, align: "center" },
{
title: "商品名称",
@@ -202,7 +202,6 @@ export default {
handleReset() {
// 重置
// this.$refs.searchForm.resetFields();
this.searchForm.pageNumber = 0;
this.searchForm.promotionName = "";
this.selectDate = null;
@@ -211,7 +210,7 @@ export default {
this.getDataList();
},
clearSelectAll() {
clearSelectAll() { // 清空所有已选项
this.$refs.table.selectAll(false);
},
changeSelect(e) {
@@ -220,7 +219,7 @@ export default {
this.selectCount = e.length;
},
getDataList() {
getDataList() { // 获取商品列表
this.loading = true;
this.searchForm.pintuanId = this.$route.query.id;
@@ -233,14 +232,12 @@ export default {
});
},
getPintuanMsg() {
// 获取拼团详情
getPintuanMsg() { // 获取拼团详情
getPintuanDetail(this.$route.query.id).then((res) => {
if (res.success) this.data.push(res.result);
});
},
delGoods(index) {
// 删除商品
delGoods(index) { // 删除商品
this.goodsData.splice(index, 1);
},
delAll() { // 批量删除商品
@@ -263,13 +260,9 @@ export default {
});
},
selectedGoodsData(item) { // 选择商品
let ids = [];
console.log(item);
let list = [];
this.goodsData.forEach((e) => {
ids.push(e.skuId);
});
item.forEach((e) => {
if (!ids.includes(e.id)) {
list.push({
goodsName: e.goodsName,
price: e.price,
@@ -281,15 +274,19 @@ export default {
skuId: e.id,
categoryPath: e.categoryPath,
});
}
});
this.goodsData.push(...list);
this.goodsData = list;
},
openSkuList() { // 显示商品选择器
this.$refs.skuSelect.open("goods");
let data = JSON.parse(JSON.stringify(this.goodsData))
data.forEach(e => {
e.id = e.skuId
})
this.$refs.skuSelect.goodsData = data;
},
},
mounted() {
mounted () {
this.init();
},
};

View File

@@ -134,6 +134,7 @@ export default {
{
title: "状态",
key: "promotionStatus",
width: 100,
render: (h, params) => {
let text = "未知",
color = "default";

View File

@@ -318,17 +318,17 @@ export default {
},
delGoods(index, id) {
// 删除商品
if (id) {
removeSeckillGoods(this.$route.query.id, id).then((res) => {
if (res.success) {
// if (id) {
// removeSeckillGoods(this.$route.query.id, id).then((res) => {
// if (res.success) {
// this.goodsList[this.tabIndex].list.splice(index, 1);
// this.$Message.success("删除成功!");
// }
// });
// } else {
this.goodsList[this.tabIndex].list.splice(index, 1);
this.$Message.success("删除成功!");
}
});
} else {
this.goodsList[this.tabIndex].list.splice(index, 1);
this.$Message.success("删除成功!");
}
// }
},
delAll() {
if (this.selectCount <= 0) {
@@ -350,43 +350,46 @@ export default {
].list.filter((item) => {
return !ids.includes(item.id);
});
removeSeckillGoods(this.$route.query.id, ids).then((res) => {
if (res.success) {
this.$Message.success("删除成功!");
}
});
// removeSeckillGoods(this.$route.query.id, ids).then((res) => {
// if (res.success) {
// this.$Message.success("删除成功!");
// }
// });
},
});
},
selectedGoodsData(item) {
// 选择器添加商品
let ids = [];
let list = [];
this.goodsList[this.tabIndex].list.forEach((e) => {
ids.push(e.skuId);
});
console.log(item);
item.forEach((e) => {
if (!ids.includes(e.id)) {
list.push({
goodsName: e.goodsName,
price: e.price,
originalPrice: e.price,
promotionApplyStatus: "",
promotionApplyStatus: e.promotionApplyStatus || '',
quantity: e.quantity,
seckillId: this.$route.query.id,
storeId: e.storeId,
storeName: e.storeName,
skuId: e.id,
timeLine: this.data[0].hours.split(",")[this.tabIndex],
});
}
});
this.goodsList[this.tabIndex].list.push(...list);
this.goodsList[this.tabIndex].list = list;
this.$nextTick(()=> {
this.$forceUpdate()
})
},
openSkuList() {
openSkuList() { // 显示商品选择器
this.$refs.skuSelect.open("goods");
let data = JSON.parse(JSON.stringify(this.goodsList[this.tabIndex].list))
data.forEach(e => {
e.id = e.skuId
})
this.$refs.skuSelect.goodsData = data;
},
unixDate(time) {
// 处理报名截止时间