Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
njgzx
dataease
Commits
065ce3da
Unverified
提交
065ce3da
authored
1月 19, 2022
作者:
fit2cloudrd
提交者:
GitHub
1月 19, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1661 from dataease/dev
Dev
上级
cef9af2e
bb954cc6
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
60 行增加
和
416 行删除
+60
-416
DataSetTableFieldController.java
...aease/controller/dataset/DataSetTableFieldController.java
+8
-1
ChartViewService.java
...main/java/io/dataease/service/chart/ChartViewService.java
+38
-33
DataSetTableService.java
...java/io/dataease/service/dataset/DataSetTableService.java
+2
-2
PermissionService.java
...n/java/io/dataease/service/dataset/PermissionService.java
+2
-2
DirectFieldService.java
...aease/service/dataset/impl/direct/DirectFieldService.java
+1
-1
V31__1.7.sql
backend/src/main/resources/db/migration/V31__1.7.sql
+3
-0
messages_en_US.properties
backend/src/main/resources/i18n/messages_en_US.properties
+0
-0
messages_zh_CN.properties
backend/src/main/resources/i18n/messages_zh_CN.properties
+0
-186
messages_zh_TW.properties
backend/src/main/resources/i18n/messages_zh_TW.properties
+0
-188
en.js
frontend/src/lang/en.js
+2
-1
tw.js
frontend/src/lang/tw.js
+2
-1
zh.js
frontend/src/lang/zh.js
+2
-1
没有找到文件。
backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java
浏览文件 @
065ce3da
...
...
@@ -14,6 +14,7 @@ import io.dataease.i18n.Translator;
import
io.dataease.service.dataset.DataSetFieldService
;
import
io.dataease.service.dataset.DataSetTableFieldsService
;
import
io.dataease.service.dataset.DataSetTableService
;
import
io.dataease.service.dataset.PermissionService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.commons.lang3.ObjectUtils
;
...
...
@@ -47,13 +48,17 @@ public class DataSetTableFieldController {
@Resource
private
DataSetTableService
dataSetTableService
;
@Resource
private
PermissionService
permissionService
;
@ApiOperation
(
"查询表下属字段"
)
@PostMapping
(
"list/{tableId}"
)
public
List
<
DatasetTableField
>
list
(
@PathVariable
String
tableId
)
{
DatasetTableField
datasetTableField
=
DatasetTableField
.
builder
().
build
();
datasetTableField
.
setTableId
(
tableId
);
return
dataSetTableFieldsService
.
list
(
datasetTableField
);
List
<
DatasetTableField
>
fields
=
dataSetTableFieldsService
.
list
(
datasetTableField
);
fields
=
permissionService
.
filterColumnPermissons
(
fields
,
new
ArrayList
<>(),
tableId
,
null
);
return
fields
;
}
@ApiOperation
(
"分组查询表下属字段"
)
...
...
@@ -63,8 +68,10 @@ public class DataSetTableFieldController {
datasetTableField
.
setTableId
(
tableId
);
datasetTableField
.
setGroupType
(
"d"
);
List
<
DatasetTableField
>
dimensionList
=
dataSetTableFieldsService
.
list
(
datasetTableField
);
dimensionList
=
permissionService
.
filterColumnPermissons
(
dimensionList
,
new
ArrayList
<>(),
tableId
,
null
);
datasetTableField
.
setGroupType
(
"q"
);
List
<
DatasetTableField
>
quotaList
=
dataSetTableFieldsService
.
list
(
datasetTableField
);
quotaList
=
permissionService
.
filterColumnPermissons
(
quotaList
,
new
ArrayList
<>(),
tableId
,
null
);
DatasetTableField4Type
datasetTableField4Type
=
new
DatasetTableField4Type
();
datasetTableField4Type
.
setDimensionList
(
dimensionList
);
...
...
backend/src/main/java/io/dataease/service/chart/ChartViewService.java
浏览文件 @
065ce3da
...
...
@@ -193,33 +193,31 @@ public class ChartViewService {
return
calcData
(
view
,
request
,
request
.
isCache
());
}
private
void
checkPermissions
(
List
<?
extends
ChartViewFieldBaseDTO
>
chartViewFieldDTOS
,
List
<
DatasetTableField
>
fields
,
List
<
String
>
desensitizationList
,
Boolean
alowDesensitization
)
throws
Exception
{
String
filedName
=
""
;
for
(
ChartViewFieldBaseDTO
chartViewFieldDTO
:
chartViewFieldDTOS
)
{
if
(
alowDesensitization
)
{
if
(!
fields
.
stream
().
map
(
DatasetTableField:
:
getDataeaseName
).
collect
(
Collectors
.
toList
()).
contains
(
chartViewFieldDTO
.
getDataeaseName
()))
{
filedName
=
filedName
+
chartViewFieldDTO
.
getName
()
+
" ,"
;
}
}
else
{
if
(
desensitizationList
.
contains
(
chartViewFieldDTO
.
getDataeaseName
())
||
!
fields
.
stream
().
map
(
DatasetTableField:
:
getDataeaseName
).
collect
(
Collectors
.
toList
()).
contains
(
chartViewFieldDTO
.
getDataeaseName
()))
{
filedName
=
filedName
+
chartViewFieldDTO
.
getName
()
+
" ,"
;
}
}
}
filedName
=
filedName
.
endsWith
(
","
)
?
filedName
.
substring
(
0
,
filedName
.
length
()
-
1
)
:
filedName
;
if
(
StringUtils
.
isNotEmpty
(
filedName
))
{
throw
new
Exception
(
"以下字段没有权限: "
+
filedName
);
}
}
// private void checkPermissions(List<? extends ChartViewFieldBaseDTO> chartViewFieldDTOS, List<DatasetTableField> fields, List<String> desensitizationList, Boolean alowDesensitization) throws Exception
{
//
String filedName = "";
//
for (ChartViewFieldBaseDTO chartViewFieldDTO : chartViewFieldDTOS) {
// if (alowDesensitization)
{
//
if (!fields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList()).contains(chartViewFieldDTO.getDataeaseName())) {
//
filedName = filedName + chartViewFieldDTO.getName() + " ,";
//
}
// }
else {
//
if (desensitizationList.contains(chartViewFieldDTO.getDataeaseName()) || !fields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList()).contains(chartViewFieldDTO.getDataeaseName())) {
//
filedName = filedName + chartViewFieldDTO.getName() + " ,";
//
}
//
}
//
}
//
filedName = filedName.endsWith(",") ? filedName.substring(0, filedName.length() - 1) : filedName;
// if (StringUtils.isNotEmpty(filedName))
{
//
throw new Exception("以下字段没有权限: " + filedName);
//
}
//
}
public
ChartViewDTO
calcData
(
ChartViewDTO
view
,
ChartExtRequest
requestList
,
boolean
cache
)
throws
Exception
{
if
(
ObjectUtils
.
isEmpty
(
view
))
{
throw
new
RuntimeException
(
Translator
.
get
(
"i18n_chart_delete"
));
}
List
<
ChartViewFieldDTO
>
xAxis
=
new
Gson
().
fromJson
(
view
.
getXAxis
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{
}.
getType
());
List
<
ChartViewFieldDTO
>
yAxis
=
new
Gson
().
fromJson
(
view
.
getYAxis
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{
}.
getType
());
List
<
ChartViewFieldDTO
>
xAxis
=
new
Gson
().
fromJson
(
view
.
getXAxis
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{}.
getType
());
List
<
ChartViewFieldDTO
>
yAxis
=
new
Gson
().
fromJson
(
view
.
getYAxis
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{}.
getType
());
if
(
StringUtils
.
equalsIgnoreCase
(
view
.
getType
(),
"chart-mix"
))
{
List
<
ChartViewFieldDTO
>
yAxisExt
=
new
Gson
().
fromJson
(
view
.
getYAxisExt
(),
new
TypeToken
<
List
<
ChartViewFieldDTO
>>()
{
}.
getType
());
...
...
@@ -241,8 +239,15 @@ public class ChartViewService {
//列权限
List
<
String
>
desensitizationList
=
new
ArrayList
<>();
fields
=
permissionService
.
filterColumnPermissons
(
fields
,
desensitizationList
,
datasetTable
,
null
);
checkPermissions
(
fieldCustomFilter
,
fields
,
desensitizationList
,
false
);
fields
=
permissionService
.
filterColumnPermissons
(
fields
,
desensitizationList
,
datasetTable
.
getId
(),
requestList
.
getUser
());
//将没有权限的列删掉
List
<
String
>
dataeaseNames
=
fields
.
stream
().
map
(
DatasetTableField:
:
getDataeaseName
).
collect
(
Collectors
.
toList
());
fieldCustomFilter
=
fieldCustomFilter
.
stream
().
filter
(
item
->
!
desensitizationList
.
contains
(
item
.
getDataeaseName
())
&&
dataeaseNames
.
contains
(
item
.
getDataeaseName
())).
collect
(
Collectors
.
toList
());
extStack
=
extStack
.
stream
().
filter
(
item
->
!
desensitizationList
.
contains
(
item
.
getDataeaseName
())
&&
dataeaseNames
.
contains
(
item
.
getDataeaseName
())).
collect
(
Collectors
.
toList
());
extBubble
=
extBubble
.
stream
().
filter
(
item
->
!
desensitizationList
.
contains
(
item
.
getDataeaseName
())
&&
dataeaseNames
.
contains
(
item
.
getDataeaseName
())).
collect
(
Collectors
.
toList
());
drill
=
drill
.
stream
().
filter
(
item
->
!
desensitizationList
.
contains
(
item
.
getDataeaseName
())
&&
dataeaseNames
.
contains
(
item
.
getDataeaseName
())).
collect
(
Collectors
.
toList
());
//行权限
List
<
ChartFieldCustomFilterDTO
>
permissionFields
=
permissionService
.
getCustomFilters
(
fields
,
datasetTable
,
requestList
.
getUser
());
fieldCustomFilter
.
addAll
(
permissionFields
);
...
...
@@ -255,30 +260,30 @@ public class ChartViewService {
return
emptyChartViewDTO
(
view
);
}
switch
(
view
.
getType
()){
switch
(
view
.
getType
())
{
case
"text"
:
case
"gauge"
:
case
"liquid"
:
xAxis
=
new
ArrayList
<>();
checkPermissions
(
yAxis
,
fields
,
desensitizationList
,
false
);
yAxis
=
yAxis
.
stream
().
filter
(
item
->
!
desensitizationList
.
contains
(
item
.
getDataeaseName
())
&&
dataeaseNames
.
contains
(
item
.
getDataeaseName
())).
collect
(
Collectors
.
toList
()
);
if
(
CollectionUtils
.
isEmpty
(
yAxis
))
{
return
emptyChartViewDTO
(
view
);
}
break
;
case
"table-info"
:
yAxis
=
new
ArrayList
<>();
checkPermissions
(
xAxis
,
fields
,
desensitizationList
,
true
);
xAxis
=
xAxis
.
stream
().
filter
(
item
->
dataeaseNames
.
contains
(
item
.
getDataeaseName
())).
collect
(
Collectors
.
toList
()
);
if
(
CollectionUtils
.
isEmpty
(
xAxis
))
{
return
emptyChartViewDTO
(
view
);
}
break
;
case
"table-normal"
:
checkPermissions
(
xAxis
,
fields
,
desensitizationList
,
true
);
checkPermissions
(
yAxis
,
fields
,
desensitizationList
,
true
);
xAxis
=
xAxis
.
stream
().
filter
(
item
->
dataeaseNames
.
contains
(
item
.
getDataeaseName
())).
collect
(
Collectors
.
toList
()
);
yAxis
=
yAxis
.
stream
().
filter
(
item
->
dataeaseNames
.
contains
(
item
.
getDataeaseName
())).
collect
(
Collectors
.
toList
()
);
break
;
default
:
checkPermissions
(
xAxis
,
fields
,
desensitizationList
,
false
);
checkPermissions
(
yAxis
,
fields
,
desensitizationList
,
false
);
xAxis
=
xAxis
.
stream
().
filter
(
item
->
!
desensitizationList
.
contains
(
item
.
getDataeaseName
())
&&
dataeaseNames
.
contains
(
item
.
getDataeaseName
())).
collect
(
Collectors
.
toList
()
);
yAxis
=
yAxis
.
stream
().
filter
(
item
->
!
desensitizationList
.
contains
(
item
.
getDataeaseName
())
&&
dataeaseNames
.
contains
(
item
.
getDataeaseName
())).
collect
(
Collectors
.
toList
()
);
}
// 过滤来自仪表板的条件
...
...
@@ -1570,14 +1575,14 @@ public class ChartViewService {
data
.
forEach
(
ele
->
{
Map
<
String
,
Object
>
d
=
new
HashMap
<>();
for
(
int
i
=
0
;
i
<
fields
.
size
();
i
++)
{
if
(
CollectionUtils
.
isNotEmpty
(
desensitizationList
)
&&
desensitizationList
.
contains
(
fields
.
get
(
i
).
getDataeaseName
()))
{
if
(
CollectionUtils
.
isNotEmpty
(
desensitizationList
)
&&
desensitizationList
.
contains
(
fields
.
get
(
i
).
getDataeaseName
()))
{
d
.
put
(
fields
.
get
(
i
).
getDataeaseName
(),
ColumnPermissionConstants
.
Desensitization_desc
);
continue
;
}
ChartViewFieldDTO
chartViewFieldDTO
=
fields
.
get
(
i
);
if
(
chartViewFieldDTO
.
getDeType
()
==
0
||
chartViewFieldDTO
.
getDeType
()
==
1
)
{
d
.
put
(
fields
.
get
(
i
).
getDataeaseName
(),
StringUtils
.
isEmpty
(
ele
[
i
])
?
""
:
ele
[
i
]);
d
.
put
(
fields
.
get
(
i
).
getDataeaseName
(),
StringUtils
.
isEmpty
(
ele
[
i
])
?
""
:
ele
[
i
]);
}
else
if
(
chartViewFieldDTO
.
getDeType
()
==
2
||
chartViewFieldDTO
.
getDeType
()
==
3
)
{
d
.
put
(
fields
.
get
(
i
).
getDataeaseName
(),
StringUtils
.
isEmpty
(
ele
[
i
])
?
null
:
new
BigDecimal
(
ele
[
i
]).
setScale
(
2
,
RoundingMode
.
HALF_UP
));
}
...
...
backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java
浏览文件 @
065ce3da
...
...
@@ -399,7 +399,7 @@ public class DataSetTableService {
datasetTableField
.
setTableId
(
dataSetTableRequest
.
getId
());
datasetTableField
.
setChecked
(
Boolean
.
TRUE
);
List
<
DatasetTableField
>
fields
=
dataSetTableFieldsService
.
list
(
datasetTableField
);
fields
=
permissionService
.
filterColumnPermissons
(
fields
,
new
ArrayList
<>(),
dataSetTableRequest
.
getId
(),
null
);
List
<
DatasetTableField
>
dimension
=
new
ArrayList
<>();
List
<
DatasetTableField
>
quota
=
new
ArrayList
<>();
...
...
@@ -450,7 +450,7 @@ public class DataSetTableService {
DatasetTable
datasetTable
=
datasetTableMapper
.
selectByPrimaryKey
(
dataSetTableRequest
.
getId
());
//列权限
List
<
String
>
desensitizationList
=
new
ArrayList
<>();
fields
=
permissionService
.
filterColumnPermissons
(
fields
,
desensitizationList
,
datasetTable
,
null
);
fields
=
permissionService
.
filterColumnPermissons
(
fields
,
desensitizationList
,
datasetTable
.
getId
()
,
null
);
//行权限
List
<
ChartFieldCustomFilterDTO
>
customFilter
=
permissionService
.
getCustomFilters
(
fields
,
datasetTable
,
null
);
String
[]
fieldArray
=
fields
.
stream
().
map
(
DatasetTableField:
:
getDataeaseName
).
toArray
(
String
[]::
new
);
...
...
backend/src/main/java/io/dataease/service/dataset/PermissionService.java
浏览文件 @
065ce3da
...
...
@@ -64,10 +64,10 @@ public class PermissionService {
return
customFilter
;
}
public
List
<
DatasetTableField
>
filterColumnPermissons
(
List
<
DatasetTableField
>
fields
,
List
<
String
>
desensitizationList
,
DatasetTable
datasetTable
,
Long
user
){
public
List
<
DatasetTableField
>
filterColumnPermissons
(
List
<
DatasetTableField
>
fields
,
List
<
String
>
desensitizationList
,
String
datasetTableId
,
Long
user
){
List
<
DatasetTableField
>
result
=
new
ArrayList
<>();
List
<
ColumnPermissionItem
>
allColumnPermissionItems
=
new
ArrayList
<>();
for
(
DataSetColumnPermissionsDTO
dataSetColumnPermissionsDTO
:
columnPermissions
(
datasetTable
.
getId
()
,
user
))
{
for
(
DataSetColumnPermissionsDTO
dataSetColumnPermissionsDTO
:
columnPermissions
(
datasetTable
Id
,
user
))
{
ColumnPermissions
columnPermissions
=
JSONObject
.
parseObject
(
dataSetColumnPermissionsDTO
.
getPermissions
(),
ColumnPermissions
.
class
);
if
(!
columnPermissions
.
getEnable
()){
continue
;}
allColumnPermissionItems
.
addAll
(
columnPermissions
.
getColumns
().
stream
().
filter
(
columnPermissionItem
->
columnPermissionItem
.
getSelected
()).
collect
(
Collectors
.
toList
()));
...
...
backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java
浏览文件 @
065ce3da
...
...
@@ -54,7 +54,7 @@ public class DirectFieldService implements DataSetFieldService {
//列权限
List
<
String
>
desensitizationList
=
new
ArrayList
<>();
fields
=
permissionService
.
filterColumnPermissons
(
fields
,
desensitizationList
,
datasetTable
,
userId
);
fields
=
permissionService
.
filterColumnPermissons
(
fields
,
desensitizationList
,
datasetTable
.
getId
()
,
userId
);
if
(
CollectionUtils
.
isNotEmpty
(
desensitizationList
)
&&
desensitizationList
.
contains
(
field
.
getDataeaseName
()))
{
List
<
Object
>
results
=
new
ArrayList
<>();
...
...
backend/src/main/resources/db/migration/V31__1.7.sql
浏览文件 @
065ce3da
...
...
@@ -11,3 +11,6 @@ CREATE TABLE `dataset_column_permissions` (
INSERT
INTO
`sys_menu`
(
`menu_id`
,
`pid`
,
`sub_count`
,
`type`
,
`title`
,
`name`
,
`component`
,
`menu_sort`
,
`icon`
,
`path`
,
`i_frame`
,
`cache`
,
`hidden`
,
`permission`
,
`create_by`
,
`update_by`
,
`create_time`
,
`update_time`
)
VALUES
(
61
,
0
,
0
,
1
,
'首页'
,
'wizard'
,
'wizard/index'
,
0
,
''
,
'/wizard'
,
b
'1'
,
b
'0'
,
b
'0'
,
NULL
,
NULL
,
NULL
,
NULL
,
1614915491036
);
INSERT
INTO
`system_parameter`
(
`param_key`
,
`param_value`
,
`type`
,
`sort`
)
VALUES
(
'ui.openHomePage'
,
'true'
,
'boolean'
,
13
);
UPDATE
`dataset_table_function`
SET
`desc`
=
'如果expr等于某个vn,则返回对应位置THEN后面的结果,如果与所有值都不相等,则返回ELSE后面的rn'
WHERE
`id`
=
47
;
UPDATE
`dataset_table_function`
SET
`desc`
=
'如果expr等于某个vn,则返回对应位置THEN后面的结果,如果与所有值都不相等,则返回ELSE后面的rn'
WHERE
`id`
=
96
;
backend/src/main/resources/i18n/messages_en_US.properties
浏览文件 @
065ce3da
差异被折叠。
点击展开。
backend/src/main/resources/i18n/messages_zh_CN.properties
浏览文件 @
065ce3da
#commons
error_lang_invalid
=
语言参数错误
file_cannot_be_null
=
文件不能为空!
cannot_be_null
=
不能为空
number
=
第
row
=
行
error
=
出错
delete_fail
=
删除失败
start_engine_fail
=
启动失败
upload_fail
=
文件上传失败
#user related
user_email_already_exists
=
用户邮箱已存在
user_id_is_null
=
用户ID不能为空
user_name_is_null
=
用户名不能为空
user_email_is_null
=
用户邮箱不能为空
password_is_null
=
密码不能为空
user_id_already_exists
=
用户id已存在
password_modification_failed
=
旧密码输入错误,请重新输入
cannot_delete_current_user
=
无法删除当前登录用户
connection_failed
=
连接失败
user_already_exists
=
该用户已存在于当前成员列表中
cannot_remove_current
=
无法移除当前登录用户
login_fail
=
登录失败
password_is_incorrect
=
用户名或密码不正确
user_not_exist
=
用户不存在:
user_has_been_disabled
=
用户已被禁用
excessive_attempts
=
操作频繁
user_locked
=
用户被锁定
user_expires
=
用户过期
not_authorized
=
未经授权
user_apikey_limit
=
最多能有5个Api key
#load test
edit_load_test_not_found
=
无法编辑测试,未找到测试:
run_load_test_not_found
=
无法运行测试,未找到测试:
run_load_test_file_not_found
=
无法运行测试,无法获取测试文件元信息,测试ID:
run_load_test_file_content_not_found
=
无法运行测试,无法获取测试文件内容,测试ID:
run_load_test_file_init_error
=
无法运行测试,请检查当前站点配置
load_test_is_running
=
测试正在运行, 请等待
load_test_kafka_invalid
=
Kafka 不可用,请检查配置
cannot_edit_load_test_running
=
不能修改正在运行的测试
test_not_found
=
测试不存在:
test_not_running
=
测试未运行
load_test_already_exists
=
测试名称不能重复
no_nodes_message
=
没有节点信息
duplicate_node_ip
=
节点 IP 重复
duplicate_node_port
=
节点 Port 重复
duplicate_node_ip_port
=
节点 IP、Port 重复
max_thread_insufficient
=
并发用户数超额
related_case_del_fail_prefix
=
已关联到
related_case_del_fail_suffix
=
测试用例,请先解除关联
jmx_content_valid
=
JMX 内容无效,请检查
container_delete_fail
=
容器由于网络原因停止失败,请重试
load_test_report_file_not_exist
=
当前报告没有JTL文件,请等待或重新执行以便获取
#workspace
workspace_name_is_null
=
工作空间名不能为空
workspace_name_already_exists
=
工作空间名已存在
workspace_does_not_belong_to_user
=
当前工作空间不属于当前用户
workspace_not_exists
=
工作空间不存在
#test resource pool
test_resource_pool_id_is_null
=
资源池ID不能为空
test_resource_pool_name_is_null
=
资源池名称不能为空
test_resource_pool_name_already_exists
=
资源池名称已存在
load_test
=
性能测试
test_resource_pool_is_use
=
正在使用此资源池,无法删除
only_one_k8s
=
只能添加一个 K8S
#project
project_name_is_null
=
项目名称不能为空
project_name_already_exists
=
项目名称已存在
#organization
organization_name_is_null
=
组织名不能为空
organization_name_already_exists
=
组织名已存在
organization_does_not_belong_to_user
=
当前组织不属于当前用户
organization_id_is_null
=
组织 ID 不能为空
#api
api_load_script_error
=
读取脚本失败
api_report_is_null
=
"测试报告是未生成,无法更新"
api_test_environment_already_exists
=
"已存在该名称的环境配置"
#test case
test_case_node_level
=
层
test_case_node_level_tip
=
模块树最大深度为
test_case_module_not_null
=
所属模块不能为空
test_case_create_module_fail
=
创建模块失败
test_case_import_template_name
=
测试用例模版
test_case_import_template_sheet
=
模版
module_not_null
=
所属模块不能为空格
user_not_exists
=
该工作空间下无该用户
test_case_already_exists
=
该项目下已存在该测试用例
parse_data_error
=
解析数据出错
missing_header_information
=
缺少头部信息
test_case_exist
=
该项目下已存在用例:
node_deep_limit
=
节点深度不超过8层!
before_delete_plan
=
该计划下存在关联测试用例,请先取消关联!
incorrect_format
=
格式错误
test_case_type_validate
=
必须为functional、performance、api
test_case_priority_validate
=
必须为P0、P1、P2、P3
test_case_method_validate
=
必须为manual、auto
test_case_name
=
用例名称
test_case_type
=
用例类型
test_case_maintainer
=
维护人
test_case_priority
=
用例等级
test_case_method
=
测试方式
test_case_prerequisite
=
前置条件
test_case_remark
=
备注
test_case_step_desc
=
步骤描述
test_case_step_result
=
预期结果
test_case_module
=
所属模块
test_case
=
测试用例
module
=
模块
preconditions_optional
=
前置条件选填
step_tip_separate
=
每个步骤以换行分隔
step_tip_order
=
步骤前可标序号
step_tip_optional
=
步骤前可标序号
result_tip_separate
=
每条结果以换行分隔
result_tip_order
=
结果前可标序号
result_tip_optional
=
测试步骤和结果选填
remark_optional
=
备注选填
do_not_modify_header_order
=
请勿修改表头顺序
module_created_automatically
=
若无该模块将自动创建
options
=
选项
please_input_workspace_member
=
请填写该工作空间相关人员
test_case_report_template_repeat
=
同一工作空间下不能存在同名模版
plan_name_already_exists
=
测试计划名称已存在
test_case_already_exists_excel
=
导入文件中存在重复用例
test_case_module_already_exists
=
同层级下已存在该模块名称
api_test_name_already_exists
=
测试名称已经存在
functional_method_tip
=
功能测试不支持自动方式
#ldap
ldap_url_is_null
=
LDAP地址为空
ldap_dn_is_null
=
LDAP绑定DN为空
ldap_ou_is_null
=
LDAP参数OU为空
ldap_password_is_null
=
LDAP密码为空
ldap_connect_fail
=
连接LDAP失败
ldap_connect_fail_user
=
连接LDAP失败,绑定的DN或密码错误
ldap_user_filter_is_null
=
LDAP用户过滤器为空
ldap_user_mapping_is_null
=
LDAP用户属性映射为空
authentication_failed
=
用户认证失败,用户名或密码错误
user_not_found_or_not_unique
=
用户不存在或者不唯一
find_more_user
=
查找到多个用户
ldap_authentication_not_enabled
=
LDAP认证未启用
login_fail_email_null
=
登录失败,用户邮箱为空
login_fail_ou_error
=
登录失败,请检查用户OU
login_fail_filter_error
=
登录失败,请检查用户过滤器
check_ldap_mapping
=
检查LDAP属性映射
ldap_mapping_value_null
=
LDAP用户属性映射字段为空值
#quota
quota_workspace_excess_org_api
=
工作空间的接口测试数量总和不能超过组织的配额
quota_workspace_excess_org_performance
=
工作空间的性能测试数量总和不能超过组织的配额
quota_workspace_excess_org_max_threads
=
工作空间的最大并发数不能超过组织的配额
quota_workspace_excess_org_max_duration
=
工作空间的压测时长不能超过组织的配额
quota_workspace_excess_org_resource_pool
=
工作空间的资源池不能超过组织的资源池范围
quota_api_excess_workspace
=
接口测试数量超过工作空间限额
quota_api_excess_organization
=
接口测试数量超过组织限额
quota_performance_excess_workspace
=
性能测试数量超过工作空间限额
quota_performance_excess_organization
=
性能测试数量超过组织限额
quota_max_threads_excess_workspace
=
最大并发数超过工作空间限额
quota_max_threads_excess_organization
=
最大并发数超过组织限额
quota_duration_excess_workspace
=
压测时长超过工作空间限额
quota_duration_excess_organization
=
压测时长超过组织限额
import_xmind_count_error
=
思维导图导入用例数量不能超过 500 条
license_valid_license_error
=
授权认证失败
import_xmind_not_found
=
未找到测试用例
test_review_task_notice
=
测试评审任务通知
test_track.length_less_than
=
标题过长,字数必须小于
# check owner
check_owner_project
=
当前用户没有操作此项目的权限
check_owner_test
=
当前用户没有操作此测试的权限
check_owner_case
=
当前用户没有操作此用例的权限
check_owner_plan
=
当前用户没有操作此计划的权限
check_owner_review
=
当前用户没有操作此评审的权限
check_owner_comment
=
当前用户没有操作此评论的权限
check_owner_read_only
=
当前用户在此工作空间为只读用户
upload_content_is_null
=
导入内容为空
test_plan_notification
=
测试计划通知
task_defect_notification
=
缺陷任务通知
task_notification_
=
定时任务结果通知
api_definition_url_not_repeating
=
接口请求地址已经存在
task_notification_jenkins
=
jenkins任务通知
task_notification
=
任务通知
message_task_already_exists
=
任务接收人已经存在
#automation
automation_name_already_exists
=
同一个项目和模块下,场景名称不能重复
automation_exec_info
=
没有测试步骤,无法执行
#authsource
authsource_name_already_exists
=
认证源名称已经存在
authsource_name_is_null
=
认证源名称不能为空
authsource_configuration_is_null
=
认证源配置不能为空
个人信息=个人信息
仪表板=仪表板
修改密码=修改密码
...
...
backend/src/main/resources/i18n/messages_zh_TW.properties
浏览文件 @
065ce3da
#commons
error_lang_invalid
=
語言參數錯誤
file_cannot_be_null
=
文件不能為空!
cannot_be_null
=
不能為空
number
=
第
row
=
行
error
=
出錯
connection_failed
=
連接失敗
delete_fail
=
刪除失敗
start_engine_fail
=
啟動失敗
upload_fail
=
文件上傳失敗
#user related
user_email_already_exists
=
用戶郵箱已存在
user_id_is_null
=
用戶ID不能為空
user_name_is_null
=
用戶名不能為空
user_email_is_null
=
用戶郵箱不能為空
password_is_null
=
密碼不能為空
user_id_already_exists
=
用戶id已存在
password_modification_failed
=
舊密碼輸入錯誤,請重新輸入
cannot_delete_current_user
=
無法刪除當前登錄用戶
user_already_exists
=
該用戶已存在於當前成員列表中
cannot_remove_current
=
無法移除當前登錄用戶
password_is_incorrect
=
用戶名或密碼不正確
user_not_exist
=
用戶不存在:
user_has_been_disabled
=
用戶已被禁用
excessive_attempts
=
操作頻繁
user_locked
=
用戶被鎖定
user_expires
=
用戶過期
not_authorized
=
未經授權。
login_fail
=
登入失敗
user_apikey_limit
=
最多能有5個Api key
#load test
edit_load_test_not_found
=
無法編輯測試,未找到測試:
run_load_test_not_found
=
無法運行測試,未找到測試:
run_load_test_file_not_found
=
無法運行測試,無法獲取測試文件元信息,測試ID:
run_load_test_file_content_not_found
=
無法運行測試,無法獲取測試文件內容,測試ID:
run_load_test_file_init_error
=
無法運行測試,請檢查當前站點配置
load_test_is_running
=
測試正在運行, 請等待
load_test_kafka_invalid
=
Kafka 不可用,請檢查配置
cannot_edit_load_test_running
=
不能修改正在運行的測試
test_not_found
=
測試不存在:
test_not_running
=
測試未運行
load_test_already_exists
=
測試名稱不能重復
no_nodes_message
=
沒有節點信息
duplicate_node_ip
=
節點 IP 重復
duplicate_node_port
=
節點 Port 重復
duplicate_node_ip_port
=
節點 IP、Port 重復
max_thread_insufficient
=
並發用戶數超額
related_case_del_fail_prefix
=
已關聯到
related_case_del_fail_suffix
=
測試用例,請先解除關聯
jmx_content_valid
=
JMX 內容無效,請檢查
container_delete_fail
=
容器由於網絡原因停止失敗,請重試
load_test_report_file_not_exist
=
當前報告沒有JTL文件,請等待或重新執行以便獲取
#workspace
workspace_name_is_null
=
工作空間名不能為空
workspace_name_already_exists
=
工作空間名已存在
workspace_does_not_belong_to_user
=
當前工作空間不屬於當前用戶
workspace_not_exists
=
工作空間不存在
#test resource pool
test_resource_pool_id_is_null
=
資源池ID不能為空
test_resource_pool_name_is_null
=
資源池名稱不能為空
test_resource_pool_name_already_exists
=
資源池名稱已存在
load_test
=
性能測試
test_resource_pool_is_use
=
正在使用此資源池,無法刪除
only_one_k8s
=
只能添加一個 K8S
#project
project_name_is_null
=
項目名稱不能為空
project_name_already_exists
=
項目名稱已存在
#organization
organization_name_is_null
=
組織名不能為空
organization_name_already_exists
=
組織名已存在
organization_does_not_belong_to_user
=
當前組織不屬於當前用戶
organization_id_is_null
=
組織 ID 不能為空
#api
api_load_script_error
=
讀取腳本失敗
api_report_is_null
=
"測試報告是未生成,無法更新"
api_test_environment_already_exists
=
"已存在該名稱的環境配置"
#test case
test_case_node_level
=
層
test_case_node_level_tip
=
模塊樹最大深度為
test_case_module_not_null
=
所屬模塊不能為空
test_case_create_module_fail
=
創建模塊失敗
test_case_import_template_name
=
測試用例模版
test_case_import_template_sheet
=
模版
module_not_null
=
所屬模塊不能為空格
user_not_exists
=
該工作空間下無該用戶
test_case_already_exists
=
該項目下已存在該測試用例
parse_data_error
=
解析數據出錯
missing_header_information
=
缺少頭部信息
test_case_exist
=
該項目下已存在用例:
node_deep_limit
=
節點深度不超過8層!
before_delete_plan
=
該計劃下存在關聯測試用例,請先取消關聯!
incorrect_format
=
格式錯誤
test_case_type_validate
=
必須為functional、performance、api
test_case_priority_validate
=
必須為P0、P1、P2、P3
test_case_method_validate
=
必須為manual、auto
test_case_name
=
用例名稱
test_case_type
=
用例類型
test_case_maintainer
=
維護人
test_case_priority
=
用例等級
test_case_method
=
測試方式
test_case_prerequisite
=
前置條件
test_case_remark
=
備註
test_case_step_desc
=
步驟描述
test_case_step_result
=
預期結果
test_case_module
=
所屬模塊
test_case
=
測試用例
module
=
模塊
preconditions_optional
=
前置條件選填
step_tip_separate
=
每個步驟以換行分隔
step_tip_order
=
步驟前可標序號
step_tip_optional
=
步驟前可標序號
result_tip_separate
=
每條結果以換行分隔
result_tip_order
=
結果前可標序號
result_tip_optional
=
測試步驟和結果選填
remark_optional
=
備註選填
do_not_modify_header_order
=
請勿修改表頭順序
module_created_automatically
=
若無該模塊將自動創建
options
=
選項
please_input_workspace_member
=
請填寫該工作空間相關人員
test_case_report_template_repeat
=
同壹工作空間下不能存在同名模版
plan_name_already_exists
=
測試計劃名稱已存在
test_case_already_exists_excel
=
導入文件中存在重復用例
test_case_module_already_exists
=
同層級下已存在該模塊名稱
api_test_name_already_exists
=
測試名稱已經存在
functional_method_tip
=
功能測試不支持自動方式
#ldap
ldap_url_is_null
=
LDAP地址為空
ldap_dn_is_null
=
LDAP綁定DN為空
ldap_ou_is_null
=
LDAP參數OU為空
ldap_password_is_null
=
LDAP密碼為空
ldap_connect_fail
=
連接LDAP失敗
ldap_connect_fail_user
=
連接LDAP失敗,綁定的DN或密碼錯誤
ldap_user_filter_is_null
=
LDAP用戶過濾器為空
ldap_user_mapping_is_null
=
LDAP用戶屬性映射為空
authentication_failed
=
用戶認證失敗,用戶名或密碼錯誤
user_not_found_or_not_unique
=
用戶不存在或者不唯一
find_more_user
=
查找到多個用戶
ldap_authentication_not_enabled
=
LDAP認證未啟用
login_fail_email_null
=
登錄失敗,用戶郵箱為空
login_fail_ou_error
=
登錄失敗,請檢查用戶OU
login_fail_filter_error
=
登錄失敗,請檢查用戶過濾器
check_ldap_mapping
=
檢查LDAP屬性映射
ldap_mapping_value_null
=
LDAP用戶屬性映射預設為空值
#quota
quota_workspace_excess_org_api
=
工作空間的接口測試數量總和不能超過組織的配額
quota_workspace_excess_org_performance
=
工作空間的性能測試數量總和不能超過組織的配額
quota_workspace_excess_org_max_threads
=
工作空間的最大並發數不能超過組織的配額
quota_workspace_excess_org_max_duration
=
工作空間的壓測時長不能超過組織的配額
quota_workspace_excess_org_resource_pool
=
工作空間的資源池不能超過組織的資源池範圍
quota_api_excess_workspace
=
接口測試數量超過工作空間限額
quota_api_excess_organization
=
接口測試數量超過組織限額
quota_performance_excess_workspace
=
性能測試數量超過工作空間限額
quota_performance_excess_organization
=
性能測試數量超過組織限額
quota_max_threads_excess_workspace
=
最大並發數超過工作空間限額
quota_max_threads_excess_organization
=
最大並發數超過組織限額
quota_duration_excess_workspace
=
壓測時長超過工作空間限額
quota_duration_excess_organization
=
壓測時長超過組織限額
license_valid_license_error
=
授權驗證失敗
license_valid_license_code
=
授權碼已經存在
import_xmind_count_error
=
思維導圖導入用例數量不能超過 500 條
import_xmind_not_found
=
未找到測試用例
test_review_task_notice
=
測試評審任務通知
test_track.length_less_than
=
標題過長,字數必須小於
# check owner
check_owner_project
=
當前用戶沒有操作此項目的權限
check_owner_test
=
當前用戶沒有操作此測試的權限
check_owner_case
=
當前用戶沒有操作此用例的權限
check_owner_plan
=
當前用戶沒有操作此計劃的權限
check_owner_review
=
當前用戶沒有操作此評審的權限
check_owner_comment
=
當前用戶沒有操作此評論的權限
check_owner_read_only
=
當前用戶在此工作空間為只讀用戶
upload_content_is_null
=
導入內容為空
test_plan_notification
=
測試計畫通知
task_defect_notification
=
缺陷任務通知
task_notification_jenkins
=
jenkins任務通知
task_notification
=
任務通知
task_notification_
=
定時任務通知
api_definition_url_not_repeating
=
接口請求地址已經存在
message_task_already_exists
=
任務接收人已經存在
#automation
automation_name_already_exists
=
同一個項目和模塊下,場景名稱不能重複
automation_exec_info
=
沒有測試步驟,無法執行
#authsource
authsource_name_already_exists
=
認證源名稱已經存在
authsource_name_is_null
=
認證源名稱不能為空
authsource_configuration_is_null
=
認證源配置不能為空
个人信息=個人信息
仪表板=儀表板
修改密码=修改密碼
...
...
frontend/src/lang/en.js
浏览文件 @
065ce3da
...
...
@@ -1215,7 +1215,8 @@ export default {
column_permission_not_empty
:
'Please select authorization target'
,
auth_type
:
'Authorization type'
,
auth_obj
:
'Authorized object'
,
enable
:
'Enable column permissions'
,
enable
:
'Enable'
,
disable
:
'Disable'
,
prohibit
:
'Prohibit'
,
desensitization
:
'Desensitization'
},
...
...
frontend/src/lang/tw.js
浏览文件 @
065ce3da
...
...
@@ -1215,7 +1215,8 @@ export default {
column_permission_not_empty
:
'列權限不能為空'
,
auth_type
:
'授權類型'
,
auth_obj
:
'授權對象'
,
enable
:
'啟用列權限'
,
enable
:
'啟用'
,
disable
:
'禁用'
,
prohibit
:
'禁用'
,
desensitization
:
'脫敏'
},
...
...
frontend/src/lang/zh.js
浏览文件 @
065ce3da
...
...
@@ -1218,7 +1218,8 @@ export default {
column_permission_not_empty
:
'列权限不能为空'
,
auth_type
:
'授权类型'
,
auth_obj
:
'授权对象'
,
enable
:
'启用列权限'
,
enable
:
'启用'
,
disable
:
'禁用'
,
prohibit
:
'禁用'
,
desensitization
:
'脱敏'
},
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论