xiangning dca6267649 feat: 后端动态菜单(backend模式) + 子路由相对path + vxe-table适配器补齐
- accessMode 切换为 backend:菜单由后端 /menu/all 动态驱动
- 子路由 path 改为相对(analytics/workspace/user 等),vue-router 拼接为 /dashboard/analytics
- 修复 /workspace /analytics 等页面 404(中间层无 component 导致 children 无法渲染)
- vxe-table 适配器补齐 CellTag/CellSwitch/CellOperation + VbenTableAction
- enableRefreshToken 双token自动刷新
- 头像走 /api/files/preview 代理(avatars/ 免鉴权)
2026-07-04 17:24:02 +08:00

142 lines
4.1 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<style data-app-loading="inject-css">
html {
/* 与 ant-design-vue/dist/reset.css 一致,避免标题行高跳动 */
line-height: 1.15;
}
.loading {
position: fixed;
top: 0;
left: 0;
z-index: 9999;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
overflow: hidden;
background-color: #f4f7f9;
}
.loading.hidden {
visibility: hidden;
pointer-events: none;
opacity: 0;
transition: all 0.8s ease-out;
}
.dark .loading {
background: #0d0d10;
}
/* BuildFlow 品牌 logo:内联 SVG,保证首屏(JS 未执行前)即可见。 */
.logo {
width: 64px;
height: 64px;
filter: drop-shadow(0 14px 26px rgb(10 132 255 / 22%));
animation: pulse-ani 1.8s ease-in-out infinite;
}
.logo-line {
stroke-dasharray: 92;
stroke-dashoffset: 92;
animation: draw-line 1.8s ease-in-out infinite;
}
.logo-node {
transform-box: fill-box;
transform-origin: center;
animation: node-pop 1.8s ease-in-out infinite;
}
.logo-node:nth-of-type(2) {
animation-delay: 0.12s;
}
.logo-node:nth-of-type(3) {
animation-delay: 0.24s;
}
.title {
margin-top: 20px;
font-size: 22px;
font-weight: 600;
color: rgb(0 0 0 / 85%);
letter-spacing: 0.5px;
}
.dark .title {
color: #fff;
}
@keyframes pulse-ani {
0%,
100% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(0.88);
opacity: 0.65;
}
}
@keyframes draw-line {
0% {
stroke-dashoffset: 92;
opacity: 0.35;
}
45%,
70% {
stroke-dashoffset: 0;
opacity: 1;
}
100% {
stroke-dashoffset: -92;
opacity: 0.35;
}
}
@keyframes node-pop {
0%,
100% {
transform: scale(0.86);
opacity: 0.72;
}
45%,
70% {
transform: scale(1);
opacity: 1;
}
}
</style>
<div class="loading" id="__app-loading__">
<!-- BuildFlow 流程标识(内联,首屏零依赖可见) -->
<svg id="buildflow-flow-mark" class="logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none" role="img" aria-label="BuildFlow">
<defs>
<linearGradient id="buildflow-loading-bg" x1="8" y1="7" x2="56" y2="58" gradientUnits="userSpaceOnUse">
<stop stop-color="#0A84FF" />
<stop offset="0.56" stop-color="#14B8A6" />
<stop offset="1" stop-color="#111827" />
</linearGradient>
<linearGradient id="buildflow-loading-line" x1="15" y1="20" x2="49" y2="44" gradientUnits="userSpaceOnUse">
<stop stop-color="#E0F2FE" />
<stop offset="1" stop-color="#FFFFFF" />
</linearGradient>
</defs>
<rect width="64" height="64" rx="16" fill="url(#buildflow-loading-bg)" />
<path d="M12 47C20.5 53.5 36.5 54.5 51 44.5C58.2 39.5 59.4 29.8 54.8 22.6C49.5 14.4 38.6 10.9 28.3 13.1C18.5 15.2 10.5 22.1 9.8 31.3C9.3 37.7 8.5 44.3 12 47Z" fill="#FFFFFF" opacity="0.09" />
<path class="logo-line" d="M18 22H30C34.4 22 36.6 27.3 33.5 30.4L30.4 33.5C28.8 35.1 29.9 38 32.2 38H46" stroke="url(#buildflow-loading-line)" stroke-width="4.4" stroke-linecap="round" stroke-linejoin="round" />
<path class="logo-line" d="M41 32L47 38L41 44" stroke="#FFFFFF" stroke-width="4.4" stroke-linecap="round" stroke-linejoin="round" />
<rect id="buildflow-node-start" class="logo-node" x="13" y="17" width="13" height="13" rx="4" fill="#FFFFFF" />
<rect x="16.4" y="20.4" width="6.2" height="6.2" rx="1.6" fill="#0A84FF" />
<rect id="buildflow-node-middle" class="logo-node" x="24.5" y="27.5" width="15" height="15" rx="5" fill="#FFFFFF" />
<path d="M29 35H35" stroke="#14B8A6" stroke-width="2.8" stroke-linecap="round" />
<path d="M32 32V38" stroke="#14B8A6" stroke-width="2.8" stroke-linecap="round" />
<rect id="buildflow-node-finish" class="logo-node" x="43" y="33" width="11" height="11" rx="3.5" fill="#FFFFFF" />
<path d="M46.5 38.8L48.2 40.5L51.1 36.7" stroke="#111827" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
</svg>
<div class="title">%VITE_APP_TITLE%</div>
</div>