Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MeterSphere
metersphere
提交
aaf36843
M
metersphere
项目概览
MeterSphere
/
metersphere
上一次同步 大约 3 年
通知
25
Star
1
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
metersphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
aaf36843
编写于
2月 12, 2020
作者:
H
haifeng414
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/dev' into dev
上级
6869cf31
5a7c2130
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
250 addition
and
30 deletion
+250
-30
backend/src/main/java/io/metersphere/service/OrganizationService.java
...main/java/io/metersphere/service/OrganizationService.java
+1
-1
backend/src/main/java/io/metersphere/service/UserService.java
...end/src/main/java/io/metersphere/service/UserService.java
+2
-1
frontend/package.json
frontend/package.json
+3
-1
frontend/src/performance/components/router/router.js
frontend/src/performance/components/router/router.js
+13
-3
frontend/src/performance/components/settings/Organization.vue
...tend/src/performance/components/settings/Organization.vue
+175
-0
frontend/src/performance/components/settings/SettingMenu.vue
frontend/src/performance/components/settings/SettingMenu.vue
+1
-0
frontend/src/performance/components/settings/User.vue
frontend/src/performance/components/settings/User.vue
+45
-24
frontend/src/performance/main.js
frontend/src/performance/main.js
+2
-0
frontend/src/performance/store.js
frontend/src/performance/store.js
+8
-0
未找到文件。
backend/src/main/java/io/metersphere/service/OrganizationService.java
浏览文件 @
aaf36843
...
...
@@ -22,7 +22,7 @@ public class OrganizationService {
organization
.
setCreateTime
(
currentTimeMillis
);
organization
.
setUpdateTime
(
currentTimeMillis
);
organizationMapper
.
insertSelective
(
organization
);
return
organization
;
return
organization
;
}
public
List
<
Organization
>
getOrganizationList
()
{
...
...
backend/src/main/java/io/metersphere/service/UserService.java
浏览文件 @
aaf36843
...
...
@@ -49,7 +49,8 @@ public class UserService {
BeanUtils
.
copyProperties
(
userRequest
,
user
);
user
.
setCreateTime
(
System
.
currentTimeMillis
());
user
.
setUpdateTime
(
System
.
currentTimeMillis
());
user
.
setStatus
(
"0"
);
// 默认1:启用状态
user
.
setStatus
(
"1"
);
UserExample
userExample
=
new
UserExample
();
UserExample
.
Criteria
criteria
=
userExample
.
createCriteria
();
...
...
frontend/package.json
浏览文件 @
aaf36843
...
...
@@ -17,7 +17,9 @@
"element-ui"
:
"^2.13.0"
,
"vue"
:
"^2.6.10"
,
"vue-i18n"
:
"^8.15.3"
,
"vue-router"
:
"^3.1.3"
"vue-router"
:
"^3.1.3"
,
"vuex"
:
"^3.1.2"
,
"js-cookie"
:
"^2.2.0"
},
"devDependencies"
:
{
"@vue/cli-plugin-babel"
:
"^4.1.0"
,
...
...
frontend/src/performance/components/router/router.js
浏览文件 @
aaf36843
...
...
@@ -5,6 +5,7 @@ import Setting from "../settings/Setting";
import
Workspace
from
"
../settings/Workspace
"
;
import
User
from
"
../settings/User
"
;
import
CreateTestPlan
from
"
../testPlan/CreateTestPlan
"
;
import
Organization
from
"
../settings/Organization
"
;
Vue
.
use
(
VueRouter
);
...
...
@@ -18,14 +19,22 @@ const router = new VueRouter({
{
path
:
"
/content
"
,
components
:
{
content
:
Setting
},
children
:
[
},
children
:
[
{
path
:
'
workspace
'
,
component
:
Workspace
component
:
Workspace
,
meta
:
{
roles
:
[
'
admin
'
]
}
},
{
path
:
'
user
'
,
component
:
User
},
{
path
:
'
organization
'
,
component
:
Organization
}
]
},
...
...
@@ -33,7 +42,8 @@ const router = new VueRouter({
path
:
"
/createTest
"
,
components
:
{
content
:
CreateTestPlan
}
},]
},
]
});
export
default
router
frontend/src/performance/components/settings/Organization.vue
0 → 100644
浏览文件 @
aaf36843
<
template
>
<div
v-loading=
"loading"
>
<el-card>
<div
slot=
"header"
>
<el-row
type=
"flex"
justify=
"space-between"
align=
"middle"
>
<span
class=
"title"
>
组织
</span>
<span
class=
"search"
>
<el-input
type=
"text"
size=
"small"
placeholder=
"根据名称搜索"
prefix-icon=
"el-icon-search"
maxlength=
"60"
v-model=
"condition"
clearable
/>
</span>
</el-row>
</div>
<el-table
:data=
"items"
style=
"width: 100%"
>
<el-table-column
prop=
"name"
label=
"名称"
/>
<el-table-column
prop=
"description"
label=
"描述"
/>
<el-table-column>
<template
slot-scope=
"scope"
>
<el-button
@
click=
"edit(scope.row)"
type=
"primary"
icon=
"el-icon-edit"
size=
"mini"
circle
/>
<el-button
@
click=
"del(scope.row)"
type=
"danger"
icon=
"el-icon-delete"
size=
"mini"
circle
/>
</
template
>
</el-table-column>
</el-table>
</el-card>
<ms-create-box
:tips=
"btnTips"
:exec=
"create"
/>
<el-dialog
title=
"创建组织"
:visible.sync=
"createVisible"
width=
"30%"
@
closed=
"closeFunc"
:destroy-on-close=
"true"
>
<el-form
:model=
"form"
label-position=
"left"
label-width=
"100px"
size=
"small"
:rules=
"rule"
ref=
"createOrganization"
>
<el-form-item
label=
"名称"
prop=
"name"
>
<el-input
v-model=
"form.name"
autocomplete=
"off"
/>
</el-form-item>
<el-form-item
label=
"描述"
prop=
"description"
>
<el-input
v-model=
"form.description"
autocomplete=
"off"
/>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"createOrganization('createOrganization')"
size=
"medium"
>
创建
</el-button>
</span>
</el-dialog>
<el-dialog
title=
"修改组织"
:visible.sync=
"updateVisible"
width=
"30%"
:destroy-on-close=
"true"
@
close=
"closeFunc"
>
<el-form
:model=
"form"
label-position=
"left"
label-width=
"100px"
size=
"small"
:rules=
"rule"
ref=
"updateOrganizationForm"
>
<el-form-item
label=
"用户名"
prop=
"name"
>
<el-input
v-model=
"form.name"
autocomplete=
"off"
/>
</el-form-item>
<el-form-item
label=
"描述"
prop=
"description"
>
<el-input
v-model=
"form.description"
autocomplete=
"off"
/>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"updateOrganization('updateOrganizationForm')"
size=
"medium"
>
修改
</el-button>
</span>
</el-dialog>
</div>
</template>
<
script
>
import
MsCreateBox
from
"
./CreateBox
"
;
export
default
{
name
:
"
MsOrganization
"
,
components
:
{
MsCreateBox
},
created
()
{
this
.
getOrganizationList
();
},
methods
:
{
create
()
{
this
.
createVisible
=
true
;
},
edit
(
row
)
{
window
.
console
.
log
(
row
);
// this.loading = true;
this
.
updateVisible
=
true
;
this
.
form
=
row
;
},
del
(
row
)
{
window
.
console
.
log
(
row
);
this
.
$confirm
(
'
此操作将永久删除该组织, 是否继续?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
type
:
'
warning
'
}).
then
(()
=>
{
this
.
$get
(
`/organization/delete/
${
row
.
id
}
`
).
then
(()
=>
{
this
.
getOrganizationList
()
});
this
.
$message
({
type
:
'
success
'
,
message
:
'
删除成功!
'
});
}).
catch
(()
=>
{
this
.
$message
({
type
:
'
info
'
,
message
:
'
已取消删除
'
});
});
},
createOrganization
(
createOrganizationForm
)
{
this
.
$refs
[
createOrganizationForm
].
validate
(
valide
=>
{
if
(
valide
)
{
this
.
$post
(
"
/organization/add
"
,
this
.
form
)
.
then
(()
=>
{
this
.
$message
({
type
:
'
success
'
,
message
:
'
添加成功!
'
},
this
.
createVisible
=
false
,
this
.
getOrganizationList
())
});
}
else
{
return
false
;
}
})
},
updateOrganization
(
udpateOrganizationForm
)
{
this
.
$refs
[
udpateOrganizationForm
].
validate
(
valide
=>
{
if
(
valide
)
{
this
.
$post
(
"
/organization/update
"
,
this
.
form
)
.
then
(()
=>
{
this
.
$message
({
type
:
'
success
'
,
message
:
'
修改成功!
'
},
this
.
updateVisible
=
false
,
this
.
getOrganizationList
(),
self
.
loading
=
false
)
});
}
else
{
return
false
;
}
})
},
getOrganizationList
()
{
this
.
$get
(
"
/organization/list
"
).
then
(
response
=>
{
this
.
items
=
response
.
data
.
data
;
})
},
closeFunc
()
{
this
.
form
=
{};
}
},
data
()
{
return
{
loading
:
false
,
createVisible
:
false
,
updateVisible
:
false
,
btnTips
:
"
添加组织
"
,
condition
:
""
,
items
:
[],
form
:
{},
rule
:
{
name
:
[
{
required
:
true
,
message
:
'
请输入姓名
'
,
trigger
:
'
blur
'
},
{
min
:
2
,
max
:
10
,
message
:
'
长度在 2 到 10 个字符
'
,
trigger
:
'
blur
'
},
{
required
:
true
,
pattern
:
/^
[\u
4e00-
\u
9fa5_a-zA-Z0-9.·-
]
+$/
,
message
:
'
姓名不支持特殊字符
'
,
trigger
:
'
blur
'
}
],
description
:
[
{
max
:
60
,
message
:
'
最大长度 60 个字符
'
,
trigger
:
'
blur
'
}
]
}
}
}
}
</
script
>
<
style
scoped
>
.search
{
width
:
240px
;
}
</
style
>
frontend/src/performance/components/settings/SettingMenu.vue
浏览文件 @
aaf36843
...
...
@@ -6,6 +6,7 @@
<span>
账号
</span>
</
template
>
<el-menu-item
index=
"/content/user"
>
用户
</el-menu-item>
<el-menu-item
index=
"/content/organization"
>
组织
</el-menu-item>
<el-menu-item
index=
"/content/workspace"
>
工作空间
</el-menu-item>
<el-menu-item>
API Keys
</el-menu-item>
</el-submenu>
...
...
frontend/src/performance/components/settings/User.vue
浏览文件 @
aaf36843
<
template
>
<div
v-loading=
"loading"
>
<el-card>
<div
slot=
"header"
>
<el-row
type=
"flex"
justify=
"space-between"
align=
"middle"
>
<span
class=
"title"
>
用户
</span>
<span
class=
"search"
>
<el-input
type=
"text"
size=
"small"
placeholder=
"根据ID,名称搜索"
prefix-icon=
"el-icon-search"
maxlength=
"60"
v-model=
"condition"
clearable
/>
<el-input
type=
"text"
size=
"small"
placeholder=
"根据ID,名称搜索"
prefix-icon=
"el-icon-search"
maxlength=
"60"
v-model=
"condition"
clearable
/>
</span>
</el-row>
</div>
...
...
@@ -15,8 +15,18 @@
<el-table-column
prop=
"name"
label=
"用户名"
/>
<el-table-column
prop=
"email"
label=
"邮箱"
/>
<el-table-column
prop=
"phone"
label=
"电话"
/>
<el-table-column
prop=
"status"
label=
"状态"
/>
<el-table-column
prop=
"createTime"
label=
"创建时间"
/>
<el-table-column
prop=
"status"
label=
"启用/禁用"
>
<template
slot-scope=
"scope"
>
<el-switch
v-model=
"scope.row.status"
active-color=
"#13ce66"
inactive-color=
"#ff4949"
active-value=
"1"
inactive-value=
"0"
@
change=
"changeSwitch(scope.row)"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"createTime"
label=
"创建时间"
:formatter=
"formatDate"
/>
<el-table-column>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"edit(scope.row)"
type=
"primary"
icon=
"el-icon-edit"
size=
"mini"
circle
/>
...
...
@@ -25,6 +35,7 @@
</el-table-column>
</el-table>
</el-card>
<ms-create-box
:tips=
"btnTips"
:exec=
"create"
/>
<el-dialog
title=
"创建用户"
:visible.sync=
"createVisible"
width=
"30%"
@
closed=
"closeFunc"
:destroy-on-close=
"true"
>
<el-form
:model=
"form"
label-position=
"left"
label-width=
"100px"
size=
"small"
:rules=
"rule"
ref=
"createUserForm"
>
...
...
@@ -40,13 +51,10 @@
<el-form-item
label=
"电话"
prop=
"phone"
>
<el-input
v-model=
"form.phone"
autocomplete=
"off"
/>
</el-form-item>
<el-form-item
label=
"启用"
>
<el-switch
v-model=
"form.enable"
/>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"createUser('createUserForm')"
size=
"medium"
>
创建
</el-button>
</span>
<el-button
type=
"primary"
@
click=
"createUser('createUserForm')"
size=
"medium"
>
创建
</el-button>
</span>
</el-dialog>
<el-dialog
title=
"修改用户"
:visible.sync=
"updateVisible"
width=
"30%"
:destroy-on-close=
"true"
@
close=
"closeFunc"
>
...
...
@@ -63,14 +71,12 @@
<el-form-item
label=
"电话"
prop=
"phone"
>
<el-input
v-model=
"form.phone"
autocomplete=
"off"
/>
</el-form-item>
<el-form-item
label=
"启用"
>
<el-switch
v-model=
"form.enable"
/>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"updateUser('updateUserForm')"
size=
"medium"
>
修改
</el-button>
</span>
<el-button
type=
"primary"
@
click=
"updateUser('updateUserForm')"
size=
"medium"
>
修改
</el-button>
</span>
</el-dialog>
</div>
</template>
...
...
@@ -114,7 +120,7 @@
}).
then
(()
=>
{
this
.
$get
(
`/user/delete/
${
row
.
id
}
`
).
then
(()
=>
{
this
.
getUserList
()
})
,
})
;
this
.
$message
({
type
:
'
success
'
,
message
:
'
删除成功!
'
...
...
@@ -126,7 +132,7 @@
});
});
},
createUser
:
function
(
createUserForm
)
{
createUser
(
createUserForm
)
{
this
.
$refs
[
createUserForm
].
validate
(
valide
=>
{
if
(
valide
)
{
this
.
$post
(
"
/user/add
"
,
this
.
form
)
...
...
@@ -152,10 +158,9 @@
type
:
'
success
'
,
message
:
'
修改成功!
'
},
this
.
updateVisible
=
false
,
this
.
getUserList
(),
self
.
loading
=
false
)
this
.
updateVisible
=
false
,
this
.
getUserList
(),
self
.
loading
=
false
)
});
}
else
{
return
false
;
...
...
@@ -167,8 +172,26 @@
this
.
items
=
response
.
data
.
data
;
})
},
closeFunc
:
function
()
{
closeFunc
()
{
this
.
form
=
{};
},
changeSwitch
(
row
)
{
this
.
$post
(
'
/user/update
'
,
row
).
then
(()
=>
{
this
.
$message
({
type
:
'
success
'
,
message
:
'
状态修改成功!
'
});
})
},
formatDate
(
row
)
{
let
date
=
new
Date
(
parseInt
(
row
.
createTime
));
let
Y
=
date
.
getFullYear
()
+
'
-
'
;
let
M
=
date
.
getMonth
()
+
1
<
10
?
'
0
'
+
(
date
.
getMonth
()
+
1
)
+
'
-
'
:
date
.
getMonth
()
+
1
+
'
-
'
;
let
D
=
date
.
getDate
()
<
10
?
'
0
'
+
date
.
getDate
()
+
'
'
:
date
.
getDate
()
+
'
'
;
// let h = date.getHours()
<
10
?
'
0
'
+
date
.
getHours
()
+
'
:
'
:
date
.
getHours
()
+
'
:
'
;
// let m = date.getMinutes()
<
10
?
'
0
'
+
date
.
getMinutes
()
+
'
:
'
:
date
.
getMinutes
()
+
'
:
'
;
// let s = date.getSeconds()
<
10
?
'
0
'
+
date
.
getSeconds
()
:
date
.
getSeconds
();
return
Y
+
M
+
D
;
}
},
data
()
{
...
...
@@ -208,10 +231,9 @@
message
:
'
手机号码格式不正确!
'
,
trigger
:
'
blur
'
}
],
email
:
[
{
required
:
true
,
message
:
'
请输入邮箱
'
,
trigger
:
'
blur
'
},
{
required
:
true
,
message
:
'
请输入邮箱
'
,
trigger
:
'
blur
'
},
{
required
:
true
,
pattern
:
/^
([
A-Za-z0-9_
\-
.
])
+@
(
163.com|qq.com|gmail.com|126.com
)
$/
,
...
...
@@ -219,7 +241,6 @@
trigger
:
'
blur
'
}
]
}
}
}
...
...
frontend/src/performance/main.js
浏览文件 @
aaf36843
...
...
@@ -6,6 +6,7 @@ import filters from "../common/filter";
import
ajax
from
"
../common/ajax
"
;
import
App
from
'
./App.vue
'
;
import
router
from
"
./components/router/router
"
;
import
store
from
'
./store
'
import
i18n
from
"
../i18n/i18n
"
;
import
timestampFormatDate
from
"
./components/common/filter/TimestampFormatDateFilter
"
;
...
...
@@ -23,6 +24,7 @@ Vue.filter('timestampFormatDate', timestampFormatDate);
new
Vue
({
el
:
'
#app
'
,
router
,
store
,
i18n
,
render
:
h
=>
h
(
App
)
});
frontend/src/performance/store.js
0 → 100644
浏览文件 @
aaf36843
import
Vue
from
'
vue
'
import
Vuex
from
'
vuex
'
Vue
.
use
(
Vuex
);
export
default
new
Vuex
.
Store
({})
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录