diff --git a/apps/web-antd/src/views/mall/promotion/components/index.ts b/apps/web-antd/src/views/mall/promotion/components/index.ts
new file mode 100644
index 000000000..dd1f9d3c8
--- /dev/null
+++ b/apps/web-antd/src/views/mall/promotion/components/index.ts
@@ -0,0 +1,5 @@
+export { default as SpuAndSkuList } from './spu-and-sku-list.vue';
+export { default as SpuSkuSelect } from './spu-sku-select.vue';
+
+export type * from './types';
+
diff --git a/apps/web-antd/src/views/mall/promotion/components/spu-and-sku-list.vue b/apps/web-antd/src/views/mall/promotion/components/spu-and-sku-list.vue
new file mode 100644
index 000000000..1011e52bc
--- /dev/null
+++ b/apps/web-antd/src/views/mall/promotion/components/spu-and-sku-list.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/mall/promotion/components/spu-sku-select.vue b/apps/web-antd/src/views/mall/promotion/components/spu-sku-select.vue
new file mode 100644
index 000000000..2b77a3bf8
--- /dev/null
+++ b/apps/web-antd/src/views/mall/promotion/components/spu-sku-select.vue
@@ -0,0 +1,341 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/mall/promotion/components/types.ts b/apps/web-antd/src/views/mall/promotion/components/types.ts
new file mode 100644
index 000000000..649c46717
--- /dev/null
+++ b/apps/web-antd/src/views/mall/promotion/components/types.ts
@@ -0,0 +1,15 @@
+import type { PropertyAndValues } from '#/views/mall/product/spu/form';
+
+/**
+ * SPU 属性配置
+ * 用于活动商品选择中,关联 SPU 和其属性列表
+ */
+export interface SpuProperty {
+ /** SPU ID */
+ spuId: number;
+ /** SPU 详情 */
+ spuDetail: T;
+ /** 属性列表 */
+ propertyList: PropertyAndValues[];
+}
+