This is an automated email from the ASF dual-hosted git repository.
jinsongzhou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/amoro.git
The following commit(s) were added to refs/heads/master by this push:
new d54b9362e [UI]: Optimize table ui and deduplicate 403 login error
(#4093)
d54b9362e is described below
commit d54b9362e5b58524f69a13e8441f308133e0cc7e
Author: nathan.ma <[email protected]>
AuthorDate: Wed Mar 4 19:36:10 2026 +0800
[UI]: Optimize table ui and deduplicate 403 login error (#4093)
Co-authored-by: majin.nathan <[email protected]>
---
amoro-web/src/main.ts | 13 ++++++++++++-
amoro-web/src/utils/request.ts | 10 +++++++++-
amoro-web/src/views/tables/components/TableExplorer.vue | 4 ++--
amoro-web/src/views/tables/index.vue | 15 +++++++++------
4 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/amoro-web/src/main.ts b/amoro-web/src/main.ts
index 7cab41637..d7f8da460 100644
--- a/amoro-web/src/main.ts
+++ b/amoro-web/src/main.ts
@@ -32,6 +32,7 @@ import './utils/editor'
import './assets/icons'
import loginService from './services/login.service'
import { getQueryString } from './utils'
+import { resetLoginTip } from './utils/request'
import SvgIcon from '@/components/svg-icon.vue'
import 'virtual:svg-icons-register'
@@ -72,11 +73,21 @@ RegisterComponents(app);
finally {
const store = useStore()
router.beforeEach((to: RouteLocationNormalized, from:
RouteLocationNormalized, next: NavigationGuardNext) => {
- // if no username in store and not go to login page, should redirect to
login page
store.setHistoryPath({
path: from.path,
query: from.query,
})
+ if (to.path === '/login') {
+ resetLoginTip()
+ next()
+ return
+ }
+ if (!store.userInfo.userName && to.path !== '/login') {
+ next({
+ path: '/login',
+ })
+ return
+ }
next()
})
diff --git a/amoro-web/src/utils/request.ts b/amoro-web/src/utils/request.ts
index e60f22d85..33beff375 100644
--- a/amoro-web/src/utils/request.ts
+++ b/amoro-web/src/utils/request.ts
@@ -22,6 +22,8 @@ import { message } from 'ant-design-vue'
import useStore from '@/store'
import router from '@/router'
+let loginTipShown = false
+
// http://10.196.98.23:19111/
export const baseURL = import.meta.env.PROD ? '' : (import.meta.env.MODE ===
'mock' ? '/mock' : '/')
@@ -161,8 +163,10 @@ const request: any = function (options:
CustomAxiosRequestConfig) {
store.updateUserInfo({
userName: '',
})
- if (requestConfig.handleError) {
+ const currentPath = router.currentRoute.value.path
+ if (requestConfig.handleError && currentPath !== '/login' &&
!loginTipShown) {
message.error(msg || 'need login')
+ loginTipShown = true
}
return router.push({
path: '/login',
@@ -259,4 +263,8 @@ export function downloadWithHeader(url: string, fileName:
string = 'download', _
}
+export function resetLoginTip() {
+ loginTipShown = false
+}
+
export default request as WrapperRequest
diff --git a/amoro-web/src/views/tables/components/TableExplorer.vue
b/amoro-web/src/views/tables/components/TableExplorer.vue
index fdc528c41..96740e9de 100755
--- a/amoro-web/src/views/tables/components/TableExplorer.vue
+++ b/amoro-web/src/views/tables/components/TableExplorer.vue
@@ -618,7 +618,7 @@ onBeforeMount(async () => {
flex-direction: column;
.table-explorer-header {
- padding: 0 12px;
+ padding: 0 7px 0 8px;
margin-bottom: 8px;
.search-input {
@@ -656,7 +656,7 @@ onBeforeMount(async () => {
flex: 1;
min-height: 0;
overflow: auto;
- padding: 0 12px;
+ padding: 0 7px 0 8px;
:deep(.ant-tree) {
background-color: #fff;
diff --git a/amoro-web/src/views/tables/index.vue
b/amoro-web/src/views/tables/index.vue
index 51ad9abe3..f3704dbe2 100644
--- a/amoro-web/src/views/tables/index.vue
+++ b/amoro-web/src/views/tables/index.vue
@@ -52,7 +52,7 @@ export default defineComponent({
const SIDEBAR_WIDTH_STORAGE_KEY = 'tables_sidebar_width'
const SIDEBAR_MIN_WIDTH = 320
const SIDEBAR_MAX_WIDTH = 800
- const sidebarWidth = ref(512)
+ const sidebarWidth = ref(320)
let isResizing = false
let startX = 0
@@ -71,7 +71,7 @@ export default defineComponent({
const initSidebarWidth = () => {
const stored = localStorage.getItem(SIDEBAR_WIDTH_STORAGE_KEY)
const parsed = stored ? Number.parseInt(stored, 10) : Number.NaN
- const base = Number.isFinite(parsed) ? clampSidebarWidth(parsed) : 512
+ const base = Number.isFinite(parsed) ? clampSidebarWidth(parsed) : 320
sidebarWidth.value = base
startWidth = base
}
@@ -317,6 +317,8 @@ export default defineComponent({
display: flex;
height: 100%;
align-items: stretch;
+ margin-top: -12px;
+ margin-bottom: -12px;
}
.tables-sidebar {
@@ -324,6 +326,7 @@ export default defineComponent({
height: 100%;
background-color: #fff;
position: relative;
+ padding-top: 12px;
}
.tables-main {
@@ -332,12 +335,13 @@ export default defineComponent({
flex-direction: column;
min-width: 0;
height: 100%;
+ padding-top: 12px;
}
.tables-divider {
position: relative;
- flex: 0 0 8px;
- width: 8px;
+ flex: 0 0 5px;
+ width: 5px;
height: 100%;
cursor: col-resize;
z-index: 2; // Ensure divider is above sidebar and main content so drag
area is not blocked
@@ -348,9 +352,8 @@ export default defineComponent({
position: absolute;
top: 0;
bottom: 0;
- left: 50%;
+ right: 2px;
width: 1px;
- transform: translateX(-50%);
background: #e8e8f0;
}