Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
e2df9bc
新增SearchResponse数据类型,用户search返回内容模型
4linuxfun Nov 10, 2022
e505f43
完善search语句逻辑判断
4linuxfun Nov 10, 2022
35c1dcf
初步完成后端“系统管理”->:“数据字典”后端逻辑 fix #81
4linuxfun Nov 10, 2022
6c4f8f1
分页模型增加type类型
4linuxfun Nov 10, 2022
23db269
前端完成“系统管理”->“数据字典”部分功能 fix #81
4linuxfun Nov 10, 2022
d8a4719
alembic更新
4linuxfun Nov 10, 2022
a9b80ab
统一更新分页内容配置项
4linuxfun Nov 10, 2022
d2d0468
系统管理->数据字典:重置按钮生效
4linuxfun Nov 10, 2022
b5781d8
给分页查询添加file_type,后端进行sql语句的拼接实现 fix #84
4linuxfun Nov 10, 2022
4e0285b
数据字典:分页查询相关内容安全修改 fix #84
4linuxfun Nov 10, 2022
da9b87e
删除不必要的注释
4linuxfun Nov 11, 2022
a94f2fd
菜单管理:前后端改造
4linuxfun Nov 11, 2022
9a68b88
用户管理:前后端改造
4linuxfun Nov 11, 2022
0f2a19e
角色管理前端改造
4linuxfun Nov 11, 2022
634e658
菜单管理改造
4linuxfun Nov 11, 2022
1c5ec25
数据字典:添加监听
4linuxfun Nov 11, 2022
df986a7
重构字典元素字段名
4linuxfun Nov 11, 2022
9947c29
添加“获取数据字典”请求方法
4linuxfun Nov 11, 2022
d8588bc
系统管理->用户管理:状态数据通过数据字典获取
4linuxfun Nov 11, 2022
6b60e6c
bool值统一直接eq对比判断,0为假,1为真
4linuxfun Nov 11, 2022
a8e3674
数据字典请求实现
4linuxfun Nov 11, 2022
44fe979
前端调整数据字典相关内容
4linuxfun Nov 11, 2022
c43a700
系统管理->用户管理:用户编辑页面swtich状态修改
4linuxfun Nov 11, 2022
4d5cee6
前端添加Auto-dict组件,用于数据字典的自动生成元素
4linuxfun Nov 11, 2022
ba84764
role调整匹配
4linuxfun Nov 11, 2022
9f4bc27
数据字典相关元素使用Auto-Dict自动生成
4linuxfun Nov 11, 2022
62e9529
update README.md
4linuxfun Nov 11, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
用户管理:前后端改造
  • Loading branch information
4linuxfun committed Nov 11, 2022
commit 9a68b88fadff3904eaf24efd9c2d9d26036b03d8
6 changes: 0 additions & 6 deletions server/crud/internal/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,6 @@ def check_name(self, session: Session, name: str):
sql = select(self.model).where(self.model.name == name)
return session.exec(sql).one()

# 重写父类的查询构建命令
def _make_search(self, sql, q: Union[int, str]):
if q is not None:
sql = sql.where(self.model.name.like(f'%{q}%'))
return sql

def insert(self, session: Session, user_info: UserInfo) -> User:
updated_user = User(**user_info.user.dict())
user_roles = role.get_roles_by_id(session, user_info.roles)
Expand Down
9 changes: 4 additions & 5 deletions server/routers/internal/roles.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@
from ...common.database import get_session
from ... import crud
from ...models.internal import Role, Menu
from ...models.internal.role import RoleWithMenus, RoleInsert, RoleUpdate
from ...models.internal.role import RoleBase, RoleWithMenus, RoleInsert, RoleUpdate
from ...schemas.internal.pagination import Pagination
from ...schemas.internal.roles import RoleSearch
from ...common.utils import menu_convert

router = APIRouter(prefix='/api')
Expand Down Expand Up @@ -37,10 +36,10 @@ async def get_role_menus(id: Optional[int] = None, session: Session = Depends(ge

@router.post('/roles/search',
summary="查询角色")
async def get_roles(search: Pagination[RoleSearch], session: Session = Depends(get_session)):
total = crud.internal.role.search_total(session, search.search)
async def get_roles(search: Pagination[RoleBase], session: Session = Depends(get_session)):
total = crud.internal.role.search_total(session, search.search, {'name': 'like', 'enable': 'bool'})
print(total)
roles: List[Role] = crud.internal.role.search(session, search)
roles: List[Role] = crud.internal.role.search(session, search, {'name': 'like', 'enable': 'bool'})
role_with_menus: List[RoleWithMenus] = []
for role in roles:
new_role = RoleWithMenus(**role.dict(), menus=role.menus)
Expand Down
15 changes: 7 additions & 8 deletions server/routers/internal/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,9 @@ async def get_all_user(search: Pagination[UserWithOutPasswd],
:param session:
:return:
"""
total = crud.internal.user.search_total(session, search.search)
total = crud.internal.user.search_total(session, search.search, {'name': 'like', 'enable': 'bool'})
print(total)
users = crud.internal.user.search(session, search)
users = crud.internal.user.search(session, search, {'name': 'like', 'enable': 'bool'})
users_list = [user.dict(exclude={"password"}) for user in users]
print(users_list)
return ApiResponse(
Expand Down Expand Up @@ -97,11 +97,11 @@ async def update_user(user_info: UserCreateWithRoles, session: Session = Depends
@router.put('/users/password', summary='重置密码', dependencies=[Depends(Authority('user:reset'))])
async def update_password(user: UserUpdatePassword, session: Session = Depends(get_session)):
crud.internal.user.update_passwd(session, uid=user.id, passwd=user.password)
return ApiResponse()


@router.put('/users/{uid}',
summary='更新用户', dependencies=[Depends(Authority("user:update"))],
status_code=status.HTTP_204_NO_CONTENT)
summary='更新用户', dependencies=[Depends(Authority("user:update"))])
async def update_user(uid: int, user_info: UserUpdateWithRoles, session: Session = Depends(get_session)):
"""
更新用户信息的所有操作,可涉及更新用户名、密码、角色等
Expand All @@ -110,18 +110,16 @@ async def update_user(uid: int, user_info: UserUpdateWithRoles, session: Session
:param session:
:return:
"""
print('update...')
print(user_info.dict(exclude_unset=True, exclude_none=True))
user = crud.internal.user.update(session, uid, user_info)
new_roles = [role.id for role in user.roles]
casbin_enforcer.delete_roles_for_user(f'uid_{user.id}')
for role in new_roles:
casbin_enforcer.add_role_for_user(f'uid_{user.id}', f'role_{role}')
return user
return ApiResponse()


@router.delete('/users/{uid}', summary='删除用户', dependencies=[Depends(Authority("user:del"))],
status_code=status.HTTP_204_NO_CONTENT)
@router.delete('/users/{uid}', summary='删除用户', dependencies=[Depends(Authority("user:del"))])
async def delete_user(uid: int, session: Session = Depends(get_session)):
try:
user = session.exec(select(User).where(User.id == uid)).one()
Expand All @@ -130,3 +128,4 @@ async def delete_user(uid: int, session: Session = Depends(get_session)):
casbin_enforcer.delete_roles_for_user(f'uid_{user.id}')
session.delete(user)
session.commit()
return ApiResponse()
6 changes: 0 additions & 6 deletions server/schemas/internal/roles.py

This file was deleted.

6 changes: 0 additions & 6 deletions server/schemas/internal/sysapi.py

This file was deleted.

106 changes: 47 additions & 59 deletions www/src/views/system/user/index.vue
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
<template>
<el-row style="width:300px" :gutter="5">
<el-col :span="18">
<el-input v-model="search" placeholder="搜索" clearable>
<template #append>
<el-button @click="handleSearch">
<el-icon>
<Search/>
</el-icon>
</el-button>
</template>
</el-input>
</el-col>
<el-col :span="6">
<el-button v-permission="'user:add'" type="primary" @click="handleAdd">添加新用户</el-button>
</el-col>
<el-row>
<el-form :model="search" :inline="true" ref="searchRef">
<el-form-item label="用户名" prop="name">
<el-input v-model="search.name"/>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="search.email"/>
</el-form-item>
<el-form-item label="状态" prop="enable">
<el-select v-model="search.enable" style="width: 100px">
<el-option label="启用" :value="true"/>
<el-option label="禁用" :value="false"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch" :icon="Search">搜索</el-button>
<el-button type="primary" @click="handleReset" :icon="RefreshRight">重置</el-button>
<el-button v-permission="'user:add'" type="primary" @click="handleAdd" :icon="Plus">添加新用户</el-button>
</el-form-item>
</el-form>
</el-row>

<div style="padding-top:10px">
Expand All @@ -32,22 +37,15 @@
</el-table-column>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-dropdown @command="handleCommand">
<span style="color: deepskyblue">
更多<el-icon>
<arrow-down/>
</el-icon>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item :command="beforeHandleCommand(scope.row,'detail')">详情</el-dropdown-item>
<el-dropdown-item :command="beforeHandleCommand(scope.row,'password')">密码</el-dropdown-item>
<el-dropdown-item :command="beforeHandleCommand(scope.row,'delete')">删除</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<!-- <el-button type="primary" size="small" @click="handleEdit(scope.row.id)">编辑</el-button>-->
<!-- <el-button type="danger" size="small" @click="handleDel(scope.row)">删除</el-button>-->
<el-button style="padding: 0;" text type="primary" @click="handleEdit(scope.row.id)" :icon="Edit">编辑
</el-button>
<el-divider direction="vertical"/>
<el-button style="padding: 0;" text type="primary" @click="handleChangePwd(scope.row)" :icon="Unlock">
重置密码
</el-button>
<el-divider direction="vertical"/>
<el-button style="padding: 0;" text type="danger" @click="handleDel(scope.row)" :icon="Delete">删除
</el-button>
</template>
</el-table-column>
</el-table>
Expand All @@ -72,8 +70,8 @@
ref, watch
} from 'vue'
import {
ArrowDown,
Search
ArrowDown, Edit, Delete, Unlock,
Search, RefreshRight, Plus
} from '@element-plus/icons-vue'
import UserDialog from './UserDialog.vue'
import ChangePasswd from './ChangePasswd'
Expand All @@ -92,6 +90,13 @@
const detailVisible = ref(false)
const resetPasswdDialog = ref(false)
const selectUser = reactive({})
const searchRef = ref(null)

const searchForm = {
name: null,
email: null,
enable: null
}

// 首次打开页面先进行初始化

Expand All @@ -104,33 +109,18 @@
total,
freshCurrentPage,
handleSearch
} = usePagination('/api/users/search')
} = usePagination('/api/users/search', searchForm)

function handleReset() {
searchRef.value.resetFields()
handleSearch()
}

function handleChangePwd(user) {
resetPasswdDialog.value = true
Object.assign(selectUser, user)
}

function beforeHandleCommand(row, command) {
return {
row,
command
}
}

function handleCommand(command) {
switch (command.command) {
case 'detail':
handleEdit(command.row.id)
break
case 'password':
handleChangePwd(command.row)
break
case 'delete':
handleDel(command.row)
break
}
}

function handleEdit(uid) {
console.log(uid)
Expand All @@ -155,10 +145,6 @@
detailVisible.value = true
}

function handleSubmit() {
console.log(formData)
dialogVisible.value = false
}

function handleDel(userInfo) {
if (userInfo.name === 'admin') {
Expand Down Expand Up @@ -188,7 +174,9 @@

watch(
detailVisible, (newValue, oldValue) => {
freshCurrentPage()
if (newValue === false) {
freshCurrentPage()
}
})

</script>
Expand Down