refactor: chat user

This commit is contained in:
wxg0103 2025-06-13 15:05:51 +08:00
parent e9aa3a311c
commit 748420167a
6 changed files with 91 additions and 95 deletions

View File

@ -1,14 +1,13 @@
import { Result } from '@/request/Result' import {Result} from '@/request/Result'
import { get, put, post, del } from '@/request/index' import {get, put, post, del} from '@/request/index'
import type { pageRequest } from '@/api/type/common' import type {pageRequest} from '@/api/type/common'
import type { Ref } from 'vue' import type {Ref} from 'vue'
import type {ResetPasswordRequest} from "@/api/type/user.ts";
const prefix = '/system/chat_user' const prefix = '/system/chat_user'
/** /**
* *
* @query * @query
email_or_username: string email_or_username: string
*/ */
const getUserManage: ( const getUserManage: (
page: pageRequest, page: pageRequest,
@ -16,8 +15,8 @@ const getUserManage: (
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (page, email_or_username, loading) => { ) => Promise<Result<any>> = (page, email_or_username, loading) => {
return get( return get(
`${prefix}/${page.current_page}/${page.page_size}`, `${prefix}/user_manage/${page.current_page}/${page.page_size}`,
email_or_username ? { email_or_username } : undefined, email_or_username ? {email_or_username} : undefined,
loading, loading,
) )
} }

View File

@ -1,6 +1,6 @@
import { Result } from '@/request/Result' import {Result} from '@/request/Result'
import { get, post, del, put } from '@/request/index' import {get, post, del, put} from '@/request/index'
import type { Ref } from 'vue' import type {Ref} from 'vue'
const prefix = '/system/group' const prefix = '/system/group'
@ -15,9 +15,9 @@ const getUserGroup: (loading?: Ref<boolean>) => Promise<Result<any[]>> = () => {
* *
* @param * @param
* { * {
"id": "string", "id": "string",
"name": "string" "name": "string"
} }
*/ */
const postUserGroup: (data: any, loading?: Ref<boolean>) => Promise<Result<boolean>> = ( const postUserGroup: (data: any, loading?: Ref<boolean>) => Promise<Result<boolean>> = (
data, data,
@ -41,13 +41,13 @@ const delUserGroup: (user_group_id: String, loading?: Ref<boolean>) => Promise<R
* *
* @param * @param
* { * {
"additionalProp1": "string", "additionalProp1": "string",
"additionalProp2": "string", "additionalProp2": "string",
"additionalProp3": "string" "additionalProp3": "string"
} }
*/ */
const postAddMember: ( const postAddMember: (
user_group_id: String, user_group_id: string,
body: any, body: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (user_group_id, body, loading) => { ) => Promise<Result<any>> = (user_group_id, body, loading) => {
@ -57,13 +57,13 @@ const postAddMember: (
/** /**
* *
* @param { * @param {
"additionalProp1": "string", "additionalProp1": "string",
"additionalProp2": "string", "additionalProp2": "string",
"additionalProp3": "string" "additionalProp3": "string"
} }
*/ */
const postRemoveMember: ( const postRemoveMember: (
user_group_id: String, user_group_id: string,
body: any, body: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (user_group_id, body, loading) => { ) => Promise<Result<any>> = (user_group_id, body, loading) => {

View File

@ -1,14 +1,14 @@
import { Result } from '@/request/Result' import {Result} from '@/request/Result'
import { get, put, post, del } from '@/request/index' import {get, put, post, del} from '@/request/index'
import type { pageRequest } from '@/api/type/common' import type {pageRequest} from '@/api/type/common'
import type { Ref } from 'vue' import type {Ref} from 'vue'
import type {ResetPasswordRequest} from "@/api/type/user.ts"; import type {ResetPasswordRequest} from "@/api/type/user.ts";
const prefix = '/user_manage' const prefix = '/user_manage'
/** /**
* *
* @query * @query
email_or_username: string email_or_username: string
*/ */
const getUserManage: ( const getUserManage: (
page: pageRequest, page: pageRequest,
@ -17,7 +17,7 @@ const getUserManage: (
) => Promise<Result<any>> = (page, email_or_username, loading) => { ) => Promise<Result<any>> = (page, email_or_username, loading) => {
return get( return get(
`${prefix}/${page.current_page}/${page.page_size}`, `${prefix}/${page.current_page}/${page.page_size}`,
email_or_username ? { email_or_username } : undefined, email_or_username ? {email_or_username} : undefined,
loading, loading,
) )
} }
@ -91,6 +91,16 @@ const resetCurrentPassword: (
return post('/user/current/reset_password', request, undefined, loading) return post('/user/current/reset_password', request, undefined, loading)
} }
/**
*
*/
const getSystemDefaultPassword: (
loading?: Ref<boolean>
) => Promise<Result<string>> = (loading) => {
return get('/user_manage/password', undefined, loading)
}
export default { export default {
getUserManage, getUserManage,
putUserManage, putUserManage,
@ -98,5 +108,6 @@ export default {
postUserManage, postUserManage,
putUserManagePassword, putUserManagePassword,
resetPassword, resetPassword,
resetCurrentPassword resetCurrentPassword,
getSystemDefaultPassword
} }

View File

@ -64,22 +64,9 @@
> >
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item
:label="$t('views.userManage.form.password.label')"
prop="password"
v-if="!isEdit"
>
<el-input
type="password"
v-model="userForm.password"
:placeholder="$t('views.userManage.form.password.placeholder')"
show-password
>
</el-input>
</el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click.prevent="visible = false"> {{ $t('common.cancel') }} </el-button> <el-button @click.prevent="visible = false"> {{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submit(userFormRef)" :loading="loading"> <el-button type="primary" @click="submit(userFormRef)" :loading="loading">
{{ $t('common.save') }} {{ $t('common.save') }}
</el-button> </el-button>
@ -87,11 +74,12 @@
</el-drawer> </el-drawer>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, watch } from 'vue' import {ref, reactive, watch} from 'vue'
import type { FormInstance } from 'element-plus' import type {FormInstance} from 'element-plus'
import userManageApi from '@/api/user/user-manage' import userManageApi from '@/api/system/chat-user'
import { MsgSuccess } from '@/utils/message' import {MsgSuccess} from '@/utils/message'
import { t } from '@/locales' import {t} from '@/locales'
const props = defineProps({ const props = defineProps({
title: String, title: String,
}) })
@ -194,6 +182,6 @@ const submit = async (formEl: FormInstance | undefined) => {
}) })
} }
defineExpose({ open }) defineExpose({open})
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

View File

@ -4,8 +4,9 @@
<el-card> <el-card>
<div class="flex-between mb-16"> <div class="flex-between mb-16">
<el-button type="primary" @click="createUser()">{{ <el-button type="primary" @click="createUser()">{{
$t('views.userManage.createUser') $t('views.userManage.createUser')
}}</el-button> }}
</el-button>
<div class="flex-between complex-search"> <div class="flex-between complex-search">
<el-select <el-select
class="complex-search__left" class="complex-search__left"
@ -13,7 +14,7 @@
style="width: 120px" style="width: 120px"
@change="search_type_change" @change="search_type_change"
> >
<el-option :label="$t('views.login.loginForm.username.label')" value="name" /> <el-option :label="$t('views.login.loginForm.username.label')" value="name"/>
</el-select> </el-select>
<el-input <el-input
v-if="search_type === 'name'" v-if="search_type === 'name'"
@ -33,14 +34,16 @@
@changePage="getList" @changePage="getList"
v-loading="loading" v-loading="loading"
> >
<el-table-column prop="nick_name" :label="$t('views.userManage.userForm.nick_name.label')" /> <el-table-column prop="nick_name" :label="$t('views.userManage.userForm.nick_name.label')"/>
<el-table-column prop="username" :label="$t('views.userManage.userForm.username.label')" /> <el-table-column prop="username" :label="$t('views.userManage.userForm.username.label')"/>
<el-table-column prop="is_active" :label="$t('common.status.label')"> <el-table-column prop="is_active" :label="$t('common.status.label')">
<template #default="{ row }"> <template #default="{ row }">
<div v-if="row.is_active" class="flex align-center"> <div v-if="row.is_active" class="flex align-center">
<el-icon class="color-success mr-8" style="font-size: 16px" <el-icon class="color-success mr-8" style="font-size: 16px"
><SuccessFilled >
/></el-icon> <SuccessFilled
/>
</el-icon>
<span class="color-secondary"> <span class="color-secondary">
{{ $t('common.status.enabled') }} {{ $t('common.status.enabled') }}
</span> </span>
@ -96,16 +99,15 @@
<template #default="{ row }"> <template #default="{ row }">
<span @click.stop> <span @click.stop>
<el-switch <el-switch
:disabled="row.role === 'ADMIN'"
size="small" size="small"
v-model="row.is_active" v-model="row.is_active"
:before-change="() => changeState(row)" :before-change="() => changeState(row)"
/> />
</span> </span>
<el-divider direction="vertical" /> <el-divider direction="vertical"/>
<span class="mr-8"> <span class="mr-8">
<el-button type="primary" text @click.stop="editUser(row)" :title="$t('common.edit')"> <el-button type="primary" text @click.stop="editUser(row)" :title="$t('common.edit')">
<el-icon><EditPen /></el-icon> <el-icon><EditPen/></el-icon>
</el-button> </el-button>
</span> </span>
@ -116,7 +118,7 @@
@click.stop="editPwdUser(row)" @click.stop="editPwdUser(row)"
:title="$t('views.userManage.setting.updatePwd')" :title="$t('views.userManage.setting.updatePwd')"
> >
<el-icon><Lock /></el-icon> <el-icon><Lock/></el-icon>
</el-button> </el-button>
</span> </span>
<span> <span>
@ -127,26 +129,27 @@
@click.stop="deleteUserManage(row)" @click.stop="deleteUserManage(row)"
:title="$t('common.delete')" :title="$t('common.delete')"
> >
<el-icon><Delete /></el-icon> <el-icon><Delete/></el-icon>
</el-button> </el-button>
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
</app-table> </app-table>
</el-card> </el-card>
<UserDrawer :title="title" ref="UserDrawerRef" @refresh="refresh" /> <UserDrawer :title="title" ref="UserDrawerRef" @refresh="refresh"/>
<UserPwdDialog ref="UserPwdDialogRef" @refresh="refresh" /> <UserPwdDialog ref="UserPwdDialogRef" @refresh="refresh"/>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, ref, reactive, watch } from 'vue' import {onMounted, ref, reactive, watch} from 'vue'
import UserDrawer from './component/UserDrawer.vue' import UserDrawer from './component/UserDrawer.vue'
import UserPwdDialog from './component/UserPwdDialog.vue' import UserPwdDialog from './component/UserPwdDialog.vue'
import userManageApi from '@/api/user/user-manage' import userManageApi from '@/api/system/chat-user'
import { datetimeFormat } from '@/utils/time' import {datetimeFormat} from '@/utils/time'
import { MsgSuccess, MsgConfirm } from '@/utils/message' import {MsgSuccess, MsgConfirm} from '@/utils/message'
import { t } from '@/locales' import {t} from '@/locales'
const search_type = ref('name') const search_type = ref('name')
const search_form = ref<{ const search_form = ref<{
name: string name: string
@ -167,8 +170,9 @@ const paginationConfig = reactive({
const userTableData = ref<any[]>([]) const userTableData = ref<any[]>([])
const search_type_change = () => { const search_type_change = () => {
search_form.value = { name: '' } search_form.value = {name: ''}
} }
function handleSizeChange() { function handleSizeChange() {
paginationConfig.current_page = 1 paginationConfig.current_page = 1
getList() getList()
@ -201,6 +205,7 @@ function changeState(row: any) {
} }
const title = ref('') const title = ref('')
function editUser(row: any) { function editUser(row: any) {
title.value = t('views.userManage.editUser') title.value = t('views.userManage.editUser')
UserDrawerRef.value.open(row) UserDrawerRef.value.open(row)
@ -208,22 +213,7 @@ function editUser(row: any) {
function createUser() { function createUser() {
title.value = t('views.userManage.createUser') title.value = t('views.userManage.createUser')
UserDrawerRef.value.open(1) UserDrawerRef.value.open()
// common.asyncGetValid(ValidType.User, ValidCount.User, loading).then(async (res: any) => {
// if (res?.data) {
// title.value = t('views.userManage.createUser')
// UserDrawerRef.value.open()
// } else if (res?.code === 400) {
// MsgConfirm(t('common.tip'), t('views.userManage.tip.professionalMessage'), {
// cancelButtonText: t('common.confirm'),
// confirmButtonText: t('common.professional'),
// })
// .then(() => {
// window.open('https://maxkb.cn/pricing.html', '_blank')
// })
// .catch(() => {})
// }
// })
} }
function deleteUserManage(row: any) { function deleteUserManage(row: any) {
@ -242,7 +232,8 @@ function deleteUserManage(row: any) {
getList() getList()
}) })
}) })
.catch(() => {}) .catch(() => {
})
} }
function editPwdUser(row: any) { function editPwdUser(row: any) {

View File

@ -52,11 +52,11 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="默认密码" v-if="!isEdit"> <el-form-item label="默认密码" v-if="!isEdit">
<span>MaxKB@123</span> <span>{{userForm.password}}</span>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click.prevent="visible = false"> {{ $t('common.cancel') }} </el-button> <el-button @click.prevent="visible = false"> {{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submit(userFormRef)" :loading="loading"> <el-button type="primary" @click="submit(userFormRef)" :loading="loading">
{{ $t('common.save') }} {{ $t('common.save') }}
</el-button> </el-button>
@ -64,11 +64,12 @@
</el-drawer> </el-drawer>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, watch } from 'vue' import {ref, reactive, watch} from 'vue'
import type { FormInstance } from 'element-plus' import type {FormInstance} from 'element-plus'
import userManageApi from '@/api/user/user-manage' import userManageApi from '@/api/user/user-manage'
import { MsgSuccess } from '@/utils/message' import {MsgSuccess} from '@/utils/message'
import { t } from '@/locales' import {t} from '@/locales'
const props = defineProps({ const props = defineProps({
title: String, title: String,
}) })
@ -146,7 +147,13 @@ const open = (data: any) => {
userForm.value.phone = data.phone userForm.value.phone = data.phone
userForm.value.nick_name = data.nick_name userForm.value.nick_name = data.nick_name
isEdit.value = true isEdit.value = true
} else {
//zxl
userManageApi.getSystemDefaultPassword().then((res: any) => {
userForm.value.password = res.data.password
})
} }
visible.value = true visible.value = true
} }
@ -171,6 +178,6 @@ const submit = async (formEl: FormInstance | undefined) => {
}) })
} }
defineExpose({ open }) defineExpose({open})
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>