fix: workspaceFormItem rules

This commit is contained in:
teukkk 2025-07-01 16:21:46 +08:00
parent 6cfb2a248b
commit 15574bd38d
9 changed files with 24 additions and 15 deletions

View File

@ -40,7 +40,7 @@ import type { WorkspaceItem } from '@/api/type/workspace'
const props = defineProps({ const props = defineProps({
data: { data: {
type: Array, type: Array<any>,
default: () => [], default: () => [],
}, },
currentWorkspace: { currentWorkspace: {

View File

@ -28,7 +28,7 @@ const {
} = route as any } = route as any
const isShared = computed(() => { const isShared = computed(() => {
return folderId === 'shared' || route.name.includes('ResourceManagement') return folderId === 'shared' || route.name?.includes('ResourceManagement')
}) })
const { theme } = useStore() const { theme } = useStore()
const isDefaultTheme = computed(() => { const isDefaultTheme = computed(() => {

View File

@ -177,7 +177,7 @@ const filter_menu_nodes = computed(() => {
if (!search_text.value) return menuNodes; if (!search_text.value) return menuNodes;
const searchTerm = search_text.value.toLowerCase(); const searchTerm = search_text.value.toLowerCase();
return menuNodes.reduce((result, item) => { return menuNodes.reduce((result: any[], item) => {
const filteredList = item.list.filter(listItem => const filteredList = item.list.filter(listItem =>
listItem.label.toLowerCase().includes(searchTerm) listItem.label.toLowerCase().includes(searchTerm)
); );

View File

@ -310,7 +310,7 @@ async function refresh(group?: ListItem) {
if (group) { if (group) {
current.value = group current.value = group
} else { } else {
current.value = list.value.find(item => item.id === current.value.id) current.value = list.value.find(item => item.id === current.value?.id)
} }
} }

View File

@ -4,7 +4,7 @@
<div v-for="(element, index) in form" :key="index" class="flex w-full"> <div v-for="(element, index) in form" :key="index" class="flex w-full">
<el-form-item v-for="model of props.models" :key="model.path" :prop="`[${index}].${model.path}`" <el-form-item v-for="model of props.models" :key="model.path" :prop="`[${index}].${model.path}`"
:rules="model.rules" :label="index === 0 && model.label ? model.label : ''" class="mr-8" style="flex: 1"> :rules="model.rules" :label="index === 0 && model.label ? model.label : ''" class="mr-8" style="flex: 1">
<el-select v-show="!model?.hidden?.(element)" v-model="element[model.path]" <el-select v-if="!model?.hidden?.(element)" v-model="element[model.path]"
:placeholder="model.selectProps?.placeholder ?? $t('common.selectPlaceholder')" clearable filterable :placeholder="model.selectProps?.placeholder ?? $t('common.selectPlaceholder')" clearable filterable
multiple style="width: 100%" collapse-tags collapse-tags-tooltip v-bind="model.selectProps"> multiple style="width: 100%" collapse-tags collapse-tags-tooltip v-bind="model.selectProps">
<el-option v-for="opt in model.selectProps?.options" :key="opt.value" :label="opt.label" <el-option v-for="opt in model.selectProps?.options" :key="opt.value" :label="opt.label"

View File

@ -202,7 +202,7 @@ async function refresh(role?: RoleItem) {
if (role) { if (role) {
currentRole.value = role currentRole.value = role
} else { } else {
currentRole.value = customRoleList.value.find(item => item.id === currentRole.value.id) currentRole.value = customRoleList.value.find(item => item.id === currentRole.value?.id)
} }
} }

View File

@ -137,6 +137,20 @@ async function getWorkspaceFormItem() {
path: 'workspace_ids', path: 'workspace_ids',
label: t('views.role.member.workspace'), label: t('views.role.member.workspace'),
hidden: (e) => adminRoleList.value.find(item => item.id === e.role_id), hidden: (e) => adminRoleList.value.find(item => item.id === e.role_id),
rules: [
{
validator: (rule, value, callback) => {
const match = rule.field?.match(/\[(\d+)\]/);
const isAdmin = adminRoleList.value.some(role => role.id === list.value[parseInt(match?.[1] ?? '', 10)].role_id);
if (!isAdmin && (!value || value.length === 0)) {
callback(new Error(`${t('common.selectPlaceholder')}${t('views.role.member.workspace')}`));
} else {
callback();
}
},
trigger: 'change',
},
],
selectProps: { selectProps: {
options: options:
res.data?.map((item) => ({ res.data?.map((item) => ({
@ -275,7 +289,6 @@ const submit = async (formEl: FormInstance | undefined) => {
...userForm.value, ...userForm.value,
role_setting: list.value role_setting: list.value
} }
console.log(list.value)
if (isEdit.value) { if (isEdit.value) {
userManageApi.putUserManage(userForm.value.id, params, loading).then((res) => { userManageApi.putUserManage(userForm.value.id, params, loading).then((res) => {
emit('refresh') emit('refresh')

View File

@ -125,7 +125,7 @@
<template #default="{ row }"> <template #default="{ row }">
<span @click.stop> <span @click.stop>
<el-switch <el-switch
:disabled="row.role === 'ADMIN'" :disabled="row.role === 'ADMIN' || row.id === user.userInfo?.id"
size="small" size="small"
v-model="row.is_active" v-model="row.is_active"
:before-change="() => changeState(row)" :before-change="() => changeState(row)"
@ -153,7 +153,7 @@
</span> </span>
<span> <span>
<el-button <el-button
:disabled="row.role === 'ADMIN'" :disabled="row.role === 'ADMIN' || row.id === user.userInfo?.id"
type="primary" type="primary"
text text
@click.stop="deleteUserManage(row)" @click.stop="deleteUserManage(row)"

View File

@ -96,11 +96,7 @@
<div class="flex align-center mb-16"> <div class="flex align-center mb-16">
<h4 class="medium">{{ currentWorkspace?.name }}</h4> <h4 class="medium">{{ currentWorkspace?.name }}</h4>
<el-divider direction="vertical" class="mr-8 ml-8" /> <el-divider direction="vertical" class="mr-8 ml-8" />
<AppIcon <el-icon class="color-input-placeholder"><UserFilled /></el-icon>
iconName="app-workspace"
style="font-size: 16px"
class="color-input-placeholder"
></AppIcon>
<span class="color-input-placeholder ml-4"> <span class="color-input-placeholder ml-4">
{{ currentWorkspace?.user_count }} {{ currentWorkspace?.user_count }}
</span> </span>
@ -152,7 +148,7 @@ async function refresh(workspace?: WorkspaceItem) {
if (workspace) { if (workspace) {
currentWorkspace.value = workspace currentWorkspace.value = workspace
} else { } else {
currentWorkspace.value = list.value.find(item => item.id === currentWorkspace.value.id) currentWorkspace.value = list.value.find(item => item.id === currentWorkspace.value?.id)
} }
} }