maxkb/ui/src/views/user-manage/index.vue
shaohuzhang1 60e65a8b17
feat: 接口校验 (#721)
feat: 接口校验
2024-07-09 13:44:27 +08:00

196 lines
5.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<LayoutContainer header="用户管理">
<div class="p-24">
<div class="flex-between">
<el-button type="primary" @click="createUser">创建用户</el-button>
<el-input
v-model="searchValue"
@change="searchHandle"
placeholder="搜索"
prefix-icon="Search"
class="w-240"
clearable
/>
</div>
<app-table
class="mt-16"
:data="tableData"
:pagination-config="paginationConfig"
@sizeChange="handleSizeChange"
@changePage="getList"
v-loading="loading"
>
<el-table-column prop="username" label="用户名" />
<el-table-column prop="nick_name" label="姓名" />
<el-table-column prop="email" label="邮箱" show-overflow-tooltip />
<el-table-column prop="phone" label="手机号" />
<el-table-column label="状态" width="60">
<template #default="{ row }">
<div @click.stop>
<el-switch
:disabled="row.role === 'ADMIN'"
size="small"
v-model="row.is_active"
@change="changeState($event, row)"
/>
</div>
</template>
</el-table-column>
<el-table-column label="创建时间" width="180">
<template #default="{ row }">
{{ datetimeFormat(row.create_time) }}
</template>
</el-table-column>
<el-table-column label="操作" width="110" align="left" fixed="right">
<template #default="{ row }">
<span class="mr-4">
<el-tooltip effect="dark" content="编辑" placement="top">
<el-button type="primary" text @click.stop="editUser(row)">
<el-icon><EditPen /></el-icon>
</el-button>
</el-tooltip>
</span>
<span class="mr-4">
<el-tooltip effect="dark" content="修改用户密码" placement="top">
<el-button type="primary" text @click.stop="editPwdUser(row)">
<el-icon><Lock /></el-icon>
</el-button>
</el-tooltip>
</span>
<span class="mr-4">
<el-tooltip effect="dark" content="删除" placement="top">
<el-button
:disabled="row.role === 'ADMIN'"
type="primary"
text
@click.stop="deleteUserManage(row)"
>
<el-icon><Delete /></el-icon>
</el-button>
</el-tooltip>
</span>
</template>
</el-table-column>
</app-table>
</div>
<UserDialog :title="title" ref="UserDialogRef" @refresh="refresh" />
<UserPwdDialog ref="UserPwdDialogRef" @refresh="refresh" />
</LayoutContainer>
</template>
<script setup lang="ts">
import { ref, onMounted, reactive } from 'vue'
import UserDialog from './component/UserDialog.vue'
import UserPwdDialog from './component/UserPwdDialog.vue'
import { MsgSuccess, MsgConfirm, MsgAlert } from '@/utils/message'
import userApi from '@/api/user-manage'
import { datetimeFormat } from '@/utils/time'
import useStore from '@/stores'
import { ValidType, ValidCount } from '@/enums/common'
const { common, user } = useStore()
const UserDialogRef = ref()
const UserPwdDialogRef = ref()
const title = ref('')
const loading = ref(false)
const paginationConfig = reactive({
current_page: 1,
page_size: 20,
total: 0
})
const tableData = ref<any[]>([])
const searchValue = ref('')
function searchHandle() {
paginationConfig.total = 0
paginationConfig.current_page = 1
tableData.value = []
getList()
}
function changeState(bool: Boolean, row: any) {
const obj = {
is_active: bool
}
const str = bool ? '启用成功' : '禁用成功'
userApi.putUserManage(row.id, obj, loading).then((res) => {
getList()
MsgSuccess(str)
})
}
function editPwdUser(row: any) {
UserPwdDialogRef.value.open(row)
}
function editUser(row: any) {
title.value = '编辑用户'
UserDialogRef.value.open(row)
}
function createUser() {
if (user.isEnterprise()) {
title.value = '创建用户'
UserDialogRef.value.open()
} else {
common.asyncGetValid(ValidType.User, ValidCount.User, loading).then((res: any) => {
if (res?.data?.data) {
title.value = '创建用户'
UserDialogRef.value.open()
} else {
MsgAlert(
'提示',
'社区版最多支持 2 个用户如需拥有更多用户请联系我们https://fit2cloud.com/)。'
)
}
})
}
}
function deleteUserManage(row: any) {
MsgConfirm(
`是否删除用户:${row.username} ?`,
`删除用户,该用户创建的资源(应用、知识库、模型)都会删除,请谨慎操作。`,
{
confirmButtonText: '删除',
confirmButtonClass: 'danger'
}
)
.then(() => {
loading.value = true
userApi.delUserManage(row.id, loading).then(() => {
MsgSuccess('删除成功')
getList()
})
})
.catch(() => {})
}
function handleSizeChange() {
paginationConfig.current_page = 1
getList()
}
function getList() {
return userApi.getUserManage(paginationConfig, searchValue.value, loading).then((res) => {
tableData.value = res.data.records
paginationConfig.total = res.data.total
})
}
function refresh() {
getList()
}
onMounted(() => {
getList()
})
</script>
<style lang="scss" scoped>
.log-table tr {
cursor: pointer;
}
</style>