hurx 1 долоо хоног өмнө
parent
commit
ebbec81332

+ 67 - 0
src/api/enterprisePurchase/recommendCategoryConfig/index.ts

@@ -0,0 +1,67 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import {
+  RecommendCategoryConfigVO,
+  RecommendCategoryConfigForm,
+  RecommendCategoryConfigQuery
+} from '@/api/enterprisePurchase/recommendCategoryConfig/types';
+
+/**
+ * 查询为你推荐分类配置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listRecommendCategoryConfig = (query?: RecommendCategoryConfigQuery): AxiosPromise<RecommendCategoryConfigVO[]> => {
+  return request({
+    url: '/mall/recommendCategoryConfig/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询为你推荐分类配置详细
+ * @param id
+ */
+export const getRecommendCategoryConfig = (id: string | number): AxiosPromise<RecommendCategoryConfigVO> => {
+  return request({
+    url: '/mall/recommendCategoryConfig/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增为你推荐分类配置
+ * @param data
+ */
+export const addRecommendCategoryConfig = (data: RecommendCategoryConfigForm) => {
+  return request({
+    url: '/mall/recommendCategoryConfig',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改为你推荐分类配置
+ * @param data
+ */
+export const updateRecommendCategoryConfig = (data: RecommendCategoryConfigForm) => {
+  return request({
+    url: '/mall/recommendCategoryConfig',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除为你推荐分类配置
+ * @param id
+ */
+export const delRecommendCategoryConfig = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/mall/recommendCategoryConfig/' + id,
+    method: 'delete'
+  });
+};

+ 170 - 0
src/api/enterprisePurchase/recommendCategoryConfig/types.ts

@@ -0,0 +1,170 @@
+export interface RecommendCategoryConfigVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 主标题
+   */
+  name: string;
+
+  /**
+   * 副标题
+   */
+  subTitle: string;
+
+  /**
+   * 分类图标URL
+   */
+  iconUrl: string;
+
+  /**
+   * 数据类型: select=商品自选, category=分类映射
+   */
+  dataType: string;
+
+  /**
+   * 映射分类ID路径
+   */
+  categoryPath: string;
+
+  /**
+   * 映射分类名称路径
+   */
+  categoryLabel: string;
+
+  /**
+   * 自选商品ID集合(JSON)
+   */
+  selectedProductIds: string | number;
+
+  /**
+   * 排序
+   */
+  sortOrder: number;
+
+  /**
+   * 状态(1启用 0禁用)
+   */
+  status: number;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface RecommendCategoryConfigForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 主标题
+   */
+  name?: string;
+
+  /**
+   * 副标题
+   */
+  subTitle?: string;
+
+  /**
+   * 分类图标URL
+   */
+  iconUrl?: string;
+
+  /**
+   * 数据类型: select=商品自选, category=分类映射
+   */
+  dataType?: string;
+
+  /**
+   * 映射分类ID路径
+   */
+  categoryPath?: string;
+
+  /**
+   * 映射分类名称路径
+   */
+  categoryLabel?: string;
+
+  /**
+   * 自选商品ID集合(JSON)
+   */
+  selectedProductIds?: string | number;
+
+  /**
+   * 排序
+   */
+  sortOrder?: number;
+
+  /**
+   * 状态(1启用 0禁用)
+   */
+  status?: number;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface RecommendCategoryConfigQuery extends PageQuery {
+  /**
+   * 主标题
+   */
+  name?: string;
+
+  /**
+   * 副标题
+   */
+  subTitle?: string;
+
+  /**
+   * 分类图标URL
+   */
+  iconUrl?: string;
+
+  /**
+   * 数据类型: select=商品自选, category=分类映射
+   */
+  dataType?: string;
+
+  /**
+   * 映射分类ID路径
+   */
+  categoryPath?: string;
+
+  /**
+   * 映射分类名称路径
+   */
+  categoryLabel?: string;
+
+  /**
+   * 自选商品ID集合(JSON)
+   */
+  selectedProductIds?: string | number;
+
+  /**
+   * 排序
+   */
+  sortOrder?: number;
+
+  /**
+   * 状态(1启用 0禁用)
+   */
+  status?: number;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 63 - 0
src/api/enterprisePurchase/recommendThemeConfig/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { RecommendThemeConfigVO, RecommendThemeConfigForm, RecommendThemeConfigQuery } from '@/api/enterprisePurchase/recommendThemeConfig/types';
+
+/**
+ * 查询为你推荐全局主题配置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listRecommendThemeConfig = (query?: RecommendThemeConfigQuery): AxiosPromise<RecommendThemeConfigVO[]> => {
+  return request({
+    url: '/mall/recommendThemeConfig/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询为你推荐全局主题配置详细
+ * @param id
+ */
+export const getRecommendThemeConfig = (id: string | number): AxiosPromise<RecommendThemeConfigVO> => {
+  return request({
+    url: '/mall/recommendThemeConfig/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增为你推荐全局主题配置
+ * @param data
+ */
+export const addRecommendThemeConfig = (data: RecommendThemeConfigForm) => {
+  return request({
+    url: '/mall/recommendThemeConfig',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改为你推荐全局主题配置
+ * @param data
+ */
+export const updateRecommendThemeConfig = (data: RecommendThemeConfigForm) => {
+  return request({
+    url: '/mall/recommendThemeConfig',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除为你推荐全局主题配置
+ * @param id
+ */
+export const delRecommendThemeConfig = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/mall/recommendThemeConfig/' + id,
+    method: 'delete'
+  });
+};

+ 65 - 0
src/api/enterprisePurchase/recommendThemeConfig/types.ts

@@ -0,0 +1,65 @@
+export interface RecommendThemeConfigVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 主题选中色调
+   */
+  themeColor: string;
+
+  /**
+   * 商品列表主题色
+   */
+  productThemeColor: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface RecommendThemeConfigForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 主题选中色调
+   */
+  themeColor?: string;
+
+  /**
+   * 商品列表主题色
+   */
+  productThemeColor?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface RecommendThemeConfigQuery extends PageQuery {
+  /**
+   * 主题选中色调
+   */
+  themeColor?: string;
+
+  /**
+   * 商品列表主题色
+   */
+  productThemeColor?: string;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 207 - 105
src/views/enterprisePurchase/index.vue

@@ -1505,6 +1505,26 @@ import {
   addHeaderCategory,
   updateHeaderCategory
 } 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 {
   ShoppingCart,
@@ -1587,6 +1607,8 @@ const handleMainSave = async () => {
       saveScenarioGlobalSettings();
     } else if (activeSubTab.value == 'quick-entry') {
       saveQuickEntryModule();
+    } else if (activeSubTab.value == 'recommend') {
+      saveRecommendThemeConfig();
     }
   } catch (error) {
     console.error('保存配置失败:', error);
@@ -2628,101 +2650,73 @@ const getAdModuleList = async () => {
 const recommendThemeColor = ref('#e60012');
 const recommendProductThemeColor = ref('#e60012');
 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(() => {
   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;
 };
 
-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 () => {
@@ -3235,6 +3335,8 @@ onMounted(() => {
   getQuickEntryModuleList();
   getQuickEntryItemsList();
   getAdModuleList();
+  getRecommendThemeConfigList();
+  getRecommendCategoryList();
   // 获取左侧广告配置
   nextTick(() => {
     updateNavArrows();