refactor: update user search parameters and improve code formatting in chat user components

This commit is contained in:
wxg0103 2025-07-30 17:12:51 +08:00
parent dd7b2a7bda
commit 549aa62349
5 changed files with 130 additions and 65 deletions

View File

@ -33,12 +33,12 @@ const getUserGroupUserList: (
resource: any, resource: any,
user_group_id: string, user_group_id: string,
page: pageRequest, page: pageRequest,
username_or_nickname: string, params?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<PageList<ChatUserGroupUserItem[]>>> = (resource, user_group_id, page, username_or_nickname, loading) => { ) => Promise<Result<PageList<ChatUserGroupUserItem[]>>> = (resource, user_group_id, page, params, loading) => {
return get( return get(
`${prefix.value}/${resource.resource_type}/${resource.resource_id}/user_group_id/${user_group_id}/${page.current_page}/${page.page_size}`, `${prefix.value}/${resource.resource_type}/${resource.resource_id}/user_group_id/${user_group_id}/${page.current_page}/${page.page_size}`,
username_or_nickname ? { username_or_nickname } : undefined, params,
loading, loading,
) )
} }

View File

@ -1,17 +1,17 @@
import { Result } from '@/request/Result' import {Result} from '@/request/Result'
import { get, post, del, put, exportFile, exportExcel } from '@/request/index' import {get, post, del, put, exportFile, exportExcel} from '@/request/index'
import { type Ref } from 'vue' import {type Ref} from 'vue'
import type { PageList, pageRequest } from '@/api/type/common' import type {PageList, pageRequest} from '@/api/type/common'
import type { knowledgeData } from '@/api/type/knowledge' import type {knowledgeData} from '@/api/type/knowledge'
import useStore from '@/stores' import useStore from '@/stores'
import type { ChatUserGroupItem } from './type/workspaceChatUser' import type {ChatUserGroupItem} from './type/workspaceChatUser'
const prefix = '/system/shared' const prefix = '/system/shared'
const prefix_workspace: any = { _value: 'workspace/' } const prefix_workspace: any = {_value: 'workspace/'}
Object.defineProperty(prefix_workspace, 'value', { Object.defineProperty(prefix_workspace, 'value', {
get: function () { get: function () {
const { user } = useStore() const {user} = useStore()
return this._value + user.getWorkspaceId() return this._value + user.getWorkspaceId()
}, },
}) })
@ -107,14 +107,14 @@ const getProblemsPage: (
*/ */
const getUserGroupUserList: ( const getUserGroupUserList: (
resource: any, resource: any,
user_group_id:string, user_group_id: string,
page: pageRequest, page: pageRequest,
username_or_nickname: string, params?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<PageList<ChatUserGroupItem[]>>> = (resource, user_group_id, page, username_or_nickname, loading) => { ) => Promise<Result<PageList<ChatUserGroupItem[]>>> = (resource, user_group_id, page, params, loading) => {
return get ( return get(
`${prefix}/${prefix_workspace.value}/KNOWLEDGE/${resource.resource_id}/user_group_id/${user_group_id}/${page.current_page}/${page.page_size}` `${prefix}/${prefix_workspace.value}/KNOWLEDGE/${resource.resource_id}/user_group_id/${user_group_id}/${page.current_page}/${page.page_size}`,
,username_or_nickname ? {username_or_nickname} : undefined, loading, params, loading,
) )
} }
@ -122,7 +122,7 @@ const getUserGroupUserList: (
* *
*/ */
const getUserGroupList: (resource: any, loading?: Ref<boolean>) => Promise<Result<ChatUserGroupItem[]>> = (resource, loading) => { const getUserGroupList: (resource: any, loading?: Ref<boolean>) => Promise<Result<ChatUserGroupItem[]>> = (resource, loading) => {
return get (`${prefix}/${prefix_workspace.value}/KNOWLEDGE/${resource.resource_id}/user_group`, undefined, loading) return get(`${prefix}/${prefix_workspace.value}/KNOWLEDGE/${resource.resource_id}/user_group`, undefined, loading)
} }
/** /**

View File

@ -29,12 +29,12 @@ const getUserGroupUserList: (
resource: any, resource: any,
user_group_id: string, user_group_id: string,
page: pageRequest, page: pageRequest,
username_or_nickname: string, param?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<PageList<ChatUserGroupUserItem[]>>> = (resource, user_group_id, page, username_or_nickname, loading) => { ) => Promise<Result<PageList<ChatUserGroupUserItem[]>>> = (resource, user_group_id, page, param, loading) => {
return get( return get(
`${prefix}/${resource.resource_type}/${resource.resource_id}/user_group_id/${user_group_id}/${page.current_page}/${page.page_size}`, `${prefix}/${resource.resource_type}/${resource.resource_id}/user_group_id/${user_group_id}/${page.current_page}/${page.page_size}`,
username_or_nickname ? {username_or_nickname} : undefined, param,
loading, loading,
) )
} }

View File

@ -29,12 +29,12 @@ const getUserGroupUserList: (
resource: any, resource: any,
user_group_id: string, user_group_id: string,
page: pageRequest, page: pageRequest,
username_or_nickname: string, params?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<PageList<ChatUserGroupUserItem[]>>> = (resource, user_group_id, page, username_or_nickname, loading) => { ) => Promise<Result<PageList<ChatUserGroupUserItem[]>>> = (resource, user_group_id, page, params, loading) => {
return get( return get(
`${prefix}/${resource.resource_type}/${resource.resource_id}/user_group_id/${user_group_id}/${page.current_page}/${page.page_size}`, `${prefix}/${resource.resource_type}/${resource.resource_id}/user_group_id/${user_group_id}/${page.current_page}/${page.page_size}`,
username_or_nickname ? {username_or_nickname} : undefined, params,
loading, loading,
) )
} }

View File

@ -47,9 +47,11 @@
<div class="flex-between"> <div class="flex-between">
<div class="flex align-center"> <div class="flex align-center">
<h4 class="medium ellipsis" :title="current?.name">{{ current?.name || '-' }}</h4> <h4 class="medium ellipsis" :title="current?.name">{{ current?.name || '-' }}</h4>
<el-divider direction="vertical" class="mr-8 ml-8" /> <el-divider direction="vertical" class="mr-8 ml-8"/>
<el-icon class="color-input-placeholder"><UserFilled /></el-icon> <el-icon class="color-input-placeholder">
<UserFilled/>
</el-icon>
<span class="color-input-placeholder ml-4"> <span class="color-input-placeholder ml-4">
{{ paginationConfig.total }} {{ paginationConfig.total }}
</span> </span>
@ -76,16 +78,69 @@
<div class="flex-between mb-16" style="margin-top: 18px"> <div class="flex-between mb-16" style="margin-top: 18px">
<div class="flex complex-search"> <div class="flex complex-search">
<el-select class="complex-search__left" v-model="searchType" style="width: 120px"> <el-select class="complex-search__left" v-model="searchType" style="width: 120px">
<el-option :label="$t('views.login.loginForm.username.label')" value="name" /> <el-option :label="$t('views.login.loginForm.username.label')" value="username"/>
<el-option :label="$t('views.userManage.userForm.nick_name.label')"
value="nick_name"/>
<el-option :label="$t('views.userManage.source.label')" value="source"/>
</el-select> </el-select>
<el-input <el-input
v-if="searchType === 'name'" v-if="searchType === 'username'"
v-model="searchForm.name" v-model="searchForm.username"
@change="getList" @change="getList"
:placeholder="$t('common.inputPlaceholder')" :placeholder="$t('common.inputPlaceholder')"
style="width: 220px" style="width: 220px"
clearable clearable
/> />
<el-input
v-else-if="searchType === 'nick_name'"
v-model="searchForm.nick_name"
@change="getList"
:placeholder="$t('common.inputPlaceholder')"
style="width: 220px"
clearable
/>
<el-select
v-else-if="searchType === 'source'"
v-model="searchForm.source"
@change="getList"
:placeholder="$t('common.selectPlaceholder')"
style="width: 220px"
clearable
>
<el-option
:label="$t('views.userManage.source.local')"
value="LOCAL"
/>
<el-option
label="CAS"
value="CAS"
/>
<el-option
label="LDAP"
value="LDAP"
/>
<el-option
label="OIDC"
value="OIDC"
/>
<el-option
label="OAuth2"
value="OAuth2"
/>
<el-option
:label="$t('views.userManage.source.wecom')"
value="wecom"
/>
<el-option
:label="$t('views.userManage.source.lark')"
value="lark"
/>
<el-option
:label="$t('views.userManage.source.dingtalk')"
value="dingtalk"
/>
</el-select>
</div> </div>
<div <div
class="flex align-center" class="flex align-center"
@ -121,7 +176,7 @@
prop="nick_name" prop="nick_name"
:label="$t('views.userManage.userForm.nick_name.label')" :label="$t('views.userManage.userForm.nick_name.label')"
/> />
<el-table-column prop="username" :label="$t('views.login.loginForm.username.label')" /> <el-table-column prop="username" :label="$t('views.login.loginForm.username.label')"/>
<el-table-column prop="source" :label="$t('views.userManage.source.label')"> <el-table-column prop="source" :label="$t('views.userManage.source.label')">
<template #default="{ row }"> <template #default="{ row }">
{{ {{
@ -146,7 +201,8 @@
:indeterminate="allIndeterminate" :indeterminate="allIndeterminate"
:disabled="current?.is_auth" :disabled="current?.is_auth"
@change="handleCheckAll" @change="handleCheckAll"
>{{ $t('views.chatUser.authorization') }}</el-checkbox >{{ $t('views.chatUser.authorization') }}
</el-checkbox
> >
</template> </template>
<template #default="{ row }"> <template #default="{ row }">
@ -166,22 +222,22 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, ref, watch, reactive, computed } from 'vue' import {onMounted, ref, watch, reactive, computed} from 'vue'
import { t } from '@/locales' import {t} from '@/locales'
import type { ChatUserGroupItem, ChatUserGroupUserItem } from '@/api/type/workspaceChatUser' import type {ChatUserGroupItem, ChatUserGroupUserItem} from '@/api/type/workspaceChatUser'
import { useRoute } from 'vue-router' import {useRoute} from 'vue-router'
import { SourceTypeEnum } from '@/enums/common' import {SourceTypeEnum} from '@/enums/common'
import { MsgSuccess } from '@/utils/message' import {MsgSuccess} from '@/utils/message'
import { ComplexPermission } from '@/utils/permission/type' import {ComplexPermission} from '@/utils/permission/type'
import { RoleConst, PermissionConst } from '@/utils/permission/data' import {RoleConst, PermissionConst} from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index' import {hasPermission} from '@/utils/permission/index'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api' import {loadSharedApi} from '@/utils/dynamics-api/shared-api'
const route = useRoute() const route = useRoute()
const { const {
params: { id, folderId }, params: {id, folderId},
} = route as any } = route as any
const permissionObj = ref<any>({ const permissionObj = ref<any>({
@ -216,13 +272,15 @@ const permissionObj = ref<any>({
const currentPermissionKey = computed(() => { const currentPermissionKey = computed(() => {
if (route.path.includes('shared')) return 'SHAREDKNOWLEDGE' if (route.path.includes('shared')) return 'SHAREDKNOWLEDGE'
if (route.path.includes('resource-management')) { if (route.path.includes('resource-management')) {
if (route.meta?.resourceType === 'KNOWLEDGE') { return 'RESOURCE_KNOWLEDGE' } if (route.meta?.resourceType === 'KNOWLEDGE') {
else if (route.meta?.resourceType === 'APPLICATION') { return 'RESOURCE_APPLICATION' } return 'RESOURCE_KNOWLEDGE'
} else if (route.meta?.resourceType === 'APPLICATION') {
return 'RESOURCE_APPLICATION'
}
} }
return route.meta?.resourceType as string return route.meta?.resourceType as string
}) })
console.log(currentPermissionKey.value)
const resource = reactive({ const resource = reactive({
resource_id: route.params.id as string, resource_id: route.params.id as string,
@ -285,7 +343,7 @@ function clickUserGroup(item: ChatUserGroupItem) {
} }
async function changeAuth() { async function changeAuth() {
const params = [{ user_group_id: current.value?.id as string, is_auth: !current.value?.is_auth }] const params = [{user_group_id: current.value?.id as string, is_auth: !current.value?.is_auth}]
try { try {
await loadSharedApi({ await loadSharedApi({
type: 'chatUser', type: 'chatUser',
@ -305,9 +363,11 @@ async function changeAuth() {
const rightLoading = ref(false) const rightLoading = ref(false)
const searchType = ref('name') const searchType = ref('username')
const searchForm = ref<Record<string, any>>({ const searchForm = ref<Record<string, any>>({
name: '', username: '',
nick_name: '',
source: '',
}) })
const paginationConfig = reactive({ const paginationConfig = reactive({
current_page: 1, current_page: 1,
@ -323,6 +383,11 @@ const isShared = computed(() => {
async function getList() { async function getList() {
if (!current.value?.id) return if (!current.value?.id) return
const params: any = {}
const searchValue = searchForm.value[searchType.value as keyof typeof searchForm.value];
if (searchValue !== undefined && searchValue !== null && searchValue !== '') {
params[searchType.value] = searchValue;
}
try { try {
const res = await loadSharedApi({ const res = await loadSharedApi({
type: 'chatUser', type: 'chatUser',
@ -332,7 +397,7 @@ async function getList() {
resource, resource,
current.value?.id, current.value?.id,
paginationConfig, paginationConfig,
searchForm.value.name, params,
rightLoading, rightLoading,
) )
// //