feat(商品管理): 添加商品复制功能并优化批量操作

- 在商品操作页面添加复制商品功能,通过copyId参数区分复制操作
- 复制商品时自动清除原商品ID确保提交为新商品
- 优化批量操作按钮功能,包括上架、下架、删除和设置物流模板
- 移除未使用的批量规格更新功能
- 调整商品列表操作按钮布局,将复制功能加入操作列
This commit is contained in:
pikachu1995@126.com
2025-09-09 17:04:58 +08:00
parent 7db8484a7c
commit 7b30ea343f
3 changed files with 87 additions and 132 deletions

View File

@@ -78,10 +78,10 @@
<Row class="operation padding-row"> <Row class="operation padding-row">
<Button @click="addGoods" type="info">添加商品</Button> <Button @click="addGoods" type="info">添加商品</Button>
<Button @click="openImportGoods" >导入商品</Button> <Button @click="openImportGoods" >导入商品</Button>
<Button @click="openImportGoods" >批量上架</Button> <Button @click="uppers" >批量上架</Button>
<Button @click="openImportGoods" >批量下架</Button> <Button @click="lowers" >批量下架</Button>
<Button @click="openImportGoods" >批量删除</Button> <Button @click="deleteAll" >批量删除</Button>
<Button @click="openImportGoods" >批量设置物流模板</Button> <Button @click="batchShipTemplate" >批量设置物流模板</Button>
</Row> </Row>
<Table <Table
@@ -143,9 +143,7 @@
border border
></Table> ></Table>
</TabPane> </TabPane>
<TabPane label="批量规格更新" name="stockAll">
<Input type="number" v-model="stockAllUpdate" placeholder="统一规格修改" />
</TabPane>
</Tabs> </Tabs>
<div slot="footer"> <div slot="footer">
@@ -226,6 +224,8 @@ export default {
logisticsTemplate: [], // 物流列表 logisticsTemplate: [], // 物流列表
updateStockModalVisible: false, // 更新库存模态框显隐 updateStockModalVisible: false, // 更新库存模态框显隐
stockAllUpdate: undefined, // 更新库存数量 stockAllUpdate: undefined, // 更新库存数量
selectList: [], // 选中的商品列表
selectCount: 0, // 选中的商品数量
searchForm: { searchForm: {
// 搜索框初始化对象 // 搜索框初始化对象
pageNumber: 1, // 当前页数 pageNumber: 1, // 当前页数
@@ -381,6 +381,28 @@ export default {
}, },
"上架" "上架"
), ),
h("span", {
style: {
margin: "0 8px",
color: "#dcdee2"
}
}, "|"),
h(
"a",
{
style: {
color: "#2d8cf0",
cursor: "pointer",
textDecoration: "none"
},
on: {
click: () => {
this.copyGoods(params.row);
},
},
},
"复制"
),
]); ]);
} else { } else {
return h("div", [ return h("div", [
@@ -444,6 +466,28 @@ export default {
}, },
"下架" "下架"
), ),
h("span", {
style: {
margin: "0 8px",
color: "#dcdee2"
}
}, "|"),
h(
"a",
{
style: {
color: "#2d8cf0",
cursor: "pointer",
textDecoration: "none"
},
on: {
click: () => {
this.copyGoods(params.row);
},
},
},
"复制"
),
]); ]);
} }
}, },
@@ -458,132 +502,23 @@ export default {
return h("div", {}, params.row.simpleSpecs); return h("div", {}, params.row.simpleSpecs);
}, },
}, },
{
title: "审核状态",
key: "authFlag",
width: 130,
render: (h, params) => {
if (params.row.authFlag == "TOBEAUDITED") {
return h("Tag", { props: { color: "blue" } }, "待审核");
} else if (params.row.authFlag == "PASS") {
return h("Tag", { props: { color: "green" } }, "通过");
} else if (params.row.authFlag == "REFUSE") {
return h("Tag", { props: { color: "red" } }, "审核拒绝");
}
},
},
{ {
title: "操作", title: "操作",
key: "action", key: "action",
align: "center", align: "center",
fixed: "right",
width: 200, width: 200,
render: (h, params) => { render: (h, params) => {
if (params.row.marketEnable == "DOWN") { let vm = this;
return h("div", [ return h("InputNumber", {
h( props: {
"a", value: params.row.quantity,
{ },
style: { on: {
color: "#2d8cf0", "on-change": (event) => {
cursor: "pointer", vm.stockList[params.index].quantity = event;
textDecoration: "none" },
}, },
on: { });
click: () => {
this.editGoods(params.row);
},
},
},
"编辑"
),
h("span", {
style: {
margin: "0 8px",
color: "#dcdee2"
}
}, "|"),
h(
"a",
{
style: {
color: "#2d8cf0",
cursor: "pointer",
textDecoration: "none"
},
on: {
click: () => {
this.upper(params.row);
},
},
},
"上架"
),
]);
} else {
return h("div", [
h(
"a",
{
style: {
color: "#2d8cf0",
cursor: "pointer",
textDecoration: "none"
},
on: {
click: () => {
this.editGoods(params.row);
},
},
},
"编辑"
),
h("span", {
style: {
margin: "0 8px",
color: "#dcdee2"
}
}, "|"),
h(
"a",
{
style: {
color: "#2d8cf0",
cursor: "pointer",
textDecoration: "none"
},
on: {
click: () => {
this.getStockDetail(params.row.id);
},
},
},
"库存"
),
h("span", {
style: {
margin: "0 8px",
color: "#dcdee2"
}
}, "|"),
h(
"a",
{
style: {
color: "#2d8cf0",
cursor: "pointer",
textDecoration: "none"
},
on: {
click: () => {
this.lower(params.row);
},
},
},
"下架"
),
]);
}
}, },
}, },
], ],
@@ -619,6 +554,10 @@ export default {
editGoods(v) { editGoods(v) {
this.$router.push({ name: "goods-operation-edit", query: { id: v.id } }); this.$router.push({ name: "goods-operation-edit", query: { id: v.id } });
}, },
// 复制商品
copyGoods(v) {
this.$router.push({ name: "goods-operation", query: { copyId: v.id } });
},
//批量操作 //批量操作
handleDropdown(v) { handleDropdown(v) {
@@ -852,7 +791,7 @@ export default {
let params = { let params = {
goodsId: ids.toString(), goodsId: ids.toString(),
}; };
// 批量 // 批量
lowGoods(params).then((res) => { lowGoods(params).then((res) => {
this.$Modal.remove(); this.$Modal.remove();
if (res.success) { if (res.success) {

View File

@@ -44,8 +44,8 @@ export default {
} }
}, },
mounted() { mounted() {
// 编辑商品、模板 // 编辑商品、模板、复制商品
if (this.$route.query.id || this.$route.query.draftId) { if (this.$route.query.id || this.$route.query.draftId || this.$route.query.copyId) {
this.activestep = 1; this.activestep = 1;
} else { } else {
this.activestep = 0 this.activestep = 0

View File

@@ -1053,6 +1053,11 @@ export default {
this.baseInfoForm = { ...this.baseInfoForm, ...response.result }; this.baseInfoForm = { ...this.baseInfoForm, ...response.result };
this.baseInfoForm.release = 1; //即使是被放入仓库,修改的时候也会显示会立即发布 this.baseInfoForm.release = 1; //即使是被放入仓库,修改的时候也会显示会立即发布
this.categoryId = response.result.categoryPath.split(",")[2]; this.categoryId = response.result.categoryPath.split(",")[2];
// 如果是复制商品需要清除ID确保提交时作为新商品
if (this.$route.query.copyId) {
this.baseInfoForm.id = "";
}
if ( if (
response.result.goodsGalleryList && response.result.goodsGalleryList &&
@@ -1837,7 +1842,11 @@ export default {
} }
this.baseInfoForm.wholesaleList = this.wholesaleData; this.baseInfoForm.wholesaleList = this.wholesaleData;
} }
this.baseInfoForm.goodsId = this.goodsId;
// 判断是否是复制商品
if (!this.$route.query.copyId) {
this.baseInfoForm.goodsId = this.goodsId;
}
let submit = JSON.parse(JSON.stringify(this.baseInfoForm)); let submit = JSON.parse(JSON.stringify(this.baseInfoForm));
if ( if (
submit.goodsGalleryFiles && submit.goodsGalleryFiles &&
@@ -1918,7 +1927,8 @@ export default {
submit.recommend submit.recommend
? (submit.recommend = true) ? (submit.recommend = true)
: (submit.recommend = false); : (submit.recommend = false);
if (this.goodsId) { // 判断是否是复制商品
if (this.goodsId && !this.$route.query.copyId) {
API_GOODS.editGoods(this.goodsId, submit).then((res) => { API_GOODS.editGoods(this.goodsId, submit).then((res) => {
if (res.success) { if (res.success) {
this.submitLoading = false; this.submitLoading = false;
@@ -1926,6 +1936,9 @@ export default {
} else { } else {
this.submitLoading = false; this.submitLoading = false;
} }
}).catch(() => {
this.submitLoading = false;
this.$Message.error("保存失败请重试");
}); });
} else { } else {
API_GOODS.createGoods(submit).then((res) => { API_GOODS.createGoods(submit).then((res) => {
@@ -2018,6 +2031,9 @@ export default {
if (this.$route.query.id || this.$route.query.draftId) { if (this.$route.query.id || this.$route.query.draftId) {
// 编辑商品、模板 // 编辑商品、模板
this.GET_GoodData(this.$route.query.id, this.$route.query.draftId); this.GET_GoodData(this.$route.query.id, this.$route.query.draftId);
} else if (this.$route.query.copyId) {
// 复制商品
this.GET_GoodData(this.$route.query.copyId);
} else { } else {
// 新增商品、模板 // 新增商品、模板
if (this.firstData.tempId) { if (this.firstData.tempId) {