UnisKB/ui/src/views/user-manage/index.vue

225 lines
6.7 KiB
Vue
Raw Normal View History

2024-03-20 02:38:59 +00:00
<template>
2025-01-13 03:15:51 +00:00
<LayoutContainer :header="$t('views.user.title')">
2024-03-20 02:38:59 +00:00
<div class="p-24">
<div class="flex-between">
2025-01-13 03:15:51 +00:00
<el-button type="primary" @click="createUser">{{ $t('views.user.createUser') }}</el-button>
2024-03-20 02:38:59 +00:00
<el-input
v-model="searchValue"
@change="searchHandle"
2025-01-13 03:15:51 +00:00
:placeholder="$t('common.search')"
2024-03-20 02:38:59 +00:00
prefix-icon="Search"
class="w-240"
clearable
2024-03-20 02:38:59 +00:00
/>
</div>
<app-table
class="mt-16"
:data="tableData"
:pagination-config="paginationConfig"
@sizeChange="handleSizeChange"
@changePage="getList"
v-loading="loading"
>
2025-01-13 03:15:51 +00:00
<el-table-column prop="username" :label="$t('views.user.userForm.form.username.label')" />
<el-table-column prop="nick_name" :label="$t('views.user.userForm.form.nick_name.label')" />
<el-table-column
prop="email"
:label="$t('views.user.userForm.form.email.label')"
show-overflow-tooltip
/>
<el-table-column prop="phone" :label="$t('views.user.userForm.form.phone.label')" />
<el-table-column prop="source" :label="$t('views.user.source.label')">
2024-07-16 08:20:57 +00:00
<template #default="{ row }">
2024-10-09 02:59:45 +00:00
{{
row.source === 'LOCAL'
2025-01-13 03:15:51 +00:00
? $t('views.user.source.local')
2024-10-09 02:59:45 +00:00
: row.source === 'wecom'
2025-01-13 03:15:51 +00:00
? $t('views.user.source.wecom')
2024-10-09 02:59:45 +00:00
: row.source === 'lark'
2025-01-13 03:15:51 +00:00
? $t('views.user.source.lark')
2024-10-09 02:59:45 +00:00
: row.source === 'dingtalk'
2025-01-13 03:15:51 +00:00
? $t('views.user.source.dingtalk')
2024-10-09 02:59:45 +00:00
: row.source
}}
2024-07-16 08:20:57 +00:00
</template>
</el-table-column>
2025-01-13 06:25:02 +00:00
<el-table-column :label="$t('common.status.label')" width="80">
2024-03-20 02:38:59 +00:00
<template #default="{ row }">
<div @click.stop>
2024-03-20 06:21:24 +00:00
<el-switch
:disabled="row.role === 'ADMIN'"
size="small"
v-model="row.is_active"
@change="changeState($event, row)"
/>
2024-03-20 02:38:59 +00:00
</div>
</template>
</el-table-column>
2025-01-13 03:15:51 +00:00
<el-table-column :label="$t('common.createTime')" width="180">
2024-03-20 02:38:59 +00:00
<template #default="{ row }">
{{ datetimeFormat(row.create_time) }}
</template>
</el-table-column>
2025-01-13 03:15:51 +00:00
<el-table-column :label="$t('common.operation')" width="110" align="left" fixed="right">
2024-03-20 02:38:59 +00:00
<template #default="{ row }">
<span class="mr-4">
2025-01-13 03:15:51 +00:00
<el-tooltip effect="dark" :content="$t('common.edit')" placement="top">
2024-03-20 02:38:59 +00:00
<el-button type="primary" text @click.stop="editUser(row)">
<el-icon><EditPen /></el-icon>
</el-button>
</el-tooltip>
</span>
<span class="mr-4">
2025-01-13 03:15:51 +00:00
<el-tooltip
effect="dark"
:content="$t('views.user.setting.updatePwd')"
placement="top"
>
2024-03-20 02:38:59 +00:00
<el-button type="primary" text @click.stop="editPwdUser(row)">
<el-icon><Lock /></el-icon>
</el-button>
</el-tooltip>
</span>
<span class="mr-4">
2025-01-13 03:15:51 +00:00
<el-tooltip effect="dark" :content="$t('common.delete')" placement="top">
2024-03-20 06:21:24 +00:00
<el-button
:disabled="row.role === 'ADMIN'"
type="primary"
text
@click.stop="deleteUserManage(row)"
>
2024-03-20 02:38:59 +00:00
<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">
2024-04-15 06:42:39 +00:00
import { ref, onMounted, reactive } from 'vue'
2024-03-20 02:38:59 +00:00
import UserDialog from './component/UserDialog.vue'
import UserPwdDialog from './component/UserPwdDialog.vue'
import { MsgSuccess, MsgConfirm, MsgAlert } from '@/utils/message'
2024-03-20 02:38:59 +00:00
import userApi from '@/api/user-manage'
import { datetimeFormat } from '@/utils/time'
import useStore from '@/stores'
import { ValidType, ValidCount } from '@/enums/common'
2025-01-13 03:15:51 +00:00
import { t } from '@/locales'
2025-01-13 06:25:02 +00:00
const { common, user } = useStore()
2024-03-20 02:38:59 +00:00
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()
}
2024-03-20 06:21:24 +00:00
function changeState(bool: Boolean, row: any) {
const obj = {
is_active: bool
}
2025-01-13 03:15:51 +00:00
const str = bool ? t('common.status.enableSuccess') : t('common.status.disableSuccess')
2024-03-20 06:21:24 +00:00
userApi.putUserManage(row.id, obj, loading).then((res) => {
getList()
MsgSuccess(str)
})
}
2024-03-20 02:38:59 +00:00
function editPwdUser(row: any) {
UserPwdDialogRef.value.open(row)
}
2025-01-13 06:25:02 +00:00
2024-03-20 02:38:59 +00:00
function editUser(row: any) {
2025-01-13 03:15:51 +00:00
title.value = t('views.user.editUser')
2024-03-20 02:38:59 +00:00
UserDialogRef.value.open(row)
}
function createUser() {
if (user.isEnterprise()) {
2025-01-13 03:15:51 +00:00
title.value = t('views.user.createUser')
UserDialogRef.value.open()
} else {
2025-01-13 03:15:51 +00:00
MsgConfirm(t('common.tip'), t('views.user.tip.professionalMessage'), {
cancelButtonText: t('common.confirm'),
confirmButtonText: t('common.professional')
})
2024-09-18 03:03:04 +00:00
.then(() => {
window.open('https://maxkb.cn/pricing.html', '_blank')
})
.catch(() => {
common.asyncGetValid(ValidType.User, ValidCount.User, loading).then(async (res: any) => {
if (res?.data) {
2025-01-13 03:15:51 +00:00
title.value = t('views.user.createUser')
2024-09-18 03:03:04 +00:00
UserDialogRef.value.open()
}
})
})
}
2024-03-20 02:38:59 +00:00
}
function deleteUserManage(row: any) {
MsgConfirm(
2025-01-13 03:15:51 +00:00
`${t('views.user.delete.confirmTitle')}${row.username} ?`,
t('views.user.delete.confirmMessage'),
2024-03-20 02:38:59 +00:00
{
2025-01-13 03:15:51 +00:00
confirmButtonText: t('common.delete'),
2024-03-20 02:38:59 +00:00
confirmButtonClass: 'danger'
}
)
.then(() => {
loading.value = true
userApi.delUserManage(row.id, loading).then(() => {
2025-01-13 03:15:51 +00:00
MsgSuccess(t('common.deleteSuccess'))
2024-03-20 02:38:59 +00:00
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>