Explorar el Código

feat(product): 后台商品编辑支持标签字段,支撑文章-商品匹配推荐

- 后端 ProductDTO 增加 tags 字段并透传:此前商品详情接口不返回
  标签,管理端编辑商品时无法回显已有标签
- 管理端商品编辑页新增「商品标签」输入(逗号分隔),保存时随
  ProductCreateRequest.product 提交,adminCreate/adminUpdate
  直接落库
- 标签与文章标签精确匹配后方会出现在小程序文章详情页
  「相关商品」推荐中,留空则不参与匹配
liaoxg hace 1 semana
padre
commit
de6b64f9d4

+ 3 - 0
cfc-backend/src/main/java/com/etotem/cfc/dto/ProductDTO.java

@@ -37,6 +37,8 @@ public class ProductDTO {
     private String minDiscountLevel;       // 享受会员价所需的最低会员级别,NULL=所有会员均可
     private Boolean vendorVisible;         // 是否仅供应商体系内用户可见(列表接口生效)
     private Integer isRecommended;         // 是否推荐商品: 0=否 1=是(推荐时同步至营养产品)
+    /** 商品标签,逗号或JSON数组,用于文章详情页「相关商品」标签匹配推荐 */
+    private String tags;
     private List<String> imageList;
     private Long energyDimensionId;
     private Integer effectivePpoint;     // 有效P点(基点,如1000=10%)
@@ -129,6 +131,7 @@ public class ProductDTO {
         d.minDiscountLevel = p.getMinDiscountLevel();
         d.vendorVisible = p.getVendorVisible();
         d.isRecommended = p.getIsRecommended();
+        d.tags = p.getTags();
         d.createdAt = p.getCreatedAt();
         d.updatedAt = p.getUpdatedAt();
         // 会员体系重构:商品对所有用户统一定价(活动侧保留会员价,商品侧停用)

+ 7 - 0
cfc-web/src/views/admin/ProductEdit.vue

@@ -43,6 +43,11 @@
           <div style="font-size: 12px; color: #999; margin-top: 4px;">不选则不出现在商城分类筛选中;可在「商品分类管理」中维护分类</div>
         </el-form-item>
 
+        <el-form-item label="商品标签">
+          <el-input v-model="form.tags" placeholder="逗号分隔,如: 育儿,亲子,心理" maxlength="200" clearable style="width: 400px;" />
+          <div style="font-size: 12px; color: #999; margin-top: 4px;">用于小程序文章详情页「相关商品」推荐:标签与文章标签一字不差才会匹配,留空则不参与匹配</div>
+        </el-form-item>
+
         <!-- 测评商品扩展信息 -->
         <template v-if="form.productType === 'assessment'">
           <el-form-item label="测评类型">
@@ -396,6 +401,7 @@ export default {
         memberEligible: 'no',
         minVisibleLevel: '',
         isRecommended: 0,
+        tags: '',
         dimensionWeights: [],
         // 测评商品扩展
         assessmentType: 'single',
@@ -675,6 +681,7 @@ export default {
             description: p.description || '',
             coverImage: p.coverImage || '',
             images: p.images || '',
+            tags: p.tags || '',
             productType: p.productType || 'physical',
             price: (p.price != null) ? p.price / 100 : null,
             memberPrice: (p.memberPrice != null && p.memberPrice > 0) ? p.memberPrice / 100 : null,