Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
水淹萌龙
kubesphere
提交
16849982
K
kubesphere
项目概览
水淹萌龙
/
kubesphere
与 Fork 源项目一致
Fork自
KubeSphere / kubesphere
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kubesphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
16849982
编写于
8月 22, 2019
作者:
K
KubeSphere CI Bot
提交者:
GitHub
8月 22, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #621 from wansir/fliter-support
support empty label filter
上级
b132d7af
b93a0802
变更
24
隐藏空白更改
内联
并排
Showing
24 changed file
with
84 addition
and
56 deletion
+84
-56
pkg/models/resources/clusterroles.go
pkg/models/resources/clusterroles.go
+3
-2
pkg/models/resources/configmaps.go
pkg/models/resources/configmaps.go
+3
-2
pkg/models/resources/cronjobs.go
pkg/models/resources/cronjobs.go
+3
-2
pkg/models/resources/daemonsets.go
pkg/models/resources/daemonsets.go
+3
-2
pkg/models/resources/deployments.go
pkg/models/resources/deployments.go
+3
-2
pkg/models/resources/ingresses.go
pkg/models/resources/ingresses.go
+3
-2
pkg/models/resources/jobs.go
pkg/models/resources/jobs.go
+3
-2
pkg/models/resources/namespaces.go
pkg/models/resources/namespaces.go
+3
-2
pkg/models/resources/nodes.go
pkg/models/resources/nodes.go
+3
-2
pkg/models/resources/persistentvolumeclaims.go
pkg/models/resources/persistentvolumeclaims.go
+3
-2
pkg/models/resources/pods.go
pkg/models/resources/pods.go
+3
-2
pkg/models/resources/resources.go
pkg/models/resources/resources.go
+8
-8
pkg/models/resources/roles.go
pkg/models/resources/roles.go
+3
-2
pkg/models/resources/s2ibuilder.go
pkg/models/resources/s2ibuilder.go
+3
-2
pkg/models/resources/s2ibuildertemplate.go
pkg/models/resources/s2ibuildertemplate.go
+3
-2
pkg/models/resources/s2irun.go
pkg/models/resources/s2irun.go
+3
-2
pkg/models/resources/secrets.go
pkg/models/resources/secrets.go
+3
-2
pkg/models/resources/services.go
pkg/models/resources/services.go
+3
-2
pkg/models/resources/statefulsets.go
pkg/models/resources/statefulsets.go
+3
-2
pkg/models/resources/storageclasses.go
pkg/models/resources/storageclasses.go
+3
-2
pkg/models/resources/workspaces.go
pkg/models/resources/workspaces.go
+3
-2
pkg/models/tenant/namespaces.go
pkg/models/tenant/namespaces.go
+2
-1
pkg/models/tenant/workspaces.go
pkg/models/tenant/workspaces.go
+2
-1
pkg/params/params.go
pkg/params/params.go
+12
-6
未找到文件。
pkg/models/resources/clusterroles.go
浏览文件 @
16849982
...
...
@@ -65,7 +65,8 @@ func (*clusterRoleSearcher) match(match map[string]string, item *rbac.ClusterRol
}
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -91,7 +92,7 @@ func (*clusterRoleSearcher) fuzzy(fuzzy map[string]string, item *rbac.ClusterRol
}
return
false
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/configmaps.go
浏览文件 @
16849982
...
...
@@ -50,7 +50,8 @@ func (*configMapSearcher) match(match map[string]string, item *v1.ConfigMap) boo
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -80,7 +81,7 @@ func (*configMapSearcher) fuzzy(fuzzy map[string]string, item *v1.ConfigMap) boo
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/cronjobs.go
浏览文件 @
16849982
...
...
@@ -62,7 +62,8 @@ func (*cronJobSearcher) match(match map[string]string, item *v1beta1.CronJob) bo
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -92,7 +93,7 @@ func (*cronJobSearcher) fuzzy(fuzzy map[string]string, item *v1beta1.CronJob) bo
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/daemonsets.go
浏览文件 @
16849982
...
...
@@ -64,7 +64,8 @@ func (*daemonSetSearcher) match(match map[string]string, item *v1.DaemonSet) boo
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -94,7 +95,7 @@ func (*daemonSetSearcher) fuzzy(fuzzy map[string]string, item *v1.DaemonSet) boo
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/deployments.go
浏览文件 @
16849982
...
...
@@ -68,7 +68,8 @@ func (*deploymentSearcher) match(match map[string]string, item *v1.Deployment) b
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -98,7 +99,7 @@ func (*deploymentSearcher) fuzzy(fuzzy map[string]string, item *v1.Deployment) b
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/ingresses.go
浏览文件 @
16849982
...
...
@@ -51,7 +51,8 @@ func (*ingressSearcher) match(match map[string]string, item *extensions.Ingress)
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -81,7 +82,7 @@ func (*ingressSearcher) fuzzy(fuzzy map[string]string, item *extensions.Ingress)
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/jobs.go
浏览文件 @
16849982
...
...
@@ -76,7 +76,8 @@ func (*jobSearcher) match(match map[string]string, item *batchv1.Job) bool {
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -106,7 +107,7 @@ func (*jobSearcher) fuzzy(fuzzy map[string]string, item *batchv1.Job) bool {
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/namespaces.go
浏览文件 @
16849982
...
...
@@ -50,7 +50,8 @@ func (*namespaceSearcher) match(match map[string]string, item *v1.Namespace) boo
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -80,7 +81,7 @@ func (*namespaceSearcher) fuzzy(fuzzy map[string]string, item *v1.Namespace) boo
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/nodes.go
浏览文件 @
16849982
...
...
@@ -56,7 +56,8 @@ func (*nodeSearcher) match(match map[string]string, item *v1.Node) bool {
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -86,7 +87,7 @@ func (*nodeSearcher) fuzzy(fuzzy map[string]string, item *v1.Node) bool {
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/persistentvolumeclaims.go
浏览文件 @
16849982
...
...
@@ -71,7 +71,8 @@ func (*persistentVolumeClaimSearcher) match(match map[string]string, item *v1.Pe
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -101,7 +102,7 @@ func (*persistentVolumeClaimSearcher) fuzzy(fuzzy map[string]string, item *v1.Pe
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/pods.go
浏览文件 @
16849982
...
...
@@ -180,7 +180,8 @@ func (*podSearcher) match(match map[string]string, item *v1.Pod) bool {
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -210,7 +211,7 @@ func (*podSearcher) fuzzy(fuzzy map[string]string, item *v1.Pod) bool {
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/resources.go
浏览文件 @
16849982
...
...
@@ -158,14 +158,14 @@ func ListResources(namespace, resource string, conditions *params.Conditions, or
}
func
searchFuzzy
(
m
map
[
string
]
string
,
key
,
value
string
)
bool
{
for
k
,
v
:=
range
m
{
if
key
==
""
{
if
strings
.
Contains
(
k
,
value
)
||
strings
.
Contains
(
v
,
value
)
{
return
true
}
}
else
if
k
==
key
&&
strings
.
Contains
(
v
,
value
)
{
return
true
}
val
,
exist
:=
m
[
key
]
if
value
==
""
&&
(
!
exist
||
val
==
""
)
{
return
true
}
else
if
value
!=
""
&&
strings
.
Contains
(
val
,
value
)
{
return
true
}
return
false
}
pkg/models/resources/roles.go
浏览文件 @
16849982
...
...
@@ -50,7 +50,8 @@ func (*roleSearcher) match(match map[string]string, item *rbac.Role) bool {
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -76,7 +77,7 @@ func (*roleSearcher) fuzzy(fuzzy map[string]string, item *rbac.Role) bool {
}
return
false
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/s2ibuilder.go
浏览文件 @
16849982
...
...
@@ -50,7 +50,8 @@ func (*s2iBuilderSearcher) match(match map[string]string, item *v1alpha1.S2iBuil
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -80,7 +81,7 @@ func (*s2iBuilderSearcher) fuzzy(fuzzy map[string]string, item *v1alpha1.S2iBuil
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/s2ibuildertemplate.go
浏览文件 @
16849982
...
...
@@ -50,7 +50,8 @@ func (*s2iBuilderTemplateSearcher) match(match map[string]string, item *v1alpha1
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -76,7 +77,7 @@ func (*s2iBuilderTemplateSearcher) fuzzy(fuzzy map[string]string, item *v1alpha1
}
return
false
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/s2irun.go
浏览文件 @
16849982
...
...
@@ -57,7 +57,8 @@ func (*s2iRunSearcher) match(match map[string]string, item *v1alpha1.S2iRun) boo
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -87,7 +88,7 @@ func (*s2iRunSearcher) fuzzy(fuzzy map[string]string, item *v1alpha1.S2iRun) boo
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/secrets.go
浏览文件 @
16849982
...
...
@@ -54,7 +54,8 @@ func (*secretSearcher) match(match map[string]string, item *v1.Secret) bool {
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -84,7 +85,7 @@ func (*secretSearcher) fuzzy(fuzzy map[string]string, item *v1.Secret) bool {
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/services.go
浏览文件 @
16849982
...
...
@@ -50,7 +50,8 @@ func (*serviceSearcher) match(match map[string]string, item *v1.Service) bool {
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -80,7 +81,7 @@ func (*serviceSearcher) fuzzy(fuzzy map[string]string, item *v1.Service) bool {
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/statefulsets.go
浏览文件 @
16849982
...
...
@@ -67,7 +67,8 @@ func (*statefulSetSearcher) match(match map[string]string, item *v1.StatefulSet)
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -97,7 +98,7 @@ func (*statefulSetSearcher) fuzzy(fuzzy map[string]string, item *v1.StatefulSet)
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/storageclasses.go
浏览文件 @
16849982
...
...
@@ -50,7 +50,8 @@ func (*storageClassesSearcher) match(match map[string]string, item *v1.StorageCl
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -76,7 +77,7 @@ func (*storageClassesSearcher) fuzzy(fuzzy map[string]string, item *v1.StorageCl
}
return
false
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/resources/workspaces.go
浏览文件 @
16849982
...
...
@@ -50,7 +50,8 @@ func (*workspaceSearcher) match(match map[string]string, item *tenantv1alpha1.Wo
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
@@ -80,7 +81,7 @@ func (*workspaceSearcher) fuzzy(fuzzy map[string]string, item *tenantv1alpha1.Wo
return
false
}
default
:
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
&&
!
searchFuzzy
(
item
.
Annotations
,
k
,
v
)
{
if
!
searchFuzzy
(
item
.
Labels
,
k
,
v
)
{
return
false
}
}
...
...
pkg/models/tenant/namespaces.go
浏览文件 @
16849982
...
...
@@ -49,7 +49,8 @@ func (*namespaceSearcher) match(match map[string]string, item *v1.Namespace) boo
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
pkg/models/tenant/workspaces.go
浏览文件 @
16849982
...
...
@@ -48,7 +48,8 @@ func (*workspaceSearcher) match(match map[string]string, item *v1alpha1.Workspac
return
false
}
default
:
if
item
.
Labels
[
k
]
!=
v
{
// label not exist or value not equal
if
val
,
ok
:=
item
.
Labels
[
k
];
!
ok
||
val
!=
v
{
return
false
}
}
...
...
pkg/params/params.go
浏览文件 @
16849982
...
...
@@ -56,15 +56,21 @@ func ParseConditions(conditionsStr string) (*Conditions, error) {
return
conditions
,
nil
}
// ?conditions=key1=value1,key2~value2,key3=
for
_
,
item
:=
range
strings
.
Split
(
conditionsStr
,
","
)
{
if
strings
.
Count
(
item
,
"="
)
>
1
||
strings
.
Count
(
item
,
"~"
)
>
1
{
return
nil
,
fmt
.
Errorf
(
"invalid conditions"
)
}
if
groups
:=
regexp
.
MustCompile
(
`(\S+)([=~])(\S+)`
)
.
FindStringSubmatch
(
item
);
len
(
groups
)
==
4
{
// exact query: key=value, if value is empty means label value must be ""
// fuzzy query: key~value, if value is empty means label value is "" or label key not exist
if
groups
:=
regexp
.
MustCompile
(
`(\S+)([=~])(\S+)?`
)
.
FindStringSubmatch
(
item
);
len
(
groups
)
>=
3
{
value
:=
""
if
len
(
groups
)
>
3
{
value
=
groups
[
3
]
}
if
groups
[
2
]
==
"="
{
conditions
.
Match
[
groups
[
1
]]
=
groups
[
3
]
conditions
.
Match
[
groups
[
1
]]
=
value
}
else
{
conditions
.
Fuzzy
[
groups
[
1
]]
=
groups
[
3
]
conditions
.
Fuzzy
[
groups
[
1
]]
=
value
}
}
else
{
return
nil
,
fmt
.
Errorf
(
"invalid conditions"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录