From a4fe9999a439d596f888cda75214da81e3c6c2d6 Mon Sep 17 00:00:00 2001
From: hrx <18603305412@163.com>
Date: Sat, 11 Oct 2025 11:37:10 +0800
Subject: [PATCH 01/10] uptada
---
.../src/layout/components/Sidebar/index.vue | 18 ++++++++++++---
f/web-kboss/src/router/index.js | 5 ++--
f/web-kboss/src/store/getters.js | 3 +--
f/web-kboss/src/store/modules/permission.js | 19 ++++++++++-----
f/web-kboss/src/store/modules/user.js | 23 ++++++++++++++-----
5 files changed, 48 insertions(+), 20 deletions(-)
diff --git a/f/web-kboss/src/layout/components/Sidebar/index.vue b/f/web-kboss/src/layout/components/Sidebar/index.vue
index 08bf1c2..7effadb 100644
--- a/f/web-kboss/src/layout/components/Sidebar/index.vue
+++ b/f/web-kboss/src/layout/components/Sidebar/index.vue
@@ -40,7 +40,7 @@ export default {
name: "Sidebar",
components: { SidebarItem, Logo },
computed: {
- ...mapGetters(["permission_routes", "sidebar", "userType"]), // 新增:映射userType
+ ...mapGetters(["permission_routes", "sidebar", "userType", "orgType"]), // 新增:映射orgType
showLogo() {
return true;
@@ -57,14 +57,17 @@ export default {
// 修复:确保权限路由正确获取
permissionRoutes() {
const routes = this.permission_routes || [];
- console.log("Sidebar - 当前权限路由:", routes);
- console.log("Sidebar - 用户类型:", this.userType); // 新增:打印用户类型
+ console.log("=== Sidebar 权限路由调试 ===");
+ console.log("当前权限路由:", routes);
+ console.log("用户类型:", this.userType);
+ console.log("组织类型:", this.orgType);
// 调试:检查是否包含订单管理和资源管理路由
const hasOrderManagement = routes.some(route => route.path === '/orderManagement');
const hasResourceManagement = routes.some(route => route.path === '/resourceManagement');
console.log("是否包含订单管理:", hasOrderManagement);
console.log("是否包含资源管理:", hasResourceManagement);
+ console.log("=== Sidebar 调试结束 ===");
return routes;
},
@@ -86,6 +89,7 @@ export default {
mounted() {
console.log("Sidebar mounted - 权限路由:", this.permissionRoutes);
console.log("Sidebar mounted - 用户类型:", this.userType);
+ console.log("Sidebar mounted - 组织类型:", this.orgType);
},
watch: {
@@ -103,6 +107,14 @@ export default {
console.log("Sidebar - 用户类型变化:", newType);
},
immediate: true
+ },
+
+ // 新增:监听组织类型变化
+ orgType: {
+ handler(newType) {
+ console.log("Sidebar - 组织类型变化:", newType);
+ },
+ immediate: true
}
}
};
diff --git a/f/web-kboss/src/router/index.js b/f/web-kboss/src/router/index.js
index 0fa9c7a..f412102 100644
--- a/f/web-kboss/src/router/index.js
+++ b/f/web-kboss/src/router/index.js
@@ -47,7 +47,7 @@ Vue.use(Router);
/**
* constantRoutes
没有权限要求的基本页面
- 所有角色都可以访问
+ 所有角色都可以访问下·
*/
export const constantRoutes = [
{
@@ -325,7 +325,7 @@ export const asyncRoutes = [
]
},
- // 订单管理菜单 - 保持为一级菜单,调整顺序到全部产品后面
+
{
path: "/orderManagement",
component: Layout,
@@ -352,7 +352,6 @@ export const asyncRoutes = [
]
},
- // 资源管理菜单 - 保持为一级菜单,调整顺序到订单管理后面
{
path: "/resourceManagement",
diff --git a/f/web-kboss/src/store/getters.js b/f/web-kboss/src/store/getters.js
index e66a442..f0a9cc1 100644
--- a/f/web-kboss/src/store/getters.js
+++ b/f/web-kboss/src/store/getters.js
@@ -12,8 +12,7 @@ const getters = {
auths: state => state.user.auths,
requestCode: state => state.user.requestCode,
permission_routes: state => state.permission.routes,
- // 新增:用户类型getter
userType: state => state.user.userType,
- // errorLogs: state => state.errorLog.logs,
+ orgType: state => state.user.orgType, // 新增:组织类型getter
}
export default getters
diff --git a/f/web-kboss/src/store/modules/permission.js b/f/web-kboss/src/store/modules/permission.js
index e81fa6d..a575af1 100644
--- a/f/web-kboss/src/store/modules/permission.js
+++ b/f/web-kboss/src/store/modules/permission.js
@@ -37,7 +37,7 @@ function filterAsyncRoutes(routes, permissions) {
function addUserRoutes(routes, userType) {
console.log("addUserRoutes - userType:", userType);
- // 如果是普通用户(非管理员),添加订单管理和资源管理路由
+ // 如果是普通用户(org_type为2),添加订单管理和资源管理路由
if (userType === 'user') {
const orderManagementRoute = routes.find(route => route.path === "/orderManagement");
const resourceManagementRoute = routes.find(route => route.path === "/resourceManagement");
@@ -113,11 +113,11 @@ const actions = {
return new Promise((resolve) => {
let accessedRoutes;
- // 判断用户类型:admin为1是管理员,否则是普通用户
- const userType = params.admin == 1 ? 'admin' : 'user';
- console.log("用户类型:", userType);
+ // 判断用户类型:org_type为2是客户,否则是管理员
+ const userType = params.orgType == 2 ? 'user' : 'admin';
+ console.log("用户类型:", userType, "orgType:", params.orgType);
- if (params.user.includes("admin") && params.admin == 1) {
+ if (params.user.includes("admin") && params.orgType != 2) {
// 管理员:只显示超级管理员菜单
accessedRoutes = asyncRoutes.filter(item => item.path === '/superAdministrator');
} else {
@@ -147,7 +147,14 @@ const actions = {
if (userType === 'user') {
console.log("为普通用户添加订单管理和资源管理路由");
const userSpecificRoutes = addUserRoutes(asyncRoutes, userType);
- accessedRoutes = [...accessedRoutes, ...userSpecificRoutes];
+
+ // 确保不重复添加路由
+ userSpecificRoutes.forEach(route => {
+ if (!accessedRoutes.some(r => r.path === route.path)) {
+ accessedRoutes.push(route);
+ }
+ });
+
console.log("添加用户特定路由后的accessedRoutes:", accessedRoutes);
}
}
diff --git a/f/web-kboss/src/store/modules/user.js b/f/web-kboss/src/store/modules/user.js
index c2e673f..7b58f2b 100644
--- a/f/web-kboss/src/store/modules/user.js
+++ b/f/web-kboss/src/store/modules/user.js
@@ -21,7 +21,9 @@ const state = {
//客户余额
mybalance: '',
// 新增:用户类型(admin/user)
- userType: ''
+ userType: '',
+ // 新增:组织类型
+ orgType: ''
};
const mutations = {
@@ -55,6 +57,11 @@ const mutations = {
SET_USER_TYPE: (state, userType) => {
state.userType = userType;
sessionStorage.setItem("userType", userType);
+ },
+ // 新增:设置组织类型
+ SET_ORG_TYPE: (state, orgType) => {
+ state.orgType = orgType;
+ sessionStorage.setItem("orgType", orgType);
}
};
@@ -82,13 +89,15 @@ const actions = {
type: 'error',
})
} else {
- const {data, admin} = response;
+ const {data, org_type} = response;
commit("SET_USER", username);
- // 新增:设置用户类型
- const userType = admin == 1 ? 'admin' : 'user';
+ // 新增:根据 org_type 设置用户类型
+ // org_type 为 2 表示客户,其他为管理员
+ const userType = org_type == 2 ? 'user' : 'admin';
commit("SET_USER_TYPE", userType);
- console.log("登录用户类型:", userType);
+ commit("SET_ORG_TYPE", org_type);
+ console.log("登录用户类型:", userType, "org_type:", org_type);
data ? commit("SET_AUTHS", data) : commit("SET_AUTHS", []);
const accessRoutes = await store.dispatch(
@@ -96,7 +105,7 @@ const actions = {
{
user: username,
auths: data,
- admin: admin
+ orgType: org_type // 传递 orgType 而不是 admin
}
)
resetRouter();
@@ -145,6 +154,7 @@ const actions = {
commit("SET_TOKEN", "");
commit("SET_ROLES", []);
commit("SET_USER_TYPE", ""); // 新增:清除用户类型
+ commit("SET_ORG_TYPE", ""); // 新增:清除组织类型
removeToken();
resetRouter();
@@ -167,6 +177,7 @@ const actions = {
commit("SET_TOKEN", "");
commit("SET_ROLES", []);
commit("SET_USER_TYPE", ""); // 新增:清除用户类型
+ commit("SET_ORG_TYPE", ""); // 新增:清除组织类型
removeToken();
resolve();
});
From 558eec60135be6ce4e6033bd917861cea7650f56 Mon Sep 17 00:00:00 2001
From: hrx <18603305412@163.com>
Date: Sat, 11 Oct 2025 14:01:51 +0800
Subject: [PATCH 02/10] uptada
---
.../src/layout/components/Sidebar/index.vue | 6 +
f/web-kboss/src/main.js | 59 +++++++++-
f/web-kboss/src/store/getters.js | 8 +-
f/web-kboss/src/store/modules/permission.js | 18 +--
f/web-kboss/src/store/modules/user.js | 108 ++++++++++++------
5 files changed, 149 insertions(+), 50 deletions(-)
diff --git a/f/web-kboss/src/layout/components/Sidebar/index.vue b/f/web-kboss/src/layout/components/Sidebar/index.vue
index 7effadb..3e413eb 100644
--- a/f/web-kboss/src/layout/components/Sidebar/index.vue
+++ b/f/web-kboss/src/layout/components/Sidebar/index.vue
@@ -67,6 +67,10 @@ export default {
const hasResourceManagement = routes.some(route => route.path === '/resourceManagement');
console.log("是否包含订单管理:", hasOrderManagement);
console.log("是否包含资源管理:", hasResourceManagement);
+
+ // 检查用户类型和组织类型是否正确
+ console.log("当前用户类型:", this.userType);
+ console.log("当前组织类型:", this.orgType);
console.log("=== Sidebar 调试结束 ===");
return routes;
@@ -90,6 +94,8 @@ export default {
console.log("Sidebar mounted - 权限路由:", this.permissionRoutes);
console.log("Sidebar mounted - 用户类型:", this.userType);
console.log("Sidebar mounted - 组织类型:", this.orgType);
+ console.log("sessionStorage userType:", sessionStorage.getItem('userType'));
+ console.log("sessionStorage orgType:", sessionStorage.getItem('orgType'));
},
watch: {
diff --git a/f/web-kboss/src/main.js b/f/web-kboss/src/main.js
index 8e955d1..92bf068 100644
--- a/f/web-kboss/src/main.js
+++ b/f/web-kboss/src/main.js
@@ -22,7 +22,7 @@ let ploady={
start_date:'',
end_date:''
}
-reqSaleMoneyList(ploady)
+// reqSaleMoneyList(ploady)
// import {saveApprovalInfo} from "@/api/finance/approvalList";
// saveApprovalInfo(JSON.stringify({
// "flag":"update",
@@ -98,20 +98,73 @@ Vue.use(Element, {
//设置跳转页面时给页面的body属性设置滚动条
var onOverflow = ["/shoppingManagement", "/supplierManagement"];
-router.afterEach((to, from, next) => {
+// 修复:在路由守卫中恢复用户状态和重新生成路由
+router.beforeEach(async (to, from, next) => {
+ // 清空面包屑状态的代码
+ // store.commit('tagsView/resetBreadcrumbState');
+
+ // 新增:如果已登录且有token,但Vuex状态丢失,从sessionStorage恢复
+ if (store.getters.token && (!store.getters.user || !store.getters.userType)) {
+ console.log("检测到状态丢失,从sessionStorage恢复用户状态");
+
+ const user = sessionStorage.getItem('user');
+ const auths = sessionStorage.getItem('auths');
+ const userType = sessionStorage.getItem('userType');
+ const orgType = sessionStorage.getItem('orgType');
+
+ if (user) {
+ store.commit('user/SET_USER', user);
+ }
+ if (auths) {
+ store.commit('user/SET_AUTHS', JSON.parse(auths));
+ }
+ if (userType) {
+ store.commit('user/SET_USER_TYPE', userType);
+ }
+ if (orgType) {
+ store.commit('user/SET_ORG_TYPE', parseInt(orgType));
+ }
+
+ // 重新生成路由
+ try {
+ const accessRoutes = await store.dispatch('permission/generateRoutes', {
+ user: store.getters.user,
+ auths: store.getters.auths,
+ userType: store.getters.userType,
+ orgType: store.getters.orgType
+ });
+
+ // 重新添加路由
+ router.addRoutes(accessRoutes);
+
+ // 重定向到当前路由以确保路由更新
+ next({ ...to, replace: true });
+ return;
+ } catch (error) {
+ console.error('重新生成路由失败:', error);
+ }
+ }
+
onOverflow.forEach(element => {
if (to.path == element) {
document.querySelector("body").setAttribute("style", "overflow: auto !important;")
}
});
+
+ next();
});
+
+window.addEventListener('beforeunload', function () {
+ // 清空面包屑状态的代码
+ store.commit('tagsView/resetBreadcrumbState');
+});
+
Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key])
})
Vue.config.productionTip = false
-
new Vue({
el: '#app',
router,
diff --git a/f/web-kboss/src/store/getters.js b/f/web-kboss/src/store/getters.js
index f0a9cc1..0d6cfd8 100644
--- a/f/web-kboss/src/store/getters.js
+++ b/f/web-kboss/src/store/getters.js
@@ -8,11 +8,11 @@ const getters = {
avatar: state => state.user.avatar,
name: state => state.user.name,
introduction: state => state.user.introduction,
- user: state => state.user.user,
- auths: state => state.user.auths,
+ user: state => state.user.user || sessionStorage.getItem('user') || '',
+ auths: state => state.user.auths || JSON.parse(sessionStorage.getItem('auths') || '[]'),
requestCode: state => state.user.requestCode,
permission_routes: state => state.permission.routes,
- userType: state => state.user.userType,
- orgType: state => state.user.orgType, // 新增:组织类型getter
+ userType: state => state.user.userType || sessionStorage.getItem('userType') || '',
+ orgType: state => state.user.orgType || parseInt(sessionStorage.getItem('orgType')) || 0,
}
export default getters
diff --git a/f/web-kboss/src/store/modules/permission.js b/f/web-kboss/src/store/modules/permission.js
index a575af1..969a0a2 100644
--- a/f/web-kboss/src/store/modules/permission.js
+++ b/f/web-kboss/src/store/modules/permission.js
@@ -46,12 +46,12 @@ function addUserRoutes(routes, userType) {
if (orderManagementRoute) {
console.log("添加订单管理路由");
- userRoutes.push(orderManagementRoute);
+ userRoutes.push(JSON.parse(JSON.stringify(orderManagementRoute))); // 深拷贝
}
if (resourceManagementRoute) {
console.log("添加资源管理路由");
- userRoutes.push(resourceManagementRoute);
+ userRoutes.push(JSON.parse(JSON.stringify(resourceManagementRoute))); // 深拷贝
}
return userRoutes;
@@ -113,15 +113,17 @@ const actions = {
return new Promise((resolve) => {
let accessedRoutes;
- // 判断用户类型:org_type为2是客户,否则是管理员
- const userType = params.orgType == 2 ? 'user' : 'admin';
- console.log("用户类型:", userType, "orgType:", params.orgType);
+ // 从参数或sessionStorage中获取用户类型和组织类型
+ const userType = params.userType || sessionStorage.getItem('userType') || '';
+ const orgType = params.orgType || parseInt(sessionStorage.getItem('orgType')) || 0;
- if (params.user.includes("admin") && params.orgType != 2) {
+ console.log("用户类型:", userType, "orgType:", orgType);
+
+ if (params.user && params.user.includes("admin") && orgType != 2) {
// 管理员:只显示超级管理员菜单
accessedRoutes = asyncRoutes.filter(item => item.path === '/superAdministrator');
} else {
- const auths = JSON.parse(JSON.stringify(params.auths));
+ const auths = params.auths ? JSON.parse(JSON.stringify(params.auths)) : [];
console.log("ACTION generateRoutes - auths:", auths);
if (auths.length) {
@@ -144,7 +146,7 @@ const actions = {
}
// 新增:为普通用户添加订单管理和资源管理路由
- if (userType === 'user') {
+ if (userType === 'user' || orgType == 2) {
console.log("为普通用户添加订单管理和资源管理路由");
const userSpecificRoutes = addUserRoutes(asyncRoutes, userType);
diff --git a/f/web-kboss/src/store/modules/user.js b/f/web-kboss/src/store/modules/user.js
index 7b58f2b..4f364e9 100644
--- a/f/web-kboss/src/store/modules/user.js
+++ b/f/web-kboss/src/store/modules/user.js
@@ -7,23 +7,36 @@ import store from "@/store";
import {myBalanceAPI} from "@/api/finance/customerRechargeManagement";
import {testData} from "@/views/homePage/components/topBox/testData";
+// 从sessionStorage恢复状态
+const getStoredState = () => {
+ return {
+ user: sessionStorage.getItem('user') || "",
+ auths: JSON.parse(sessionStorage.getItem('auths')) || [],
+ userType: sessionStorage.getItem('userType') || '',
+ orgType: parseInt(sessionStorage.getItem('orgType')) || '',
+ mybalance: sessionStorage.getItem('mybalance') || ''
+ };
+};
+
+const storedState = getStoredState();
+
const state = {
token: getToken(),
name: "",
avatar: "",
introduction: "",
//用户名称
- user: "",
+ user: storedState.user,
//权限列表
- auths: [],
+ auths: storedState.auths,
// 当前状态码
requestCode: 200,
//客户余额
- mybalance: '',
+ mybalance: storedState.mybalance,
// 新增:用户类型(admin/user)
- userType: '',
+ userType: storedState.userType,
// 新增:组织类型
- orgType: ''
+ orgType: storedState.orgType
};
const mutations = {
@@ -41,17 +54,18 @@ const mutations = {
},
SET_AUTHS: (state, auths) => {
state.auths = auths;
- sessionStorage.setItem("auths", JSON.stringify(state.auths));
+ sessionStorage.setItem("auths", JSON.stringify(auths));
},
SET_USER: (state, user) => {
state.user = user;
- sessionStorage.setItem("user", state.user);
+ sessionStorage.setItem("user", user);
},
SET_REQUESTSTATE: (state, code) => {
state.requestCode = code;
},
SETMYBANLANCE(state, mybalance) {
- state.mybalance = mybalance
+ state.mybalance = mybalance;
+ sessionStorage.setItem('mybalance', mybalance);
},
// 新增:设置用户类型
SET_USER_TYPE: (state, userType) => {
@@ -61,7 +75,7 @@ const mutations = {
// 新增:设置组织类型
SET_ORG_TYPE: (state, orgType) => {
state.orgType = orgType;
- sessionStorage.setItem("orgType", orgType);
+ sessionStorage.setItem("orgType", orgType.toString());
}
};
@@ -71,12 +85,10 @@ const actions = {
let result = await myBalanceAPI()
if (result.status) {
commit('SETMYBANLANCE', result.data)
- sessionStorage.setItem('mybalance', result.data)
}
},
// user login
async login({commit}, userInfo) {
-
const {username, password, codeid, vcode} = userInfo;
return new Promise(async (resolve, reject) => {
loginUserAPI(userInfo)
@@ -105,7 +117,8 @@ const actions = {
{
user: username,
auths: data,
- orgType: org_type // 传递 orgType 而不是 admin
+ userType: userType,
+ orgType: org_type
}
)
resetRouter();
@@ -126,47 +139,64 @@ const actions = {
// get user info
getInfo({commit, state}) {
return new Promise((resolve, reject) => {
- // getInfo(state.token).then(response => {
- // const { data } = response
- // if (!data) {
- // reject('Verification failed, please Login again.')
- // }
- // const { roles, name, avatar, introduction } = data
- // // roles must be a non-empty array
- // if (!roles || roles.length <= 0) {
- // reject('getInfo: roles must be a non-null array!')
- // }
- // commit('SET_ROLES', roles)
- // commit('SET_NAME', name)
- // commit('SET_AVATAR', avatar)
- // commit('SET_INTRODUCTION', introduction)
- // }).catch(error => {
- // reject(error)
- // })
+ // 从sessionStorage恢复用户信息
+ const user = sessionStorage.getItem('user');
+ const auths = sessionStorage.getItem('auths');
+ const userType = sessionStorage.getItem('userType');
+ const orgType = sessionStorage.getItem('orgType');
+
+ if (user) {
+ commit("SET_USER", user);
+ }
+ if (auths) {
+ commit("SET_AUTHS", JSON.parse(auths));
+ }
+ if (userType) {
+ commit("SET_USER_TYPE", userType);
+ }
+ if (orgType) {
+ commit("SET_ORG_TYPE", parseInt(orgType));
+ }
+
+ resolve({
+ user: state.user,
+ auths: state.auths,
+ userType: state.userType,
+ orgType: state.orgType
+ });
});
},
// user logout
logout({commit, state, dispatch}) {
return new Promise((resolve, reject) => {
- logout(state.token)
- .then(() => {
+ // logout(state.token)
+ // .then(() => {
commit("SET_TOKEN", "");
commit("SET_ROLES", []);
commit("SET_USER_TYPE", ""); // 新增:清除用户类型
commit("SET_ORG_TYPE", ""); // 新增:清除组织类型
+ commit("SET_USER", "");
+ commit("SET_AUTHS", []);
removeToken();
resetRouter();
+ // 清除sessionStorage
+ sessionStorage.removeItem('user');
+ sessionStorage.removeItem('auths');
+ sessionStorage.removeItem('userType');
+ sessionStorage.removeItem('orgType');
+ sessionStorage.removeItem('mybalance');
+
// reset visited views and cached views
// to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
dispatch("tagsView/delAllViews", null, {root: true});
resolve();
- })
- .catch((error) => {
- reject(error);
- });
+ // })
+ // .catch((error) => {
+ // reject(error);
+ // });
});
},
@@ -178,7 +208,15 @@ const actions = {
commit("SET_ROLES", []);
commit("SET_USER_TYPE", ""); // 新增:清除用户类型
commit("SET_ORG_TYPE", ""); // 新增:清除组织类型
+ commit("SET_USER", "");
+ commit("SET_AUTHS", []);
removeToken();
+
+ // 清除sessionStorage
+ sessionStorage.removeItem('user');
+ sessionStorage.removeItem('auths');
+ sessionStorage.removeItem('userType');
+ sessionStorage.removeItem('orgType');
resolve();
});
},
From 5b50e00e170d85b2a5aeeca83db28ed7c1d56ebc Mon Sep 17 00:00:00 2001
From: hrx <18603305412@163.com>
Date: Wed, 15 Oct 2025 17:22:03 +0800
Subject: [PATCH 03/10] uptada
---
.../src/layout/components/Sidebar/index.vue | 90 +++++++++----------
f/web-kboss/src/main.js | 2 +-
f/web-kboss/src/styles/variables.scss | 31 +++----
3 files changed, 52 insertions(+), 71 deletions(-)
diff --git a/f/web-kboss/src/layout/components/Sidebar/index.vue b/f/web-kboss/src/layout/components/Sidebar/index.vue
index 3e413eb..8e01a88 100644
--- a/f/web-kboss/src/layout/components/Sidebar/index.vue
+++ b/f/web-kboss/src/layout/components/Sidebar/index.vue
@@ -40,7 +40,7 @@ export default {
name: "Sidebar",
components: { SidebarItem, Logo },
computed: {
- ...mapGetters(["permission_routes", "sidebar", "userType", "orgType"]), // 新增:映射orgType
+ ...mapGetters(["permission_routes", "sidebar", "userType", "orgType"]),
showLogo() {
return true;
@@ -54,34 +54,15 @@ export default {
return !this.sidebar.opened;
},
- // 修复:确保权限路由正确获取
permissionRoutes() {
const routes = this.permission_routes || [];
- console.log("=== Sidebar 权限路由调试 ===");
- console.log("当前权限路由:", routes);
- console.log("用户类型:", this.userType);
- console.log("组织类型:", this.orgType);
-
- // 调试:检查是否包含订单管理和资源管理路由
- const hasOrderManagement = routes.some(route => route.path === '/orderManagement');
- const hasResourceManagement = routes.some(route => route.path === '/resourceManagement');
- console.log("是否包含订单管理:", hasOrderManagement);
- console.log("是否包含资源管理:", hasResourceManagement);
-
- // 检查用户类型和组织类型是否正确
- console.log("当前用户类型:", this.userType);
- console.log("当前组织类型:", this.orgType);
- console.log("=== Sidebar 调试结束 ===");
-
return routes;
},
- // 修复:激活菜单的高亮
activeMenu() {
const route = this.$route;
const { meta, path } = route;
- // 如果设置了activeMenu,就使用它
if (meta.activeMenu) {
return meta.activeMenu;
}
@@ -92,36 +73,6 @@ export default {
mounted() {
console.log("Sidebar mounted - 权限路由:", this.permissionRoutes);
- console.log("Sidebar mounted - 用户类型:", this.userType);
- console.log("Sidebar mounted - 组织类型:", this.orgType);
- console.log("sessionStorage userType:", sessionStorage.getItem('userType'));
- console.log("sessionStorage orgType:", sessionStorage.getItem('orgType'));
- },
-
- watch: {
- permission_routes: {
- handler(newRoutes) {
- console.log("Sidebar - 权限路由变化:", newRoutes);
- },
- deep: true,
- immediate: true
- },
-
- // 新增:监听用户类型变化
- userType: {
- handler(newType) {
- console.log("Sidebar - 用户类型变化:", newType);
- },
- immediate: true
- },
-
- // 新增:监听组织类型变化
- orgType: {
- handler(newType) {
- console.log("Sidebar - 组织类型变化:", newType);
- },
- immediate: true
- }
}
};
@@ -157,6 +108,7 @@ export default {
}
}
+ // 重点修改部分 - 更具体的选择器
::v-deep .el-menu-vertical {
border: none;
height: 100%;
@@ -170,8 +122,36 @@ export default {
overflow: hidden;
text-overflow: ellipsis;
}
+
+ // 子菜单容器
+ .el-menu--inline {
+ // 子菜单项
+ .el-menu-item {
+ // 激活的子菜单项
+ &.is-active {
+ background-color: #d7dafd !important;
+ color: #296ad9 !important;
+
+ &:before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ width: 3px;
+ background-color: #296ad9;
+ }
+ }
+
+ // 非激活状态的悬停效果
+ &:not(.is-active):hover {
+ background-color: #f5f7fa !important;
+ }
+ }
+ }
}
+ // 折叠状态
::v-deep .el-menu--collapse {
width: 64px !important;
min-width: 64px !important;
@@ -181,6 +161,16 @@ export default {
text-overflow: clip;
justify-content: center;
}
+
+ // 折叠状态下的子菜单激活样式
+ .el-menu--popup {
+ .el-menu-item {
+ &.is-active {
+ background-color: #d7dafd !important;
+ color: #296ad9 !important;
+ }
+ }
+ }
}
}
diff --git a/f/web-kboss/src/main.js b/f/web-kboss/src/main.js
index 92bf068..85dfb53 100644
--- a/f/web-kboss/src/main.js
+++ b/f/web-kboss/src/main.js
@@ -1,7 +1,7 @@
import Vue from 'vue'
import Cookies from 'js-cookie'
-
+
import 'normalize.css/normalize.css' // a modern alternative to CSS resets
import Element from 'element-ui'
diff --git a/f/web-kboss/src/styles/variables.scss b/f/web-kboss/src/styles/variables.scss
index 8759553..aef5d78 100644
--- a/f/web-kboss/src/styles/variables.scss
+++ b/f/web-kboss/src/styles/variables.scss
@@ -1,4 +1,5 @@
-// / base color
+// variables.scss
+// base color
$blue: #324157;
$light-blue: #3A71A8;
$red: #C03639;
@@ -9,22 +10,17 @@ $yellow: #FEC171;
$panGreen: #30B08F;
// sidebar
-$menuText: #000;
-$menuActiveText: #296ad9; // 当前激活菜单项的文字颜色
-$subMenuActiveText: #100101; // 当前激活子菜单项的文字颜色
+$menuText: #333;
+$menuActiveText: #296ad9;
+$subMenuActiveText: #000;
-$menuBg: #fff; // 整体背景颜色
-$menuHover: #f0f0f0; // 鼠标悬浮一级菜单背景色 (轻微变化更友好)
-$subMenuBg: #f7f7f7; // 子菜单背景色
-$subMenuHover: #eaeaea; // 鼠标悬浮子菜单背景色 (轻微变化更友好)
+$menuBg: #fff;
+$menuHover: #f5f7fa;
+$subMenuBg: #fff;
+$subMenuHover: #f0f0f0;
-$sideBarWidth: 230px; // 侧边栏宽度
+$sideBarWidth: 230px;
-// Element UI 默认折叠宽度为 64px
-// $sideBarCollapseWidth: 64px;
-
-// the :export directive is the magic sauce for webpack
-// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
:export {
menuText: $menuText;
menuActiveText: $menuActiveText;
@@ -34,9 +30,4 @@ $sideBarWidth: 230px; // 侧边栏宽度
subMenuBg: $subMenuBg;
subMenuHover: $subMenuHover;
sideBarWidth: $sideBarWidth;
- // sideBarCollapseWidth: $sideBarCollapseWidth;
-}
-
-
-
-
+}
From c31a87369c20dc0d85474a3576f2aba900e2566f Mon Sep 17 00:00:00 2001
From: hrx <18603305412@163.com>
Date: Fri, 17 Oct 2025 10:54:57 +0800
Subject: [PATCH 04/10] uptada
---
f/web-kboss/src/layout/components/Sidebar/index.vue | 2 +-
f/web-kboss/src/router/index.js | 2 +-
f/web-kboss/src/views/homePage/components/topBox/index.vue | 6 ++++++
.../views/homePage/ncmatch/supplyAndDemandSquare/index.vue | 6 +-----
4 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/f/web-kboss/src/layout/components/Sidebar/index.vue b/f/web-kboss/src/layout/components/Sidebar/index.vue
index 8e01a88..42cc42c 100644
--- a/f/web-kboss/src/layout/components/Sidebar/index.vue
+++ b/f/web-kboss/src/layout/components/Sidebar/index.vue
@@ -32,7 +32,7 @@
+
+
+
+
+
+
+
+
+
+
+
+ - Unicode
+ - Font class
+ - Symbol
+
+
+
查看项目
+
+
+
+
+
+
+ -
+
+
客服
+ 
+
+
+ -
+
+
地图_地球_o
+ 
+
+
+ -
+
+
消息
+ 
+
+
+ -
+
+
AI助手
+ 
+
+
+
+
+
Unicode 引用
+
+
+
Unicode 是字体在网页端最原始的应用方式,特点是:
+
+ - 支持按字体的方式去动态调整图标大小,颜色等等。
+ - 默认情况下不支持多色,直接添加多色图标会自动去色。
+
+
+ 注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)
+
+
Unicode 使用步骤如下:
+
第一步:拷贝项目下面生成的 @font-face
+
@font-face {
+ font-family: 'iconfont';
+ src: url('iconfont.woff2?t=1760680783657') format('woff2'),
+ url('iconfont.woff?t=1760680783657') format('woff'),
+ url('iconfont.ttf?t=1760680783657') format('truetype');
+}
+
+
第二步:定义使用 iconfont 的样式
+
.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+
第三步:挑选相应图标并获取字体编码,应用于页面
+
+<span class="iconfont">3</span>
+
+
+ "iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+ -
+
+
+ 客服
+
+ .icon-kefu
+
+
+
+ -
+
+
+ 地图_地球_o
+
+ .icon-ditu_diqiu_o
+
+
+
+ -
+
+
+ 消息
+
+ .icon-xiaoxi
+
+
+
+ -
+
+
+ AI助手
+
+ .icon-AIzhushou
+
+
+
+
+
+
font-class 引用
+
+
+
font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。
+
与 Unicode 使用方式相比,具有如下特点:
+
+ - 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
+ - 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 fontclass 代码:
+
<link rel="stylesheet" href="./iconfont.css">
+
+
第二步:挑选相应图标并获取类名,应用于页面:
+
<span class="iconfont icon-xxx"></span>
+
+
+ "
+ iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+ -
+
+
客服
+ #icon-kefu
+
+
+ -
+
+
地图_地球_o
+ #icon-ditu_diqiu_o
+
+
+ -
+
+
消息
+ #icon-xiaoxi
+
+
+ -
+
+
AI助手
+ #icon-AIzhushou
+
+
+
+
+
Symbol 引用
+
+
+
这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章
+ 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:
+
+ - 支持多色图标了,不再受单色限制。
+ - 通过一些技巧,支持像字体那样,通过
font-size, color 来调整样式。
+ - 兼容性较差,支持 IE9+,及现代浏览器。
+ - 浏览器渲染 SVG 的性能一般,还不如 png。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 symbol 代码:
+
<script src="./iconfont.js"></script>
+
+
第二步:加入通用 CSS 代码(引入一次就行):
+
<style>
+.icon {
+ width: 1em;
+ height: 1em;
+ vertical-align: -0.15em;
+ fill: currentColor;
+ overflow: hidden;
+}
+</style>
+
+
第三步:挑选相应图标并获取类名,应用于页面:
+
<svg class="icon" aria-hidden="true">
+ <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+
+
+
+
+
+