20260821173417
This commit is contained in:
1 parent
45854b0570
commit
2e5d532f23
19 files changed
+1495
-93
No files matched your search
@@ -250,7 +250,8 @@ async function submitUpload() {
|
||||
emit('uploaded')
|
||||
await loadFiles(1)
|
||||
} catch (e) {
|
||||
Message.error('上传失败:' + (e?.message || e))
|
||||
// 服务端不可达 / 5xx 已由 http 拦截器统一弹 Message,这里去重
|
||||
if (!e?.toasted) Message.error('上传失败:' + (e?.message || e))
|
||||
} finally {
|
||||
uploading.value = false
|
||||
}
|
||||
@@ -305,7 +306,8 @@ async function deleteSelected() {
|
||||
emit('deleted')
|
||||
await loadFiles(currentPage.value)
|
||||
} catch (e) {
|
||||
Message.error('删除失败:' + (e?.message || e))
|
||||
// 服务端不可达 / 5xx 已由 http 拦截器统一弹 Message,这里去重
|
||||
if (!e?.toasted) Message.error('删除失败:' + (e?.message || e))
|
||||
}
|
||||
},
|
||||
})
|
||||
@@ -330,7 +332,8 @@ async function deleteSingle(file) {
|
||||
emit('deleted')
|
||||
await loadFiles(currentPage.value)
|
||||
} catch (e) {
|
||||
Message.error('删除失败:' + (e?.message || e))
|
||||
// 服务端不可达 / 5xx 已由 http 拦截器统一弹 Message,这里去重
|
||||
if (!e?.toasted) Message.error('删除失败:' + (e?.message || e))
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
@@ -213,6 +213,30 @@ defineExpose({ moduleId, refreshCategories: loadCategories })
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
/* 分隔条:宽 0 + 无负 margin,不占 flex 宽度,面板在交界处无缝相接,
|
||||
消除分割线左右两侧的空白条(对比:DefaultLayout 用负 margin 让面板互相
|
||||
覆盖,但附件三栏背景色不同——白列表 / 灰预览——覆盖会露底,这里改用
|
||||
::after 扩展命中区,不挤压面板也不遮挡相邻面板背景)。 */
|
||||
.ff-splitter :deep(> .fms-splitter-bar) {
|
||||
width: 0;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* 命中区:从宽 0 的分隔条向两侧各伸出 3px(共 6px,与 --fms-splitter-trigger-size
|
||||
一致),保持拖拽热区不变;伪元素的事件命中会冒泡到 .fms-splitter-bar 本体,
|
||||
pointerdown / 键盘聚焦仍由原逻辑处理 */
|
||||
.ff-splitter :deep(> .fms-splitter-bar::after) {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: var(--fms-splitter-trigger-size);
|
||||
cursor: col-resize;
|
||||
}
|
||||
|
||||
.ff-center {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
|
||||
@@ -69,10 +69,6 @@ const { state } = useFileModal()
|
||||
/* Modal 根节点是 Teleport,class 无法透传(Vue 会告警且不生效),
|
||||
因此通过内容锚点 .ff-container(FmsFile 根元素)用 :has() 定位附件弹窗。
|
||||
打开中的附件弹窗体内必然渲染 .ff-container,其他弹窗不受影响。 */
|
||||
.fms-modal:has(.ff-container) {
|
||||
max-width: 1440px; /* 超宽屏封顶,避免三栏被拉得过宽 */
|
||||
min-width: 960px; /* 极小屏保底,三栏不挤 */
|
||||
}
|
||||
|
||||
.fms-modal-body:has(.ff-container) {
|
||||
padding: 0;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import axios from 'axios'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
import { Message } from '@/components/ui/message/message-manager'
|
||||
|
||||
const AUTH_ERROR_CODE = 401
|
||||
const SESSION_REPLACED_CODE = 40101
|
||||
@@ -81,13 +82,23 @@ http.interceptors.response.use(
|
||||
const errorCode = payload?.code ?? status ?? 0
|
||||
if (isAuthenticationError(errorCode)) handleUnauthorized(errorCode)
|
||||
|
||||
const requestError = new Error(
|
||||
const message =
|
||||
payload?.message ||
|
||||
(error.code === 'ECONNABORTED' ? '请求超时,请稍后重试' : '网络异常,请检查服务是否正常'),
|
||||
)
|
||||
(error.code === 'ECONNABORTED' ? '请求超时,请稍后重试' : '网络异常,请检查服务是否正常')
|
||||
|
||||
const requestError = new Error(message)
|
||||
requestError.code = payload?.code ?? status ?? -1
|
||||
requestError.data = payload?.data
|
||||
requestError.success = false
|
||||
|
||||
// 服务端不可达(无 status)/ 5xx 属全局性问题,统一弹 Message 提示;
|
||||
// 4xx 等业务错误由调用方自行决定提示方式。
|
||||
// 打 toasted 标记:登录、上传/删除等已有自身 Message 的调用方据此去重,避免重复弹窗
|
||||
if (!status || status >= 500) {
|
||||
Message.error(message)
|
||||
requestError.toasted = true
|
||||
}
|
||||
|
||||
throw requestError
|
||||
},
|
||||
)
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
|
||||
/* 栅格(grid):默认水平/垂直间距(不随主题变化) */
|
||||
--fms-grid-gutter: 0px;
|
||||
--fms-splitter-bar-size: 2px;
|
||||
--fms-splitter-bar-size: 1px;
|
||||
--fms-splitter-bar-size-hover: 4px;
|
||||
--fms-splitter-handle-size: 20px;
|
||||
|
||||
|
||||
@@ -60,7 +60,8 @@ async function onSubmit(values) {
|
||||
Message.success('登录成功')
|
||||
router.replace(String(route.query.redirect || '/dashboard'))
|
||||
} catch (e) {
|
||||
Message.error(e.message || '登录失败,请稍后重试')
|
||||
// 服务端不可达 / 5xx 已由 http 拦截器统一弹 Message,这里去重避免重复弹窗
|
||||
if (!e?.toasted) Message.error(e.message || '登录失败,请稍后重试')
|
||||
} finally {
|
||||
submitting.value = false
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user