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:
@@ -158,6 +158,10 @@ export function useAppShell() {
|
||||
].some((value) => String(value || '').trim() === normalizedId)
|
||||
}
|
||||
|
||||
function isDetailLookupOnlyPayload(payload = {}) {
|
||||
return Boolean(payload?.detailLookupOnly || payload?.detail_lookup_only)
|
||||
}
|
||||
|
||||
function resolveRequestDetailLookupId(requestOrId = selectedRequestSnapshot.value) {
|
||||
if (typeof requestOrId === 'string') {
|
||||
return requestOrId.trim()
|
||||
@@ -168,6 +172,8 @@ export function useAppShell() {
|
||||
|| requestOrId?.id
|
||||
|| requestOrId?.claimNo
|
||||
|| requestOrId?.claim_no
|
||||
|| requestOrId?.documentNo
|
||||
|| requestOrId?.document_no
|
||||
|| ''
|
||||
).trim()
|
||||
}
|
||||
@@ -564,13 +570,18 @@ export function useAppShell() {
|
||||
}
|
||||
|
||||
function openRequestDetail(request, options = {}) {
|
||||
selectedRequestSnapshot.value = request || null
|
||||
const requestId = resolveRequestDetailLookupId(request)
|
||||
if (!requestId) {
|
||||
return
|
||||
}
|
||||
const isDetailLookupOnlyRequest = isDetailLookupOnlyPayload(request)
|
||||
selectedRequestSnapshot.value = isDetailLookupOnlyRequest ? null : request || null
|
||||
router.push({
|
||||
name: 'app-document-detail',
|
||||
params: { requestId: request.claimId || request.id },
|
||||
params: { requestId },
|
||||
query: buildDocumentDetailQuery(options)
|
||||
})
|
||||
void refreshSelectedRequestDetail(request)
|
||||
void refreshSelectedRequestDetail(isDetailLookupOnlyRequest ? requestId : request)
|
||||
}
|
||||
|
||||
function closeRequestDetail() {
|
||||
|
||||
@@ -15,7 +15,7 @@ import { resolveDefaultAuthorizedRoute } from '../utils/accessControl.js'
|
||||
import { useToast } from './useToast.js'
|
||||
import { fetchSettings } from '../services/settings.js'
|
||||
import { setThemeSkin } from './useThemeSkin.js'
|
||||
import { normalizeAuthUserSnapshot } from '../utils/authUser.js'
|
||||
import { normalizeAuthUserSnapshot, resolveAuthUserAdminFlag } from '../utils/authUser.js'
|
||||
import {
|
||||
clearAuthSessionMetrics,
|
||||
finalizeAuthSession,
|
||||
@@ -142,18 +142,7 @@ function buildLegacyAdminUser(username = '') {
|
||||
}
|
||||
|
||||
function resolvePlatformAdminFlag(payload, roleCodes = []) {
|
||||
const username = String(payload?.username || payload?.account || '').trim().toLowerCase()
|
||||
const role = String(payload?.role || '').trim().toLowerCase()
|
||||
const normalizedRoleCodes = roleCodes.map((item) => String(item || '').trim().toLowerCase()).filter(Boolean)
|
||||
|
||||
return (
|
||||
Boolean(payload?.isAdmin)
|
||||
|| username === 'admin'
|
||||
|| role === 'admin'
|
||||
|| role === '管理员'
|
||||
|| role === '系统管理员'
|
||||
|| normalizedRoleCodes.includes('admin')
|
||||
)
|
||||
return resolveAuthUserAdminFlag(payload, roleCodes)
|
||||
}
|
||||
|
||||
function normalizeStoredAuthUser(payload = {}) {
|
||||
|
||||
Reference in New Issue
Block a user