Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
bigDataSystem
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张伯涛
bigDataSystem
Commits
5bb35ab9
Commit
5bb35ab9
authored
Nov 04, 2024
by
liwei
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
e4df6875
edec7f42
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
309 additions
and
118 deletions
+309
-118
user.ts
src/api/system/user/user.ts
+11
-10
index.ts
src/router/routes/index.ts
+23
-0
AccountDetail.vue
src/views/system/user/AccountDetail.vue
+144
-22
account.data.ts
src/views/system/user/account.data.ts
+72
-37
index.vue
src/views/system/user/index.vue
+59
-49
No files found.
src/api/system/user/user.ts
View file @
5bb35ab9
...
@@ -11,9 +11,9 @@ import {
...
@@ -11,9 +11,9 @@ import {
RoleListGetResultModel
,
RoleListGetResultModel
,
}
from
'../../demo/model/systemModel'
;
}
from
'../../demo/model/systemModel'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
import
{
UploadFileParams
}
from
"#/axios"
;
import
{
UploadFileParams
}
from
'#/axios'
;
import
{
AxiosProgressEvent
}
from
"axios"
;
import
{
AxiosProgressEvent
}
from
'axios'
;
import
{
UploadApiResult
}
from
"@/api/sys/model/uploadModel"
;
import
{
UploadApiResult
}
from
'@/api/sys/model/uploadModel'
;
enum
Api
{
enum
Api
{
addUser
=
'/system/user/add'
,
addUser
=
'/system/user/add'
,
...
@@ -34,15 +34,17 @@ export const getAccountList = (params: AccountParams) =>
...
@@ -34,15 +34,17 @@ export const getAccountList = (params: AccountParams) =>
/** 用户列表导出*/
/** 用户列表导出*/
export
const
exportUserList
=
(
params
:
AccountParams
)
=>
export
const
exportUserList
=
(
params
:
AccountParams
)
=>
defHttp
.
get
<
AccountListGetResultModel
>
({
url
:
Api
.
exportApi
,
params
,
responseType
:
'blob'
});
defHttp
.
get
<
AccountListGetResultModel
>
({
url
:
Api
.
exportApi
,
params
,
responseType
:
'blob'
});
/** 用户导入模板下载*/
/** 用户导入模板下载*/
export
const
downImportTemplate
=
()
=>
export
const
downImportTemplate
=
()
=>
defHttp
.
get
<
any
>
({
url
:
Api
.
importTemplateApi
,
responseType
:
'blob'
});
defHttp
.
get
<
any
>
({
url
:
Api
.
importTemplateApi
,
responseType
:
'blob'
});
/** 用户导入*/
/** 用户导入*/
export
const
userImport
=
(
params
:
UploadFileParams
,
export
const
userImport
=
(
onUploadProgress
:
(
progressEvent
:
AxiosProgressEvent
)
=>
void
,)
=>
params
:
UploadFileParams
,
onUploadProgress
:
(
progressEvent
:
AxiosProgressEvent
)
=>
void
,
)
=>
defHttp
.
uploadFile
<
UploadApiResult
>
(
defHttp
.
uploadFile
<
UploadApiResult
>
(
{
{
url
:
Api
.
userImportApi
,
url
:
Api
.
userImportApi
,
...
@@ -52,7 +54,7 @@ export const userImport = (params: UploadFileParams,
...
@@ -52,7 +54,7 @@ export const userImport = (params: UploadFileParams,
);
);
/** 用户删除*/
/** 用户删除*/
export
const
deleteUser
=
(
params
?:
any
)
=>
export
const
deleteUser
=
(
params
?:
any
)
=>
defHttp
.
delete
<
any
>
({
url
:
Api
.
deleteUserApi
+
params
.
id
});
defHttp
.
delete
<
any
>
({
url
:
Api
.
deleteUserApi
+
params
.
id
});
/** 用户add*/
/** 用户add*/
export
const
addUserApi
=
(
params
:
any
)
=>
export
const
addUserApi
=
(
params
:
any
)
=>
...
@@ -63,8 +65,7 @@ export const addUserApi = (params: any) =>
...
@@ -63,8 +65,7 @@ export const addUserApi = (params: any) =>
});
});
/** 获取用户详情信息*/
/** 获取用户详情信息*/
export
const
UserDetailApi
=
(
params
:
any
)
=>
export
const
UserDetailApi
=
(
params
:
any
)
=>
defHttp
.
get
<
any
>
({
url
:
Api
.
userDetail
+
params
});
defHttp
.
get
<
any
>
({
url
:
Api
.
userDetail
+
params
,
});
/** 用户信息编辑*/
/** 用户信息编辑*/
export
const
UserUpdataApi
=
(
params
:
any
)
=>
export
const
UserUpdataApi
=
(
params
:
any
)
=>
...
...
src/router/routes/index.ts
View file @
5bb35ab9
...
@@ -61,11 +61,34 @@ export const DictRoute: AppRouteRecordRaw = {
...
@@ -61,11 +61,34 @@ export const DictRoute: AppRouteRecordRaw = {
],
],
};
};
export
const
UserRoute
:
AppRouteRecordRaw
=
{
path
:
'/user'
,
name
:
'User'
,
component
:
LAYOUT
,
meta
:
{
title
:
'用户管理'
,
icon
:
''
,
hidden
:
true
,
currentActiveMenu
:
'/system/user'
,
},
children
:
[
{
path
:
'detail'
,
name
:
'Detail'
,
component
:
()
=>
import
(
'@/views/system/user/AccountDetail.vue'
),
meta
:
{
title
:
'用户详情'
,
icon
:
''
,
},
},
],
};
// Basic routing without permission
// Basic routing without permission
// 没有权限要求的基本路由
// 没有权限要求的基本路由
export
const
basicRoutes
=
[
export
const
basicRoutes
=
[
LoginRoute
,
LoginRoute
,
DictRoute
,
DictRoute
,
UserRoute
,
// RootRoute,
// RootRoute,
...
mainOutRoutes
,
...
mainOutRoutes
,
REDIRECT_ROUTE
,
REDIRECT_ROUTE
,
...
...
src/views/system/user/AccountDetail.vue
View file @
5bb35ab9
<
template
>
<
template
>
<PageWrapper
<PageWrapper
:title=
"`用户` + userId + `的资料`"
title=
"用户详情"
content=
"这是用户资料详情页面。本页面仅用于演示相同路由在tab中打开多个页面并且显示不同的数据"
:content=
"`账号:$
{userName}
姓名:${name}
邮箱:${email}
创建时间:${createDate}
所属机构:${dept}`"
class="content-padding"
contentBackground
contentBackground
@back="goBack"
@back="goBack"
>
>
<template
#
extra
>
<a-button
type=
"primary"
danger
>
禁用账号
</a-button>
<a-button
type=
"primary"
>
修改密码
</a-button>
</
template
>
<template
#
footer
>
<template
#
footer
>
<a-tabs
default-active-key=
"
detai
l"
v-model:activeKey=
"currentKey"
>
<a-tabs
default-active-key=
"
globa
l"
v-model:activeKey=
"currentKey"
>
<a-tab-pane
key=
"
detail"
tab=
"用户资料
"
/>
<a-tab-pane
key=
"
global"
tab=
"全局角色
"
/>
<a-tab-pane
key=
"
logs"
tab=
"操作日志
"
/>
<a-tab-pane
key=
"
group"
tab=
"工作组角色
"
/>
</a-tabs>
</a-tabs>
</
template
>
</
template
>
<div
class=
"pt-4 m-4 desc-wrap"
>
<div
class=
"pt-4 m-4 desc-wrap"
>
<
template
v-if=
"currentKey == 'detail'"
>
<
template
v-if=
"currentKey == 'global'"
>
<div
v-for=
"i in 10"
:key=
"i"
>
这是用户
{{
userId
}}
资料Tab
</div>
<BasicTable
@
register=
"registerTable"
:searchInfo=
"searchInfo"
>
<template
#
bodyCell=
"
{ column, record }">
<template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
icon: 'ant-design:delete-outlined',
color: 'error',
label: '',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
</template>
<
template
v-if=
"currentKey == 'logs'"
>
<
template
v-if=
"currentKey == 'group'"
>
<div
v-for=
"i in 10"
:key=
"i"
>
这是用户
{{
userId
}}
操作日志Tab
</div>
<BasicTable
@
register=
"registerGroupTable"
:searchInfo=
"searchInfo"
>
<template
#
bodyCell=
"
{ column, record }">
<template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
icon: 'ant-design:delete-outlined',
color: 'error',
label: '',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
</template>
<AccountModal
@
register=
"registerModal"
@
success=
"handleSuccess"
/>
</div>
</div>
</PageWrapper>
</PageWrapper>
</template>
</template>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
ref
}
from
'vue'
;
import
{
re
active
,
re
f
}
from
'vue'
;
import
{
useRoute
}
from
'vue-router'
;
import
{
useRoute
}
from
'vue-router'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
{
useGo
}
from
'@/hooks/web/usePage'
;
import
{
useGo
}
from
'@/hooks/web/usePage'
;
import
{
useTabs
}
from
'@/hooks/web/useTabs'
;
import
{
useTabs
}
from
'@/hooks/web/useTabs'
;
import
{
Tabs
}
from
'ant-design-vue'
;
import
{
Tabs
}
from
'ant-design-vue'
;
import
{
BasicTable
,
TableAction
,
useTable
}
from
'@/components/Table'
;
import
{
deleteUser
,
getAccountList
}
from
'@/api/system/user/user'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
AccountModal
from
'@/views/system/user/AccountModal.vue'
;
import
{
detailColumns
,
groupColumns
,
searchDetailFormSchema
,
}
from
'@/views/system/user/account.data'
;
defineOptions
({
name
:
'AccountDetail'
});
defineOptions
({
name
:
'AccountDetail'
});
const
[
registerTable
,
{
reload
,
updateTableDataRecord
,
getForm
}]
=
useTable
({
title
:
'角色列表'
,
api
:
getAccountList
,
columns
:
detailColumns
,
formConfig
:
{
labelWidth
:
100
,
schemas
:
searchDetailFormSchema
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
80
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
const
[
registerGroupTable
,
{
reloadGroup
,
getGroupForm
}]
=
useTable
({
title
:
'工作组角色列表'
,
api
:
getAccountList
,
columns
:
groupColumns
,
formConfig
:
{
labelWidth
:
100
,
schemas
:
searchDetailFormSchema
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
80
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
const
[
registerModal
,
{
openModal
}]
=
useModal
();
const
searchInfo
=
reactive
<
Recordable
>
({});
const
{
createMessage
}
=
useMessage
();
const
ATabs
=
Tabs
;
const
ATabs
=
Tabs
;
const
ATabPane
=
Tabs
.
TabPane
;
const
ATabPane
=
Tabs
.
TabPane
;
const
route
=
useRoute
();
const
route
=
useRoute
();
const
go
=
useGo
();
const
go
=
useGo
();
// 此处可以得到用户ID
// 此处可以得到用户ID
const
userId
=
ref
(
route
.
params
?.
id
);
const
userName
=
ref
(
route
.
query
.
userName
);
const
currentKey
=
ref
(
'detail'
);
const
name
=
ref
(
route
.
query
.
name
);
const
email
=
ref
(
route
.
query
.
email
);
const
createDate
=
ref
(
route
.
query
.
createDate
);
const
dept
=
ref
(
route
.
query
.
dept
);
const
currentKey
=
ref
(
'global'
);
const
{
setTitle
}
=
useTabs
();
const
{
setTitle
}
=
useTabs
();
// TODO
// 本页代码仅作演示,实际应当通过userId从接口获得用户的相关资料
// 设置Tab的标题(不会影响页面标题)
// 设置Tab的标题(不会影响页面标题)
setTitle
(
'详情:用户'
+
userId
.
value
);
setTitle
(
'详情:用户'
+
userName
.
value
);
/** 删除按钮*/
function
handleDelete
(
record
:
Recordable
)
{
console
.
log
(
record
);
deleteUser
({
id
:
record
.
businessId
});
createMessage
.
success
(
'删除成功!'
);
reload
();
}
/** 编辑按钮*/
function
handleEdit
(
record
:
Recordable
)
{
openModal
(
true
,
{
record
,
isUpdate
:
true
,
});
}
function
handleSuccess
({
isUpdate
,
values
})
{
if
(
isUpdate
)
{
// 演示不刷新表格直接更新内部数据。
// 注意:updateTableDataRecord要求表格的rowKey属性为string并且存在于每一行的record的keys中
const
result
=
updateTableDataRecord
(
values
.
id
,
values
);
console
.
log
(
result
);
reload
();
}
else
{
reload
();
}
}
// 页面左侧点击返回链接时的操作
// 页面左侧点击返回链接时的操作
function
goBack
()
{
function
goBack
()
{
// 本例的效果时点击返回始终跳转到账号列表页,实际应用时可返回上一页
// 本例的效果时点击返回始终跳转到账号列表页,实际应用时可返回上一页
go
(
'/system/
account
'
);
go
(
'/system/
user
'
);
}
}
</
script
>
</
script
>
...
...
src/views/system/user/account.data.ts
View file @
5bb35ab9
import
{
getAllRoleList
}
from
'@/api/system/role/role'
;
import
{
getAllRoleList
}
from
'@/api/system/role/role'
;
import
{
BasicColumn
,
FormSchema
}
from
'@/components/Table'
;
import
{
BasicColumn
,
FormSchema
}
from
'@/components/Table'
;
import
{
h
}
from
"vue"
;
import
{
h
}
from
'vue'
;
import
{
Tag
}
from
"ant-design-vue"
;
import
{
Switch
}
from
'ant-design-vue'
;
import
{
Switch
}
from
'ant-design-vue'
;
import
{
useMessage
}
from
"@/hooks/web/useMessage"
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
changeFlagApi
}
from
"@/api/system/user/user"
;
// 引入开关组件
import
{
changeFlagApi
}
from
'@/api/system/user/user'
;
// 引入开关组件
type
CheckedType
=
boolean
|
string
|
number
;
type
CheckedType
=
boolean
|
string
|
number
;
/**
/**
* transform mock data
* transform mock data
...
@@ -30,7 +30,7 @@ export const deptMap = (() => {
...
@@ -30,7 +30,7 @@ export const deptMap = (() => {
export
const
columns
:
BasicColumn
[]
=
[
export
const
columns
:
BasicColumn
[]
=
[
{
{
title
:
'
登录名
'
,
title
:
'
账号
'
,
dataIndex
:
'username'
,
dataIndex
:
'username'
,
width
:
120
,
width
:
120
,
},
},
...
@@ -40,14 +40,14 @@ export const columns: BasicColumn[] = [
...
@@ -40,14 +40,14 @@ export const columns: BasicColumn[] = [
width
:
120
,
width
:
120
,
},
},
{
{
title
:
'
手机号
'
,
title
:
'
邮箱
'
,
dataIndex
:
'
phone
'
,
dataIndex
:
'
email
'
,
width
:
120
,
width
:
120
,
},
},
{
{
title
:
'状态'
,
title
:
'状态'
,
dataIndex
:
'flag'
,
dataIndex
:
'flag'
,
width
:
18
0
,
width
:
3
0
,
customRender
:
({
record
})
=>
{
customRender
:
({
record
})
=>
{
if
(
!
Reflect
.
has
(
record
,
'pendingStatus'
))
{
if
(
!
Reflect
.
has
(
record
,
'pendingStatus'
))
{
record
.
pendingStatus
=
false
;
record
.
pendingStatus
=
false
;
...
@@ -64,12 +64,12 @@ export const columns: BasicColumn[] = [
...
@@ -64,12 +64,12 @@ export const columns: BasicColumn[] = [
const
params
=
{
const
params
=
{
businessId
:
record
.
businessId
,
businessId
:
record
.
businessId
,
flag
:
newStatus
,
flag
:
newStatus
,
}
}
;
changeFlagApi
(
params
)
changeFlagApi
(
params
)
.
then
(()
=>
{
.
then
(()
=>
{
record
.
flag
=
newStatus
;
record
.
flag
=
newStatus
;
const
text
=
record
.
flag
===
'1'
?
'启用'
:
'停用'
const
text
=
record
.
flag
===
'1'
?
'启用'
:
'停用'
;
createMessage
.
success
(
text
+
`成功`
);
createMessage
.
success
(
text
+
`成功`
);
})
})
.
catch
(()
=>
{
.
catch
(()
=>
{
// createMessage.error('操作失败');
// createMessage.error('操作失败');
...
@@ -84,7 +84,7 @@ export const columns: BasicColumn[] = [
...
@@ -84,7 +84,7 @@ export const columns: BasicColumn[] = [
{
{
title
:
'创建时间'
,
title
:
'创建时间'
,
dataIndex
:
'createDate'
,
dataIndex
:
'createDate'
,
width
:
20
0
,
width
:
14
0
,
},
},
// {
// {
// title: '所属部门',
// title: '所属部门',
...
@@ -98,7 +98,7 @@ export const columns: BasicColumn[] = [
...
@@ -98,7 +98,7 @@ export const columns: BasicColumn[] = [
export
const
searchFormSchema
:
FormSchema
[]
=
[
export
const
searchFormSchema
:
FormSchema
[]
=
[
{
{
field
:
'username'
,
field
:
'username'
,
label
:
'
登录名
'
,
label
:
'
账号
'
,
component
:
'Input'
,
component
:
'Input'
,
colProps
:
{
span
:
8
},
colProps
:
{
span
:
8
},
},
},
...
@@ -126,18 +126,28 @@ export const resetPasswordFormSchema: any[] = [
...
@@ -126,18 +126,28 @@ export const resetPasswordFormSchema: any[] = [
required
:
true
,
required
:
true
,
// ifShow: false,
// ifShow: false,
},
},
]
];
const
passwordCheck
=
(
rule
,
value
,
callback
)
=>
{
function
passwordCheck
(
rule
,
value
,
callback
)
{
const
pattern
=
/^
(?![
0-9
]
+$
)(?![
a-zA-Z
]
+$
)[
0-9A-Za-z
]{8,16}
$/
const
hasUpperCase
=
/
[
A-Z
]
/
.
test
(
value
);
if
(
!
pattern
.
test
(
value
))
{
const
hasLowerCase
=
/
[
a-z
]
/
.
test
(
value
);
callback
(
new
Error
(
'新密码必须为数字与字母的组合'
))
const
hasNumber
=
/
\d
/
.
test
(
value
);
const
hasSpecialChar
=
/
[
~`!@#$%^&*()_
\-
={}
\[\]\\
|;:"'<,>.?
\/]
/
.
test
(
value
);
// 检查密码组成
let
count
=
0
;
if
(
hasUpperCase
)
count
++
;
if
(
hasLowerCase
)
count
++
;
if
(
hasNumber
)
count
++
;
if
(
hasSpecialChar
)
count
++
;
if
(
count
<
3
)
{
return
callback
(
new
Error
(
'密码中需至少包含大写字母、小写字母、数字及特殊字符中的 3 种'
));
}
}
callback
()
// 如果所有检查都通过,则调用callback无参数表示验证成功
callback
();
}
}
export
const
accountFormSchema
:
any
[]
=
[
export
const
accountFormSchema
:
any
[]
=
[
{
{
field
:
'username'
,
field
:
'username'
,
label
:
'
登录名
'
,
label
:
'
账号
'
,
component
:
'Input'
,
component
:
'Input'
,
// helpMessage: ['本字段演示异步验证', '不能输入带有admin的用户名'],
// helpMessage: ['本字段演示异步验证', '不能输入带有admin的用户名'],
rules
:
[
rules
:
[
...
@@ -156,24 +166,22 @@ export const accountFormSchema: any[] = [
...
@@ -156,24 +166,22 @@ export const accountFormSchema: any[] = [
required
:
true
,
required
:
true
,
message
:
'请输入用户密码'
,
message
:
'请输入用户密码'
,
},
},
{
min
:
8
,
max
:
16
,
message
:
'长度在 8 到 16
个字符'
,
trigger
:
'blur'
},
{
min
:
8
,
max
:
25
,
message
:
'长度在 8 到 25
个字符'
,
trigger
:
'blur'
},
{
{
validator
:
passwordCheck
,
validator
:
passwordCheck
,
trigger
:
'blur'
trigger
:
'blur'
,
}
}
,
],
],
},
},
{
{
field
:
'name'
,
field
:
'name'
,
label
:
'姓名'
,
label
:
'姓名'
,
component
:
'Input'
,
component
:
'Input'
,
},
},
{
{
field
:
'nickName'
,
field
:
'nickName'
,
label
:
'昵称'
,
label
:
'昵称'
,
component
:
'Input'
,
component
:
'Input'
,
},
},
{
{
field
:
'sex'
,
field
:
'sex'
,
...
@@ -195,8 +203,8 @@ export const accountFormSchema: any[] = [
...
@@ -195,8 +203,8 @@ export const accountFormSchema: any[] = [
{
{
pattern
:
/^1
[
3|4|5|6|7|8|9
][
0-9
]\d{8}
$/
,
pattern
:
/^1
[
3|4|5|6|7|8|9
][
0-9
]\d{8}
$/
,
message
:
'请输入正确的手机号码'
,
message
:
'请输入正确的手机号码'
,
trigger
:
'blur'
trigger
:
'blur'
,
}
}
,
],
],
},
},
{
{
...
@@ -207,9 +215,9 @@ export const accountFormSchema: any[] = [
...
@@ -207,9 +215,9 @@ export const accountFormSchema: any[] = [
{
{
required
:
false
,
required
:
false
,
message
:
'请输入身份证号'
,
message
:
'请输入身份证号'
,
trigger
:
'blur'
trigger
:
'blur'
,
},
},
{
min
:
18
,
max
:
18
,
message
:
'长度18字符'
,
trigger
:
'blur'
}
{
min
:
18
,
max
:
18
,
message
:
'长度18字符'
,
trigger
:
'blur'
}
,
],
],
},
},
{
{
...
@@ -221,8 +229,8 @@ export const accountFormSchema: any[] = [
...
@@ -221,8 +229,8 @@ export const accountFormSchema: any[] = [
{
{
type
:
'email'
,
type
:
'email'
,
message
:
'请输入正确的邮箱地址'
,
message
:
'请输入正确的邮箱地址'
,
trigger
:
[
'blur'
,
'change'
]
trigger
:
[
'blur'
,
'change'
]
,
}
}
,
],
],
},
},
{
{
...
@@ -263,16 +271,43 @@ export const accountFormSchema: any[] = [
...
@@ -263,16 +271,43 @@ export const accountFormSchema: any[] = [
api
:
getAllRoleList
,
api
:
getAllRoleList
,
labelField
:
'roleName'
,
labelField
:
'roleName'
,
valueField
:
'businessId'
,
valueField
:
'businessId'
,
resultField
:
'data'
,
resultField
:
'data'
,
},
},
required
:
true
,
required
:
true
,
},
},
];
export
const
searchDetailFormSchema
:
FormSchema
[]
=
[
{
{
label
:
'备注'
,
field
:
'username'
,
field
:
'remarks'
,
label
:
'角色名称'
,
component
:
'InputTextArea'
,
component
:
'Input'
,
colProps
:
{
lg
:
24
,
md
:
24
},
colProps
:
{
span
:
8
},
},
];
export
const
detailColumns
:
BasicColumn
[]
=
[
{
title
:
'角色名称'
,
dataIndex
:
'roleNames'
,
width
:
200
,
},
{
title
:
'角色描述'
,
dataIndex
:
'phone'
,
width
:
200
,
},
];
export
const
groupColumns
:
BasicColumn
[]
=
[
{
title
:
'工作区名称'
,
dataIndex
:
'username'
,
width
:
200
,
},
{
title
:
'赋予角色'
,
dataIndex
:
'phone'
,
width
:
200
,
},
},
];
];
src/views/system/user/index.vue
View file @
5bb35ab9
<
template
>
<
template
>
<PageWrapper
dense
contentFullHeight
fixedHeight
contentClass=
"flex"
>
<PageWrapper
dense
contentFullHeight
fixedHeight
contentClass=
"flex"
>
<DeptTree
class=
"w-1/4 xl:w-1/5"
@
select=
"handleSelect"
/>
<!--
<DeptTree
class=
"w-1/4 xl:w-1/5"
@
select=
"handleSelect"
/>
-->
<BasicTable
@
register=
"registerTable"
class=
"w-3/4 xl:w-4/5"
:searchInfo=
"searchInfo"
>
<!--
<BasicTable
@
register=
"registerTable"
class=
"w-3/4 xl:w-4/5"
:searchInfo=
"searchInfo"
>
-->
<BasicTable
@
register=
"registerTable"
:searchInfo=
"searchInfo"
>
<template
#
toolbar
>
<template
#
toolbar
>
<a-button
type=
"primary"
@
click=
"handleCreate"
>
新增
</a-button>
<a-button
type=
"primary"
@
click=
"handleCreate"
>
新增
</a-button>
<a-button
type=
"primary"
@
click=
"handleExport"
>
导出
</a-button>
<a-button
type=
"primary"
@
click=
"handleExport"
>
导出
</a-button>
...
@@ -12,19 +13,24 @@
...
@@ -12,19 +13,24 @@
<TableAction
<TableAction
:actions=
"[
:actions=
"[
{
{
// icon: 'clarity:note-edit-line',
icon: 'clarity:contract-line',
label: '编辑',
label: '',
onClick: handleView.bind(null, record),
},
{
icon: 'clarity:note-edit-line',
label: '',
onClick: handleEdit.bind(null, record),
onClick: handleEdit.bind(null, record),
},
},
{
{
// icon: 'clarity:note-edit
-line',
icon: 'clarity:sync
-line',
label: '
重置密码
',
label: '',
onClick: handleResetPassword.bind(null, record),
onClick: handleResetPassword.bind(null, record),
},
},
{
{
//
icon: 'ant-design:delete-outlined',
icon: 'ant-design:delete-outlined',
color: 'error',
color: 'error',
label: '
删除
',
label: '',
popConfirm: {
popConfirm: {
title: '是否确认删除',
title: '是否确认删除',
placement: 'left',
placement: 'left',
...
@@ -42,32 +48,30 @@
...
@@ -42,32 +48,30 @@
</PageWrapper>
</PageWrapper>
</template>
</template>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
reactive
,
unref
,
onDeactivated
,
onMounted
}
from
'vue'
;
import
{
reactive
,
onMounted
}
from
'vue'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getAccountList
,
deleteUser
,
exportUserList
}
from
'@/api/system/user/user'
;
import
{
getAccountList
,
deleteUser
,
exportUserList
}
from
'@/api/system/user/user'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
DeptTree
from
'./DeptTree.vue'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
AccountModal
from
'./AccountModal.vue'
;
import
AccountModal
from
'./AccountModal.vue'
;
import
importModal
from
'./importModal.vue'
;
import
importModal
from
'./importModal.vue'
;
import
resetPassword
from
'./resetPassword.vue'
;
import
resetPassword
from
'./resetPassword.vue'
;
import
{
columns
,
searchFormSchema
}
from
'./account.data'
;
import
{
columns
,
searchFormSchema
}
from
'./account.data'
;
import
{
useGo
}
from
'@/hooks/web/usePage'
;
import
{
downloadByData
}
from
'@/utils/file/download'
;
import
{
downloadByData
}
from
'@/utils/file/download'
;
import
{
useRoute
,
onBeforeRouteLeave
}
from
'vue-router'
;
import
{
useRoute
,
onBeforeRouteLeave
}
from
'vue-router'
;
import
{
useFilterStore
}
from
'@/store/modules/filterData'
;
import
{
useFilterStore
}
from
'@/store/modules/filterData'
;
import
{
useUserStore
}
from
"@/store/modules/user"
;
import
{
router
}
from
'@/router'
;
defineOptions
({
name
:
'AccountManagement'
});
defineOptions
({
name
:
'AccountManagement'
});
const
{
createMessage
}
=
useMessage
();
const
{
createMessage
}
=
useMessage
();
const
filterStore
=
useFilterStore
();
const
filterStore
=
useFilterStore
();
const
route
=
useRoute
();
const
route
=
useRoute
();
const
go
=
useGo
();
const
[
registerModal
,
{
openModal
}]
=
useModal
();
const
[
registerModal
,
{
openModal
}]
=
useModal
();
const
[
registerResetPassword
,
{
openModal
:
openResetPasswordModal
}]
=
useModal
();
const
[
registerResetPassword
,
{
openModal
:
openResetPasswordModal
}]
=
useModal
();
const
[
registerImport
,
{
openModal
:
openImportModal
}]
=
useModal
();
const
[
registerImport
,
{
openModal
:
openImportModal
}]
=
useModal
();
const
searchInfo
=
reactive
<
Recordable
>
({});
const
searchInfo
=
reactive
<
Recordable
>
({});
const
[
registerTable
,
{
reload
,
updateTableDataRecord
,
getSearchInfo
,
getForm
}]
=
useTable
({
const
[
registerTable
,
{
reload
,
updateTableDataRecord
,
getSearchInfo
,
getForm
}]
=
useTable
({
title
:
'用户管理列表'
,
title
:
'用户管理列表'
,
api
:
getAccountList
,
api
:
getAccountList
,
rowKey
:
'id'
,
rowKey
:
'id'
,
...
@@ -77,7 +81,7 @@
...
@@ -77,7 +81,7 @@
schemas
:
searchFormSchema
,
schemas
:
searchFormSchema
,
autoSubmitOnEnter
:
true
,
autoSubmitOnEnter
:
true
,
resetFunc
:
()
=>
{
resetFunc
:
()
=>
{
searchInfo
.
deptId
=
''
searchInfo
.
deptId
=
''
;
},
},
},
},
useSearchForm
:
true
,
useSearchForm
:
true
,
...
@@ -100,7 +104,7 @@
...
@@ -100,7 +104,7 @@
isUpdate
:
false
,
isUpdate
:
false
,
});
});
}
}
/** 编辑按钮*/
/** 编辑按钮*/
function
handleEdit
(
record
:
Recordable
)
{
function
handleEdit
(
record
:
Recordable
)
{
openModal
(
true
,
{
openModal
(
true
,
{
record
,
record
,
...
@@ -109,14 +113,13 @@
...
@@ -109,14 +113,13 @@
}
}
/** 重置密码按钮*/
/** 重置密码按钮*/
function
handleResetPassword
(
record
:
Recordable
)
{
function
handleResetPassword
(
record
:
Recordable
)
{
openResetPasswordModal
(
true
,{
openResetPasswordModal
(
true
,
{
record
record
,
})
})
;
}
}
/** 导入按钮*/
/** 导入按钮*/
function
handleImport
()
{
function
handleImport
()
{
openImportModal
(
true
,{
openImportModal
(
true
,
{});
})
}
}
/** 重置密码弹窗确定按钮*/
/** 重置密码弹窗确定按钮*/
/** 删除按钮*/
/** 删除按钮*/
...
@@ -128,7 +131,7 @@
...
@@ -128,7 +131,7 @@
}
}
/** 导出按钮*/
/** 导出按钮*/
async
function
handleExport
()
{
async
function
handleExport
()
{
const
params
=
Object
.
assign
({},
getSearchInfo
(),
getForm
().
getFieldsValue
());
const
params
=
Object
.
assign
({},
getSearchInfo
(),
getForm
().
getFieldsValue
());
const
data
=
await
exportUserList
(
params
);
const
data
=
await
exportUserList
(
params
);
downloadByData
(
data
,
'用户列表'
+
'.xlsx'
);
downloadByData
(
data
,
'用户列表'
+
'.xlsx'
);
}
}
...
@@ -148,43 +151,50 @@
...
@@ -148,43 +151,50 @@
reload
();
reload
();
}
}
}
}
/** 部门树的select*/
/
/ /
** 部门树的select*/
function
handleSelect
(
deptId
=
''
)
{
//
function handleSelect(deptId = '') {
searchInfo
.
deptId
=
deptId
;
//
searchInfo.deptId = deptId;
reload
();
//
reload();
}
//
}
/** 查看按钮*/
function
handleView
(
record
:
Recordable
)
{
function
handleView
(
record
:
Recordable
)
{
go
(
'/system/account_detail/'
+
record
.
id
);
router
.
push
({
path
:
'/user/detail'
,
query
:
{
userName
:
record
.
username
,
name
:
record
.
name
,
email
:
record
.
email
,
createDate
:
record
.
createDate
,
dept
:
record
.
deptName
},
});
}
}
onMounted
(()
=>
{
onMounted
(()
=>
{
const
path
=
route
.
path
const
path
=
route
.
path
;
if
(
filterStore
.
getSearchParams
[
path
])
{
if
(
filterStore
.
getSearchParams
[
path
])
{
if
(
JSON
.
parse
(
filterStore
.
getSearchParams
[
path
]
!==
{}))
{
if
(
JSON
.
parse
(
filterStore
.
getSearchParams
[
path
]
!==
{}))
{
const
params
=
JSON
.
parse
(
filterStore
.
getSearchParams
[
path
])
const
params
=
JSON
.
parse
(
filterStore
.
getSearchParams
[
path
])
;
console
.
log
(
'11111111111111111111111111111'
,
params
)
console
.
log
(
'11111111111111111111111111111'
,
params
);
getForm
().
setFieldsValue
({
getForm
().
setFieldsValue
({
page
:
params
.
page
,
page
:
params
.
page
,
pageSize
:
params
.
pageSize
,
pageSize
:
params
.
pageSize
,
username
:
params
.
username
,
username
:
params
.
username
,
flag
:
params
.
flag
,
flag
:
params
.
flag
,
})
})
;
searchInfo
.
deptId
=
params
.
deptId
searchInfo
.
deptId
=
params
.
deptId
;
}
}
}
}
});
});
onBeforeRouteLeave
((
to
,
from
,
next
)
=>
{
onBeforeRouteLeave
((
to
,
from
,
next
)
=>
{
const
params
=
Object
.
assign
({},
getSearchInfo
(),
getForm
().
getFieldsValue
());
const
params
=
Object
.
assign
({},
getSearchInfo
(),
getForm
().
getFieldsValue
());
console
.
log
(
'path'
,
from
.
path
)
console
.
log
(
'path'
,
from
.
path
);
console
.
log
(
'params'
,
params
)
console
.
log
(
'params'
,
params
);
filterStore
.
setSearchParams
(
filterStore
.
setSearchParams
({
{
path
:
from
.
path
,
path
:
from
.
path
,
param
:
{
param
:
{
...
params
,
...
params
},
}
});
}
)
next
();
// 允许导航
next
();
// 允许导航
});
});
</
script
>
</
script
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment