Переглянути джерело

Merge branch 'cfclub' of https://git.iwintrue.com/liaoxg/cfc into cfclub

Xiaogang Liao 2 місяців тому
батько
коміт
88bdfb6a01

+ 1 - 1
cfc-backend/src/main/java/com/etotem/cfc/controller/admin/ProductSkuController.java

@@ -27,7 +27,7 @@ public class ProductSkuController {
         Object productIdObj = params.get("productId");
         if (productIdObj == null) return Result.error("productId不能为空");
         Long productId = Long.parseLong(productIdObj.toString());
-        List<ProductSku> skus = skuService.listByProductId(productId);
+        List<ProductSku> skus = skuService.listByProductIdAll(productId);
         List<ProductSkuDTO> dtos = skus.stream()
             .map(ProductSkuDTO::from)
             .collect(Collectors.toList());

+ 11 - 6
cfc-backend/src/main/java/com/etotem/cfc/dto/ProductSkuDTO.java

@@ -5,7 +5,6 @@ import com.alibaba.fastjson.TypeReference;
 import com.etotem.cfc.entity.ProductSku;
 import lombok.Data;
 import java.math.BigDecimal;
-import java.util.List;
 import java.util.Map;
 
 @Data
@@ -13,7 +12,7 @@ public class ProductSkuDTO {
     private Long id;
     private Long productId;
     private String skuCode;
-    private List<Map<String, String>> specs;
+    private Map<String, String> specs;
     private BigDecimal price;
     private BigDecimal originalPrice;
     private Integer stock;
@@ -31,12 +30,18 @@ public class ProductSkuDTO {
         dto.setStock(sku.getStock());
         dto.setImage(sku.getImage());
         dto.setEnabled(sku.getEnabled() != null && sku.getEnabled() == 1);
-        // Parse specs JSON to List<Map>
+        // Parse specs JSON to Map (stored as JSON object in DB)
         if (sku.getSpecs() != null) {
             try {
-                List<Map<String, String>> specsList = JSON.parseObject(sku.getSpecs().toString(),
-                    new TypeReference<List<Map<String, String>>>() {});
-                dto.setSpecs(specsList);
+                String specsStr;
+                if (sku.getSpecs() instanceof String) {
+                    specsStr = (String) sku.getSpecs();
+                } else {
+                    specsStr = JSON.toJSONString(sku.getSpecs());
+                }
+                Map<String, String> specsMap = JSON.parseObject(specsStr,
+                    new TypeReference<Map<String, String>>() {});
+                dto.setSpecs(specsMap);
             } catch (Exception e) {
                 dto.setSpecs(null);
             }

+ 2 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/ProductSkuMapper.java

@@ -9,6 +9,8 @@ public interface ProductSkuMapper extends BaseMapper<ProductSku> {
 
     List<ProductSku> findByProductId(@Param("productId") Long productId);
 
+    List<ProductSku> findByProductIdAll(@Param("productId") Long productId);
+
     ProductSku findById(@Param("id") Long id);
 
     int updateStock(@Param("id") Long id, @Param("quantity") Integer quantity);

+ 4 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/ProductSkuService.java

@@ -22,6 +22,10 @@ public class ProductSkuService {
         return skuMapper.findByProductId(productId);
     }
 
+    public List<ProductSku> listByProductIdAll(Long productId) {
+        return skuMapper.findByProductIdAll(productId);
+    }
+
     public ProductSku getById(Long id) {
         return skuMapper.findById(id);
     }

+ 4 - 0
cfc-backend/src/main/resources/mapper/ProductSkuMapper.xml

@@ -20,6 +20,10 @@
         SELECT * FROM product_skus WHERE product_id = #{productId} AND enabled = 1 ORDER BY id ASC
     </select>
 
+    <select id="findByProductIdAll" resultMap="BaseResultMap">
+        SELECT * FROM product_skus WHERE product_id = #{productId} ORDER BY id ASC
+    </select>
+
     <select id="findById" resultMap="BaseResultMap">
         SELECT * FROM product_skus WHERE id = #{id}
     </select>

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-37c204b81048e5ea0681e3ddb713bc0380f97621
+69a0c3315d06502e242fdbb6aa59599f9a891aec

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

@@ -1,12 +1,12 @@
 {
   "name": "cfc-web",
-  "version": "1.0.411",
+  "version": "1.0.413",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "cfc-web",
-      "version": "1.0.411",
+      "version": "1.0.413",
       "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.412",
+  "version": "1.0.414",
   "private": true,
   "scripts": {
     "dev": "vue-cli-service serve",

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

@@ -4,6 +4,31 @@
 
 ---
 
+## v1.0.414 (2026-07-19)
+
+### Bug 修复
+- SKU编辑器适配Map类型specs + enabled Boolean转1/0
+- 新增findByProductIdAll供管理端SKU列表(无enabled过滤)
+- ProductSkuDTO specs类型从List<Map>改为Map<String,String>
+
+### 其他
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+
+## v1.0.413 (2026-07-19)
+
+### 新功能
+- 心页面添加心理报告卡片 - 完整EMID四维条形图展示
+
+
 ## v1.0.412 (2026-07-19)
 
 ### 新功能

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

@@ -1,6 +1,6 @@
 # 更新日志
 
-> 当前版本: v1.0.412
+> 当前版本: v1.0.414
 
 ## 历史版本
 
@@ -8,6 +8,31 @@
 
 ---
 
+## v1.0.414 (2026-07-19)
+
+### Bug 修复
+- SKU编辑器适配Map类型specs + enabled Boolean转1/0
+- 新增findByProductIdAll供管理端SKU列表(无enabled过滤)
+- ProductSkuDTO specs类型从List<Map>改为Map<String,String>
+
+### 其他
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+
+## v1.0.413 (2026-07-19)
+
+### 新功能
+- 心页面添加心理报告卡片 - 完整EMID四维条形图展示
+
+
 ## v1.0.412 (2026-07-19)
 
 ### 新功能

+ 10 - 2
cfc-web/src/views/admin/components/ProductSkuEditor.vue

@@ -173,7 +173,7 @@ const baseURL = process.env.VUE_APP_BASE_API || ''
           originalPrice: sku.originalPrice ? parseFloat(sku.originalPrice) : 0,
           stock: sku.stock || 0,
           image: sku.image || '',
-          enabled: sku.enabled !== undefined ? sku.enabled : 1
+          enabled: sku.enabled !== undefined ? (sku.enabled ? 1 : 0) : 1
         }
       } else {
         this.editingId = null
@@ -210,8 +210,16 @@ const baseURL = process.env.VUE_APP_BASE_API || ''
     parseSpecs(specs) {
       if (!specs) return '-'
       try {
+        // Handle object (Map from DTO) directly
+        if (typeof specs === 'object') {
+          return Object.entries(specs).map(([k, v]) => k + ':' + v).join('; ')
+        }
+        // Handle string (JSON string)
         const obj = JSON.parse(specs)
-        return Object.entries(obj).map(([k, v]) => k + ':' + v).join('; ')
+        if (typeof obj === 'object' && obj !== null) {
+          return Object.entries(obj).map(([k, v]) => k + ':' + v).join('; ')
+        }
+        return specs
       } catch (e) {
         return specs
       }