diff --git a/core/core-frontend/src/api/permission/menu.ts b/core/core-frontend/src/api/permission/menu.ts new file mode 100644 index 0000000..345393a --- /dev/null +++ b/core/core-frontend/src/api/permission/menu.ts @@ -0,0 +1,7 @@ +import request from '@/config/axios' + +export const getMenuTree = params => request.post({ url: '/menuInterface/getMenuTree', params }) // 查询菜单 +export const addMenu = data => request.post({ url: '/menuInterface/addMenu', data }) // 新增菜单 +export const updateMenuById = data => request.post({ url: '/menuInterface/updateMenuById', data }) //修改菜单 +export const deleteMenuById = id => request.post({ url: '/menuInterface/deleteMenuById?id=' + id }) //删除菜单 +export const setModuleId = params => request.post({ url: '/menuInterface/setModuleId',params }) //关联模块 \ No newline at end of file diff --git a/core/core-frontend/src/api/permission/organization.ts b/core/core-frontend/src/api/permission/organization.ts index b9fb0f9..1dcd7a2 100644 --- a/core/core-frontend/src/api/permission/organization.ts +++ b/core/core-frontend/src/api/permission/organization.ts @@ -1,9 +1,8 @@ import request from '@/config/axios' -import { param } from 'jquery' export const getOrganizations = params => request.post({ url: '/organization/getOrganizations', params }) // 查询企业/部门 export const addOrganization = data => request.post({ url: '/organization/addOrganization', data }) // 新增企业/部门 export const updateOrganizationById = data => request.post({ url: '/organization/updateOrganizationById', data }) //修改企业/部门 export const setIsValid = params => request.post({ url: '/organization/setIsValid', params }) //设置有效状态 export const deleteById = id => request.delete({ url: '/organization/deleteById?id=' + id }) //删除 -export const getOrganizationById = data => request.post({ url: '/organization/getOrganizationById', data })//根据id查询部门 +export const getOrganizationById = appId => request.post({ url: '/organization/listOrganization?appId=' + appId })//查询所有 diff --git a/core/core-frontend/src/api/permission/role.ts b/core/core-frontend/src/api/permission/role.ts index 77f23c4..e4e6f1b 100644 --- a/core/core-frontend/src/api/permission/role.ts +++ b/core/core-frontend/src/api/permission/role.ts @@ -5,4 +5,6 @@ export const addRole = data => request.post({ url: '/role/addRole', data }) // export const updateRole = data => request.post({ url: '/role/updateRole', data }) //修改企业/部门 export const setIsValid = params => request.post({ url: '/role/setIsvaild', params }) //设置有效状态 export const deleteRoleById = id => request.post({ url: '/role/deleteRoleById?id=' + id }) //删除 -export const deleteRoleByIds = id => request.post({ url: '/role/deleteRoleByIds?ids=' + id }) //删除 \ No newline at end of file +export const deleteRoleByIds = id => request.post({ url: '/role/deleteRoleByIds?ids=' + id }) //删除 +export const permissionAssignment = params => request.post({ url: '/menuInterface/permissionAssignment', params }) //查询角色权限 +export const setMenuByRoleId = params => request.post({ url: '/role/setMenuByRoleId', params }) //设置角色权限 diff --git a/core/core-frontend/src/api/permission/user.ts b/core/core-frontend/src/api/permission/user.ts index 77f23c4..eda4bc6 100644 --- a/core/core-frontend/src/api/permission/user.ts +++ b/core/core-frontend/src/api/permission/user.ts @@ -1,8 +1,9 @@ import request from '@/config/axios' -export const listRole = params => request.post({ url: '/role/listRole', params }) // 查询角色 -export const addRole = data => request.post({ url: '/role/addRole', data }) // 新增角色 -export const updateRole = data => request.post({ url: '/role/updateRole', data }) //修改企业/部门 -export const setIsValid = params => request.post({ url: '/role/setIsvaild', params }) //设置有效状态 -export const deleteRoleById = id => request.post({ url: '/role/deleteRoleById?id=' + id }) //删除 -export const deleteRoleByIds = id => request.post({ url: '/role/deleteRoleByIds?ids=' + id }) //删除 \ No newline at end of file +export const queryUsers = params => request.get({ url: '/user/queryUsers', params }) // 查询用户 +export const addUser = data => request.post({ url: '/user/addUser', data }) // 新增用户 +export const updateUser = data => request.post({ url: '/user/updateUser', data }) //修改用户 +export const setStatus = params => request.post({ url: '/user/setStatus', params }) //设置有效状态 +export const deleteUserById = id => request.post({ url: '/user/deleteUserById?id=' + id }) //删除 +export const deleteUserByIds = id => request.post({ url: '/user/deleteUserByIds?ids=' + id }) //删除 +export const resetPassword = id => request.post({ url: '/user/resetPassword?id=' + id }) //重置密码 \ No newline at end of file diff --git a/core/core-frontend/src/assets/svg/menuconfig_treeadd_white.svg b/core/core-frontend/src/assets/svg/menuconfig_treeadd_white.svg new file mode 100644 index 0000000..bd5e1d9 --- /dev/null +++ b/core/core-frontend/src/assets/svg/menuconfig_treeadd_white.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/core/core-frontend/src/assets/svg/reset_password_blue.svg b/core/core-frontend/src/assets/svg/reset_password_blue.svg new file mode 100644 index 0000000..0028219 --- /dev/null +++ b/core/core-frontend/src/assets/svg/reset_password_blue.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/core/core-frontend/src/assets/svg/user_connect_white.svg b/core/core-frontend/src/assets/svg/user_connect_white.svg new file mode 100644 index 0000000..bc107b3 --- /dev/null +++ b/core/core-frontend/src/assets/svg/user_connect_white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/core/core-frontend/src/router/index.ts b/core/core-frontend/src/router/index.ts index 49ca9f8..ab66a0e 100644 --- a/core/core-frontend/src/router/index.ts +++ b/core/core-frontend/src/router/index.ts @@ -212,6 +212,13 @@ export const routes: AppRouteRecordRaw[] = [ hidden: true, meta: {}, component: () => import('@/viewsnew/application/permissionset/index.vue') + }, + { + path: '/menuconfig', + name: 'menuconfig', + hidden: true, + meta: {}, + component: () => import('@/viewsnew/application/menuconfig/index.vue') } ] diff --git a/core/core-frontend/src/viewsnew/application/addpopup.vue b/core/core-frontend/src/viewsnew/application/addpopup.vue index 8eccee9..97493b2 100644 --- a/core/core-frontend/src/viewsnew/application/addpopup.vue +++ b/core/core-frontend/src/viewsnew/application/addpopup.vue @@ -277,14 +277,12 @@ const handleAvatarSuccess = file => { } .ed-dialog__headerbtn{ color: #ffffff; + top: 11px !important; + right: 15px !important; } .ed-dialog__title{ color: #ffffff; } -.ed-dialog__headerbtn{ - top: 10px !important; - right: 15px !important; -} .ed-dialog { border: 1px solid #4f5052; border-radius: 4px; diff --git a/core/core-frontend/src/viewsnew/application/index.vue b/core/core-frontend/src/viewsnew/application/index.vue index ae4b6d9..94c09b8 100644 --- a/core/core-frontend/src/viewsnew/application/index.vue +++ b/core/core-frontend/src/viewsnew/application/index.vue @@ -104,7 +104,7 @@ function delClick(row){ - + diff --git a/core/core-frontend/src/viewsnew/application/menuconfig/assocmenu.vue b/core/core-frontend/src/viewsnew/application/menuconfig/assocmenu.vue new file mode 100644 index 0000000..9c61ce8 --- /dev/null +++ b/core/core-frontend/src/viewsnew/application/menuconfig/assocmenu.vue @@ -0,0 +1,557 @@ + + + + \ No newline at end of file diff --git a/core/core-frontend/src/viewsnew/application/menuconfig/assocmodule.vue b/core/core-frontend/src/viewsnew/application/menuconfig/assocmodule.vue new file mode 100644 index 0000000..2c043d8 --- /dev/null +++ b/core/core-frontend/src/viewsnew/application/menuconfig/assocmodule.vue @@ -0,0 +1,119 @@ + + + \ No newline at end of file diff --git a/core/core-frontend/src/viewsnew/application/menuconfig/header.vue b/core/core-frontend/src/viewsnew/application/menuconfig/header.vue new file mode 100644 index 0000000..0910b53 --- /dev/null +++ b/core/core-frontend/src/viewsnew/application/menuconfig/header.vue @@ -0,0 +1,104 @@ + + + + diff --git a/core/core-frontend/src/viewsnew/application/menuconfig/index.vue b/core/core-frontend/src/viewsnew/application/menuconfig/index.vue new file mode 100644 index 0000000..058f0c9 --- /dev/null +++ b/core/core-frontend/src/viewsnew/application/menuconfig/index.vue @@ -0,0 +1,634 @@ + + + + + + \ No newline at end of file diff --git a/core/core-frontend/src/viewsnew/application/module/Leftmenu/index.vue b/core/core-frontend/src/viewsnew/application/module/Leftmenu/index.vue index 89f6053..c8d39f0 100644 --- a/core/core-frontend/src/viewsnew/application/module/Leftmenu/index.vue +++ b/core/core-frontend/src/viewsnew/application/module/Leftmenu/index.vue @@ -259,7 +259,6 @@ function delTreeClic(){ // 删除 height: 24px;"> -
-import { ref, onMounted,reactive} from 'vue' +import { ref, onMounted,nextTick} from 'vue' import permission_table_edit_blue from '@/assets/svg/permission_table_edit_blue.svg' import permission_table_del_blue from '@/assets/svg/permission_table_del_blue.svg' import perission_role_blue from '@/assets/svg/perission_role_blue.svg' import icon_add from '@/assets/svg/add_white.svg' -import type { FormInstance, FormRules } from 'element-plus' -import { ElMessage, ElMessageBox } from 'element-plus' +import type { FormInstance } from 'element-plus' import { Delete } from '@element-plus/icons-vue' -import { ElTable } from 'element-plus' -import { listRole,addRole,updateRole,setIsValid,deleteRoleById,deleteRoleByIds } from '@/api/permission/role' +import { ElTable,ElTree,ElMessage, ElMessageBox } from 'element-plus' +import { listRole,addRole,updateRole,setIsValid,deleteRoleById,deleteRoleByIds,permissionAssignment,setMenuByRoleId } from '@/api/permission/role' const props = defineProps({ applicationId:String }) @@ -34,6 +33,18 @@ const typeoptions = ref([ { value: '1', label: '管理员' }, { value: '2', label: '普通用户' }, ]) +const configdialog = ref(false) +const treeData:any = ref([]) +const defaultProps = { + children: 'children', + label: 'name' +} +const treeloading = ref(false); +const treeRef = ref>() +const currenttableid = ref('') +const Passparameter = ref([]) +//默认展开节点的key数组 +const DefaultDeployment: any = ref([]) const submitForm = (formEl: FormInstance | undefined) => { if (!formEl) return formEl.validate((valid) => { @@ -83,7 +94,23 @@ onMounted(() => { gettable() }) function permissionset(row:any){ - + currenttableid.value = row.id + configdialog.value = true + treeloading.value = true + const params = { + roleId: row.id, + appId: props.applicationId, + } + permissionAssignment(params).then(res => { + treeData.value = res.data + let ids: any = [] + menuChange(res.data, ids) + nextTick(() => { + treeRef.value!.setCheckedKeys(ids) + }) + treeloading.value = false + }) + } function gettable(){ tableloading.value = true @@ -190,7 +217,6 @@ function setisValid(row:any){ isvaild:row.isvaild } setIsValid(params).then(res => { - console.log(res,'res') if(res.code == '0'){ gettable() ElMessage.success('设置成功') @@ -200,6 +226,38 @@ function setisValid(row:any){ tableloading.value = false }) } +function confighandleClose(){ + configdialog.value = false +} +function consfigsubmit(){ + const params = { + id: currenttableid.value, + menuIds: Passparameter.value.join(',') + } + setMenuByRoleId(params).then(res => { + if(res.code == '0'){ + gettable() + ElMessage.success('设置成功') + }else{ + ElMessage.error('设置失败') + } + }) + configdialog.value = false +} +function currentChecked(nodeObj: any, SelectedObj: any){ + Passparameter.value = SelectedObj.checkedKeys.concat(SelectedObj.halfCheckedKeys) +} +function menuChange(data: any, ids: any) { + data.forEach((item: any) => { + if (item.checkinfo == true) { + ids.push(item.id) + DefaultDeployment.value.push(item.id) + } + if (item.children) { + menuChange(item.children, ids) + } + }) +} + + + + +
@@ -323,4 +393,31 @@ function setisValid(row:any){ .ed-select-dropdown__item.selected{ color: #0089ff; } + .el-tree{ + background:#212121; + color: #ffffff; + font-size: 14px; + } + .el-tree-node__content{ + height: 40px; + line-height: 40px; + } + .el-tree-node__content:hover{ + background: rgba(61,158, 255, 0.1); + color: #0089FF; + } + .el-tree-node:focus>.el-tree-node__content{ + background:#212121; + color: #ffffff; + } + .el-text{ + color: #ffffff; + } + .el-tree-node__expand-icon{ + color: #ffffff; + } + .el-checkbox__inner{ + background:#212121; + border-color:#636363; + } \ No newline at end of file diff --git a/core/core-frontend/src/viewsnew/application/permissionset/user/index.vue b/core/core-frontend/src/viewsnew/application/permissionset/user/index.vue index ec5c3ef..c95aad7 100644 --- a/core/core-frontend/src/viewsnew/application/permissionset/user/index.vue +++ b/core/core-frontend/src/viewsnew/application/permissionset/user/index.vue @@ -1,76 +1,81 @@ @@ -406,35 +420,46 @@ function depthandleClose() { align-items: center; justify-content: center; } - :deep(.ed-tree){ + :deep(.el-tree){ background:#212121; - height: calc(100vh - 210px); - margin-top: 20px; + height: calc(100vh - 145px); + overflow: auto; + margin-top: 5px; color: #ffffff; font-size: 14px; } - :deep(.ed-tree-node__content){ + :deep(.el-tree-node__content){ height: 40px; line-height: 40px; } - :deep(.ed-tree-node__content:hover){ + :deep(.el-tree-node__content:hover){ background: rgba(61,158, 255, 0.1); color: #0089FF; } - :deep(.ed-tree--highlight-current .ed-tree-node.is-current>.ed-tree-node__content){ + :deep(.custom-tree-node){ + flex: 1; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 14px; + padding-right: 8px; + } + :deep(.el-tree-node__content>.ed-tree-node__expand-icon){ + padding: 2px; + } + :deep(.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content){ background: #409eff; color: #ffffff; } - :deep(.custom-tree-node){ - flex: 1; - display: flex; - align-items: center; - justify-content: space-between; - font-size: 14px; - padding-right: 8px; + :deep(.el-tree-node:focus>.el-tree-node__content){ + background:#212121; + color: #ffffff; } - :deep(.ed-tree-node__content>.ed-tree-node__expand-icon){ - padding: 2px; + :deep(.el-text){ + color: #ffffff; + } + :deep(.el-tree-node__expand-icon){ + color: #ffffff; } } .organization-rightbox{ @@ -579,5 +604,45 @@ function depthandleClose() { box-shadow: none; border: 1px solid #0089ff; } - + .ed-pagination__total{ + color: #F2F4F5; + } + .ed-pagination__jump{ + color: #F2F4F5; + } + .ed-pagination .ed-pager li{ + background: #252626; + border: 1px solid #434343 !important; + color:#fff !important; + } + .ed-pagination .ed-pager li:hover{ + background: #252626; + } + .ed-pagination button.is-disabled, .ed-pagination button:disabled { + color: #787878; + background-color: #252626; + border-color: #636363 !important; + } + .ed-pagination .btn-next[aria-disabled=true]:active, .ed-pagination .btn-next[aria-disabled=true]:hover, .ed-pagination .btn-prev[aria-disabled=true]:active, .ed-pagination .btn-prev[aria-disabled=true]:hover{ + color: #bbbfc4 !important; + background-color: #252626 !important; + border-color: #636363 !important; + } + .ed-pagination__jump{ + color:#fff !important; + } + .ed-pagination .btn-next:hover, .ed-pagination .btn-prev:hover{ + background: #252626 !important; + border: 1px solid #0089ff !important; + color:#0089ff !important; + } + .ed-pagination button{ + background: #252626; + border: 1px solid #434343 !important; + color:#fff !important; + } + .ed-pagination.is-background .btn-next.is-active, .ed-pagination.is-background .btn-prev.is-active, .ed-pagination.is-background .ed-pager li.is-active { + border-color: #0089ff !important; + color: #0089ff !important; + } \ No newline at end of file diff --git a/core/core-frontend/src/viewsnew/application/service/dataset/form/CalcFieldEdit.vue b/core/core-frontend/src/viewsnew/application/service/dataset/form/CalcFieldEdit.vue index f3c3f2c..cf4e32e 100644 --- a/core/core-frontend/src/viewsnew/application/service/dataset/form/CalcFieldEdit.vue +++ b/core/core-frontend/src/viewsnew/application/service/dataset/form/CalcFieldEdit.vue @@ -899,14 +899,13 @@ initFunction() border-bottom: 1px solid #333333; margin-right: 0px; } -.ed-dialog__headerbtn{ - color: #ffffff; -} .ed-dialog__title{ color: #ffffff; } .ed-dialog__headerbtn{ - top: 13px !important; + top: 11px !important; + right: 15px !important; + color: #ffffff; } .ed-dialog { border: 1px solid #5f5f5f; diff --git a/core/core-frontend/src/viewsnew/application/service/dataset/index.vue b/core/core-frontend/src/viewsnew/application/service/dataset/index.vue index fe4b3d3..4e19c07 100644 --- a/core/core-frontend/src/viewsnew/application/service/dataset/index.vue +++ b/core/core-frontend/src/viewsnew/application/service/dataset/index.vue @@ -1726,13 +1726,12 @@ border-right: 1px solid rgba(54, 54, 54, 1) } .ed-dialog__headerbtn{ color: #ffffff; + top: 11px !important; + right: 15px !important; } .ed-dialog__title{ color: #ffffff; } -.ed-dialog__headerbtn{ - top: 13px !important; -} .ed-dialog { border: 1px solid #5f5f5f; border-radius: 4px; diff --git a/core/core-frontend/src/viewsnew/application/service/datasource/index.vue b/core/core-frontend/src/viewsnew/application/service/datasource/index.vue index 0fdad9f..6c78663 100644 --- a/core/core-frontend/src/viewsnew/application/service/datasource/index.vue +++ b/core/core-frontend/src/viewsnew/application/service/datasource/index.vue @@ -2512,7 +2512,8 @@ border-right: 1px solid rgba(54, 54, 54, 1); color: #ffffff; } .ed-dialog__headerbtn{ - top: 13px !important; + top: 11px !important; + right: 15px !important; } .ed-dialog { border: 1px solid #5f5f5f;