diff --git a/frontend/src/api/permissions.ts b/frontend/src/api/permissions.ts index 8e340e34..16710775 100644 --- a/frontend/src/api/permissions.ts +++ b/frontend/src/api/permissions.ts @@ -2,3 +2,4 @@ import { request } from '@/utils/request' export const getList = () => request.post('/ds_permission/list') export const savePermissions = (data: any) => request.post('/ds_permission/save', data) +export const delPermissions = (id: any) => request.post(`/ds_permission/delete/${id}`) diff --git a/frontend/src/views/chat/index.vue b/frontend/src/views/chat/index.vue index 29e3ce0c..1f299f20 100644 --- a/frontend/src/views/chat/index.vue +++ b/frontend/src/views/chat/index.vue @@ -758,7 +758,8 @@ onMounted(() => { nextTick(() => { hiddenChatCreatorRef.value?.createChat(_id) }) - // todo remove 'start_chat' in url + const newUrl = window.location.hash.replace(/\?.*$/, '') + history.replaceState({}, '', newUrl) } }) diff --git a/frontend/src/views/system/permission/SelectPermission.vue b/frontend/src/views/system/permission/SelectPermission.vue index 96402030..2a17c632 100644 --- a/frontend/src/views/system/permission/SelectPermission.vue +++ b/frontend/src/views/system/permission/SelectPermission.vue @@ -106,13 +106,17 @@ const handleCheckedWorkspaceChange = (value: CheckboxValueType[]) => { isIndeterminate.value = checkedCount > 0 && checkedCount < workspace.value.length } -const open = async () => { +const open = async (user: any) => { loading.value = true checkedWorkspace.value = [] checkAll.value = false isIndeterminate.value = false const systemWorkspaceList = await workspaceUserList({}, 1, 1000) workspace.value = systemWorkspaceList.items.filter((ele: any) => ele.weight !== 1) as any + if (user?.length) { + checkedWorkspace.value = workspace.value.filter((ele) => user.includes(ele.id + '')) + handleCheckedWorkspaceChange(checkedWorkspace.value) + } loading.value = false centerDialogVisible.value = true } diff --git a/frontend/src/views/system/permission/auth-tree/RowAuth.vue b/frontend/src/views/system/permission/auth-tree/RowAuth.vue index 854b8c1d..df8ab5e9 100644 --- a/frontend/src/views/system/permission/auth-tree/RowAuth.vue +++ b/frontend/src/views/system/permission/auth-tree/RowAuth.vue @@ -58,9 +58,9 @@ const errorDetected = ({ filter_type, field_id, term, value }: any) => { const dfsInit = (arr: any[]) => { const elementList: any[] = [] arr.forEach((ele: any) => { - const { subTree } = ele - if (subTree) { - const { items, logic } = subTree + const { sub_tree } = ele + if (sub_tree) { + const { items, logic } = sub_tree const child = dfsInit(items) elementList.push({ logic, child }) } else { @@ -84,7 +84,7 @@ const dfsSubmit = (arr: any[]) => { const { child = [] } = ele if (child.length) { const { logic } = ele - const subTree = dfsSubmit(child) + const sub_tree = dfsSubmit(child) items.push({ enum_value: [], field_id: '', @@ -92,7 +92,7 @@ const dfsSubmit = (arr: any[]) => { term: '', type: 'tree', value: '', - subTree: { logic, items: subTree }, + sub_tree: { logic, items: sub_tree }, }) } else { const { enum_value, field_id, filter_type, term, value, name } = ele @@ -105,7 +105,7 @@ const dfsSubmit = (arr: any[]) => { term, value, type: 'item', - subTree: null, + sub_tree: null, }) } } diff --git a/frontend/src/views/system/permission/index.vue b/frontend/src/views/system/permission/index.vue index 6521b7db..5e6966cc 100644 --- a/frontend/src/views/system/permission/index.vue +++ b/frontend/src/views/system/permission/index.vue @@ -5,11 +5,12 @@ import icon_add_outlined from '@/assets/svg/icon_add_outlined.svg' import IconOpeEdit from '@/assets/svg/icon_edit_outlined.svg' import IconOpeDelete from '@/assets/svg/icon_delete.svg' import icon_close_outlined from '@/assets/svg/operate/ope-close.svg' +import EmptyBackground from '@/views/dashboard/common/EmptyBackground.vue' import icon_down_outlined from '@/assets/svg/icon_down_outlined.svg' import Card from './Card.vue' import SelectPermission from './SelectPermission.vue' import AuthTree from './auth-tree/RowAuth.vue' -import { getList, savePermissions } from '@/api/permissions' +import { getList, savePermissions, delPermissions } from '@/api/permissions' import { datasourceApi } from '@/api/datasource' import { useI18n } from 'vue-i18n' import { cloneDeep } from 'lodash-es' @@ -116,6 +117,7 @@ const saveAuthTree = (val: any) => { currentPermission.permissions[key], cloneDeep({ expression_tree, + tree: expression_tree, table_id, ds_id, type, @@ -128,7 +130,17 @@ const saveAuthTree = (val: any) => { } } else { currentPermission.permissions.push( - cloneDeep({ expression_tree, table_id, ds_id, type, name, ds_name, table_name }) + cloneDeep({ + expression_tree, + tree: expression_tree, + table_id, + ds_id, + type, + name, + ds_name, + table_name, + id: +new Date(), + }) ) } dialogFormVisible.value = false @@ -142,7 +154,7 @@ const getDsList = (row: any) => { dsListOptions.value = res || [] if (!row?.ds_id) return dsListOptions.value.forEach((ele) => { - if (ele.id === row.ds_id) { + if (+ele.id === +row.ds_id) { activeDs.value = ele } }) @@ -154,7 +166,7 @@ const getDsList = (row: any) => { }) if (row) { - handleDsIdChange(row) + handleDsIdChange({ id: row.ds_id, name: row.ds_name }) handleEditeTable(row.table_id) } } @@ -170,7 +182,7 @@ const handleRowPermission = (row: any) => { table_id, ds_name, table_name, - expression_tree: tree, + expression_tree: typeof tree === 'object' ? tree : JSON.parse(tree), }) } dialogFormVisible.value = true @@ -206,7 +218,7 @@ const handleDsIdChange = (val: any) => { tableListOptions.value = res || [] if (!columnForm.table_id) return tableListOptions.value.forEach((ele) => { - if (ele.id === columnForm.table_id) { + if (+ele.id === +columnForm.table_id) { activeTable.value = ele } }) @@ -215,7 +227,7 @@ const handleDsIdChange = (val: any) => { const handleTableIdChange = (val: any) => { columnForm.table_id = val.id - columnForm.table_name = val.name + columnForm.table_name = val.table_name datasourceApi.fieldList(val.id).then((res: any) => { fieldListOptions.value = res || [] if (columnForm.type === 'row') return @@ -242,6 +254,7 @@ const handleEditeTable = (val: any) => { }) }) .finally(() => { + if (columnForm.type !== 'row') return authTreeRef.value.init(columnForm.expression_tree) }) } @@ -250,10 +263,17 @@ const beforeClose = () => { activeStep.value = 0 isCreate.value = false } + +const searchLoading = ref(false) const handleSearch = () => { - getList().then((res: any) => { - ruleList.value = res || [] - }) + searchLoading.value = true + getList() + .then((res: any) => { + ruleList.value = res || [] + }) + .finally(() => { + searchLoading.value = false + }) } handleSearch() const addHandler = () => { @@ -280,13 +300,48 @@ const handleEditRule = (row: any) => { Object.assign(currentPermission, cloneDeep(row)) ruleConfigvVisible.value = true } + +const deleteRuleHandler = (row: any) => { + ElMessageBox.confirm(t('permission.rule_rule_1', { msg: row.name }), { + confirmButtonType: 'danger', + confirmButtonText: t('dashboard.delete'), + cancelButtonText: t('common.cancel'), + customClass: 'confirm-no_icon', + autofocus: false, + }).then(() => { + currentPermission.permissions = currentPermission.permissions.filter( + (ele: any) => ele.id !== row.id + ) + }) +} + const deleteHandler = (row: any) => { - console.log(row) + ElMessageBox.confirm(t('permission.rule_group_1', { msg: row.name }), { + confirmButtonType: 'danger', + confirmButtonText: t('dashboard.delete'), + cancelButtonText: t('common.cancel'), + customClass: 'confirm-no_icon', + autofocus: false, + }).then(() => { + delPermissions(row.id).then(() => { + ElMessage({ + type: 'success', + message: t('dashboard.delete_success'), + }) + handleSearch() + }) + }) } const setUser = (row: any) => { editRule.value = 2 setDrawerTitle() - console.log(row) + isCreate.value = false + Object.assign(currentPermission, cloneDeep(row)) + activeStep.value = 1 + ruleConfigvVisible.value = true + nextTick(() => { + selectPermissionRef.value.open(row.users) + }) } const rules = { @@ -317,6 +372,7 @@ const saveHandler = () => { currentPermission.permissions[key], cloneDeep({ permissions, + permission_list: permissions, table_id, ds_id, type, @@ -329,7 +385,17 @@ const saveHandler = () => { } } else { currentPermission.permissions.push( - cloneDeep({ permissions, table_id, ds_id, type, name, ds_name, table_name }) + cloneDeep({ + permissions, + permission_list: permissions, + table_id, + ds_id, + type, + name, + ds_name, + table_name, + id: +new Date(), + }) ) } } @@ -337,26 +403,30 @@ const saveHandler = () => { } }) } -const preview = () => {} +const preview = () => { + currentPermission.user = selectPermissionRef.value.checkedWorkspace.map((ele: any) => ele.id) + activeStep.value = 0 +} const next = () => { - activeStep.value = 1 - nextTick(() => { - selectPermissionRef.value.open() + termFormRef.value.validate((res: any) => { + if (res) { + activeStep.value = 1 + nextTick(() => { + selectPermissionRef.value.open(currentPermission.users) + }) + } }) } const savePermission = () => { - // termFormRef.value.validate((res: any) => { - // if (res) { - - // } - // }) - const { id, name, permissions } = currentPermission + const permissionsObj = permissions.map((ele: any) => { return { ...cloneDeep(ele), - permissions: JSON.stringify(ele.permissions || []), - expression_tree: JSON.stringify(ele.expression_tree || {}), + permissions: ele.type !== 'row' ? JSON.stringify(ele.permissions || []) : JSON.stringify([]), + permission_list: [], + expression_tree: + ele.type === 'row' ? JSON.stringify(ele.expression_tree || {}) : JSON.stringify({}), } }) const obj = { @@ -373,7 +443,7 @@ const savePermission = () => { type: 'success', message: t('common.save_success'), }) - ruleConfigvVisible.value = false + beforeClose() handleSearch() }) } @@ -397,7 +467,7 @@ const columnRules = {