diff --git a/src/api/system/favoriteProduct.js b/src/api/system/favoriteProduct.js
index 44f0b07..37ed701 100644
--- a/src/api/system/favoriteProduct.js
+++ b/src/api/system/favoriteProduct.js
@@ -1,5 +1,56 @@
import request from '@/utils/request'
+// 列表
+export function listFavoriteProduct(query) {
+ return request({
+ url: '/jarvis/favoriteProduct/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 详情
+export function getFavoriteProduct(id) {
+ return request({
+ url: `/jarvis/favoriteProduct/${id}`,
+ method: 'get'
+ })
+}
+
+// 新增
+export function addFavoriteProduct(data) {
+ return request({
+ url: '/jarvis/favoriteProduct',
+ method: 'post',
+ data
+ })
+}
+
+// 修改
+export function updateFavoriteProduct(data) {
+ return request({
+ url: '/jarvis/favoriteProduct',
+ method: 'put',
+ data
+ })
+}
+
+// 删除
+export function delFavoriteProduct(ids) {
+ return request({
+ url: `/jarvis/favoriteProduct/${ids}`,
+ method: 'delete'
+ })
+}
+
+// 更新置顶状态
+export function updateTopStatus(id, isTop) {
+ return request({
+ url: `/jarvis/favoriteProduct/updateTopStatus/${id}/${isTop}`,
+ method: 'put'
+ })
+}
+
// 添加到常用商品
export function addToFavorites(data) {
return request({
@@ -9,17 +60,24 @@ export function addToFavorites(data) {
})
}
-// 更新发品信息(商品ID、状态等)
-export function updateProductInfo(data) {
+// 根据skuid查询是否已存在
+export function getBySkuid(skuid) {
return request({
- url: '/jarvis/favoriteProduct/updateProductInfo',
- method: 'put',
- data
+ url: `/jarvis/favoriteProduct/getBySkuid/${encodeURIComponent(skuid)}`,
+ method: 'get'
+ })
+}
+
+// 用户的常用商品列表
+export function getUserFavorites() {
+ return request({
+ url: '/jarvis/favoriteProduct/userFavorites',
+ method: 'get'
})
}
// 从常用商品快速发品
-export function quickPublish(id, appid) {
+export function quickPublishFromFavorite(id, appid) {
return request({
url: `/jarvis/favoriteProduct/quickPublish/${id}`,
method: 'post',
@@ -27,4 +85,11 @@ export function quickPublish(id, appid) {
})
}
-
+// 更新发品信息(商品ID、状态等)
+export function updateProductInfo(data) {
+ return request({
+ url: '/jarvis/favoriteProduct/updateProductInfo',
+ method: 'put',
+ data
+ })
+}
\ No newline at end of file
diff --git a/src/components/PublishDialog.vue b/src/components/PublishDialog.vue
index 6b68f15..59df189 100644
--- a/src/components/PublishDialog.vue
+++ b/src/components/PublishDialog.vue
@@ -112,9 +112,32 @@
+
+
+
+ 状态:{{ createdProduct.productStatus || '-' }}
+ 商家编码:{{ createdProduct.outerId || '-' }}
+ 复制ID
+ 复制商家编码
+
+
+
@@ -132,6 +155,8 @@ export default {
return {
internalVisible: false,
loading: false,
+ publishLoading: false,
+ createdProduct: null,
wenanOptions: [],
productImages: [],
form: {
@@ -236,6 +261,22 @@ export default {
'form.channelCatId'(val) { this.loadProperties(); }
},
methods: {
+ copyText(text) {
+ const val = String(text || '').trim();
+ if (!val) { this.$modal.msgWarning('无可复制的内容'); return; }
+ if (navigator.clipboard && window.isSecureContext) {
+ navigator.clipboard.writeText(val).then(() => { this.$modal.msgSuccess('复制成功'); }).catch(() => { this.fallbackCopy(val); });
+ } else {
+ this.fallbackCopy(val);
+ }
+ },
+ fallbackCopy(text) {
+ const ta = document.createElement('textarea');
+ ta.value = text; ta.style.position = 'fixed'; ta.style.left = '-9999px';
+ document.body.appendChild(ta); ta.focus(); ta.select();
+ try { document.execCommand('copy'); this.$modal.msgSuccess('复制成功'); } catch(e){ this.$modal.msgError('复制失败'); }
+ document.body.removeChild(ta);
+ },
async bootstrap() {
// 初始化表单与文案/图片
const d = this.initialData || {};
@@ -349,25 +390,32 @@ export default {
const outerId = res.data && (res.data.outerId || (res.data.data && res.data.data.outerId));
if (outerId) this.$modal.msgSuccess(`发品成功,商家编码:${outerId}`); else this.$modal.msgSuccess('发品提交成功');
} catch(e){ this.$modal.msgSuccess('发品提交成功'); }
- // 自动上架(需要返回的 productId 与 userName)
- try {
- const productId = this.extractProductId(res.data);
- if (productId && this.form.userName) {
- const pubRes = await publishProduct({ productId, userName: this.form.userName, appid: this.form.appid });
- if (pubRes && pubRes.code === 200) {
- const code = (pubRes.data && pubRes.data.code) ?? pubRes.code;
- if (code === 0 || code === 200) this.$modal.msgSuccess('上架成功'); else this.$modal.msgWarning('上架已提交或状态未知');
- } else {
- this.$modal.msgError((pubRes && pubRes.msg) || '上架失败');
- }
- }
- } catch (e) { /* 忽略上架异常,仅提示 */ }
+ // 记录创建成功的商品,保留弹窗供手动“上架”
+ const productId = this.extractProductId(res.data) || (res.data && (res.data.product_id || (res.data.data && res.data.data.product_id)));
+ const productStatus = res.data && (res.data.product_status || (res.data.data && res.data.data.product_status));
+ const outerId2 = res.data && (res.data.outerId || res.data.outer_id || (res.data.data && (res.data.data.outerId || res.data.data.outer_id)));
+ this.createdProduct = { productId, productStatus, outerId: outerId2 };
this.$emit('success', res);
- this.closeDialog();
} else { this.$modal.msgError(res.msg || '发品失败'); }
}).catch(err => { this.loading = false; console.error('发品失败', err); this.$modal.msgError('发品失败,请稍后重试'); });
});
},
+ async publishNow() {
+ if (!this.createdProduct || !this.createdProduct.productId) return;
+ this.publishLoading = true;
+ try {
+ const pubRes = await publishProduct({ productId: this.createdProduct.productId, userName: this.form.userName, appid: this.form.appid });
+ if (pubRes && pubRes.code === 200) {
+ const code = (pubRes.data && pubRes.data.code) ?? pubRes.code;
+ if (code === 0 || code === 200) this.$modal.msgSuccess('上架成功'); else this.$modal.msgWarning('上架已提交或状态未知');
+ } else {
+ this.$modal.msgError((pubRes && pubRes.msg) || '上架失败');
+ }
+ } catch(e) {
+ this.$modal.msgError('上架失败');
+ }
+ this.publishLoading = false;
+ },
extractProductId(resp) {
try {
if (!resp) return null;
diff --git a/src/store/getters.js b/src/store/getters.js
index 3680f95..ebfef88 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -16,6 +16,7 @@ const getters = {
permission_routes: state => state.permission.routes,
topbarRouters: state => state.permission.topbarRouters,
defaultRoutes: state => state.permission.defaultRoutes,
- sidebarRouters: state => state.permission.sidebarRouters
+ sidebarRouters: state => state.permission.sidebarRouters,
+ favoriteProductRefreshKey: state => state.app.favoriteProductRefreshKey
}
export default getters
diff --git a/src/store/modules/app.js b/src/store/modules/app.js
index 9f99f39..844d595 100644
--- a/src/store/modules/app.js
+++ b/src/store/modules/app.js
@@ -7,7 +7,9 @@ const state = {
hide: false
},
device: 'desktop',
- size: Cookies.get('size') || 'medium'
+ size: Cookies.get('size') || 'medium',
+ // 全局刷新标记:常用商品列表
+ favoriteProductRefreshKey: 0
}
const mutations = {
@@ -37,6 +39,9 @@ const mutations = {
},
SET_SIDEBAR_HIDE: (state, status) => {
state.sidebar.hide = status
+ },
+ INCREMENT_FAVORITE_PRODUCT_REFRESH_KEY: (state) => {
+ state.favoriteProductRefreshKey++
}
}
@@ -55,6 +60,9 @@ const actions = {
},
toggleSideBarHide({ commit }, status) {
commit('SET_SIDEBAR_HIDE', status)
+ },
+ triggerFavoriteProductRefresh({ commit }) {
+ commit('INCREMENT_FAVORITE_PRODUCT_REFRESH_KEY')
}
}
diff --git a/src/views/system/favoriteProduct/index.vue b/src/views/system/favoriteProduct/index.vue
index d4b1d78..37af1f5 100644
--- a/src/views/system/favoriteProduct/index.vue
+++ b/src/views/system/favoriteProduct/index.vue
@@ -367,9 +367,13 @@