|
@@ -1505,6 +1505,26 @@ import {
|
|
|
addHeaderCategory,
|
|
addHeaderCategory,
|
|
|
updateHeaderCategory
|
|
updateHeaderCategory
|
|
|
} from '@/api/enterprisePurchase/headerCategory';
|
|
} from '@/api/enterprisePurchase/headerCategory';
|
|
|
|
|
+import {
|
|
|
|
|
+ listRecommendThemeConfig,
|
|
|
|
|
+ getRecommendThemeConfig,
|
|
|
|
|
+ delRecommendThemeConfig,
|
|
|
|
|
+ addRecommendThemeConfig,
|
|
|
|
|
+ updateRecommendThemeConfig
|
|
|
|
|
+} from '@/api/enterprisePurchase/recommendThemeConfig';
|
|
|
|
|
+import { RecommendThemeConfigVO, RecommendThemeConfigQuery, RecommendThemeConfigForm } from '@/api/enterprisePurchase/recommendThemeConfig/types';
|
|
|
|
|
+import {
|
|
|
|
|
+ listRecommendCategoryConfig,
|
|
|
|
|
+ getRecommendCategoryConfig,
|
|
|
|
|
+ delRecommendCategoryConfig,
|
|
|
|
|
+ addRecommendCategoryConfig,
|
|
|
|
|
+ updateRecommendCategoryConfig
|
|
|
|
|
+} from '@/api/enterprisePurchase/recommendCategoryConfig';
|
|
|
|
|
+import {
|
|
|
|
|
+ RecommendCategoryConfigVO,
|
|
|
|
|
+ RecommendCategoryConfigQuery,
|
|
|
|
|
+ RecommendCategoryConfigForm
|
|
|
|
|
+} from '@/api/enterprisePurchase/recommendCategoryConfig/types';
|
|
|
import { HeaderCategoryVO, HeaderCategoryQuery, HeaderCategoryForm } from '@/api/enterprisePurchase/headerCategory/types';
|
|
import { HeaderCategoryVO, HeaderCategoryQuery, HeaderCategoryForm } from '@/api/enterprisePurchase/headerCategory/types';
|
|
|
import {
|
|
import {
|
|
|
ShoppingCart,
|
|
ShoppingCart,
|
|
@@ -1587,6 +1607,8 @@ const handleMainSave = async () => {
|
|
|
saveScenarioGlobalSettings();
|
|
saveScenarioGlobalSettings();
|
|
|
} else if (activeSubTab.value == 'quick-entry') {
|
|
} else if (activeSubTab.value == 'quick-entry') {
|
|
|
saveQuickEntryModule();
|
|
saveQuickEntryModule();
|
|
|
|
|
+ } else if (activeSubTab.value == 'recommend') {
|
|
|
|
|
+ saveRecommendThemeConfig();
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
console.error('保存配置失败:', error);
|
|
console.error('保存配置失败:', error);
|
|
@@ -2628,101 +2650,73 @@ const getAdModuleList = async () => {
|
|
|
const recommendThemeColor = ref('#e60012');
|
|
const recommendThemeColor = ref('#e60012');
|
|
|
const recommendProductThemeColor = ref('#e60012');
|
|
const recommendProductThemeColor = ref('#e60012');
|
|
|
const recommendActiveId = ref(1);
|
|
const recommendActiveId = ref(1);
|
|
|
-const recommendList = ref([
|
|
|
|
|
- {
|
|
|
|
|
- id: 1,
|
|
|
|
|
- name: '为你推荐',
|
|
|
|
|
- subTitle: '每日低价 妙券',
|
|
|
|
|
- icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZmlsbD0iI2U2MDAxMiIgZD0iTTE2IDJsNC4zNSA4LjgxbDkuNzIgMS40MWwtNy4wMyA2Ljg1bDEuNjYgOS42OEwxNiAyNS4yN2wtOC43IDQuNTdsMS42Ni05LjY4bC03LjAzLTYuODVsOS43Mi0xLjQxTDE2IDJ6Ii8+PC9zdmc+',
|
|
|
|
|
- type: 'select',
|
|
|
|
|
- status: 1,
|
|
|
|
|
- selectedProducts: [
|
|
|
|
|
- { id: 1001, name: 'Lenovo 联想 昭阳K4e 轻薄办公本 14英寸 i7/16G/512G', image: '/static/images/purchase/laptop_lenovo.jpg', price: '4599' },
|
|
|
|
|
- { id: 1002, name: 'HP 惠普 战66 六代 商务笔记本电脑 锐龙版 15.6英寸', image: '/static/images/purchase/laptop_hp.jpg', price: '3899' }
|
|
|
|
|
- ]
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 2,
|
|
|
|
|
- name: '新客专享',
|
|
|
|
|
- subTitle: '精选爆品 低价',
|
|
|
|
|
- icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZmlsbD0iI2U2MDAxMiIgZD0iTTI2IDE0djEwaC00VjhIMTB2MTZINnYtMTBMNCAxMmw4LThoOHoiLz48cGF0aCBmaWxsPSIjZTYwMDEyIiBkPSJNMjIgMjRIMTB2LTRoMTJ6Ii8+PC9zdmc+',
|
|
|
|
|
- type: 'select',
|
|
|
|
|
- status: 1,
|
|
|
|
|
- selectedProducts: []
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 3,
|
|
|
|
|
- name: '办公设备',
|
|
|
|
|
- subTitle: '电脑设备 批量',
|
|
|
|
|
- icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZmlsbD0iI2U2MDAxMiIgZD0iTTI4IDI0SDR2LTJoMjR6bS0yLTJIMnYtNGgyNHptMC00SDJ2LTRoMjR6bTAtNEgydi00aDI0eiIvPjxwYXRoIGZpbGw9IiNlNjAwMTIiIGQ9Ik04IDI4aDE2di0ySDh6Ii8+PC9zdmc+',
|
|
|
|
|
- type: 'category',
|
|
|
|
|
- categoryLabel: '办公设备 > 办公电脑 > 笔记本',
|
|
|
|
|
- status: 1,
|
|
|
|
|
- selectedProducts: []
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 4,
|
|
|
|
|
- name: '办公耗材',
|
|
|
|
|
- subTitle: '低价直供 囤货',
|
|
|
|
|
- icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZmlsbD0iI2U2MDAxMiIgZD0iTTI0IDRINFYyOGgyMHYtNHoiLz48cGF0aCBmaWxsPSIjZTYwMDEyIiBkPSJNMjggMTJsLTQgNHY4aDR6Ii8+PC9zdmc+',
|
|
|
|
|
- type: 'category',
|
|
|
|
|
- categoryLabel: '文具耗材 > 打印耗材 > 复印纸',
|
|
|
|
|
- status: 1,
|
|
|
|
|
- selectedProducts: []
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 5,
|
|
|
|
|
- name: '工业生产',
|
|
|
|
|
- subTitle: '车间工具 规格',
|
|
|
|
|
- icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZmlsbD0iI2U2MDAxMiIgZD0iTTE2IDhsLTIuNDUgNC4yNUg4LjY0djQuOTFMNi4xOCAxOWwyLjQ1IDQuMjV2NC45MWg0LjkxbDIuNDUgNC4yNWwyLjQ1LTQuMjVoNC45MXYtNC45MWwyLjQ1LTQuMjVsLTIuNDUtNC4yNXYtNC45MWgtNC45MUwxNiA4eiIvPjwvc3ZnPg==',
|
|
|
|
|
- type: 'category',
|
|
|
|
|
- categoryLabel: '工业品 > 五金工具 > 电动工具',
|
|
|
|
|
- status: 1,
|
|
|
|
|
- selectedProducts: []
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 6,
|
|
|
|
|
- name: '员工福利',
|
|
|
|
|
- subTitle: '节日礼盒 一键',
|
|
|
|
|
- icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZmlsbD0iI2U2MDAxMiIgZD0iTTE2IDI4czEyLTYuNDIgMTItMTZjMC01LjM2LTQuNjQtOS05LTlhOC43OCA4Ljc4IDAgMC0wIDMtM2MtNC4zNiAwLTkgMy42NC05IDlzMTIgMTYgMTIgMTZ6Ii8+PC9zdmc+',
|
|
|
|
|
- type: 'select',
|
|
|
|
|
- status: 1,
|
|
|
|
|
- selectedProducts: []
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 7,
|
|
|
|
|
- name: '办公环境',
|
|
|
|
|
- subTitle: '电器家具 焕新',
|
|
|
|
|
- icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZmlsbD0iI2U2MDAxMiIgZD0iTTE2IDhsOCAxNkg4bDgtMTZ6Ii8+PHBhdGggZmlsbD0iI2U2MDAxMiIgZD0iTTI2IDI4SDR2LTRoMjJ6Ii8+PC9zdmc+',
|
|
|
|
|
- type: 'select',
|
|
|
|
|
- status: 1,
|
|
|
|
|
- selectedProducts: []
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 8,
|
|
|
|
|
- name: '营销礼品',
|
|
|
|
|
- subTitle: '客户礼包 特惠',
|
|
|
|
|
- icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZmlsbD0iI2U2MDAxMiIgZD0iTTI2IDEwaC02VjhIMTJ2Mkg2djE2aDIwVjEweiIvPjxwYXRoIGZpbGw9IiNlNjAwMTIiIGQ9Ik0xOCAxMHYtMmgLTR2MnoiLz48L3N2Zz4=',
|
|
|
|
|
- type: 'select',
|
|
|
|
|
- status: 1,
|
|
|
|
|
- selectedProducts: []
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 9,
|
|
|
|
|
- name: '个人防护',
|
|
|
|
|
- subTitle: '劳保用品 齐全',
|
|
|
|
|
- icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZmlsbD0iI2U2MDAxMiIgZD0iTTE2IDJsLTEyIDR2MTBzMCAxMiAxMiAxNmMxMi00IDEyLTE2IDEyLTE2VjZMMTYgMnoiLz48L3N2Zz4=',
|
|
|
|
|
- type: 'category',
|
|
|
|
|
- categoryLabel: '个人防护 > 头部防护 > 安全帽',
|
|
|
|
|
- status: 1,
|
|
|
|
|
- selectedProducts: []
|
|
|
|
|
- },
|
|
|
|
|
- { id: 10, name: '清洁用品', subTitle: '扫把 拖把 纸巾', icon: '', type: 'select', status: 1, selectedProducts: [] },
|
|
|
|
|
- { id: 11, name: '运动器材', subTitle: '跑步机 哑铃', icon: '', type: 'select', status: 1, selectedProducts: [] },
|
|
|
|
|
- { id: 12, name: '生鲜水果', subTitle: '苹果 橙子 香蕉', icon: '', type: 'select', status: 1, selectedProducts: [] },
|
|
|
|
|
- { id: 13, name: '零食小吃', subTitle: '坚果 薯片 饼干', icon: '', type: 'select', status: 1, selectedProducts: [] },
|
|
|
|
|
- { id: 14, name: '美妆护肤', subTitle: '洗面奶 补水', icon: '', type: 'select', status: 1, selectedProducts: [] }
|
|
|
|
|
-]);
|
|
|
|
|
|
|
+
|
|
|
|
|
+const recommendThemeConfigId = ref<string | number | null>(null);
|
|
|
|
|
+
|
|
|
|
|
+const getRecommendThemeConfigList = async () => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await listRecommendThemeConfig();
|
|
|
|
|
+ if (res.code === 200 && res.rows && res.rows.length > 0) {
|
|
|
|
|
+ const data = res.rows[0];
|
|
|
|
|
+ recommendThemeConfigId.value = data.id;
|
|
|
|
|
+ recommendThemeColor.value = data.themeColor || '#e60012';
|
|
|
|
|
+ recommendProductThemeColor.value = data.productThemeColor || '#e60012';
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('获取推荐主题配置失败:', error);
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const saveRecommendThemeConfig = async () => {
|
|
|
|
|
+ const data: RecommendThemeConfigForm = {
|
|
|
|
|
+ themeColor: recommendThemeColor.value,
|
|
|
|
|
+ productThemeColor: recommendProductThemeColor.value
|
|
|
|
|
+ };
|
|
|
|
|
+ try {
|
|
|
|
|
+ let res;
|
|
|
|
|
+ if (recommendThemeConfigId.value) {
|
|
|
|
|
+ res = await updateRecommendThemeConfig({ ...data, id: recommendThemeConfigId.value });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ res = await addRecommendThemeConfig(data);
|
|
|
|
|
+ if (res.code === 200 && res.data) {
|
|
|
|
|
+ recommendThemeConfigId.value = res.data.id;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
|
+ ElMessage.success('推荐主题配置保存成功');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ ElMessage.error(res.msg || '保存失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('保存推荐主题配置失败:', error);
|
|
|
|
|
+ ElMessage.error('保存失败');
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+const recommendList = ref<RecommendCategoryConfigVO[]>([]);
|
|
|
|
|
+
|
|
|
|
|
+const getRecommendCategoryList = async () => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await listRecommendCategoryConfig();
|
|
|
|
|
+ if (res.code === 200 && res.rows) {
|
|
|
|
|
+ recommendList.value = res.rows.map((item: RecommendCategoryConfigVO) => ({
|
|
|
|
|
+ ...item,
|
|
|
|
|
+ type: (item as any).dataType || 'select',
|
|
|
|
|
+ icon: (item as any).iconUrl || '',
|
|
|
|
|
+ categoryValue: [],
|
|
|
|
|
+ selectedProducts: (() => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ return (item as any).selectedProductIds ? JSON.parse((item as any).selectedProductIds) : [];
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ return [];
|
|
|
|
|
+ }
|
|
|
|
|
+ })()
|
|
|
|
|
+ }));
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('获取推荐分类列表失败:', error);
|
|
|
|
|
+ ElMessage.error('获取推荐分类列表失败');
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
const activeRecommendList = computed(() => {
|
|
const activeRecommendList = computed(() => {
|
|
|
return recommendList.value.filter((item) => item.status === 1);
|
|
return recommendList.value.filter((item) => item.status === 1);
|
|
@@ -2814,14 +2808,95 @@ const handleRecommendCategoryChange = (val) => {
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const submitRecommendForm = () => {
|
|
|
|
|
- if (recommendEditIndex.value > -1) {
|
|
|
|
|
- recommendList.value[recommendEditIndex.value] = { ...recommendForm };
|
|
|
|
|
- } else {
|
|
|
|
|
- recommendList.value.push({ id: Date.now(), ...recommendForm });
|
|
|
|
|
|
|
+const submitRecommendForm = async () => {
|
|
|
|
|
+ // 序列化已选商品
|
|
|
|
|
+ const selectedProducts = recommendEditIndex.value > -1 ? recommendList.value[recommendEditIndex.value]?.selectedProducts || [] : [];
|
|
|
|
|
+
|
|
|
|
|
+ const data: RecommendCategoryConfigForm = {
|
|
|
|
|
+ name: recommendForm.name,
|
|
|
|
|
+ subTitle: recommendForm.subTitle,
|
|
|
|
|
+ iconUrl: recommendForm.icon,
|
|
|
|
|
+ dataType: recommendForm.type,
|
|
|
|
|
+ categoryLabel: recommendForm.categoryLabel || '',
|
|
|
|
|
+ categoryPath: (recommendForm.categoryValue || []).join(','),
|
|
|
|
|
+ selectedProductIds: JSON.stringify(selectedProducts),
|
|
|
|
|
+ status: recommendForm.status,
|
|
|
|
|
+ sortOrder: recommendList.value.length
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (recommendEditIndex.value > -1) {
|
|
|
|
|
+ const id = recommendList.value[recommendEditIndex.value]?.id;
|
|
|
|
|
+ const isFromApi = id && String(id).length > 10;
|
|
|
|
|
+ const res = isFromApi ? await updateRecommendCategoryConfig({ ...data, id }) : await addRecommendCategoryConfig(data);
|
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
|
+ ElMessage.success('修改成功');
|
|
|
|
|
+ recommendDialogVisible.value = false;
|
|
|
|
|
+ getRecommendCategoryList();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ ElMessage.error(res.msg || '保存失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ const res = await addRecommendCategoryConfig(data);
|
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
|
+ ElMessage.success('新增成功');
|
|
|
|
|
+ recommendDialogVisible.value = false;
|
|
|
|
|
+ getRecommendCategoryList();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ ElMessage.error(res.msg || '保存失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('保存失败:', error);
|
|
|
|
|
+ ElMessage.error('保存失败');
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const handleDeleteRecommend = async (index: number) => {
|
|
|
|
|
+ const item = recommendList.value[index];
|
|
|
|
|
+ try {
|
|
|
|
|
+ await ElMessageBox.confirm('确定要删除该推荐分类吗?', '提示');
|
|
|
|
|
+ const res = await delRecommendCategoryConfig(item.id);
|
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
|
+ ElMessage.success('删除成功');
|
|
|
|
|
+ getRecommendCategoryList();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ ElMessage.error(res.msg || '删除失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ if (error !== 'cancel') {
|
|
|
|
|
+ console.error('删除失败:', error);
|
|
|
|
|
+ ElMessage.error('删除失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const moveRecommend = async (index: number, direction: number) => {
|
|
|
|
|
+ const newIndex = index + direction;
|
|
|
|
|
+ if (newIndex < 0 || newIndex >= recommendList.value.length) return;
|
|
|
|
|
+ const item = recommendList.value.splice(index, 1)[0];
|
|
|
|
|
+ recommendList.value.splice(newIndex, 0, item);
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ const start = Math.min(index, newIndex);
|
|
|
|
|
+ const end = Math.max(index, newIndex);
|
|
|
|
|
+ for (let i = start; i <= end; i++) {
|
|
|
|
|
+ const row = recommendList.value[i] as any;
|
|
|
|
|
+ await updateRecommendCategoryConfig({
|
|
|
|
|
+ id: row.id,
|
|
|
|
|
+ name: row.name,
|
|
|
|
|
+ subTitle: row.subTitle,
|
|
|
|
|
+ iconUrl: row.icon || row.iconUrl,
|
|
|
|
|
+ dataType: row.type || row.dataType,
|
|
|
|
|
+ categoryLabel: row.categoryLabel || '',
|
|
|
|
|
+ status: row.status,
|
|
|
|
|
+ sortOrder: i
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('排序更新失败:', error);
|
|
|
|
|
+ ElMessage.error('排序更新失败');
|
|
|
}
|
|
}
|
|
|
- recommendDialogVisible.value = false;
|
|
|
|
|
- ElMessage.success('保存成功');
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 推荐商品选择增强逻辑
|
|
// 推荐商品选择增强逻辑
|
|
@@ -2852,9 +2927,34 @@ const openRecommendProductSelect = (index) => {
|
|
|
selectedProductDialogVisible.value = true;
|
|
selectedProductDialogVisible.value = true;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const submitSelectedProducts = () => {
|
|
|
|
|
- selectedProductDialogVisible.value = false;
|
|
|
|
|
- ElMessage.success('已选商品配置已保存');
|
|
|
|
|
|
|
+const submitSelectedProducts = async () => {
|
|
|
|
|
+ const item = recommendList.value[currentRecommendIndex.value];
|
|
|
|
|
+ if (!item) return;
|
|
|
|
|
+
|
|
|
|
|
+ const selectedProducts = item.selectedProducts || [];
|
|
|
|
|
+ const data: RecommendCategoryConfigForm = {
|
|
|
|
|
+ id: item.id,
|
|
|
|
|
+ name: item.name,
|
|
|
|
|
+ subTitle: item.subTitle,
|
|
|
|
|
+ iconUrl: (item as any).icon || (item as any).iconUrl || '',
|
|
|
|
|
+ dataType: (item as any).type || (item as any).dataType || 'select',
|
|
|
|
|
+ categoryLabel: (item as any).categoryLabel || '',
|
|
|
|
|
+ selectedProductIds: JSON.stringify(selectedProducts),
|
|
|
|
|
+ status: item.status
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await updateRecommendCategoryConfig(data);
|
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
|
+ selectedProductDialogVisible.value = false;
|
|
|
|
|
+ ElMessage.success('已选商品配置已保存');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ ElMessage.error(res.msg || '保存失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('保存已选商品失败:', error);
|
|
|
|
|
+ ElMessage.error('保存失败');
|
|
|
|
|
+ }
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const openProductDrawer = async () => {
|
|
const openProductDrawer = async () => {
|
|
@@ -3235,6 +3335,8 @@ onMounted(() => {
|
|
|
getQuickEntryModuleList();
|
|
getQuickEntryModuleList();
|
|
|
getQuickEntryItemsList();
|
|
getQuickEntryItemsList();
|
|
|
getAdModuleList();
|
|
getAdModuleList();
|
|
|
|
|
+ getRecommendThemeConfigList();
|
|
|
|
|
+ getRecommendCategoryList();
|
|
|
// 获取左侧广告配置
|
|
// 获取左侧广告配置
|
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
|
updateNavArrows();
|
|
updateNavArrows();
|