瀏覽代碼

chore: auto bump version and changelog [skip ci]

iwt 1 月之前
父節點
當前提交
a4f3dd67e9

+ 17 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -7494,5 +7494,22 @@ private void runMigration100() {
 		ensureColumn("growth_records", "schoolDistrict", "VARCHAR(50) COMMENT '学校所在区'");
 		ensureColumn("growth_records", "schoolStreet", "VARCHAR(100) COMMENT '学校所在街道'");
 		log.info("已确保growth_records学校/年级相关列存在");
+
+		// 迁移152: 创建 product_gift_rules 表(商品赠送会员规则)
+		try {
+			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS product_gift_rules (" +
+				"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+				"product_id BIGINT NOT NULL COMMENT '关联products表', " +
+				"level_code VARCHAR(50) NOT NULL COMMENT '赠送会员等级编码(FAMILY/PREMIUM等)', " +
+				"status TINYINT(1) DEFAULT 1 COMMENT '1=启用 0=停用', " +
+				"created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+				"updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
+				"UNIQUE KEY uk_product_level (product_id, level_code), " +
+				"INDEX idx_product_id (product_id)" +
+				") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品赠送会员规则'");
+			log.info("创建product_gift_rules表成功");
+		} catch (Exception e) {
+			log.warn("创建product_gift_rules表失败: {}", e.getMessage());
+		}
 	}
 }

+ 27 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/ProductGiftRule.java

@@ -0,0 +1,27 @@
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("product_gift_rules")
+public class ProductGiftRule implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    private Long productId;
+
+    private String levelCode;   // 赠送会员等级编码(FAMILY/PREMIUM等)
+
+    private Integer status;     // 1=启用 0=停用
+
+    private Date createdAt;
+
+    private Date updatedAt;
+}

+ 9 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/ProductGiftRuleMapper.java

@@ -0,0 +1,9 @@
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ProductGiftRule;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ProductGiftRuleMapper extends BaseMapper<ProductGiftRule> {
+}

+ 12 - 0
cfc-backend/src/main/resources/schema.sql

@@ -3775,3 +3775,15 @@ CREATE TABLE IF NOT EXISTS five_dimension_self_checks (
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
     INDEX idx_user_id (user_id)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='五维家庭自检记录';
+
+-- 商品赠送会员规则
+CREATE TABLE IF NOT EXISTS product_gift_rules (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    product_id BIGINT NOT NULL COMMENT '关联products表',
+    level_code VARCHAR(50) NOT NULL COMMENT '赠送会员等级编码(FAMILY/PREMIUM等)',
+    status TINYINT(1) DEFAULT 1 COMMENT '1=启用 0=停用',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    UNIQUE KEY uk_product_level (product_id, level_code),
+    INDEX idx_product_id (product_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品赠送会员规则';

+ 11 - 0
cfc-frontend/pages/discover-detail/product-detail/product-detail.vue

@@ -18,6 +18,7 @@
           <text class="price">{{ formatPriceWithSymbol(product.price) }}</text>
           <text v-if="product.memberPrice" class="member-price">会员价 {{ formatPriceWithSymbol(product.memberPrice) }}</text>
         </view>
+        <view v-if="product.giftLevelName" class="gift-tag">购买即送 {{ product.giftLevelName }} 会员</view>
         <view class="meta-row">
           <text class="meta-item" v-if="product.productType">{{ typeLabel }}</text>
           <text class="meta-item" v-if="product.domain">{{ domainLabel }}</text>
@@ -308,6 +309,16 @@ export default {
   font-size: 26rpx;
   color: #999;
 }
+.gift-tag {
+  display: inline-block;
+  margin-top: 12rpx;
+  padding: 6rpx 16rpx;
+  font-size: 22rpx;
+  color: #b8860b;
+  background: #fff7e6;
+  border: 1rpx solid #f0d9a8;
+  border-radius: 8rpx;
+}
 .meta-row {
   display: flex;
   flex-wrap: wrap;

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-9a5adb5cbaa584ea85b1677814d780a6cfcb47fe
+53e12e769b050d6641dad64c998bc19021ddae3b

+ 2 - 2
cfc-web/package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "cfc-web",
-  "version": "1.0.758",
+  "version": "1.0.759",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "cfc-web",
-      "version": "1.0.758",
+      "version": "1.0.759",
       "dependencies": {
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor-for-vue": "^1.0.2",

+ 1 - 1
cfc-web/package.json

@@ -1,6 +1,6 @@
 {
   "name": "cfc-web",
-  "version": "1.0.759",
+  "version": "1.0.760",
   "private": true,
   "scripts": {
     "dev": "vue-cli-service serve",

+ 14 - 0
cfc-web/public/CHANGELOG-v1.0.md

@@ -4,6 +4,20 @@
 
 ---
 
+## v1.0.760 (2026-08-03)
+
+### 文档
+- 商品赠送会员实施计划
+
+### 新功能
+- 活动模块升级——付费报名订单/审核发布流/总结资料
+
+### 其他
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+
 ## v1.0.759 (2026-08-03)
 
 ### 新功能

+ 15 - 1
cfc-web/public/CHANGELOG.md

@@ -1,6 +1,6 @@
 # 更新日志
 
-> 当前版本: v1.0.759
+> 当前版本: v1.0.760
 
 ## 历史版本
 
@@ -8,6 +8,20 @@
 
 ---
 
+## v1.0.760 (2026-08-03)
+
+### 文档
+- 商品赠送会员实施计划
+
+### 新功能
+- 活动模块升级——付费报名订单/审核发布流/总结资料
+
+### 其他
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+
 ## v1.0.759 (2026-08-03)
 
 ### 新功能

+ 23 - 0
cfc-web/src/api/admin.js

@@ -601,6 +601,29 @@ export function saveProductPurchaseFields(productId, fields) {
   })
 }
 
+export function saveProductGiftRule(productId, status, levelCode) {
+  return request({
+    url: '/api/admin/product-gift-rule/save',
+    method: 'post',
+    data: { productId, status, levelCode }
+  })
+}
+
+export function listProductGiftRules(productId) {
+  return request({
+    url: '/api/admin/product-gift-rule/list',
+    method: 'post',
+    data: { productId }
+  })
+}
+
+export function listMembershipLevels() {
+  return request({
+    url: '/api/membership/levels',
+    method: 'post'
+  })
+}
+
 // ========== 分类管理 API ==========
 
 export function getCategoryTree(includeDisabled) {