416 lines
17 KiB
Vue
Raw Normal View History

2022-10-18 19:30:05 +08:00
<template>
<div>
<el-card style="margin-top: 10px" class="box-card">
2022-10-21 13:09:30 +08:00
<el-form ref="group" :rules="rules" :model="group" label-width="80px">
<el-form-item label="店铺" prop="shop_id">
<el-select v-model="group.shop_id" :disabled="shopDisable">
2022-10-19 21:06:09 +08:00
<el-option v-for="store in stores" :key="store.id" :label="store.name" :value="store.id">
</el-option>
2022-10-18 19:30:05 +08:00
</el-select>
</el-form-item>
2022-10-21 13:09:30 +08:00
<el-form-item label="活动标题" prop="title">
2022-10-19 21:06:09 +08:00
<el-input type="textarea" v-model="group.title" style="width: 500px;"></el-input>
2022-10-18 19:30:05 +08:00
</el-form-item>
<el-form-item label="团购商品">
2022-10-21 13:09:30 +08:00
<el-button @click="centerDialog()">从商品列表导入</el-button>
<el-input placeholder="搜索商品名称、编码" v-model="groupGoodsSearch.external_sku_id"
2022-10-19 21:06:09 +08:00
style="margin-left: 20px; width: 400px;">
2022-10-21 13:09:30 +08:00
<template slot="append" @click="groupGoodsList();">查询</template>
2022-10-18 19:30:05 +08:00
</el-input>
<div>
2022-10-21 13:09:30 +08:00
<el-button type="text" @click="groupGoodsSearch.status=2;groupGoodsList();">
全部({{groupGoods.meta.num}})
</el-button>
<el-button type="text" @click="groupGoodsSearch.status=1;groupGoodsList();">
在售中({{groupGoods.meta.on_num}})
</el-button>
<el-button type="text" @click="groupGoodsSearch.status=0;groupGoodsList();">
已售罄({{groupGoods.meta.off_num}})
2022-10-19 21:06:09 +08:00
</el-button>
2022-10-18 19:30:05 +08:00
</div>
2022-10-19 21:06:09 +08:00
<el-table ref="multipleTableGroup" @selection-change="handleSelectionChangeGroup"
v-loading="groupLoading" :data="groupGoods.data" border style="width: 100%" height="800">
<el-table-column type="selection" width="55">
</el-table-column>
2022-10-21 13:09:30 +08:00
<el-table-column prop="sort" label="排序">
2022-10-18 19:30:05 +08:00
</el-table-column>
<el-table-column prop="name" label="商品名称">
</el-table-column>
2022-10-19 21:06:09 +08:00
<el-table-column prop="code" label="编码">
2022-10-18 19:30:05 +08:00
</el-table-column>
<el-table-column prop="category" label="分类">
</el-table-column>
2022-10-19 21:06:09 +08:00
<el-table-column prop="num" label="库存">
2022-10-18 19:30:05 +08:00
</el-table-column>
<el-table-column prop="limit_buy" label="限购数量">
</el-table-column>
2022-10-19 21:06:09 +08:00
<el-table-column prop="price" label="价格">
2022-10-18 19:30:05 +08:00
</el-table-column>
<el-table-column prop="options" label="操作">
<template slot-scope="scope">
<el-button type="text" size="small">编辑</el-button>
2022-10-19 21:06:09 +08:00
<el-button @click="setTop(scope.row)" type="text" size="small">置顶</el-button>
2022-10-18 19:30:05 +08:00
<el-button type="text" size="small">设置限购</el-button>
<el-button type="text" size="small">设置秒杀</el-button>
<el-button type="text" size="small">删除</el-button>
</template>
</el-table-column>
</el-table>
2022-10-19 21:06:09 +08:00
<div
style="display: flex; justify-content: space-between; align-items: center; line-height: 32px; margin-top: 20px;">
<el-button type="danger" size="small" @click="batchRemove();">批量删除</el-button>
2022-10-21 13:09:30 +08:00
<el-pagination @size-change="handleSizeChangeGroup" @current-change="groupGoodsList"
2022-10-19 21:06:09 +08:00
:current-page.sync="groupGoods.meta.per_page" :page-sizes="[20, 30, 50, 100]"
:page-size="groupGoods.meta.size" layout="sizes, prev, pager, next"
:total="groupGoods.meta.total">
2022-10-18 19:30:05 +08:00
</el-pagination>
</div>
</el-form-item>
2022-10-21 13:09:30 +08:00
<el-form-item label="团购时间" prop="datetimerange">
2022-10-19 21:06:09 +08:00
<el-date-picker v-model="group.datetimerange" type="datetimerange" range-separator="至"
2022-10-21 13:09:30 +08:00
start-placeholder="开始时间" end-placeholder="结束时间" value-format="yyyy-MM-dd HH:mm:ss"
@change="setTime">
2022-10-18 19:30:05 +08:00
</el-date-picker>
</el-form-item>
2022-10-19 21:06:09 +08:00
<el-form-item style="display: flex; justify-content: flex-end;">
<el-button @click="onAdd(1);">保存预览</el-button>
<el-button type="primary" @click="onAdd(0);">发布</el-button>
2022-10-21 13:09:30 +08:00
<el-button v-show="shopDisable" type="success" @click="onEdit();">修改团购</el-button>
2022-10-18 19:30:05 +08:00
</el-form-item>
</el-form>
</el-card>
2022-10-21 13:09:30 +08:00
<el-dialog :title="dialogTitle" :visible.sync="centerDialogVisible" width="80%" :close-on-click-modal="false">
2022-10-19 21:06:09 +08:00
<el-form ref="goodsList" :model="goodsList" label-width="80px">
<el-form-item label="商品分类" prop="type_id">
<el-radio-group v-model="goodsList.type_id" size="small" @change="goodsSearch()">
<el-radio-button label="0">全部</el-radio-button>
<el-radio-button v-for="goodsType in types" :key="goodsType.id" :label="goodsType.id">
{{goodsType.name}}</el-radio-button>
</el-radio-group>
2022-10-18 19:30:05 +08:00
</el-form-item>
2022-10-19 21:06:09 +08:00
<el-form-item label="商品品牌" prop="brand_id">
<el-radio-group v-model="goodsList.brand_id" size="small" @change="goodsSearch()">
<el-radio-button label="0">全部</el-radio-button>
<el-radio-button v-for="goodsBrand in brands" :key="goodsBrand.id" :label="goodsBrand.id">
{{goodsBrand.name}}</el-radio-button>
</el-radio-group>
2022-10-18 19:30:05 +08:00
</el-form-item>
2022-10-21 13:09:30 +08:00
<el-form-item label="搜索" prop="goods_keyword">
<el-input placeholder="搜索商品名称、编码" v-model="goodsList.goods_keyword" style="width: 400px;">
2022-10-18 19:30:05 +08:00
</el-input>
2022-10-21 13:09:30 +08:00
<el-radio-group v-model="goodsList.has_stock" style="margin: 0 30px">
2022-10-19 21:06:09 +08:00
<el-radio label="1">有库存</el-radio>
2022-10-21 13:09:30 +08:00
<el-radio label="0">全部</el-radio>
2022-10-19 21:06:09 +08:00
</el-radio-group>
<el-button type="primary" size="small" @click="goodsSearch();">查询</el-button>
2022-10-21 13:09:30 +08:00
<el-button size="small" @click="resetForm()">重置</el-button>
2022-10-18 19:30:05 +08:00
</el-form-item>
</el-form>
2022-10-21 13:09:30 +08:00
<el-table ref="multipleTable" @select="handleSelect" v-loading="goodsLoading" :data="goods.data" border
style="width: 100%" height="520" :row-key="getRowKeys">
<el-table-column type="selection" :reserve-selection="true" width="55">
2022-10-19 21:06:09 +08:00
</el-table-column>
<el-table-column label="商品信息">
<template slot-scope="scope">
{{scope.row.goods.title + ' ' + scope.row.title}}
</template>
</el-table-column>
<el-table-column label="编码">
<template slot-scope="scope">
{{scope.row.goods.goods_code + '_' + scope.row.sku_code}}
</template>
</el-table-column>
<el-table-column label="品牌">
<template slot-scope="scope">
2022-10-21 13:09:30 +08:00
{{scope.row.goods.brand ? scope.row.goods.brand.name : ''}}
2022-10-19 21:06:09 +08:00
</template>
</el-table-column>
<el-table-column label="分类">
<template slot-scope="scope">
{{scope.row.goods.type.name}}
</template>
</el-table-column>
<el-table-column prop="num" label="库存">
</el-table-column>
</el-table>
<div style="display: flex; flex-direction: row-reverse; align-items: center; margin-top: 10px;">
2022-10-21 13:09:30 +08:00
<el-pagination @size-change="handleSizeChange" @current-change="goodsSearch"
2022-10-19 21:06:09 +08:00
:current-page.sync="goods.meta.current_page" :page-sizes="[20, 30, 50, 100]"
:page-size="goods.meta.per_page" layout="sizes, prev, pager, next" :total="goods.meta.total">
</el-pagination>
</div>
2022-10-18 19:30:05 +08:00
<span slot="footer" class="dialog-footer">
2022-10-19 21:06:09 +08:00
<div style="display: flex; justify-content: space-between; align-items: center;">
<div>
<el-button @click="toggleSelection(1)">全选</el-button>
<el-button @click="toggleSelection(0)">取消全选</el-button>
</div>
<div>已选 {{selectNum}} </div>
<div>
2022-10-21 13:09:30 +08:00
<el-button type="primary" @click="addGoods();"> </el-button>
2022-10-19 21:06:09 +08:00
<el-button @click="centerDialogVisible = false"> </el-button>
</div>
2022-10-18 19:30:05 +08:00
</div>
</span>
</el-dialog>
</div>
</template>
<script>
2022-10-19 21:06:09 +08:00
import { storeList } from "../../api/shop";
2022-10-21 13:09:30 +08:00
import { addGroup, showGroup, editGroup, getGroupGoods, addGroupGoods } from "../../api/group";
2022-10-19 21:06:09 +08:00
import { goods_types, Brand_goods_types } from "../../api/rankingData";
2022-10-21 13:09:30 +08:00
import { addGoods, getGoodsList } from "../../api/goods";
2022-10-18 19:30:05 +08:00
export default {
data() {
return {
2022-10-19 21:06:09 +08:00
group: {
2022-10-21 13:09:30 +08:00
shop_id: '',
2022-10-19 21:06:09 +08:00
status: "",
title: "",
2022-10-21 13:09:30 +08:00
start_time: "",
end_time: "",
is_save_preview: 1,
datetimerange: []
},
rules: {
shop_id: [
{ required: true, message: '请选择店铺' },
],
title: [
{ required: true, message: '请输入活动标题', trigger: 'blur' },
],
datetimerange: [
{ required: true, message: '请选择团购时间', trigger: 'blur' },
],
2022-10-19 21:06:09 +08:00
},
groupGoods: {
data: [],
meta: {
total: 0,
current_page: 1,
per_page: 20,
2022-10-21 13:09:30 +08:00
num: 0,
on_num: 0,
off_num: 0,
},
},
groupGoodsSearch: {
external_sku_id: "",
status: 0,
page: 1,
per_page: 20,
ids: [],
group_id: 0
2022-10-19 21:06:09 +08:00
},
groupLoading: false,
2022-10-21 13:09:30 +08:00
goodsLoading: true,
2022-10-19 21:06:09 +08:00
goods: {
data: [],
meta: {
total: 0,
current_page: 1,
per_page: 20,
}
2022-10-18 19:30:05 +08:00
},
2022-10-19 21:06:09 +08:00
centerDialogVisible: false,
stores: [],
types: [],
brands: [],
goodsList: {
2022-10-21 13:09:30 +08:00
goods_keyword: "",
has_stock: "1",
2022-10-19 21:06:09 +08:00
type_id: 0,
brand_id: 0,
2022-10-21 13:09:30 +08:00
},
goodsListPage: {
2022-10-19 21:06:09 +08:00
page: 1,
2022-10-21 13:09:30 +08:00
per_page: 20,
2022-10-19 21:06:09 +08:00
},
2022-10-21 13:09:30 +08:00
shopDisable: false,
2022-10-19 21:06:09 +08:00
dialogTitle: "您的商品库中已有 0 件商品",
selectNum: 0,
2022-10-21 13:09:30 +08:00
selectGoods: [],
allGoods: [],
2022-10-19 21:06:09 +08:00
}
},
mounted() {
this.getStoreList();
2022-10-21 13:09:30 +08:00
let groupId = parseInt(this.$route.query.id);
if (groupId) {
this.groupGoodsSearch.group_id = groupId;
this.shopDisable = true;
2022-10-19 21:06:09 +08:00
this.getGoupInfo(this.$route.query.id);
2022-10-21 13:09:30 +08:00
this.groupGoodsList();
this.dialogTitle = "您的商品库中已有 " + this.groupGoods.meta.total + " 件商品";
2022-10-18 19:30:05 +08:00
}
2022-10-19 21:06:09 +08:00
this.getbrandType();
this.getgoodsType();
this.goodsSearch();
2022-10-18 19:30:05 +08:00
},
methods: {
2022-10-19 21:06:09 +08:00
getStoreList() {
2022-10-21 13:09:30 +08:00
let params = {
2022-10-19 21:06:09 +08:00
page: 0,
per_page: 999,
2022-10-21 13:09:30 +08:00
plat_id: 1
2022-10-19 21:06:09 +08:00
};
2022-10-21 13:09:30 +08:00
storeList(params).then((res) => {
2022-10-19 21:06:09 +08:00
this.stores = res.data.data;
});
2022-10-18 19:30:05 +08:00
},
2022-10-19 21:06:09 +08:00
onAdd(is_save_preview) {
2022-10-21 13:09:30 +08:00
this.group.is_save_preview = is_save_preview;
this.$refs.group.validate((valid) => {
if (valid) {
alert('submit!');
} else {
return false;
}
});
2022-10-19 21:06:09 +08:00
},
onEdit() {
2022-10-21 13:09:30 +08:00
this.$refs.group.validate((valid) => {
if (valid) {
alert('edit!');
} else {
return false;
}
});
2022-10-19 21:06:09 +08:00
},
setTop() {
2022-10-18 19:30:05 +08:00
2022-10-19 21:06:09 +08:00
},
handleSizeChangeGroup(val) {
2022-10-21 13:09:30 +08:00
this.groupGoodsSearch.per_page = val;
this.groupGoodsList();
2022-10-19 21:06:09 +08:00
},
2022-10-21 13:09:30 +08:00
groupGoodsList(page = 1) {
this.groupGoodsSearch.page = page;
getGroupGoods(params).then((res) => {
this.groupGoods = res.data;
})
2022-10-19 21:06:09 +08:00
},
getGoupInfo(id) {
// showGroup(id).then((res) => {
// })
},
getgoodsType() {
let params = {
2022-10-21 13:09:30 +08:00
per_page: 9999,
2022-10-19 21:06:09 +08:00
};
goods_types(params).then((res) => {
this.types = res.data.data;
});
},
getbrandType() {
let params = {
2022-10-21 13:09:30 +08:00
per_page: 9999,
2022-10-19 21:06:09 +08:00
};
Brand_goods_types(params).then((res) => {
this.brands = res.data.data;
});
},
2022-10-21 13:09:30 +08:00
handleSelectionChangeGroup() {
},
setTime(val) {
this.group.start_time = val[0];
this.group.end_time = val[1];
},
// 从商品列表导入
centerDialog() {
if (this.group.shop_id) {
this.centerDialogVisible = true;
} else {
this.$message.error('请先选择店铺');
}
},
goodsSearch(page = 1) {
this.goodsList.page = page;
this.goodsList.per_page = this.goodsListPage.per_page;
this.goodsLoading = true;
getGoodsList(this.goodsList).then((res) => {
2022-10-19 21:06:09 +08:00
this.goods = res.data;
2022-10-21 13:09:30 +08:00
this.goods.meta.per_page = parseInt(this.goods.meta.per_page);
this.goods.data.forEach((row, i) => {
if (undefined !== this.selectGoods[row.id]) {
this.$refs.multipleTable.toggleRowSelection(row, true);
}
})
this.goodsLoading = false;
2022-10-19 21:06:09 +08:00
})
2022-10-21 13:09:30 +08:00
if (1 === page) {
this.getAllGoods(this.goodsList);
}
},
getAllGoods(params) {
params.page = 1;
params.per_page = 9999;
getGoodsList(params).then((res) => {
this.allGoods = res.data.data;
})
},
handleSizeChange(val) {
this.goodsListPage.per_page = val;
this.goodsSearch();
},
getRowKeys(row) {
return row.id;
2022-10-19 21:06:09 +08:00
},
toggleSelection(isAll) {
if (isAll) {
2022-10-21 13:09:30 +08:00
this.allGoods.forEach((sku, i) => {
if (undefined === this.selectGoods[sku.id]) {
this.selectNum++;
}
this.selectGoods[sku.id] = 1;
})
this.goods.data.forEach((row, i) => {
this.$refs.multipleTable.toggleRowSelection(row, true);
})
2022-10-19 21:06:09 +08:00
} else {
2022-10-21 13:09:30 +08:00
this.allGoods.forEach((sku, i) => {
if (undefined !== this.selectGoods[sku.id]) {
delete this.selectGoods[sku.id];
this.selectNum--;
}
})
2022-10-19 21:06:09 +08:00
this.$refs.multipleTable.clearSelection();
}
},
2022-10-21 13:09:30 +08:00
handleSelect(selection, row) {
if (undefined === this.selectGoods[row.id]) {
this.selectGoods[row.id] = 1;
this.selectNum++;
} else {
delete this.selectGoods[row.id];
this.selectNum--;
}
2022-10-18 19:30:05 +08:00
},
2022-10-21 13:09:30 +08:00
resetForm() {
this.$refs.goodsList.resetFields();
this.goodsSearch();
2022-10-19 21:06:09 +08:00
},
2022-10-21 13:09:30 +08:00
addGoods() {
let ids = [];
this.selectGoods.forEach((v, k) => {
if (k !== undefined) {
ids.push(k)
}
})
let params = {
group_id: this.groupGoodsSearch.group_id,
shop_id: this.group.shop_id,
ids: ids
}
addGroupGoods(params).then((res) => {
})
2022-10-18 19:30:05 +08:00
}
}
}
</script>