diff --git a/manager/src/api/index.js b/manager/src/api/index.js
index c682b086..12f36057 100644
--- a/manager/src/api/index.js
+++ b/manager/src/api/index.js
@@ -368,6 +368,31 @@ export const setSetting = (key, params) => {
return putRequestWithNoForm(`/setting/setting/put/${key}`, params);
};
+// 微信视频号小店类目(三级)
+export const getWxChannelsThirdCategory = (params) => {
+ return getRequest(`/wxchannels/category/third`, params);
+};
+
+// 微信视频号商品分页
+export const getWxChannelsGoodsPage = (params) => {
+ return getRequest(`/wxchannels/goods`, params);
+};
+
+// 微信视频号订单分页
+export const getWxChannelsOrderPage = (params) => {
+ return getRequest(`/wxchannels/order`, params);
+};
+
+// 微信视频号概况
+export const getWxChannelsOverviewSummary = (params) => {
+ return getRequest(`/wxchannels/overview/summary`, params);
+};
+
+// 微信视频号退单分页
+export const getWxChannelsRefundPage = (params) => {
+ return getRequest(`/wxchannels/refund`, params);
+};
+
// 分页查询敏感词
export const getSensitiveWordsPage = (params) => {
diff --git a/manager/src/views/sys/setting-manage/setting/style.scss b/manager/src/views/sys/setting-manage/setting/style.scss
index a1c96949..06e3f2bd 100644
--- a/manager/src/views/sys/setting-manage/setting/style.scss
+++ b/manager/src/views/sys/setting-manage/setting/style.scss
@@ -4,6 +4,24 @@
.label-btns{
margin-left: 150px;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+}
+
+.es-buttons{
+ display: flex;
+ flex-wrap: wrap;
+ margin-left: 10px;
+}
+
+::v-deep .label-btns > .ivu-btn{
+ margin-right: 10px;
+}
+
+::v-deep .es-buttons .ivu-btn{
+ margin-right: 10px;
+ margin-bottom: 10px;
}
.ivu-form-item{
diff --git a/manager/src/views/wx-channel/components/WxChannelsCategoryTab.vue b/manager/src/views/wx-channel/components/WxChannelsCategoryTab.vue
new file mode 100644
index 00000000..0c1d0bbe
--- /dev/null
+++ b/manager/src/views/wx-channel/components/WxChannelsCategoryTab.vue
@@ -0,0 +1,94 @@
+
+
+
+
+ 强刷
+ 缓存
+
+
+
+
+
+
+
+
+
+
diff --git a/manager/src/views/wx-channel/components/WxChannelsGoodsTab.vue b/manager/src/views/wx-channel/components/WxChannelsGoodsTab.vue
new file mode 100644
index 00000000..55a238a7
--- /dev/null
+++ b/manager/src/views/wx-channel/components/WxChannelsGoodsTab.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
diff --git a/manager/src/views/wx-channel/components/WxChannelsOrderTab.vue b/manager/src/views/wx-channel/components/WxChannelsOrderTab.vue
new file mode 100644
index 00000000..2cb61089
--- /dev/null
+++ b/manager/src/views/wx-channel/components/WxChannelsOrderTab.vue
@@ -0,0 +1,172 @@
+
+
+
+
+
diff --git a/manager/src/views/wx-channel/components/WxChannelsOverviewTab.vue b/manager/src/views/wx-channel/components/WxChannelsOverviewTab.vue
new file mode 100644
index 00000000..6f20a658
--- /dev/null
+++ b/manager/src/views/wx-channel/components/WxChannelsOverviewTab.vue
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+
+
+
视频号总销售额
+
{{ summary.totalSales || 0 }}
+
+
+
+
+
+
+
直播间销售额
+
{{ summary.liveSales || 0 }}
+
+
+
+
+
+
+
橱窗销售额
+
{{ summary.windowSales || 0 }}
+
+
+
+
+
+
+
+
+
视频号退款总金额
+
{{ summary.totalRefund || 0 }}
+
+
+
+
+
+
+
直播间退款金额
+
{{ summary.liveRefund || 0 }}
+
+
+
+
+
+
+
橱窗退款金额
+
{{ summary.windowRefund || 0 }}
+
+
+
+
+
+
+
+
+
+
diff --git a/manager/src/views/wx-channel/components/WxChannelsRefundTab.vue b/manager/src/views/wx-channel/components/WxChannelsRefundTab.vue
new file mode 100644
index 00000000..5d7d9c9a
--- /dev/null
+++ b/manager/src/views/wx-channel/components/WxChannelsRefundTab.vue
@@ -0,0 +1,180 @@
+
+
+
+
+
diff --git a/manager/src/views/wx-channel/components/WxChannelsSettingTab.vue b/manager/src/views/wx-channel/components/WxChannelsSettingTab.vue
new file mode 100644
index 00000000..55c048b5
--- /dev/null
+++ b/manager/src/views/wx-channel/components/WxChannelsSettingTab.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
diff --git a/manager/src/views/wx-channel/wxChannel.vue b/manager/src/views/wx-channel/wxChannel.vue
new file mode 100644
index 00000000..0db97fec
--- /dev/null
+++ b/manager/src/views/wx-channel/wxChannel.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/seller/src/api/goods.js b/seller/src/api/goods.js
index c966f49d..24970318 100644
--- a/seller/src/api/goods.js
+++ b/seller/src/api/goods.js
@@ -268,6 +268,13 @@ export const lowGoods = params => {
return putRequest(`/goods/goods/under`, params);
};
+// 定时上下架商品
+export const scheduleGoodsMarket = params => {
+ return postRequest(`/goods/goods/schedule/market`, params, {
+ "Content-Type": "application/json"
+ });
+};
+
// 获取商品单位列表
export const getGoodsUnitList = params => {
return getRequest(`/goods/goodsUnit`,params);
diff --git a/seller/src/views/goods/goods-seller/goods.vue b/seller/src/views/goods/goods-seller/goods.vue
index 434886c3..de20ea93 100644
--- a/seller/src/views/goods/goods-seller/goods.vue
+++ b/seller/src/views/goods/goods-seller/goods.vue
@@ -78,10 +78,19 @@
-
-
-
-
+
+
+
+ 批量上架
+ 批量下架
+ 批量定时上下架
+ 批量设置物流模板
+ 批量删除
+
+
更新
+
+
+
+
+
+
+
+
Array.from({ length: nowH }, (_, i) => i),
+ disabledMinutes: (hour) => (hour === nowH ? Array.from({ length: nowM }, (_, i) => i) : []),
+ disabledSeconds: (hour, minute) =>
+ hour === nowH && minute === nowM ? Array.from({ length: nowS + 1 }, (_, i) => i) : []
+ };
}
},
methods: {
@@ -569,6 +675,10 @@ export default {
if (v == "lowers") {
this.lowers();
}
+ //批量定时上下架
+ if (v == "scheduleMarket") {
+ this.openScheduleMarketModal();
+ }
//批量删除商品
if (v == "deleteAll") {
this.deleteAll();
@@ -733,6 +843,84 @@ export default {
this.shipTemplateForm.goodsId = data;
this.shipTemplateModal = true;
},
+ openScheduleMarketModal() {
+ if (this.selectCount <= 0) {
+ this.$Message.warning("您还未选择要定时上下架的商品");
+ return;
+ }
+ this.scheduleMarketForm = {
+ status: "UPPER",
+ triggerTime: null,
+ reason: ""
+ };
+ this.scheduleMarketModal = true;
+ },
+ handleScheduleMarketTimeChange() {
+ if (!this.scheduleMarketForm || !this.scheduleMarketForm.triggerTime) return;
+ const selected =
+ this.scheduleMarketForm.triggerTime instanceof Date
+ ? this.scheduleMarketForm.triggerTime
+ : new Date(this.scheduleMarketForm.triggerTime);
+
+ const selectedMs = selected.getTime();
+ if (!Number.isFinite(selectedMs)) return;
+ if (selectedMs <= Date.now()) {
+ this.$Message.warning("触发时间只能选择当前时间之后");
+ this.scheduleMarketForm.triggerTime = new Date(Date.now() + 60 * 1000);
+ }
+ },
+ submitScheduleMarket() {
+ if (this.selectCount <= 0) {
+ this.$Message.warning("您还未选择要定时上下架的商品");
+ return;
+ }
+ if (!this.scheduleMarketForm.status) {
+ this.$Message.warning("请选择状态");
+ return;
+ }
+ if (!this.scheduleMarketForm.triggerTime) {
+ this.$Message.warning("请选择触发时间");
+ return;
+ }
+
+ const triggerTime =
+ this.scheduleMarketForm.triggerTime instanceof Date
+ ? this.scheduleMarketForm.triggerTime.getTime()
+ : new Date(this.scheduleMarketForm.triggerTime).getTime();
+
+ if (!Number.isFinite(triggerTime)) {
+ this.$Message.error("触发时间格式不正确");
+ return;
+ }
+ if (triggerTime <= Date.now()) {
+ this.$Message.warning("触发时间需大于当前时间");
+ return;
+ }
+
+ const goodsIds = this.selectList.map((i) => i.id);
+
+ const payload = {
+ goodsIds,
+ status: this.scheduleMarketForm.status,
+ triggerTime,
+ reason: this.scheduleMarketForm.reason || undefined
+ };
+
+ this.scheduleMarketLoading = true;
+ scheduleGoodsMarket(payload)
+ .then((res) => {
+ if (res && res.success) {
+ this.$Message.success("设置成功");
+ this.scheduleMarketModal = false;
+ this.clearSelectAll();
+ this.getDataList();
+ this.getNumberData();
+ }
+ })
+ .finally(() => {
+ this.scheduleMarketLoading = false;
+ });
+ },
// 获取商品列表数据
getDataList() {
this.loading = true;