fix
This commit is contained in:
@@ -20,12 +20,13 @@ export interface UserItem {
|
|||||||
export interface UserListResponse {
|
export interface UserListResponse {
|
||||||
code: number;
|
code: number;
|
||||||
message: string;
|
message: string;
|
||||||
data: UserItem[];
|
data?: UserItem[] | { data?: UserItem[] };
|
||||||
|
details?: UserItem[] | { data?: UserItem[] };
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户列表
|
* 获取用户列表
|
||||||
*/
|
*/
|
||||||
export const fetchUserList = async (data: any) => {
|
export const fetchUserList = async (data: any) => {
|
||||||
return request.post<UserListResponse>('/rbac2/v1/user/list', data);
|
return request.post<UserListResponse>('/rbac2/v1/user/list', data, { needWorkspace: true });
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -119,11 +119,14 @@
|
|||||||
placeholder="请选择处理人"
|
placeholder="请选择处理人"
|
||||||
allow-search
|
allow-search
|
||||||
allow-clear
|
allow-clear
|
||||||
|
:filter-option="false"
|
||||||
:loading="userLoading"
|
:loading="userLoading"
|
||||||
|
@search="handleUserSearch"
|
||||||
:style="{ width: '100%' }"
|
:style="{ width: '100%' }"
|
||||||
|
:trigger-props="selectTriggerProps"
|
||||||
>
|
>
|
||||||
<a-option v-for="user in userOptions" :key="user.id" :value="user.id">
|
<a-option v-for="user in userOptions" :key="user.id" :value="user.id">
|
||||||
{{ user.name || user.username }} ({{ user.username }})
|
{{ user.name || user.account }} ({{ user.account }})
|
||||||
</a-option>
|
</a-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</template>
|
</template>
|
||||||
@@ -133,9 +136,18 @@
|
|||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<a-form-item label="默认处理人">
|
<a-form-item label="默认处理人">
|
||||||
<a-select v-model="defaultAssigneeId" placeholder="请选择默认处理人" allow-search allow-clear :loading="userLoading">
|
<a-select
|
||||||
|
v-model="defaultAssigneeId"
|
||||||
|
placeholder="请选择默认处理人"
|
||||||
|
allow-search
|
||||||
|
allow-clear
|
||||||
|
:filter-option="false"
|
||||||
|
:loading="userLoading"
|
||||||
|
@search="handleUserSearch"
|
||||||
|
:trigger-props="selectTriggerProps"
|
||||||
|
>
|
||||||
<a-option v-for="user in userOptions" :key="user.id" :value="user.id">
|
<a-option v-for="user in userOptions" :key="user.id" :value="user.id">
|
||||||
{{ user.name || user.username }} ({{ user.username }})
|
{{ user.name || user.account }} ({{ user.account }})
|
||||||
</a-option>
|
</a-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
@@ -153,6 +165,7 @@ import { ref, reactive, watch } from 'vue'
|
|||||||
import { Message } from '@arco-design/web-vue'
|
import { Message } from '@arco-design/web-vue'
|
||||||
import type { FormInstance } from '@arco-design/web-vue'
|
import type { FormInstance } from '@arco-design/web-vue'
|
||||||
import { createPolicy, fetchTemplateList, fetchSeverityList, fetchFeedbackTemplateOptions } from '@/api/ops/alertPolicy'
|
import { createPolicy, fetchTemplateList, fetchSeverityList, fetchFeedbackTemplateOptions } from '@/api/ops/alertPolicy'
|
||||||
|
import { fetchUserList } from '@/api/ops/rbac2'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
visible: boolean
|
visible: boolean
|
||||||
@@ -201,11 +214,7 @@ const formRules = {
|
|||||||
|
|
||||||
const templateOptions = ref<any[]>([])
|
const templateOptions = ref<any[]>([])
|
||||||
const feedbackTemplateOptions = ref<any[]>([])
|
const feedbackTemplateOptions = ref<any[]>([])
|
||||||
const userOptions = ref<any[]>([
|
const userOptions = ref<any[]>([])
|
||||||
{ id: 1, name: '张三', username: 'zhangsan' },
|
|
||||||
{ id: 2, name: '李四', username: 'lisi' },
|
|
||||||
{ id: 3, name: '王五', username: 'wangwu' },
|
|
||||||
])
|
|
||||||
const severityList = ref<any[]>([
|
const severityList = ref<any[]>([
|
||||||
{ code: 'critical', name: '严重', color: 'red' },
|
{ code: 'critical', name: '严重', color: 'red' },
|
||||||
{ code: 'major', name: '重要', color: 'orange' },
|
{ code: 'major', name: '重要', color: 'orange' },
|
||||||
@@ -242,6 +251,51 @@ const loadSeverityList = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const loadUserOptions = async (keyword = '') => {
|
||||||
|
userLoading.value = true
|
||||||
|
try {
|
||||||
|
const workspace = import.meta.env.VITE_APP_WORKSPACE || ''
|
||||||
|
const res = await fetchUserList({
|
||||||
|
workspace,
|
||||||
|
keyword: keyword || undefined,
|
||||||
|
status: 1,
|
||||||
|
})
|
||||||
|
const rawList = Array.isArray(res?.data?.data)
|
||||||
|
? res.data.data
|
||||||
|
: Array.isArray(res?.details?.data)
|
||||||
|
? res.details.data
|
||||||
|
: Array.isArray(res?.details)
|
||||||
|
? res.details
|
||||||
|
: Array.isArray(res?.data)
|
||||||
|
? res.data
|
||||||
|
: []
|
||||||
|
userOptions.value = rawList.map((item: any) => ({
|
||||||
|
id: Number(item.id),
|
||||||
|
name: item.name || '',
|
||||||
|
account: item.account || item.username || '',
|
||||||
|
}))
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取用户下拉选项失败:', error)
|
||||||
|
userOptions.value = []
|
||||||
|
} finally {
|
||||||
|
userLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleUserSearch = (value: string) => {
|
||||||
|
loadUserOptions(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
const getSelectPopupContainer = (triggerNode: HTMLElement) => {
|
||||||
|
return triggerNode.closest('.arco-modal') || document.body
|
||||||
|
}
|
||||||
|
|
||||||
|
const selectTriggerProps = {
|
||||||
|
updateAtScroll: true,
|
||||||
|
autoFitPopupMinWidth: true,
|
||||||
|
getPopupContainer: getSelectPopupContainer,
|
||||||
|
}
|
||||||
|
|
||||||
const loadFeedbackTemplateOptions = async () => {
|
const loadFeedbackTemplateOptions = async () => {
|
||||||
feedbackTemplateLoading.value = true
|
feedbackTemplateLoading.value = true
|
||||||
try {
|
try {
|
||||||
@@ -361,6 +415,7 @@ watch(
|
|||||||
loadTemplateOptions()
|
loadTemplateOptions()
|
||||||
loadSeverityList()
|
loadSeverityList()
|
||||||
loadFeedbackTemplateOptions()
|
loadFeedbackTemplateOptions()
|
||||||
|
loadUserOptions()
|
||||||
initDispatchRuleData()
|
initDispatchRuleData()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -167,15 +167,18 @@
|
|||||||
placeholder="请选择处理人"
|
placeholder="请选择处理人"
|
||||||
allow-search
|
allow-search
|
||||||
allow-clear
|
allow-clear
|
||||||
|
:filter-option="false"
|
||||||
:loading="userLoading"
|
:loading="userLoading"
|
||||||
|
@search="handleUserSearch"
|
||||||
:style="{ width: '100%' }"
|
:style="{ width: '100%' }"
|
||||||
|
:trigger-props="selectTriggerProps"
|
||||||
>
|
>
|
||||||
<a-option
|
<a-option
|
||||||
v-for="user in userOptions"
|
v-for="user in userOptions"
|
||||||
:key="user.id"
|
:key="user.id"
|
||||||
:value="user.id"
|
:value="user.id"
|
||||||
>
|
>
|
||||||
{{ user.name || user.username }} ({{ user.username }})
|
{{ user.name || user.account }} ({{ user.account }})
|
||||||
</a-option>
|
</a-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</template>
|
</template>
|
||||||
@@ -190,14 +193,17 @@
|
|||||||
placeholder="请选择默认处理人"
|
placeholder="请选择默认处理人"
|
||||||
allow-search
|
allow-search
|
||||||
allow-clear
|
allow-clear
|
||||||
|
:filter-option="false"
|
||||||
:loading="userLoading"
|
:loading="userLoading"
|
||||||
|
@search="handleUserSearch"
|
||||||
|
:trigger-props="selectTriggerProps"
|
||||||
>
|
>
|
||||||
<a-option
|
<a-option
|
||||||
v-for="user in userOptions"
|
v-for="user in userOptions"
|
||||||
:key="user.id"
|
:key="user.id"
|
||||||
:value="user.id"
|
:value="user.id"
|
||||||
>
|
>
|
||||||
{{ user.name || user.username }} ({{ user.username }})
|
{{ user.name || user.account }} ({{ user.account }})
|
||||||
</a-option>
|
</a-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
@@ -223,6 +229,7 @@ import {
|
|||||||
fetchSeverityList,
|
fetchSeverityList,
|
||||||
fetchFeedbackTemplateOptions,
|
fetchFeedbackTemplateOptions,
|
||||||
} from '@/api/ops/alertPolicy'
|
} from '@/api/ops/alertPolicy'
|
||||||
|
import { fetchUserList } from '@/api/ops/rbac2'
|
||||||
|
|
||||||
// Props
|
// Props
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -283,11 +290,7 @@ const templateOptions = ref<any[]>([])
|
|||||||
const feedbackTemplateOptions = ref<any[]>([])
|
const feedbackTemplateOptions = ref<any[]>([])
|
||||||
|
|
||||||
// 用户选项(模拟数据,实际应从用户服务获取)
|
// 用户选项(模拟数据,实际应从用户服务获取)
|
||||||
const userOptions = ref<any[]>([
|
const userOptions = ref<any[]>([])
|
||||||
{ id: 1, name: '张三', username: 'zhangsan' },
|
|
||||||
{ id: 2, name: '李四', username: 'lisi' },
|
|
||||||
{ id: 3, name: '王五', username: 'wangwu' },
|
|
||||||
])
|
|
||||||
|
|
||||||
// 告警级别列表
|
// 告警级别列表
|
||||||
const severityList = ref<any[]>([
|
const severityList = ref<any[]>([
|
||||||
@@ -329,6 +332,51 @@ const loadSeverityList = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const loadUserOptions = async (keyword = '') => {
|
||||||
|
userLoading.value = true
|
||||||
|
try {
|
||||||
|
const workspace = import.meta.env.VITE_APP_WORKSPACE || ''
|
||||||
|
const res = await fetchUserList({
|
||||||
|
workspace,
|
||||||
|
keyword: keyword || undefined,
|
||||||
|
status: 1,
|
||||||
|
})
|
||||||
|
const rawList = Array.isArray(res?.data?.data)
|
||||||
|
? res.data.data
|
||||||
|
: Array.isArray(res?.details?.data)
|
||||||
|
? res.details.data
|
||||||
|
: Array.isArray(res?.details)
|
||||||
|
? res.details
|
||||||
|
: Array.isArray(res?.data)
|
||||||
|
? res.data
|
||||||
|
: []
|
||||||
|
userOptions.value = rawList.map((item: any) => ({
|
||||||
|
id: Number(item.id),
|
||||||
|
name: item.name || '',
|
||||||
|
account: item.account || item.username || '',
|
||||||
|
}))
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取用户下拉选项失败:', error)
|
||||||
|
userOptions.value = []
|
||||||
|
} finally {
|
||||||
|
userLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleUserSearch = (value: string) => {
|
||||||
|
loadUserOptions(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
const getSelectPopupContainer = (triggerNode: HTMLElement) => {
|
||||||
|
return triggerNode.closest('.arco-modal') || document.body
|
||||||
|
}
|
||||||
|
|
||||||
|
const selectTriggerProps = {
|
||||||
|
updateAtScroll: true,
|
||||||
|
autoFitPopupMinWidth: true,
|
||||||
|
getPopupContainer: getSelectPopupContainer,
|
||||||
|
}
|
||||||
|
|
||||||
const loadFeedbackTemplateOptions = async () => {
|
const loadFeedbackTemplateOptions = async () => {
|
||||||
feedbackTemplateLoading.value = true
|
feedbackTemplateLoading.value = true
|
||||||
try {
|
try {
|
||||||
@@ -530,6 +578,7 @@ watch(
|
|||||||
loadTemplateOptions()
|
loadTemplateOptions()
|
||||||
loadSeverityList()
|
loadSeverityList()
|
||||||
loadFeedbackTemplateOptions()
|
loadFeedbackTemplateOptions()
|
||||||
|
loadUserOptions()
|
||||||
initDispatchRuleData()
|
initDispatchRuleData()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user