From e423d8afcf5b9666e166565d0509b621ebab17e7 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 13 一月 2025 14:11:00 +0800 Subject: [PATCH] !172 合并 warmflow 功能分支 * update 优化 流程定义页面 点击复制之后跳转到未发布列表 * update 优化 流程定义页面 增加加载loading层 * fix: v-model处理有延迟 需要手动处理 * update 调整流程定义查询 * Merge remote-tracking branch 'origin/dev' into warm-flw-future * update 调整可驳回的节点 * update: 调整文案 * update: 激活/挂起改为switch操作 * update 优化 代码删除无用输出 * update 统一抄送人使用昵称展示 * update 调整分类接口 * update 统一业务id参数 * update 删除默认顶节点 * !168 优化流程分类 * update 恢复误删除代码 * update 优化流程分类 * update 修复 路由跳转未改全 * [update] * fix 修复一些问题 * update 重构流程分类表 * update 流程定义增加表单路径与编辑功能 修复一些其他bug * fix 修复 一些问题 * update 变量统一命名 * add 增加示例 * Merge branch 'warm-flw-future' of https://gitee.com/JavaLionLi/plus-ui… * update 调整办理人 * Merge remote-tracking branch 'origin/dev' into warm-flw-future * add 增加示例 * update 调整审批记录 添加流程导出 * remove 删除无用代码 * remove 删除无用代码 * [update] * [fix] * 流程干预删除委托 * 增加附件 * 附件修改 * 申请人查询修改 * 1.修改查询条件 * !167 fix 修复 import路径修改不全问题 * fix 修复 import路径修改不全问题 * !166 update 清除 ProcessPreview 引用 * update 清除 ProcessPreview 引用 * remove 删除 bpmn.js 设计器 * remove 删除 bpmn.js 设计器 * remove 删除 bpmn.js 设计器 * remove 删除 bpmn.js 设计器 * fix 修复 前端路径修改不全问题 * update 优化接口请求路径 * add 添加作废 * add 添加流程干预 * update 调整加签,减签 * update 调整加签,减签 * add 增加流程查看 * update 调整委托,转办 * update 调整流程变量显示 * update 调整办理人修改 * update 调整流程实例状态页面 * update 调整已办页面 * add 添加流程撤销 * update 调整任务,流程实例 ,流程定义页面 * Merge branch 'dev' into warm-flw-future * update 调整流程定义页面 * add 添加流程变量查看 * update 调整设计器路由名称 * update 调整办理人 * update 调整设计器uri * update 调整设计器请求uri 调整待办状态 * update 调整办理 驳回 终止等状态 * add 添加模型新增 * add 添加warm-ui设计器,删除无用代码 * Merge remote-tracking branch 'origin/dev' into warm-flw-future * add 添加流程设计 * update 调整驳回 * update 调整视图类型错误 * Merge branch 'warm-flw-future' of https://gitee.com/JavaLionLi/plus-ui… * 添加已办,未办 * Merge remote-tracking branch 'origin/dev' into warm-flw-future * update 调整流程实例,待办查询 * add 添加代办人,调整提交按钮校验 * update 调整流程定义查询 * add添加流程定义激活 挂起 * add 添加流程文件部署 调整流程发布 * update 优化 时间搜索组件统一 * Merge remote-tracking branch 'origin/dev' into warm-flw-future * fix 修复 用户管理编辑安全权限错误问题 * Merge remote-tracking branch 'origin/dev' into warm-flw-future * update 优化 类型报错问题 * update 优化 切换租户后刷新首页 * update 优化 实现表格行选中切换 * update 优化 使用 vueuse 重构 websocket 实现 * update 优化 使用 vueuse 重构 websocket 实现 * fix 修复 登出后重新登录 sse推送报错问题 * reset 回滚 代码修改 采用其他方案 * fix 修复 登出后重新登录 sse推送报错问题 * update 优化 删除无用代码 * update element-plus 2.7.5 => 2.7.8 * reset 回滚 错误修复 * update 优化 代码生成器编辑页禁用缓存 防止同步后页面不更新问题 * fix 修复 代码生成同步点击取消报错问题 * 初始化添加warm-flow --- src/components/TopNav/index.vue | 158 ++++++++++++++++++++++++++++------------------------ 1 files changed, 86 insertions(+), 72 deletions(-) diff --git a/src/components/TopNav/index.vue b/src/components/TopNav/index.vue index ac1d2e5..cfe2cd7 100644 --- a/src/components/TopNav/index.vue +++ b/src/components/TopNav/index.vue @@ -1,162 +1,163 @@ <template> - <el-menu - :default-active="activeMenu" - mode="horizontal" - @select="handleSelect" - :ellipsis="false" - > + <el-menu :default-active="activeMenu" mode="horizontal" :ellipsis="false" @select="handleSelect"> <template v-for="(item, index) in topMenus"> - <el-menu-item :style="{'--theme': theme}" :index="item.path" :key="index" v-if="index < visibleNumber" - ><svg-icon :icon-class="item.meta.icon" /> - {{ item.meta.title }}</el-menu-item + <el-menu-item v-if="index < visibleNumber" :key="index" :style="{ '--theme': theme }" :index="item.path" + ><svg-icon v-if="item.meta && item.meta.icon && item.meta.icon !== '#'" :icon-class="item.meta ? item.meta.icon : ''" /> + {{ item.meta?.title }}</el-menu-item > </template> <!-- 椤堕儴鑿滃崟瓒呭嚭鏁伴噺鎶樺彔 --> - <el-sub-menu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber"> + <el-sub-menu v-if="topMenus.length > visibleNumber" :style="{ '--theme': theme }" index="more"> <template #title>鏇村鑿滃崟</template> <template v-for="(item, index) in topMenus"> - <el-menu-item - :index="item.path" - :key="index" - v-if="index >= visibleNumber" - ><svg-icon :icon-class="item.meta.icon" /> - {{ item.meta.title }}</el-menu-item + <el-menu-item v-if="index >= visibleNumber" :key="index" :index="item.path" + ><svg-icon :icon-class="item.meta ? item.meta.icon : ''" /> {{ item.meta?.title }}</el-menu-item > </template> </el-sub-menu> </el-menu> </template> -<script setup> -import { constantRoutes } from "@/router" -import { isHttp } from '@/utils/validate' -import useAppStore from '@/store/modules/app' -import useSettingsStore from '@/store/modules/settings' -import usePermissionStore from '@/store/modules/permission' +<script setup lang="ts"> +import { constantRoutes } from '@/router'; +import { isHttp } from '@/utils/validate'; +import useAppStore from '@/store/modules/app'; +import useSettingsStore from '@/store/modules/settings'; +import usePermissionStore from '@/store/modules/permission'; +import { RouteRecordRaw } from 'vue-router'; // 椤堕儴鏍忓垵濮嬫暟 -const visibleNumber = ref(null); +const visibleNumber = ref<number>(-1); // 褰撳墠婵�娲昏彍鍗曠殑 index -const currentIndex = ref(null); +const currentIndex = ref<string>(); // 闅愯棌渚ц竟鏍忚矾鐢� const hideList = ['/index', '/user/profile']; -const appStore = useAppStore() -const settingsStore = useSettingsStore() -const permissionStore = usePermissionStore() +const appStore = useAppStore(); +const settingsStore = useSettingsStore(); +const permissionStore = usePermissionStore(); const route = useRoute(); const router = useRouter(); // 涓婚棰滆壊 const theme = computed(() => settingsStore.theme); // 鎵�鏈夌殑璺敱淇℃伅 -const routers = computed(() => permissionStore.topbarRouters); +const routers = computed(() => permissionStore.getTopbarRoutes()); // 椤堕儴鏄剧ず鑿滃崟 const topMenus = computed(() => { - let topMenus = []; + let topMenus: RouteRecordRaw[] = []; routers.value.map((menu) => { if (menu.hidden !== true) { // 鍏煎椤堕儴鏍忎竴绾ц彍鍗曞唴閮ㄨ烦杞� - if (menu.path === "/") { - topMenus.push(menu.children[0]); + if (menu.path === '/') { + topMenus.push(menu.children ? menu.children[0] : menu); } else { - topMenus.push(menu); + topMenus.push(menu); } } - }) + }); return topMenus; -}) +}); // 璁剧疆瀛愯矾鐢� const childrenMenus = computed(() => { - let childrenMenus = []; + let childrenMenus: RouteRecordRaw[] = []; routers.value.map((router) => { - for (let item in router.children) { - if (router.children[item].parentPath === undefined) { - if(router.path === "/") { - router.children[item].path = "/" + router.children[item].path; + router.children?.forEach((item) => { + if (item.parentPath === undefined) { + if (router.path === '/') { + item.path = '/' + item.path; } else { - if(!isHttp(router.children[item].path)) { - router.children[item].path = router.path + "/" + router.children[item].path; + if (!isHttp(item.path)) { + item.path = router.path + '/' + item.path; } } - router.children[item].parentPath = router.path; + item.parentPath = router.path; } - childrenMenus.push(router.children[item]); - } - }) + childrenMenus.push(item); + }); + }); return constantRoutes.concat(childrenMenus); -}) +}); // 榛樿婵�娲荤殑鑿滃崟 const activeMenu = computed(() => { - const path = route.path; + let path = route.path; + if (path === '/index') { + path = '/system/user'; + } let activePath = path; - if (path !== undefined && path.lastIndexOf("/") > 0 && hideList.indexOf(path) === -1) { + if (path !== undefined && path.lastIndexOf('/') > 0 && hideList.indexOf(path) === -1) { const tmpPath = path.substring(1, path.length); - activePath = "/" + tmpPath.substring(0, tmpPath.indexOf("/")); if (!route.meta.link) { - appStore.toggleSideBarHide(false); + activePath = '/' + tmpPath.substring(0, tmpPath.indexOf('/')); + appStore.toggleSideBarHide(false); } - } else if(!route.children) { + } else if (!route.children) { activePath = path; appStore.toggleSideBarHide(true); } activeRoutes(activePath); return activePath; -}) +}); -function setVisibleNumber() { +const setVisibleNumber = () => { const width = document.body.getBoundingClientRect().width / 3; - visibleNumber.value = parseInt(width / 85); -} + visibleNumber.value = parseInt(String(width / 85)); +}; -function handleSelect(key, keyPath) { +const handleSelect = (key: string) => { currentIndex.value = key; - const route = routers.value.find(item => item.path === key); + const route = routers.value.find((item) => item.path === key); if (isHttp(key)) { // http(s):// 璺緞鏂扮獥鍙f墦寮� - window.open(key, "_blank"); + window.open(key, '_blank'); } else if (!route || !route.children) { // 娌℃湁瀛愯矾鐢辫矾寰勫唴閮ㄦ墦寮� - router.push({ path: key }); + const routeMenu = childrenMenus.value.find((item) => item.path === key); + if (routeMenu && routeMenu.query) { + let query = JSON.parse(routeMenu.query); + router.push({ path: key, query: query }); + } else { + router.push({ path: key }); + } appStore.toggleSideBarHide(true); } else { // 鏄剧ず宸︿晶鑱斿姩鑿滃崟 activeRoutes(key); appStore.toggleSideBarHide(false); } -} +}; -function activeRoutes(key) { - let routes = []; +const activeRoutes = (key: string) => { + let routes: RouteRecordRaw[] = []; if (childrenMenus.value && childrenMenus.value.length > 0) { childrenMenus.value.map((item) => { - if (key == item.parentPath || (key == "index" && "" == item.path)) { + if (key == item.parentPath || (key == 'index' && '' == item.path)) { routes.push(item); } }); } - if(routes.length > 0) { + if (routes.length > 0) { permissionStore.setSidebarRouters(routes); } else { appStore.toggleSideBarHide(true); } return routes; -} +}; onMounted(() => { - window.addEventListener('resize', setVisibleNumber) -}) + window.addEventListener('resize', setVisibleNumber); +}); onBeforeUnmount(() => { - window.removeEventListener('resize', setVisibleNumber) -}) + window.removeEventListener('resize', setVisibleNumber); +}); onMounted(() => { - setVisibleNumber() -}) + setVisibleNumber(); +}); </script> <style lang="scss"> @@ -169,7 +170,8 @@ margin: 0 10px !important; } -.topmenu-container.el-menu--horizontal > .el-menu-item.is-active, .el-menu--horizontal > .el-sub-menu.is-active .el-submenu__title { +.topmenu-container.el-menu--horizontal > .el-menu-item.is-active, +.el-menu--horizontal > .el-sub-menu.is-active .el-submenu__title { border-bottom: 2px solid #{'var(--theme)'} !important; color: #303133; } @@ -183,4 +185,16 @@ padding: 0 5px !important; margin: 0 10px !important; } + +/* 鑳屾櫙鑹查殣钘� */ +.topmenu-container.el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, +.topmenu-container.el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, +.topmenu-container.el-menu--horizontal > .el-submenu .el-submenu__title:hover { + background-color: #ffffff !important; +} + +/* 鍥炬爣鍙抽棿璺� */ +.topmenu-container .svg-icon { + margin-right: 4px; +} </style> -- Gitblit v1.9.3