Commit a83b8e8fbc23ae37348e1c551a98ea9a54896bbc

Authored by YunaiV
1 parent f469c5ca

修复报错的单元测试

Showing 20 changed files with 40 additions and 28 deletions
README.md
1 -**严肃声明:现在、未来都不会有商业版本,所有功能全部开源!**  
2 -  
3 -**拒绝虚假开源,售卖商业版,程序员不骗程序员!!** 1 +**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!**
4 2
5 **「我喜欢写代码,乐此不疲」** 3 **「我喜欢写代码,乐此不疲」**
6 **「我喜欢做开源,以此为乐」** 4 **「我喜欢做开源,以此为乐」**
@@ -181,7 +179,6 @@ ps:核心功能已经实现,正在对接微信小程序中... @@ -181,7 +179,6 @@ ps:核心功能已经实现,正在对接微信小程序中...
181 | `yudao-module-system` | 系统功能的 Module 模块 | 179 | `yudao-module-system` | 系统功能的 Module 模块 |
182 | `yudao-module-member` | 会员中心的 Module 模块 | 180 | `yudao-module-member` | 会员中心的 Module 模块 |
183 | `yudao-module-infra` | 基础设施的 Module 模块 | 181 | `yudao-module-infra` | 基础设施的 Module 模块 |
184 -| `yudao-module-tool` | 研发工具的 Module 模块 |  
185 | `yudao-module-bpm` | 工作流程的 Module 模块 | 182 | `yudao-module-bpm` | 工作流程的 Module 模块 |
186 | `yudao-module-pay` | 支付系统的 Module 模块 | 183 | `yudao-module-pay` | 支付系统的 Module 模块 |
187 184
@@ -14,12 +14,12 @@ @@ -14,12 +14,12 @@
14 <module>yudao-server</module> 14 <module>yudao-server</module>
15 <!-- 各种 module 拓展 --> 15 <!-- 各种 module 拓展 -->
16 <module>yudao-module-member</module> 16 <module>yudao-module-member</module>
17 - <module>yudao-module-bpm</module>  
18 <module>yudao-module-system</module> 17 <module>yudao-module-system</module>
19 <module>yudao-module-infra</module> 18 <module>yudao-module-infra</module>
20 <module>yudao-module-pay</module> 19 <module>yudao-module-pay</module>
21 -<!-- <module>yudao-module-mall</module>--> 20 +<!-- <module>yudao-module-bpm</module>-->
22 <module>yudao-module-visualization</module> 21 <module>yudao-module-visualization</module>
  22 +<!-- <module>yudao-module-mall</module>-->
23 <!-- 示例项目 --> 23 <!-- 示例项目 -->
24 <module>yudao-example</module> 24 <module>yudao-example</module>
25 </modules> 25 </modules>
yudao-dependencies/pom.xml
@@ -56,6 +56,7 @@ @@ -56,6 +56,7 @@
56 <tika-core.version>2.6.0</tika-core.version> 56 <tika-core.version>2.6.0</tika-core.version>
57 <aj-captcha.version>1.3.0</aj-captcha.version> 57 <aj-captcha.version>1.3.0</aj-captcha.version>
58 <netty-all.version>4.1.85.Final</netty-all.version> 58 <netty-all.version>4.1.85.Final</netty-all.version>
  59 + <ip2region.version>2.6.6</ip2region.version>
59 <!-- 三方云服务相关 --> 60 <!-- 三方云服务相关 -->
60 <okio.version>3.0.0</okio.version> 61 <okio.version>3.0.0</okio.version>
61 <okhttp3.version>4.10.0</okhttp3.version> 62 <okhttp3.version>4.10.0</okhttp3.version>
@@ -515,6 +516,12 @@ @@ -515,6 +516,12 @@
515 <version>${netty-all.version}</version> 516 <version>${netty-all.version}</version>
516 </dependency> 517 </dependency>
517 518
  519 + <dependency>
  520 + <groupId>org.lionsoul</groupId>
  521 + <artifactId>ip2region</artifactId>
  522 + <version>${ip2region.version}</version>
  523 + </dependency>
  524 +
518 <!-- 三方云服务相关 --> 525 <!-- 三方云服务相关 -->
519 <dependency> 526 <dependency>
520 <groupId>com.squareup.okio</groupId> 527 <groupId>com.squareup.okio</groupId>
yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRuleTest.java
@@ -227,7 +227,7 @@ class DeptDataPermissionRuleTest extends BaseMockitoUnitTest { @@ -227,7 +227,7 @@ class DeptDataPermissionRuleTest extends BaseMockitoUnitTest {
227 // 调用 227 // 调用
228 Expression expression = rule.getExpression(tableName, tableAlias); 228 Expression expression = rule.getExpression(tableName, tableAlias);
229 // 断言 229 // 断言
230 - assertEquals("u.dept_id IN (10, 20) OR u.id = 1", expression.toString()); 230 + assertEquals("(u.dept_id IN (10, 20) OR u.id = 1)", expression.toString());
231 assertSame(deptDataPermission, loginUser.getContext(DeptDataPermissionRule.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); 231 assertSame(deptDataPermission, loginUser.getContext(DeptDataPermissionRule.CONTEXT_KEY, DeptDataPermissionRespDTO.class));
232 } 232 }
233 } 233 }
yudao-framework/yudao-spring-boot-starter-biz-ip/pom.xml
@@ -34,7 +34,6 @@ @@ -34,7 +34,6 @@
34 <dependency> 34 <dependency>
35 <groupId>org.lionsoul</groupId> 35 <groupId>org.lionsoul</groupId>
36 <artifactId>ip2region</artifactId> 36 <artifactId>ip2region</artifactId>
37 - <version>${ip2region.version}</version>  
38 </dependency> 37 </dependency>
39 38
40 <dependency> 39 <dependency>
yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/utils/AreaUtils.java
@@ -28,7 +28,9 @@ public class AreaUtils { @@ -28,7 +28,9 @@ public class AreaUtils {
28 @SuppressWarnings("InstantiationOfUtilityClass") 28 @SuppressWarnings("InstantiationOfUtilityClass")
29 private final static AreaUtils INSTANCE = new AreaUtils(); 29 private final static AreaUtils INSTANCE = new AreaUtils();
30 30
31 - 31 + /**
  32 + * Area 内存缓存,提升访问速度
  33 + */
32 private static Map<Integer, Area> areas; 34 private static Map<Integer, Area> areas;
33 35
34 private AreaUtils() { 36 private AreaUtils() {
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/application-unit-test.yaml
@@ -9,7 +9,7 @@ spring: @@ -9,7 +9,7 @@ spring:
9 # 数据源配置项 9 # 数据源配置项
10 datasource: 10 datasource:
11 name: ruoyi-vue-pro 11 name: ruoyi-vue-pro
12 - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 12 + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写
13 driver-class-name: org.h2.Driver 13 driver-class-name: org.h2.Driver
14 username: sa 14 username: sa
15 password: 15 password:
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceTest.java
@@ -79,7 +79,7 @@ public class FileServiceTest extends BaseDbUnitTest { @@ -79,7 +79,7 @@ public class FileServiceTest extends BaseDbUnitTest {
79 FileClient client = mock(FileClient.class); 79 FileClient client = mock(FileClient.class);
80 when(fileConfigService.getMasterFileClient()).thenReturn(client); 80 when(fileConfigService.getMasterFileClient()).thenReturn(client);
81 String url = randomString(); 81 String url = randomString();
82 - when(client.upload(same(content), same(path), same("image/jpeg"))).thenReturn(url); 82 + when(client.upload(same(content), same(path), eq("image/jpeg"))).thenReturn(url);
83 when(client.getId()).thenReturn(10L); 83 when(client.getId()).thenReturn(10L);
84 String name = "单测文件名"; 84 String name = "单测文件名";
85 // 调用 85 // 调用
yudao-module-infra/yudao-module-infra-biz/src/test/resources/application-unit-test.yaml
@@ -9,7 +9,7 @@ spring: @@ -9,7 +9,7 @@ spring:
9 # 数据源配置项 9 # 数据源配置项
10 datasource: 10 datasource:
11 name: ruoyi-vue-pro 11 name: ruoyi-vue-pro
12 - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 12 + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写
13 driver-class-name: org.h2.Driver 13 driver-class-name: org.h2.Driver
14 username: sa 14 username: sa
15 password: 15 password:
yudao-module-mall/pom.xml
@@ -15,18 +15,15 @@ @@ -15,18 +15,15 @@
15 <name>${project.artifactId}</name> 15 <name>${project.artifactId}</name>
16 16
17 <description> 17 <description>
18 - 商城大模块,由 product 商品、promotion 营销、trade 交易 coupon等组成 18 + 商城大模块,由 product 商品、promotion 营销、trade 交易等组成
19 </description> 19 </description>
20 <modules> 20 <modules>
21 -<!-- <module>yudao-module-coupon-api</module>-->  
22 -<!-- <module>yudao-module-coupon-biz</module>-->  
23 <module>yudao-module-promotion-api</module> 21 <module>yudao-module-promotion-api</module>
24 <module>yudao-module-promotion-biz</module> 22 <module>yudao-module-promotion-biz</module>
25 <module>yudao-module-product-api</module> 23 <module>yudao-module-product-api</module>
26 <module>yudao-module-product-biz</module> 24 <module>yudao-module-product-biz</module>
27 <module>yudao-module-trade-api</module> 25 <module>yudao-module-trade-api</module>
28 <module>yudao-module-trade-biz</module> 26 <module>yudao-module-trade-biz</module>
29 -  
30 </modules> 27 </modules>
31 28
32 </project> 29 </project>
yudao-module-mall/yudao-module-product-biz/src/test/resources/application-unit-test.yaml
@@ -9,7 +9,7 @@ spring: @@ -9,7 +9,7 @@ spring:
9 # 数据源配置项 9 # 数据源配置项
10 datasource: 10 datasource:
11 name: ruoyi-vue-pro 11 name: ruoyi-vue-pro
12 - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 12 + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写
13 driver-class-name: org.h2.Driver 13 driver-class-name: org.h2.Driver
14 username: sa 14 username: sa
15 password: 15 password:
yudao-module-mall/yudao-module-promotion-biz/src/test/resources/application-unit-test.yaml
@@ -9,7 +9,7 @@ spring: @@ -9,7 +9,7 @@ spring:
9 # 数据源配置项 9 # 数据源配置项
10 datasource: 10 datasource:
11 name: ruoyi-vue-pro 11 name: ruoyi-vue-pro
12 - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 12 + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写
13 driver-class-name: org.h2.Driver 13 driver-class-name: org.h2.Driver
14 username: sa 14 username: sa
15 password: 15 password:
yudao-module-mall/yudao-module-trade-biz/src/test/resources/application-unit-test.yaml
@@ -9,7 +9,7 @@ spring: @@ -9,7 +9,7 @@ spring:
9 # 数据源配置项 9 # 数据源配置项
10 datasource: 10 datasource:
11 name: ruoyi-vue-pro 11 name: ruoyi-vue-pro
12 - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 12 + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写
13 driver-class-name: org.h2.Driver 13 driver-class-name: org.h2.Driver
14 username: sa 14 username: sa
15 password: 15 password:
yudao-module-member/yudao-module-member-biz/src/test/resources/application-unit-test.yaml
@@ -9,7 +9,7 @@ spring: @@ -9,7 +9,7 @@ spring:
9 # 数据源配置项 9 # 数据源配置项
10 datasource: 10 datasource:
11 name: ruoyi-vue-pro 11 name: ruoyi-vue-pro
12 - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 12 + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写
13 driver-class-name: org.h2.Driver 13 driver-class-name: org.h2.Driver
14 username: sa 14 username: sa
15 password: 15 password:
yudao-module-pay/yudao-module-pay-biz/src/test/resources/application-unit-test.yaml
@@ -9,7 +9,7 @@ spring: @@ -9,7 +9,7 @@ spring:
9 # 数据源配置项 9 # 数据源配置项
10 datasource: 10 datasource:
11 name: ruoyi-vue-pro 11 name: ruoyi-vue-pro
12 - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 12 + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写
13 driver-class-name: org.h2.Driver 13 driver-class-name: org.h2.Driver
14 username: sa 14 username: sa
15 password: 15 password:
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java
1 package cn.iocoder.yudao.module.system.service.dept; 1 package cn.iocoder.yudao.module.system.service.dept;
2 2
3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  4 +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
4 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; 5 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO;
5 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; 6 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
6 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; 7 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO;
@@ -12,6 +13,7 @@ import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; @@ -12,6 +13,7 @@ import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
12 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; 13 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
13 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 14 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
14 import com.google.common.collect.Multimap; 15 import com.google.common.collect.Multimap;
  16 +import org.junit.jupiter.api.BeforeEach;
15 import org.junit.jupiter.api.Test; 17 import org.junit.jupiter.api.Test;
16 import org.springframework.boot.test.mock.mockito.MockBean; 18 import org.springframework.boot.test.mock.mockito.MockBean;
17 import org.springframework.context.annotation.Import; 19 import org.springframework.context.annotation.Import;
@@ -47,6 +49,12 @@ public class DeptServiceTest extends BaseDbUnitTest { @@ -47,6 +49,12 @@ public class DeptServiceTest extends BaseDbUnitTest {
47 @MockBean 49 @MockBean
48 private DeptProducer deptProducer; 50 private DeptProducer deptProducer;
49 51
  52 + @BeforeEach
  53 + public void setUp() {
  54 + // 清理租户上下文
  55 + TenantContextHolder.clear();
  56 + }
  57 +
50 @Test 58 @Test
51 @SuppressWarnings("unchecked") 59 @SuppressWarnings("unchecked")
52 void testInitLocalCache() { 60 void testInitLocalCache() {
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java
@@ -57,7 +57,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { @@ -57,7 +57,7 @@ public class DictDataServiceTest extends BaseDbUnitTest {
57 // 准备参数 57 // 准备参数
58 DictDataPageReqVO reqVO = new DictDataPageReqVO(); 58 DictDataPageReqVO reqVO = new DictDataPageReqVO();
59 reqVO.setLabel("芋"); 59 reqVO.setLabel("芋");
60 - reqVO.setDictType("yu"); 60 + reqVO.setDictType("yunai");
61 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); 61 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
62 62
63 // 调用 63 // 调用
@@ -86,7 +86,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { @@ -86,7 +86,7 @@ public class DictDataServiceTest extends BaseDbUnitTest {
86 // 准备参数 86 // 准备参数
87 DictDataExportReqVO reqVO = new DictDataExportReqVO(); 87 DictDataExportReqVO reqVO = new DictDataExportReqVO();
88 reqVO.setLabel("芋"); 88 reqVO.setLabel("芋");
89 - reqVO.setDictType("yu"); 89 + reqVO.setDictType("yunai");
90 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); 90 reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
91 91
92 // 调用 92 // 调用
yudao-module-system/yudao-module-system-biz/src/test/resources/application-unit-test.yaml
@@ -9,7 +9,7 @@ spring: @@ -9,7 +9,7 @@ spring:
9 # 数据源配置项 9 # 数据源配置项
10 datasource: 10 datasource:
11 name: ruoyi-vue-pro 11 name: ruoyi-vue-pro
12 - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 12 + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写
13 driver-class-name: org.h2.Driver 13 driver-class-name: org.h2.Driver
14 username: sa 14 username: sa
15 password: 15 password:
yudao-ui-admin/src/views/mall/trade/order/detail.vue
@@ -58,7 +58,8 @@ @@ -58,7 +58,8 @@
58 <el-table-column prop="spuName" label="商品" width="700"> 58 <el-table-column prop="spuName" label="商品" width="700">
59 <template slot-scope="{ row }"> 59 <template slot-scope="{ row }">
60 {{row.spuName}} 60 {{row.spuName}}
61 - <el-tag size="medium" v-for="property in row.properties">{{property.propertyName}}:{{property.valueName}}</el-tag> 61 + <el-tag size="medium" v-for="property in row.properties" :key="property.propertyId">
  62 + {{property.propertyName}}:{{property.valueName}}</el-tag>
62 </template> 63 </template>
63 </el-table-column> 64 </el-table-column>
64 <el-table-column prop="originalUnitPrice" label="单价(元)" width="180"> 65 <el-table-column prop="originalUnitPrice" label="单价(元)" width="180">
@@ -79,7 +80,7 @@ @@ -79,7 +80,7 @@
79 </el-table-column> 80 </el-table-column>
80 </el-table> 81 </el-table>
81 </el-descriptions-item> 82 </el-descriptions-item>
82 - <el-descriptions-item v-for="(item,index) in 5" label-class-name="no-colon" /> <!-- 占位 --> 83 + <el-descriptions-item v-for="(item,index) in 5" label-class-name="no-colon" :key="item" /> <!-- 占位 -->
83 <el-descriptions-item label="商品总额">¥{{ (order.originalPrice / 100.0).toFixed(2) }}</el-descriptions-item> 84 <el-descriptions-item label="商品总额">¥{{ (order.originalPrice / 100.0).toFixed(2) }}</el-descriptions-item>
84 <el-descriptions-item label="运费金额">¥{{ (order.deliveryPrice / 100.0).toFixed(2) }}</el-descriptions-item> 85 <el-descriptions-item label="运费金额">¥{{ (order.deliveryPrice / 100.0).toFixed(2) }}</el-descriptions-item>
85 <el-descriptions-item label="订单调价">¥{{ (order.adjustPrice / 100.0).toFixed(2) }}</el-descriptions-item> 86 <el-descriptions-item label="订单调价">¥{{ (order.adjustPrice / 100.0).toFixed(2) }}</el-descriptions-item>
@@ -92,7 +93,7 @@ @@ -92,7 +93,7 @@
92 <el-descriptions-item label="积分抵扣" label-style="color: red"> 93 <el-descriptions-item label="积分抵扣" label-style="color: red">
93 ¥{{ (order.pointPrice / 100.0).toFixed(2) }} 94 ¥{{ (order.pointPrice / 100.0).toFixed(2) }}
94 </el-descriptions-item> 95 </el-descriptions-item>
95 - <el-descriptions-item v-for="(item,index) in 5" label-class-name="no-colon" /> <!-- 占位 --> 96 + <el-descriptions-item v-for="(item,index) in 5" label-class-name="no-colon" :key="item" /> <!-- 占位 -->
96 <el-descriptions-item label="应付金额"> 97 <el-descriptions-item label="应付金额">
97 ¥{{ (order.payPrice / 100.0).toFixed(2) }} 98 ¥{{ (order.payPrice / 100.0).toFixed(2) }}
98 </el-descriptions-item> 99 </el-descriptions-item>
yudao-ui-admin/src/views/mall/trade/order/index.vue
@@ -99,7 +99,8 @@ @@ -99,7 +99,8 @@
99 <img :src="row.picUrl"/> 99 <img :src="row.picUrl"/>
100 <span class="ellipsis-2" :title="row.spuName">{{row.spuName}}</span> 100 <span class="ellipsis-2" :title="row.spuName">{{row.spuName}}</span>
101 <!-- TODO @小程:下面是商品属性,想当度一行,放在商品名下面 --> 101 <!-- TODO @小程:下面是商品属性,想当度一行,放在商品名下面 -->
102 - <el-tag size="medium" v-for="property in row.properties">{{property.propertyName}}:{{property.valueName}}</el-tag> 102 + <el-tag size="medium" v-for="property in row.properties" :key="property.propertyId">
  103 + {{property.propertyName}}:{{property.valueName}}</el-tag>
103 </div> 104 </div>
104 </template> 105 </template>
105 </el-table-column> 106 </el-table-column>