feat(web): 统一平台管理员判定与 AI 工作台申请预览动作接入
- authUser 抽出 resolveAuthUserAdminFlag,统一 isAdmin 解析(含 superadmin、role_codes、中英文角色名),accessControl 复用同一逻辑 - 登录态、应用外壳路由、系统状态接入统一管理员判定,LoginView 与相关 composable 配套调整 - AI 工作台申请提交改为调用新的 /application-preview-action 接口,草稿保存仍走 orchestrator;预审模型补充重叠冲突提示与阻断判断 - 同步更新 accessControl/api-request/ai 预览动作等前端测试
This commit is contained in:
@@ -72,38 +72,6 @@
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.login-entry-veil {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
z-index: 380;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
background: rgba(248, 250, 252, 0.9);
|
||||
backdrop-filter: blur(3px);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.login-entry-veil-enter-active {
|
||||
transition: opacity 180ms var(--ease);
|
||||
}
|
||||
|
||||
.login-entry-veil-leave-active {
|
||||
transition: opacity 260ms cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
.login-entry-veil-enter-from,
|
||||
.login-entry-veil-leave-to {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.app.login-entry-active .app-sidebar {
|
||||
animation: loginEntrySidebarIn 520ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
||||
}
|
||||
|
||||
.app.login-entry-active > .main {
|
||||
animation: loginEntryMainIn 620ms 90ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
||||
}
|
||||
|
||||
.boot-state {
|
||||
min-height: var(--desktop-stage-height, 100dvh);
|
||||
display: grid;
|
||||
@@ -234,6 +202,28 @@
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
}
|
||||
.document-detail-loading {
|
||||
min-height: 280px;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
align-content: center;
|
||||
gap: 14px;
|
||||
text-align: center;
|
||||
color: #475569;
|
||||
}
|
||||
.document-detail-loading i {
|
||||
font-size: 30px;
|
||||
color: var(--theme-primary-active);
|
||||
}
|
||||
.document-detail-loading strong {
|
||||
color: #0f172a;
|
||||
font-size: 16px;
|
||||
}
|
||||
.document-detail-loading p {
|
||||
margin: 6px 0 0;
|
||||
color: #64748b;
|
||||
font-size: 13px;
|
||||
}
|
||||
.workarea.settings-workarea {
|
||||
padding: 0;
|
||||
background: #fff;
|
||||
@@ -299,10 +289,6 @@
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
.app.login-entry-active .app-sidebar {
|
||||
animation: none;
|
||||
}
|
||||
|
||||
.app > .main {
|
||||
flex: 1 1 100%;
|
||||
width: 100vw;
|
||||
@@ -374,14 +360,4 @@
|
||||
flex-basis 120ms ease-out !important;
|
||||
transition-duration: 120ms, 120ms !important;
|
||||
}
|
||||
|
||||
.app.login-entry-active .app-sidebar,
|
||||
.app.login-entry-active > .main {
|
||||
animation: none !important;
|
||||
}
|
||||
|
||||
.login-entry-veil-enter-active,
|
||||
.login-entry-veil-leave-active {
|
||||
transition: opacity 120ms ease-out !important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1556,12 +1556,28 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.application-preview-row.is-disabled {
|
||||
cursor: wait;
|
||||
}
|
||||
|
||||
.application-preview-row.is-disabled .application-preview-label,
|
||||
.application-preview-row.is-disabled .application-preview-value {
|
||||
background: rgba(248, 250, 252, 0.84);
|
||||
color: #64748b;
|
||||
}
|
||||
|
||||
.application-preview-row.editable:hover,
|
||||
.application-preview-row.editable:hover .application-preview-label,
|
||||
.application-preview-row.editable:hover .application-preview-value {
|
||||
background: rgba(239, 246, 255, 0.58);
|
||||
}
|
||||
|
||||
.application-preview-row.is-disabled:hover,
|
||||
.application-preview-row.is-disabled:hover .application-preview-label,
|
||||
.application-preview-row.is-disabled:hover .application-preview-value {
|
||||
background: rgba(248, 250, 252, 0.84);
|
||||
}
|
||||
|
||||
.application-preview-row.editable:focus-visible {
|
||||
z-index: 1;
|
||||
outline: 2px solid rgba(37, 99, 235, 0.42);
|
||||
@@ -1655,6 +1671,12 @@
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.application-preview-edit-btn:disabled {
|
||||
cursor: wait;
|
||||
opacity: 0.46;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.application-preview-footer {
|
||||
color: #334155;
|
||||
font-size: 15px;
|
||||
@@ -1748,11 +1770,17 @@
|
||||
transform 160ms ease;
|
||||
}
|
||||
|
||||
.workbench-ai-suggested-actions button:hover {
|
||||
.workbench-ai-suggested-actions button:hover:not(:disabled) {
|
||||
transform: translateY(-1px);
|
||||
background: #eff6ff;
|
||||
}
|
||||
|
||||
.workbench-ai-suggested-actions button:disabled {
|
||||
cursor: wait;
|
||||
opacity: 0.6;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.workbench-ai-message-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -1940,6 +1968,12 @@
|
||||
box-shadow: 0 12px 22px rgba(220, 38, 38, 0.2);
|
||||
}
|
||||
|
||||
.workbench-ai-confirm-actions .primary {
|
||||
background: #2563eb;
|
||||
color: #fff;
|
||||
box-shadow: 0 12px 22px rgba(37, 99, 235, 0.2);
|
||||
}
|
||||
|
||||
.workbench-ai-confirm-fade-enter-active,
|
||||
.workbench-ai-confirm-fade-leave-active {
|
||||
transition: opacity 180ms ease;
|
||||
|
||||
@@ -559,11 +559,72 @@
|
||||
|
||||
.submit-btn:disabled,
|
||||
.sso-btn:disabled {
|
||||
opacity: .6;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* 登录中:SSO 按钮置灰,登录按钮保持主色并显示 spinner */
|
||||
.sso-btn:disabled {
|
||||
opacity: .6;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.submit-btn:disabled {
|
||||
opacity: 1;
|
||||
box-shadow: 0 16px 30px rgba(var(--theme-primary-rgb, 58, 124, 165), .20);
|
||||
}
|
||||
|
||||
/*
|
||||
* 登录中表单态:用户名 / 密码 / 租户 / 记住账号 / 忘记密码全部置灰禁用,
|
||||
* 让视觉焦点集中在正在校验的登录按钮上
|
||||
*/
|
||||
.login-form.is-submitting .field input,
|
||||
.login-form.is-submitting .field select {
|
||||
background: #f1f5f9;
|
||||
border-color: #e2e8f0;
|
||||
color: #94a3b8;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.login-form.is-submitting .field input::placeholder {
|
||||
color: #cbd5e1;
|
||||
}
|
||||
|
||||
.login-form.is-submitting .field > .mdi,
|
||||
.login-form.is-submitting .field-icon-btn,
|
||||
.login-form.is-submitting .field-select-chevron {
|
||||
color: #cbd5e1;
|
||||
opacity: .5;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.login-form.is-submitting .remember,
|
||||
.login-form.is-submitting .link-btn {
|
||||
opacity: .55;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* 登录按钮内的旋转 loading */
|
||||
.submit-btn__spinner {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border: 2.5px solid rgba(255, 255, 255, .4);
|
||||
border-top-color: #fff;
|
||||
border-radius: 999px;
|
||||
animation: loginSubmitSpin 720ms linear infinite;
|
||||
}
|
||||
|
||||
@keyframes loginSubmitSpin {
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.submit-btn__spinner {
|
||||
animation-duration: 1800ms;
|
||||
}
|
||||
}
|
||||
|
||||
.divider {
|
||||
position: relative;
|
||||
display: grid;
|
||||
|
||||
Reference in New Issue
Block a user