From 25f3e8e989432e395e25630bf21278338bfb2963 Mon Sep 17 00:00:00 2001 From: light <978854603@qq.com> Date: Sun, 29 Mar 2026 18:25:02 +0800 Subject: [PATCH 01/13] 1 --- package-lock.json | 26 -- src/components/tables/fieldRenderer.vue | 27 +- src/components/tables/selectIconOptions.js | 306 +++++++++++++++++++++ 3 files changed, 313 insertions(+), 46 deletions(-) create mode 100644 src/components/tables/selectIconOptions.js diff --git a/package-lock.json b/package-lock.json index d568bc2..ee97be8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,6 @@ "@babel/preset-env": "^7.12.0", "autoprefixer": "^10.4.21", "babel-loader": "^8.2.0", - "cross-env": "^10.1.0", "css-loader": "^5.0.0", "file-loader": "^6.2.0", "less": "^4.0.0", @@ -1814,13 +1813,6 @@ "node": ">=10.0.0" } }, - "node_modules/@epic-web/invariant": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/@epic-web/invariant/-/invariant-1.0.0.tgz", - "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==", - "dev": true, - "license": "MIT" - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -2849,24 +2841,6 @@ "@cropper/utils": "^2.0.1" } }, - "node_modules/cross-env": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-10.1.0.tgz", - "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@epic-web/invariant": "^1.0.0", - "cross-spawn": "^7.0.6" - }, - "bin": { - "cross-env": "dist/bin/cross-env.js", - "cross-env-shell": "dist/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=20" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", diff --git a/src/components/tables/fieldRenderer.vue b/src/components/tables/fieldRenderer.vue index b5e28a6..a642275 100644 --- a/src/components/tables/fieldRenderer.vue +++ b/src/components/tables/fieldRenderer.vue @@ -59,15 +59,7 @@ @@ -268,8 +339,12 @@ export default { width: 100%; .table-content { - overflow-y: auto; + /* 纵向由 Table 内部表体滚动;避免与外层双滚动导致横向条在整页最底 */ + overflow: hidden; width: 100%; + min-height: 0; + display: flex; + flex-direction: column; .table-title { font-weight: bold; @@ -279,10 +354,17 @@ export default { padding: 0rem 0.15rem; height: 50px; line-height: 50px; + flex-shrink: 0; .right-link { float: right; } } + + .table-main { + flex: 1; + min-height: 0; + overflow: hidden; + } } .page-box { diff --git a/src/config/menuConfig.js b/src/config/menuConfig.js index 9af152c..2441481 100644 --- a/src/config/menuConfig.js +++ b/src/config/menuConfig.js @@ -115,6 +115,17 @@ export const defaultMenus = [ is_show_menu: 1, icon: 'md-text', sort: 3 + }, + { + id: 125, + name: '租户管理', + path: '/system/tenant', + component: 'system/sys_tenant', + parent_id: 120, + type: '页面', + is_show_menu: 1, + icon: 'md-git-branch', + sort: 4 } ] } diff --git a/src/store/user.js b/src/store/user.js index 2bbdd42..35e83a7 100644 --- a/src/store/user.js +++ b/src/store/user.js @@ -3,6 +3,16 @@ import uiTool from '../utils/uiTool' import { defaultMenus, filterMenusByIds } from '../config/menuConfig' import userServer from '../api/system/userServer' +function readTenantLs() { + try { + const s = localStorage.getItem('currentTenant') + if (!s || s === 'undefined') return null + return JSON.parse(s) + } catch { + return null + } +} + export default { namespaced: true, state: { @@ -10,7 +20,9 @@ export default { avatorImgPath: '', token: getToken(), authorityMenus: [], - menuList: localStorage.getItem('menuList') ? JSON.parse(localStorage.getItem('menuList')) : [] + menuList: localStorage.getItem('menuList') ? JSON.parse(localStorage.getItem('menuList')) : [], + /** 登录返回的租户信息:{ id, name, code, is_platform } */ + currentTenant: readTenantLs() }, mutations: { setAvator(state, avatorPath) { @@ -31,6 +43,14 @@ export default { setMenuList(state, menus) { state.menuList = menus localStorage.setItem('menuList', JSON.stringify(menus)) + }, + setCurrentTenant(state, tenant) { + state.currentTenant = tenant && typeof tenant === 'object' ? tenant : null + if (state.currentTenant) { + localStorage.setItem('currentTenant', JSON.stringify(state.currentTenant)) + } else { + localStorage.removeItem('currentTenant') + } } }, getters: { @@ -162,6 +182,11 @@ export default { commit('setUserName', name) commit('setToken', token) + if (res.data.tenant) { + commit('setCurrentTenant', res.data.tenant) + } else { + commit('setCurrentTenant', null) + } // 登录接口返回的 authorityMenus 是菜单 ID 数组字符串 console.log('登录返回的菜单 IDs:', authorityMenusIds) @@ -205,6 +230,7 @@ export default { commit('setToken', '') commit('setAuthorityMenus', '[]') commit('setMenuList', []) + commit('setCurrentTenant', null) localStorage.removeItem('menuList') window.location.reload() } diff --git a/src/views/index.js b/src/views/index.js index df359a9..e551f17 100644 --- a/src/views/index.js +++ b/src/views/index.js @@ -4,6 +4,7 @@ import SysLog from './system/sys_log.vue' import SysParamSetup from './system/sys_param_setup.vue' import SysRole from './system/sys_role.vue' import SysUser from './system/sys_user.vue' +import SysTenant from './system/sys_tenant.vue' import SysLogOperate from './system/sys_log_operate.vue' @@ -36,6 +37,7 @@ export function setupComponentMap(customMap = {}, uiTool) { 'system/sys_param_setup': SysParamSetup, 'system/sys_role': SysRole, 'system/sys_user': SysUser, + 'system/sys_tenant': SysTenant, 'system/sys_control': SysControl, 'system/sys_menu': SysMenu, 'system/sys_title': SysTitle, @@ -60,6 +62,7 @@ export default { SysParamSetup, SysRole, SysUser, + SysTenant, SysControl, SysMenu, SysTitle, diff --git a/src/views/login/login.vue b/src/views/login/login.vue index 3d7ed73..76c7e80 100644 --- a/src/views/login/login.vue +++ b/src/views/login/login.vue @@ -43,9 +43,13 @@ export default { }, methods: { ...mapActions('user', ['handleLogin']), - async handleSubmit({ userName, password }) { + async handleSubmit({ userName, password, tenantCode }) { try { - let userFrom = { name: userName, password: password } + let userFrom = { + name: userName, + password: password, + tenant_code: tenantCode || 'default' + } await this.handleLogin({ userFrom, Main, diff --git a/src/views/system/sys_role.vue b/src/views/system/sys_role.vue index d982b6f..3213613 100644 --- a/src/views/system/sys_role.vue +++ b/src/views/system/sys_role.vue @@ -1,5 +1,8 @@