Skip to content

Commit c3fca96

Browse files
perf: Optimize multiple selections
1 parent 147eea4 commit c3fca96

File tree

13 files changed

+70
-45
lines changed

13 files changed

+70
-45
lines changed

ui/src/components/dynamics-form/constructor/items/MultiSelectConstructor.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@
130130
collapse-tags
131131
filterable
132132
clearable
133+
:reserve-keyword="false"
133134
v-model="formValue.default_value"
134135
:teleported="false"
135136
popper-class="default-select"

ui/src/components/dynamics-form/items/select/MultiSelect.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
filterable
66
allow-create
77
clearable
8+
:reserve-keyword="false"
89
v-bind="$attrs"
910
v-model="_modelValue"
1011
>

ui/src/components/resource-authorization-drawer/index.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
filterable
4949
clearable
5050
multiple
51+
:reserve-keyword="false"
5152
collapse-tags
5253
collapse-tags-tooltip
5354
style="width: 220px"

ui/src/views/application/component/McpServersDialog.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
{{ `MCP ${$t('views.tool.title')}` }}
3939
<span class="color-danger">*</span>
4040
</template>
41-
<el-select v-model="form.mcp_tool_ids" filterable multiple>
41+
<el-select v-model="form.mcp_tool_ids" filterable multiple :reserve-keyword="false">
4242
<el-option
4343
v-for="mcpTool in mcpToolSelectOptions"
4444
:key="mcpTool.id"

ui/src/views/document/tag/CreateTagDialog.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
</el-col>
5353
<el-col :span="1">
5454
<el-button
55-
:disabled="index === 0"
55+
:disabled="tags.length === 1"
5656
link
5757
type="info"
5858
@click="deleteTag(index)"

ui/src/views/document/tag/MulAddTagDialog.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
</el-col>
8383
<el-col :span="1">
8484
<el-button
85-
:disabled="index === 0"
85+
:disabled="tagList.length === 1"
8686
text
8787
@click="deleteTag(index)"
8888
:style="{ marginTop: index === 0 ? '35px' : '5px' }"

ui/src/views/document/upload/SetRules.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
<el-select
4848
v-model="form.patterns"
4949
multiple
50+
:reserve-keyword="false"
5051
allow-create
5152
default-first-option
5253
filterable
Lines changed: 58 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,34 @@
11
<template>
2-
<el-dialog :title="$t('views.role.member.add')" v-model="dialogVisible"
3-
:close-on-click-modal="false"
4-
:close-on-press-escape="false" :destroy-on-close="true">
5-
<el-form label-position="top" ref="formRef" :rules="rules" :model="form"
6-
require-asterisk-position="right">
2+
<el-dialog
3+
:title="$t('views.role.member.add')"
4+
v-model="dialogVisible"
5+
:close-on-click-modal="false"
6+
:close-on-press-escape="false"
7+
:destroy-on-close="true"
8+
>
9+
<el-form
10+
label-position="top"
11+
ref="formRef"
12+
:rules="rules"
13+
:model="form"
14+
require-asterisk-position="right"
15+
>
716
<el-form-item :label="$t('views.chatUser.group.usernameOrName')" prop="user">
8-
<el-select v-model="form.user" multiple filterable
9-
:placeholder="$t('common.selectPlaceholder')"
10-
:loading="optionLoading"
11-
:filter-method="filterUser"
17+
<el-select
18+
v-model="form.user"
19+
multiple
20+
filterable
21+
:reserve-keyword="false"
22+
:placeholder="$t('common.selectPlaceholder')"
23+
:loading="optionLoading"
24+
:filter-method="filterUser"
1225
>
13-
<el-option v-for="item in chatUserList" :key="item.id" :label="item.nick_name"
14-
:value="item.id">
26+
<el-option
27+
v-for="item in chatUserList"
28+
:key="item.id"
29+
:label="item.nick_name"
30+
:value="item.id"
31+
>
1532
</el-option>
1633
</el-select>
1734
</el-form-item>
@@ -28,83 +45,85 @@
2845
</template>
2946

3047
<script setup lang="ts">
31-
import {ref, reactive, onBeforeMount} from 'vue'
32-
import type {FormInstance} from 'element-plus'
33-
import {MsgSuccess} from '@/utils/message'
34-
import {t} from '@/locales'
48+
import { ref, reactive, onBeforeMount } from 'vue'
49+
import type { FormInstance } from 'element-plus'
50+
import { MsgSuccess } from '@/utils/message'
51+
import { t } from '@/locales'
3552
import SystemGroupApi from '@/api/system/user-group'
3653
import userManageApi from '@/api/system/chat-user'
37-
import type {ChatUserItem} from '@/api/type/systemChatUser'
38-
import {loadPermissionApi} from "@/utils/dynamics-api/permission-api.ts";
54+
import type { ChatUserItem } from '@/api/type/systemChatUser'
55+
import { loadPermissionApi } from '@/utils/dynamics-api/permission-api.ts'
3956
4057
const emit = defineEmits<{
41-
(e: 'refresh'): void;
42-
}>();
58+
(e: 'refresh'): void
59+
}>()
4360
4461
const dialogVisible = ref<boolean>(false)
4562
const defaultForm = {
46-
user: []
63+
user: [],
4764
}
4865
const form = ref<{ user: string[] }>({
4966
...defaultForm,
5067
})
5168
5269
const optionLoading = ref(false)
5370
const chatUserList = ref<ChatUserItem[]>([])
54-
const originalChatUserList = ref<ChatUserItem[]>([]);
71+
const originalChatUserList = ref<ChatUserItem[]>([])
5572
async function getChatUserList() {
5673
try {
5774
const res = await loadPermissionApi('chatUser').getChatUserList(optionLoading)
58-
originalChatUserList.value = res.data;
59-
chatUserList.value = [...res.data];
75+
originalChatUserList.value = res.data
76+
chatUserList.value = [...res.data]
6077
} catch (e) {
6178
console.error(e)
6279
}
6380
}
6481
6582
const filterUser = (query: string) => {
6683
if (!query) {
67-
chatUserList.value = originalChatUserList.value;
68-
return;
84+
chatUserList.value = originalChatUserList.value
85+
return
6986
}
7087
71-
const q = query.toLowerCase();
88+
const q = query.toLowerCase()
7289
chatUserList.value = originalChatUserList.value.filter(
73-
(item) => item.nick_name?.toLowerCase().includes(q) || item.username?.toLowerCase().includes(q)
74-
);
75-
};
90+
(item) => item.nick_name?.toLowerCase().includes(q) || item.username?.toLowerCase().includes(q),
91+
)
92+
}
7693
7794
onBeforeMount(() => {
7895
getChatUserList()
7996
})
8097
81-
const groupId = ref('');
98+
const groupId = ref('')
8299
83100
function open(id: string) {
84-
form.value = {...defaultForm}
101+
form.value = { ...defaultForm }
85102
groupId.value = id
86103
dialogVisible.value = true
87104
}
88105
89-
const formRef = ref<FormInstance>();
106+
const formRef = ref<FormInstance>()
90107
91108
const rules = reactive({
92-
user: [{required: true, message: t('common.selectPlaceholder'), trigger: 'blur'}],
109+
user: [{ required: true, message: t('common.selectPlaceholder'), trigger: 'blur' }],
93110
})
94111
95112
const loading = ref<boolean>(false)
96113
const submit = async (formEl: FormInstance | undefined) => {
97114
if (!formEl) return
98115
await formEl.validate((valid) => {
99116
if (valid) {
100-
loadPermissionApi('userGroup').postAddMember(groupId.value, {"user_ids": form.value.user}, loading).then(() => {
101-
MsgSuccess(t('common.addSuccess'))
102-
emit('refresh')
103-
dialogVisible.value = false
104-
})
117+
loadPermissionApi('userGroup')
118+
.postAddMember(groupId.value, { user_ids: form.value.user }, loading)
119+
.then(() => {
120+
MsgSuccess(t('common.addSuccess'))
121+
emit('refresh')
122+
dialogVisible.value = false
123+
})
105124
}
106125
})
107126
}
108127
109-
defineExpose({open})
128+
defineExpose({ open })
110129
</script>

ui/src/views/system-resource-management/ApplicationResourceIndex.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
filterable
4747
style="width: 220px"
4848
>
49-
<el-option v-for="u in type_options" :value="u.value" :label="u.label"/>
49+
<el-option v-for="u in type_options" :key="u.id" :value="u.value" :label="u.label"/>
5050
</el-select>
5151
</div>
5252
</div>

ui/src/views/system-resource-management/KnowledgeResourceIndex.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
filterable
4646
style="width: 220px"
4747
>
48-
<el-option v-for="u in type_options" :value="u.value" :label="u.label" />
48+
<el-option v-for="u in type_options" :key="u.id" :value="u.value" :label="u.label" />
4949
</el-select>
5050
</div>
5151
</div>

0 commit comments

Comments
 (0)