From df432367c6a0b6a7435507c43202a94449a8fa92 Mon Sep 17 00:00:00 2001 From: "1147680382@qq.com" Date: Fri, 23 May 2025 09:11:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=80=83=E5=8B=A4=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E5=8A=9F=E8=83=BD=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/modules/index.js | 54 ++ src/layout/menu/index.vue | 3 +- src/layout/menu/menuTable.js | 15 + src/router/generateMenu.js | 66 ++ src/router/originalRoutingTable.js | 68 +- .../performance/attendance/finance/index.vue | 475 +++++++++++++ .../performance/attendance/general/index.vue | 145 ++-- .../performance/attendance/manager/index.vue | 656 ++++++++++++++++++ .../performance/attendance/reviewed/index.vue | 653 +++++++++++++++++ 9 files changed, 2078 insertions(+), 57 deletions(-) create mode 100644 src/router/generateMenu.js create mode 100644 src/views/performance/attendance/finance/index.vue create mode 100644 src/views/performance/attendance/manager/index.vue create mode 100644 src/views/performance/attendance/reviewed/index.vue diff --git a/src/api/modules/index.js b/src/api/modules/index.js index 6ebf3a1..bf6aa5b 100644 --- a/src/api/modules/index.js +++ b/src/api/modules/index.js @@ -156,3 +156,57 @@ export function updateAbnormalAttendance(data) { data }); } + +// 获取综合部复审列表 +export function getReviewedAttendanceList(params) { + return service({ + url: '/performance/attendance/reviewed/list', + method: 'get', + params + }); +} + +// 综合部复审审批 +export function reviewAttendance(data) { + return service({ + url: '/performance/attendance/general/review', + method: 'put', + data + }); +} + +// 获取主管审批列表 +export function getManagerAttendanceList(params) { + return service({ + url: '/performance/attendance/manager/list', + method: 'get', + params + }); +} + +// 主管审批 +export function approveManagerAttendance(data) { + return service({ + url: '/performance/attendance/manager/approve', + method: 'put', + data + }); +} + +// 主管修改绩效 +export function updateManagerAttendanceDetail(data) { + return service({ + url: '/performance/attendance/manager/detail', + method: 'put', + data + }); +} + +// 获取财务查看考勤列表 +export const getFinanceAttendanceList = (params) => { + return service({ + url: '/performance/attendance/finance/list', + method: 'get', + params + }); +}; diff --git a/src/layout/menu/index.vue b/src/layout/menu/index.vue index a19cc7f..8fabdea 100644 --- a/src/layout/menu/index.vue +++ b/src/layout/menu/index.vue @@ -36,8 +36,9 @@ import { computed, onMounted, reactive, ref } from "vue"; import store from "../../store/index.js"; import menuItems from "./components/menuItems.vue"; // 引入本地路由表渲染导航栏 -import menuTable from "./menuTable.js"; +// import menuTable from "./menuTable.js"; import { useRouter, useRoute } from "vue-router"; +import {menuTable} from "../../router/generateMenu.js" const route = useRoute(); const activeMenu = computed(() => { return route.path; diff --git a/src/layout/menu/menuTable.js b/src/layout/menu/menuTable.js index 66c7bb6..899031c 100644 --- a/src/layout/menu/menuTable.js +++ b/src/layout/menu/menuTable.js @@ -14,5 +14,20 @@ const menuTable = [ url: "/performance/attendance/general", icon: "Notebook", }, + { + title: "主管审批列表", + url: "/performance/attendance/manager", + icon: "Notebook", + }, + { + title: "综合部复审列表", + url: "/performance/attendance/reviewed", + icon: "Notebook", + }, + { + title: "财务考勤列表", + url: "/performance/attendance/finance", + icon: "Notebook", + }, ]; export default menuTable; diff --git a/src/router/generateMenu.js b/src/router/generateMenu.js new file mode 100644 index 0000000..939e3be --- /dev/null +++ b/src/router/generateMenu.js @@ -0,0 +1,66 @@ +import routerList from "./originalRoutingTable"; +// 递归处理路由列表生成菜单数据 +export const generateMenu = (routes, userRole) => { + const menuList = []; + + // 递归处理路由 + const processRoute = (route) => { + // 检查路由是否需要权限验证 + if (route.meta && route.meta.requiresAuth) { + // 检查用户角色是否有权限访问 + if (route.meta.roles && !route.meta.roles.includes(userRole)) { + return null; + } + + const menuItem = { + title: route.meta.name, + path: route.path, + name: route.name, + meta: route.meta, + url: route.url || route.path + }; + + // 如果有子路由,递归处理 + if (route.children && route.children.length > 0) { + const children = route.children + .map(child => processRoute(child)) + .filter(child => child !== null); + + if (children.length > 0) { + // 如果只有一个子路由,将其提升为一级菜单 + if (children.length === 1) { + const child = children[0]; + return { + title: child.meta.name, + path: child.path, + name: child.name, + meta: child.meta, + url: child.url || child.path + }; + } + menuItem.children = children; + } + } + + return menuItem; + } + return null; + }; + + // 处理所有路由 + routes.forEach(route => { + const menuItem = processRoute(route); + if (menuItem) { + menuList.push(menuItem); + } + }); + + return menuList; +}; +export const menuTable = generateMenu(routerList, 1) +// 使用示例 +/* +const userRole = 2; // 用户角色 +const menuList = generateMenu(routerList, userRole); +console.log(menuList); +*/ \ No newline at end of file diff --git a/src/router/originalRoutingTable.js b/src/router/originalRoutingTable.js index 59d2a63..4d1e430 100644 --- a/src/router/originalRoutingTable.js +++ b/src/router/originalRoutingTable.js @@ -1,15 +1,14 @@ // 模板自带的功能路由表 -import login from "../views/login/index.vue"; -import Layout from "../layout/index.vue"; + const routerList = [ { path: "/login", - name: login, - component: login, + name: "login", + component: () => import("../views/login/index.vue"), }, { path: "/", - component: Layout, + component: () => import("../layout/index.vue"), name: "container", redirect: "home", meta: { @@ -31,7 +30,7 @@ const routerList = [ { path: "/group", name: "employe", - component: Layout, + component: () => import("../layout/index.vue"), meta: { requiresAuth: true, //有一些页面是否登录才能进去 name: "组别管理", @@ -49,27 +48,64 @@ const routerList = [ ], }, { - path: '/performance', - component: Layout, - name: 'Performance', + path: '/performance/attendance', + component: () => import("../layout/index.vue"), + redirect: '/performance/attendance/general', + name: 'PerformanceAttendance', meta: { - name: "绩效考勤", title: '绩效考勤', icon: 'el-icon-s-data', - roles: [2] // 只有role=2的用户可以查看 + name: "绩效考勤", + requiresAuth: true, + roles: [1, 2, 3] // 所有角色都可以访问 }, children: [ { - path: 'attendance/general', - name: 'AttendanceGeneral', + path: '/general', + name: 'GeneralAttendance', component: () => import('../views/performance/attendance/general/index.vue'), meta: { - name: "综合部初审列表", title: '综合部初审列表', - roles: [2] // 只有role=2的用户可以查看 + name: "综合部初审列表", + requiresAuth: true, + // roles: [2] // 只有role=2的用户可以查看 + } + }, + { + path: '/manager', + name: 'ManagerAttendance', + component: () => import('../views/performance/attendance/manager/index.vue'), + meta: { + title: '主管审批列表', + name: "主管审批列表", + requiresAuth: true, + // roles: [1] // 只有role=1的用户可以查看 + } + }, + { + path: '/reviewed', + name: 'ReviewedAttendance', + component: () => import('../views/performance/attendance/reviewed/index.vue'), + meta: { + title: '综合部复审列表', + name: "综合部复审列表", + requiresAuth: true, + // roles: [2] // 只有role=2的用户可以查看 + } + }, + { + path: '/finance', + name: 'FinanceAttendance', + component: () => import('../views/performance/attendance/finance/index.vue'), + meta: { + title: '财务查看考勤列表', + name: "财务查看考勤列表", + requiresAuth: true, + // roles: [3] // 只有role=3的用户可以查看 } } ] - }, + } ]; + export default routerList; diff --git a/src/views/performance/attendance/finance/index.vue b/src/views/performance/attendance/finance/index.vue new file mode 100644 index 0000000..639fde8 --- /dev/null +++ b/src/views/performance/attendance/finance/index.vue @@ -0,0 +1,475 @@ + + + + + \ No newline at end of file diff --git a/src/views/performance/attendance/general/index.vue b/src/views/performance/attendance/general/index.vue index c779354..49a533d 100644 --- a/src/views/performance/attendance/general/index.vue +++ b/src/views/performance/attendance/general/index.vue @@ -82,13 +82,6 @@ - - -