com-angel-authorization 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -2
- package/dist/index.cjs +19 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +24 -4
- package/dist/index.d.ts +24 -4
- package/dist/index.js +18 -6
- package/dist/index.js.map +1 -1
- package/dist/react/index.cjs +163 -10
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +40 -4
- package/dist/react/index.d.ts +40 -4
- package/dist/react/index.js +160 -10
- package/dist/react/index.js.map +1 -1
- package/dist/vue/index.cjs +199 -11
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.cts +83 -4
- package/dist/vue/index.d.ts +83 -4
- package/dist/vue/index.js +196 -11
- package/dist/vue/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/store.ts","../src/utils/snowflake.ts","../src/resources/types.ts","../src/resources/pagination.ts","../src/resources/api.ts"],"names":["text"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n CheckOptions,\n MatchMode,\n PermissionChecker,\n PermissionCode,\n PermissionListener,\n PermissionState,\n RoleCode,\n} from './types';\n\nconst DEFAULT_STATE: PermissionState = {\n permissions: [],\n roles: [],\n isSuperAdmin: false,\n};\n\nfunction toArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n\nfunction matchCodes(\n owned: Set<string>,\n required: string[],\n mode: MatchMode,\n isSuperAdmin: boolean,\n): boolean {\n if (isSuperAdmin) return true;\n if (required.length === 0) return true;\n\n if (mode === 'all') {\n return required.every((code) => owned.has(code));\n }\n\n return required.some((code) => owned.has(code));\n}\n\n/**\n * Mutable permission store shared by React / Vue adapters.\n * Framework-agnostic — safe to use in Node, browser, or any UI lib.\n */\nexport class PermissionStore implements PermissionChecker {\n private state: PermissionState;\n private permissionSet: Set<string>;\n private roleSet: Set<string>;\n private listeners = new Set<PermissionListener>();\n\n constructor(initial?: Partial<PermissionState>) {\n this.state = {\n ...DEFAULT_STATE,\n ...initial,\n permissions: initial?.permissions ?? [],\n roles: initial?.roles ?? [],\n };\n this.permissionSet = new Set(this.state.permissions);\n this.roleSet = new Set(this.state.roles);\n }\n\n getState(): PermissionState {\n return {\n permissions: [...this.state.permissions],\n roles: [...this.state.roles],\n isSuperAdmin: this.state.isSuperAdmin,\n };\n }\n\n setState(next: Partial<PermissionState>): void {\n this.state = {\n permissions: next.permissions ?? this.state.permissions,\n roles: next.roles ?? this.state.roles,\n isSuperAdmin: next.isSuperAdmin ?? this.state.isSuperAdmin,\n };\n this.permissionSet = new Set(this.state.permissions);\n this.roleSet = new Set(this.state.roles);\n this.emit();\n }\n\n setPermissions(permissions: PermissionCode[]): void {\n this.setState({ permissions });\n }\n\n setRoles(roles: RoleCode[]): void {\n this.setState({ roles });\n }\n\n setSuperAdmin(isSuperAdmin: boolean): void {\n this.setState({ isSuperAdmin });\n }\n\n /** Replace permissions, roles and super-admin flag in one shot (typical after login). */\n hydrate(payload: Partial<PermissionState>): void {\n this.setState({\n permissions: payload.permissions ?? [],\n roles: payload.roles ?? [],\n isSuperAdmin: payload.isSuperAdmin ?? false,\n });\n }\n\n /** Clear all authz data (typical after logout). */\n clear(): void {\n this.hydrate({});\n }\n\n hasPermission(\n codes: PermissionCode | PermissionCode[],\n options: CheckOptions = {},\n ): boolean {\n const mode = options.mode ?? 'any';\n return matchCodes(\n this.permissionSet,\n toArray(codes).filter(Boolean),\n mode,\n Boolean(this.state.isSuperAdmin),\n );\n }\n\n hasRole(codes: RoleCode | RoleCode[], options: CheckOptions = {}): boolean {\n const mode = options.mode ?? 'any';\n return matchCodes(\n this.roleSet,\n toArray(codes).filter(Boolean),\n mode,\n Boolean(this.state.isSuperAdmin),\n );\n }\n\n /** Alias of `hasPermission` for template-friendly APIs. */\n can(codes: PermissionCode | PermissionCode[], options?: CheckOptions): boolean {\n return this.hasPermission(codes, options);\n }\n\n subscribe(listener: PermissionListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private emit(): void {\n const snapshot = this.getState();\n this.listeners.forEach((listener) => listener(snapshot));\n }\n}\n\nexport function createPermissionStore(\n initial?: Partial<PermissionState>,\n): PermissionStore {\n return new PermissionStore(initial);\n}\n","const DEVICE_WORKER_ID_KEY = 'hgams_device_worker_id';\n\nfunction generateDeviceWorkerId(): bigint {\n const cached = localStorage.getItem(DEVICE_WORKER_ID_KEY);\n if (cached !== null && cached !== '') {\n return BigInt(cached);\n }\n\n const components = [\n navigator.userAgent,\n screen.width + 'x' + screen.height,\n screen.colorDepth,\n navigator.language,\n new Date().getTimezoneOffset(),\n navigator.hardwareConcurrency,\n (navigator as Navigator & { deviceMemory?: number }).deviceMemory,\n ];\n\n const fingerprint = components.join('|');\n\n let hash = 0;\n for (let i = 0; i < fingerprint.length; i++) {\n hash = (hash << 5) - hash + fingerprint.charCodeAt(i);\n hash |= 0;\n }\n\n const maxWorkerId = Math.pow(2, 14) - 1;\n const workerId = Math.abs(hash % maxWorkerId);\n const workerIdBigInt = BigInt(workerId);\n localStorage.setItem(DEVICE_WORKER_ID_KEY, workerIdBigInt.toString());\n return workerIdBigInt;\n}\n\ninterface SnowyflakeOptions {\n epoch?: bigint;\n workerId?: bigint;\n processId?: bigint;\n workerIdBits?: number;\n processIdBits?: number;\n sequenceBits?: number;\n}\n\n/**\n * snowyflake 2.0.1 仅支持固定 5+5+12 位布局,此处按相同 nextId 算法实现可配置位数版本。\n */\nclass ConfigurableSnowflake {\n readonly epoch: bigint;\n readonly workerId: bigint;\n readonly processId: bigint;\n\n private readonly sequenceMask: bigint;\n private readonly timestampLeftShift: bigint;\n private readonly workerIdShift: bigint;\n private readonly processIdShift: bigint;\n private sequence = 0n;\n private latestTimestamp = BigInt(Date.now());\n\n constructor({\n epoch = 0n,\n workerId = 0n,\n processId = 0n,\n workerIdBits = 5,\n processIdBits = 5,\n sequenceBits = 12,\n }: SnowyflakeOptions = {}) {\n this.epoch = epoch;\n\n const workerIdBitsBig = BigInt(workerIdBits);\n const processIdBitsBig = BigInt(processIdBits);\n const sequenceBitsBig = BigInt(sequenceBits);\n const workerIdMask = -1n ^ (-1n << workerIdBitsBig);\n const processIdMask = -1n ^ (-1n << processIdBitsBig);\n\n this.sequenceMask = -1n ^ (-1n << sequenceBitsBig);\n this.timestampLeftShift =\n sequenceBitsBig + workerIdBitsBig + processIdBitsBig;\n this.workerIdShift = sequenceBitsBig + processIdBitsBig;\n this.processIdShift = sequenceBitsBig;\n\n this.workerId = workerId & workerIdMask;\n this.processId = processId & processIdMask;\n }\n\n nextId(): bigint {\n const timestamp = BigInt(Date.now());\n\n if (this.latestTimestamp === timestamp) {\n this.sequence = (this.sequence + 1n) & this.sequenceMask;\n } else {\n this.sequence = 0n;\n this.latestTimestamp = timestamp;\n }\n\n return (\n ((timestamp - this.epoch) << this.timestampLeftShift) |\n (this.workerId << this.workerIdShift) |\n (this.processId << this.processIdShift) |\n this.sequence\n );\n }\n}\n\n/** 应用级单例,模块加载时只初始化一次(不受 React StrictMode 重复 mount 影响) */\nexport const snowyflake = new ConfigurableSnowflake({\n workerId: generateDeviceWorkerId(),\n workerIdBits: 14,\n processIdBits: 0,\n sequenceBits: 8,\n epoch: BigInt(new Date('2026-06-08').getTime()),\n});\n\n/** 生成雪花 ID 字符串(reportId、detailId、resourceId 等) */\nexport function getAppClientId(): string {\n return snowyflake.nextId().toString();\n}\n\nexport function getDeviceWorkerId(): string {\n return snowyflake.workerId.toString();\n}\n","export type PageDirection = 'previous' | 'current' | 'next';\n\nexport type ListPaginationParams = {\n pageToken?: string;\n pageSize?: string;\n pageDirection?: PageDirection;\n};\n\nexport type ListPaginationResult = {\n pageToken: string;\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n};\n\n/** 通用状态:权限点 1 启用 / 0 禁用;菜单 1 显示 / 0 隐藏 */\nexport type ResourceStatus = 0 | 1;\n\n/** 权限点类型 */\nexport type ApiResourceType = 'api';\n\n/** 菜单资源类型 */\nexport type MenuResourceType = 'page' | 'menu' | 'button';\n\nexport type ResourceType = ApiResourceType | MenuResourceType;\n\nexport type AuthorizationResource = {\n resourceId: string;\n type: ApiResourceType;\n name: string;\n identification: string;\n status: ResourceStatus;\n private: boolean;\n description: string;\n};\n\nexport type AuthorizationResourceFormValues = {\n name: string;\n identification: string;\n status: ResourceStatus;\n private: boolean;\n description: string;\n};\n\nexport type CreateAuthorizationResourceBody = AuthorizationResourceFormValues & {\n resourceId: string;\n type: ApiResourceType;\n};\n\nexport type UpdateAuthorizationResourceBody = Partial<AuthorizationResourceFormValues> & {\n type?: ApiResourceType;\n};\n\nexport type FetchAuthorizationResourcesParams = {\n pagination?: ListPaginationParams;\n};\n\nexport type AuthorizationResourceListResult = {\n records: AuthorizationResource[];\n pageToken: string;\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n};\n\nexport type MenuResource = {\n resourceId: string;\n parentId: string;\n type: MenuResourceType;\n name: string;\n identification: string;\n permissionPointIds: string[];\n /** 关联权限点名称(列表展示用,后端可能返回) */\n permissionPointNames?: string[];\n status: ResourceStatus;\n};\n\nexport type MenuResourceFormValues = {\n parentId: string;\n type: MenuResourceType;\n name: string;\n identification: string;\n permissionPointIds: string[];\n status: ResourceStatus;\n};\n\nexport type CreateMenuResourceBody = MenuResourceFormValues & {\n resourceId: string;\n};\n\nexport type UpdateMenuResourceBody = Partial<MenuResourceFormValues>;\n\nexport type FetchMenuResourcesParams = {\n pagination?: ListPaginationParams;\n};\n\nexport type MenuResourceListResult = {\n records: MenuResource[];\n pageToken: string;\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n};\n\nexport const RESOURCE_TYPE_API: ApiResourceType = 'api';\nexport const MENU_TYPE_PAGE: MenuResourceType = 'page';\nexport const MENU_TYPE_MENU: MenuResourceType = 'menu';\nexport const MENU_TYPE_BUTTON: MenuResourceType = 'button';\n\n/** 菜单列表查询 type 参数 */\nexport const MENU_LIST_TYPE_PARAM = 'page,menu,button';\n\nexport const ROOT_PARENT_ID = '0';\n\nexport const RESOURCE_STATUS_ENABLED: ResourceStatus = 1;\nexport const RESOURCE_STATUS_DISABLED: ResourceStatus = 0;\n\nexport const RESOURCE_STATUS_OPTIONS: { label: string; value: ResourceStatus }[] = [\n { label: '启用', value: RESOURCE_STATUS_ENABLED },\n { label: '禁用', value: RESOURCE_STATUS_DISABLED },\n];\n\n/** 菜单可见性 */\nexport const MENU_VISIBILITY_OPTIONS: { label: string; value: ResourceStatus }[] = [\n { label: '显示', value: RESOURCE_STATUS_ENABLED },\n { label: '隐藏', value: RESOURCE_STATUS_DISABLED },\n];\n\nexport const RESOURCE_PRIVATE_OPTIONS: { label: string; value: boolean }[] = [\n { label: '是', value: true },\n { label: '否', value: false },\n];\n\nexport const MENU_TYPE_OPTIONS: { label: string; value: MenuResourceType }[] = [\n { label: '目录', value: MENU_TYPE_PAGE },\n { label: '菜单', value: MENU_TYPE_MENU },\n { label: '按钮', value: MENU_TYPE_BUTTON },\n];\n\nexport const MENU_TYPE_LABEL: Record<MenuResourceType, string> = {\n page: '目录',\n menu: '菜单',\n button: '按钮',\n};\n","import type { ListPaginationResult } from './types';\n\nexport function appendQueryParam(parts: string[], key: string, value: string): void {\n if (value !== undefined && value !== null && String(value) !== '') {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n}\n\nexport function extractPagination(payload: unknown): ListPaginationResult {\n if (!payload || typeof payload !== 'object') {\n return {\n pageToken: '',\n hasPreviousPage: false,\n hasNextPage: false,\n };\n }\n\n const envelope = payload as Record<string, unknown>;\n const pagination = (\n envelope.pagination && typeof envelope.pagination === 'object'\n ? envelope.pagination\n : envelope.page && typeof envelope.page === 'object'\n ? envelope.page\n : null\n ) as Record<string, unknown> | null;\n\n const rawPageToken =\n pagination?.['page-token'] ??\n pagination?.pageToken ??\n pagination?.nextPageToken ??\n envelope['page-token'] ??\n envelope.pageToken ??\n '';\n const pageToken =\n rawPageToken === undefined || rawPageToken === null ? '' : String(rawPageToken);\n\n const hasPreviousPage = Boolean(\n pagination?.hasPreviousPage ??\n pagination?.hasPrevious ??\n pagination?.hasPre ??\n pagination?.previous ??\n envelope.hasPreviousPage ??\n envelope.hasPrevious,\n );\n const hasNextPage = Boolean(\n pagination?.hasNextPage ??\n pagination?.hasNext ??\n pagination?.next ??\n envelope.hasNextPage ??\n envelope.hasNext,\n );\n\n return {\n pageToken,\n hasPreviousPage,\n hasNextPage,\n };\n}\n\nexport function extractRecords(payload: unknown): unknown[] {\n if (!payload) return [];\n if (Array.isArray(payload)) return payload;\n\n if (typeof payload === 'object') {\n const envelope = payload as Record<string, unknown>;\n const data = envelope.data;\n\n if (Array.isArray(data)) return data;\n\n if (data && typeof data === 'object') {\n const nested = data as Record<string, unknown>;\n if (Array.isArray(nested.records)) return nested.records;\n if (Array.isArray(nested.items)) return nested.items;\n if (Array.isArray(nested.list)) return nested.list;\n if (Array.isArray(nested.content)) return nested.content;\n }\n\n if (Array.isArray(envelope.records)) return envelope.records;\n if (Array.isArray(envelope.items)) return envelope.items;\n if (Array.isArray(envelope.list)) return envelope.list;\n if (Array.isArray(envelope.content)) return envelope.content;\n }\n\n return [];\n}\n","import { getAppClientId } from '../utils/snowflake';\nimport { appendQueryParam, extractPagination, extractRecords } from './pagination';\nimport {\n MENU_LIST_TYPE_PARAM,\n MENU_TYPE_BUTTON,\n MENU_TYPE_MENU,\n MENU_TYPE_PAGE,\n RESOURCE_STATUS_DISABLED,\n RESOURCE_STATUS_ENABLED,\n RESOURCE_TYPE_API,\n ROOT_PARENT_ID,\n type AuthorizationResource,\n type AuthorizationResourceFormValues,\n type AuthorizationResourceListResult,\n type CreateAuthorizationResourceBody,\n type CreateMenuResourceBody,\n type FetchAuthorizationResourcesParams,\n type FetchMenuResourcesParams,\n type MenuResource,\n type MenuResourceFormValues,\n type MenuResourceListResult,\n type MenuResourceType,\n type ResourceStatus,\n type UpdateAuthorizationResourceBody,\n type UpdateMenuResourceBody,\n} from './types';\n\nexport type HttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE';\n\nexport type ResourceRequestOptions = {\n method: HttpMethod;\n url: string;\n body?: unknown;\n signal?: AbortSignal;\n};\n\n/**\n * 由宿主应用注入的请求函数(可对接 Angel_HGAMS 的 apiGetJson / apiPostJson 等)。\n */\nexport type ResourceHttpRequest = <T = unknown>(\n options: ResourceRequestOptions,\n) => Promise<T>;\n\nexport type AuthorizationResourceApi = {\n list: (\n params?: FetchAuthorizationResourcesParams,\n signal?: AbortSignal,\n ) => Promise<AuthorizationResourceListResult>;\n create: (\n values: AuthorizationResourceFormValues,\n signal?: AbortSignal,\n ) => Promise<unknown>;\n update: (\n resourceId: string,\n values: AuthorizationResourceFormValues,\n signal?: AbortSignal,\n ) => Promise<unknown>;\n remove: (resourceId: string, signal?: AbortSignal) => Promise<unknown>;\n};\n\nexport type MenuResourceApi = {\n list: (\n params?: FetchMenuResourcesParams,\n signal?: AbortSignal,\n ) => Promise<MenuResourceListResult>;\n /** 拉取权限点(type=api),供菜单表单多选 */\n listPermissionPoints: (\n params?: FetchAuthorizationResourcesParams,\n signal?: AbortSignal,\n ) => Promise<AuthorizationResourceListResult>;\n create: (values: MenuResourceFormValues, signal?: AbortSignal) => Promise<unknown>;\n update: (\n resourceId: string,\n values: MenuResourceFormValues,\n signal?: AbortSignal,\n ) => Promise<unknown>;\n remove: (resourceId: string, signal?: AbortSignal) => Promise<unknown>;\n};\n\nfunction toResourceStatus(value: unknown): ResourceStatus {\n const n = Number(value);\n return n === RESOURCE_STATUS_ENABLED ? RESOURCE_STATUS_ENABLED : RESOURCE_STATUS_DISABLED;\n}\n\nfunction toBoolean(value: unknown): boolean {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'number') return value !== 0;\n if (typeof value === 'string') {\n const v = value.trim().toLowerCase();\n return v === 'true' || v === '1' || v === 'yes' || v === '是';\n }\n return false;\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value\n .map((item) => {\n if (item && typeof item === 'object') {\n const row = item as Record<string, unknown>;\n const id = row.resourceId ?? row.resource_id ?? row.id;\n return id === undefined || id === null ? '' : String(id);\n }\n return String(item ?? '');\n })\n .filter(Boolean);\n }\n if (typeof value === 'string' && value.trim()) {\n return value\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nfunction toMenuType(value: unknown): MenuResourceType {\n const v = String(value ?? '').toLowerCase();\n if (v === MENU_TYPE_PAGE || v === MENU_TYPE_MENU || v === MENU_TYPE_BUTTON) {\n return v;\n }\n return MENU_TYPE_MENU;\n}\n\nexport function mapAuthorizationResource(item: unknown): AuthorizationResource | null {\n if (!item || typeof item !== 'object') return null;\n const row = item as Record<string, unknown>;\n const resourceId = row.resourceId ?? row.resource_id ?? row.id;\n if (resourceId === undefined || resourceId === null || resourceId === '') return null;\n\n return {\n resourceId: String(resourceId),\n type: RESOURCE_TYPE_API,\n name: String(row.name ?? ''),\n identification: String(row.identification ?? row.identity ?? ''),\n status: toResourceStatus(row.status),\n private: toBoolean(row.private ?? row.isPrivate ?? row.is_private),\n description: String(row.description ?? row.desc ?? ''),\n };\n}\n\nexport function mapMenuResource(item: unknown): MenuResource | null {\n if (!item || typeof item !== 'object') return null;\n const row = item as Record<string, unknown>;\n const resourceId = row.resourceId ?? row.resource_id ?? row.id;\n if (resourceId === undefined || resourceId === null || resourceId === '') return null;\n\n const permissionPointIds = toStringArray(\n row.permissionPointIds ??\n row.permission_point_ids ??\n row.permissionPoints ??\n row.permissions,\n );\n\n const permissionNamesRaw =\n row.permissionPointNames ?? row.permission_point_names ?? row.permissionNames;\n const permissionPointNames = Array.isArray(permissionNamesRaw)\n ? permissionNamesRaw.map((n) => String(n ?? '')).filter(Boolean)\n : undefined;\n\n const parentId = row.parentId ?? row.parent_id ?? ROOT_PARENT_ID;\n\n return {\n resourceId: String(resourceId),\n parentId: parentId === undefined || parentId === null ? ROOT_PARENT_ID : String(parentId),\n type: toMenuType(row.type),\n name: String(row.name ?? ''),\n identification: String(row.identification ?? row.identity ?? row.path ?? ''),\n permissionPointIds,\n permissionPointNames,\n status: toResourceStatus(row.status),\n };\n}\n\nfunction buildListUrl(type: string, params?: { pagination?: FetchAuthorizationResourcesParams['pagination'] }): string {\n const parts: string[] = [];\n appendQueryParam(parts, 'type', type);\n appendQueryParam(parts, 'page-token', params?.pagination?.pageToken ?? '');\n appendQueryParam(parts, 'page-size', params?.pagination?.pageSize ?? '20');\n appendQueryParam(parts, 'page-direction', params?.pagination?.pageDirection ?? 'current');\n return `/authorization-resources?${parts.join('&')}`;\n}\n\nexport function buildCreateBody(\n values: AuthorizationResourceFormValues,\n resourceId = getAppClientId(),\n): CreateAuthorizationResourceBody {\n return {\n resourceId,\n type: RESOURCE_TYPE_API,\n name: values.name.trim(),\n identification: values.identification.trim(),\n status: values.status,\n private: values.private,\n description: values.description.trim(),\n };\n}\n\nexport function buildUpdateBody(\n values: AuthorizationResourceFormValues,\n): UpdateAuthorizationResourceBody {\n return {\n type: RESOURCE_TYPE_API,\n name: values.name.trim(),\n identification: values.identification.trim(),\n status: values.status,\n private: values.private,\n description: values.description.trim(),\n };\n}\n\nexport function buildCreateMenuBody(\n values: MenuResourceFormValues,\n resourceId = getAppClientId(),\n): CreateMenuResourceBody {\n return {\n resourceId,\n parentId: values.parentId || ROOT_PARENT_ID,\n type: values.type,\n name: values.name.trim(),\n identification: values.identification.trim(),\n permissionPointIds: [...values.permissionPointIds],\n status: values.status,\n };\n}\n\nexport function buildUpdateMenuBody(values: MenuResourceFormValues): UpdateMenuResourceBody {\n return {\n parentId: values.parentId || ROOT_PARENT_ID,\n type: values.type,\n name: values.name.trim(),\n identification: values.identification.trim(),\n permissionPointIds: [...values.permissionPointIds],\n status: values.status,\n };\n}\n\nexport function createAuthorizationResourceApi(\n request: ResourceHttpRequest,\n): AuthorizationResourceApi {\n return {\n async list(params, signal) {\n const json = await request<unknown>({\n method: 'GET',\n url: buildListUrl(RESOURCE_TYPE_API, params),\n signal,\n });\n const records = extractRecords(json)\n .map(mapAuthorizationResource)\n .filter((item): item is AuthorizationResource => item !== null);\n const pagination = extractPagination(json);\n return {\n records,\n ...pagination,\n };\n },\n\n async create(values, signal) {\n return request({\n method: 'POST',\n url: '/authorization-resources',\n body: buildCreateBody(values),\n signal,\n });\n },\n\n async update(resourceId, values, signal) {\n return request({\n method: 'PATCH',\n url: `/authorization-resources/${encodeURIComponent(resourceId)}`,\n body: buildUpdateBody(values),\n signal,\n });\n },\n\n async remove(resourceId, signal) {\n return request({\n method: 'DELETE',\n url: `/authorization-resources/${encodeURIComponent(resourceId)}`,\n signal,\n });\n },\n };\n}\n\nexport function createMenuResourceApi(request: ResourceHttpRequest): MenuResourceApi {\n const permissionApi = createAuthorizationResourceApi(request);\n\n return {\n async list(params, signal) {\n const json = await request<unknown>({\n method: 'GET',\n url: buildListUrl(MENU_LIST_TYPE_PARAM, params),\n signal,\n });\n const records = extractRecords(json)\n .map(mapMenuResource)\n .filter((item): item is MenuResource => item !== null);\n const pagination = extractPagination(json);\n return {\n records,\n ...pagination,\n };\n },\n\n listPermissionPoints(params, signal) {\n return permissionApi.list(params, signal);\n },\n\n async create(values, signal) {\n return request({\n method: 'POST',\n url: '/authorization-resources',\n body: buildCreateMenuBody(values),\n signal,\n });\n },\n\n async update(resourceId, values, signal) {\n return request({\n method: 'PATCH',\n url: `/authorization-resources/${encodeURIComponent(resourceId)}`,\n body: buildUpdateMenuBody(values),\n signal,\n });\n },\n\n async remove(resourceId, signal) {\n return request({\n method: 'DELETE',\n url: `/authorization-resources/${encodeURIComponent(resourceId)}`,\n signal,\n });\n },\n };\n}\n\nexport type CreateDefaultResourceRequestOptions = {\n /** API 前缀,如 `/api` 或完整域名 */\n baseUrl?: string;\n /** 追加请求头(如 Authorization) */\n getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n credentials?: RequestCredentials;\n};\n\n/**\n * 基于 fetch 的默认请求实现,便于快速接入。\n * 生产环境建议注入宿主应用已有的 request 封装。\n */\nexport function createDefaultResourceRequest(\n options: CreateDefaultResourceRequestOptions = {},\n): ResourceHttpRequest {\n const baseUrl = (options.baseUrl ?? '').replace(/\\/+$/, '');\n const credentials = options.credentials ?? 'include';\n\n return async function request<T = unknown>({\n method,\n url,\n body,\n signal,\n }: ResourceRequestOptions): Promise<T> {\n const path = url.startsWith('http') ? url : `${baseUrl}${url.startsWith('/') ? url : `/${url}`}`;\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...(await options.getHeaders?.()),\n };\n\n let payload: BodyInit | undefined;\n if (body !== undefined) {\n headers['Content-Type'] = 'application/json';\n payload = JSON.stringify(body);\n }\n\n const response = await fetch(path, {\n method,\n headers,\n body: payload,\n credentials,\n signal,\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new Error(text || `HTTP ${response.status}`);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n const text = await response.text();\n if (!text) return undefined as T;\n return JSON.parse(text) as T;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/store.ts","../src/utils/snowflake.ts","../src/admin/menu.ts","../src/resources/types.ts","../src/resources/pagination.ts","../src/resources/api.ts"],"names":["text"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n CheckOptions,\n MatchMode,\n PermissionChecker,\n PermissionCode,\n PermissionListener,\n PermissionState,\n RoleCode,\n} from './types';\n\nconst DEFAULT_STATE: PermissionState = {\n permissions: [],\n roles: [],\n isSuperAdmin: false,\n};\n\nfunction toArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n\nfunction matchCodes(\n owned: Set<string>,\n required: string[],\n mode: MatchMode,\n isSuperAdmin: boolean,\n): boolean {\n if (isSuperAdmin) return true;\n if (required.length === 0) return true;\n\n if (mode === 'all') {\n return required.every((code) => owned.has(code));\n }\n\n return required.some((code) => owned.has(code));\n}\n\n/**\n * Mutable permission store shared by React / Vue adapters.\n * Framework-agnostic — safe to use in Node, browser, or any UI lib.\n */\nexport class PermissionStore implements PermissionChecker {\n private state: PermissionState;\n private permissionSet: Set<string>;\n private roleSet: Set<string>;\n private listeners = new Set<PermissionListener>();\n\n constructor(initial?: Partial<PermissionState>) {\n this.state = {\n ...DEFAULT_STATE,\n ...initial,\n permissions: initial?.permissions ?? [],\n roles: initial?.roles ?? [],\n };\n this.permissionSet = new Set(this.state.permissions);\n this.roleSet = new Set(this.state.roles);\n }\n\n getState(): PermissionState {\n return {\n permissions: [...this.state.permissions],\n roles: [...this.state.roles],\n isSuperAdmin: this.state.isSuperAdmin,\n };\n }\n\n setState(next: Partial<PermissionState>): void {\n this.state = {\n permissions: next.permissions ?? this.state.permissions,\n roles: next.roles ?? this.state.roles,\n isSuperAdmin: next.isSuperAdmin ?? this.state.isSuperAdmin,\n };\n this.permissionSet = new Set(this.state.permissions);\n this.roleSet = new Set(this.state.roles);\n this.emit();\n }\n\n setPermissions(permissions: PermissionCode[]): void {\n this.setState({ permissions });\n }\n\n setRoles(roles: RoleCode[]): void {\n this.setState({ roles });\n }\n\n setSuperAdmin(isSuperAdmin: boolean): void {\n this.setState({ isSuperAdmin });\n }\n\n /** Replace permissions, roles and super-admin flag in one shot (typical after login). */\n hydrate(payload: Partial<PermissionState>): void {\n this.setState({\n permissions: payload.permissions ?? [],\n roles: payload.roles ?? [],\n isSuperAdmin: payload.isSuperAdmin ?? false,\n });\n }\n\n /** Clear all authz data (typical after logout). */\n clear(): void {\n this.hydrate({});\n }\n\n hasPermission(\n codes: PermissionCode | PermissionCode[],\n options: CheckOptions = {},\n ): boolean {\n const mode = options.mode ?? 'any';\n return matchCodes(\n this.permissionSet,\n toArray(codes).filter(Boolean),\n mode,\n Boolean(this.state.isSuperAdmin),\n );\n }\n\n hasRole(codes: RoleCode | RoleCode[], options: CheckOptions = {}): boolean {\n const mode = options.mode ?? 'any';\n return matchCodes(\n this.roleSet,\n toArray(codes).filter(Boolean),\n mode,\n Boolean(this.state.isSuperAdmin),\n );\n }\n\n /** Alias of `hasPermission` for template-friendly APIs. */\n can(codes: PermissionCode | PermissionCode[], options?: CheckOptions): boolean {\n return this.hasPermission(codes, options);\n }\n\n subscribe(listener: PermissionListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private emit(): void {\n const snapshot = this.getState();\n this.listeners.forEach((listener) => listener(snapshot));\n }\n}\n\nexport function createPermissionStore(\n initial?: Partial<PermissionState>,\n): PermissionStore {\n return new PermissionStore(initial);\n}\n","const DEVICE_WORKER_ID_KEY = 'hgams_device_worker_id';\n\nfunction generateDeviceWorkerId(): bigint {\n const cached = localStorage.getItem(DEVICE_WORKER_ID_KEY);\n if (cached !== null && cached !== '') {\n return BigInt(cached);\n }\n\n const components = [\n navigator.userAgent,\n screen.width + 'x' + screen.height,\n screen.colorDepth,\n navigator.language,\n new Date().getTimezoneOffset(),\n navigator.hardwareConcurrency,\n (navigator as Navigator & { deviceMemory?: number }).deviceMemory,\n ];\n\n const fingerprint = components.join('|');\n\n let hash = 0;\n for (let i = 0; i < fingerprint.length; i++) {\n hash = (hash << 5) - hash + fingerprint.charCodeAt(i);\n hash |= 0;\n }\n\n const maxWorkerId = Math.pow(2, 14) - 1;\n const workerId = Math.abs(hash % maxWorkerId);\n const workerIdBigInt = BigInt(workerId);\n localStorage.setItem(DEVICE_WORKER_ID_KEY, workerIdBigInt.toString());\n return workerIdBigInt;\n}\n\ninterface SnowyflakeOptions {\n epoch?: bigint;\n workerId?: bigint;\n processId?: bigint;\n workerIdBits?: number;\n processIdBits?: number;\n sequenceBits?: number;\n}\n\n/**\n * snowyflake 2.0.1 仅支持固定 5+5+12 位布局,此处按相同 nextId 算法实现可配置位数版本。\n */\nclass ConfigurableSnowflake {\n readonly epoch: bigint;\n readonly workerId: bigint;\n readonly processId: bigint;\n\n private readonly sequenceMask: bigint;\n private readonly timestampLeftShift: bigint;\n private readonly workerIdShift: bigint;\n private readonly processIdShift: bigint;\n private sequence = 0n;\n private latestTimestamp = BigInt(Date.now());\n\n constructor({\n epoch = 0n,\n workerId = 0n,\n processId = 0n,\n workerIdBits = 5,\n processIdBits = 5,\n sequenceBits = 12,\n }: SnowyflakeOptions = {}) {\n this.epoch = epoch;\n\n const workerIdBitsBig = BigInt(workerIdBits);\n const processIdBitsBig = BigInt(processIdBits);\n const sequenceBitsBig = BigInt(sequenceBits);\n const workerIdMask = -1n ^ (-1n << workerIdBitsBig);\n const processIdMask = -1n ^ (-1n << processIdBitsBig);\n\n this.sequenceMask = -1n ^ (-1n << sequenceBitsBig);\n this.timestampLeftShift =\n sequenceBitsBig + workerIdBitsBig + processIdBitsBig;\n this.workerIdShift = sequenceBitsBig + processIdBitsBig;\n this.processIdShift = sequenceBitsBig;\n\n this.workerId = workerId & workerIdMask;\n this.processId = processId & processIdMask;\n }\n\n nextId(): bigint {\n const timestamp = BigInt(Date.now());\n\n if (this.latestTimestamp === timestamp) {\n this.sequence = (this.sequence + 1n) & this.sequenceMask;\n } else {\n this.sequence = 0n;\n this.latestTimestamp = timestamp;\n }\n\n return (\n ((timestamp - this.epoch) << this.timestampLeftShift) |\n (this.workerId << this.workerIdShift) |\n (this.processId << this.processIdShift) |\n this.sequence\n );\n }\n}\n\n/** 应用级单例,模块加载时只初始化一次(不受 React StrictMode 重复 mount 影响) */\nexport const snowyflake = new ConfigurableSnowflake({\n workerId: generateDeviceWorkerId(),\n workerIdBits: 14,\n processIdBits: 0,\n sequenceBits: 8,\n epoch: BigInt(new Date('2026-06-08').getTime()),\n});\n\n/** 生成雪花 ID 字符串(reportId、detailId、resourceId 等) */\nexport function getAppClientId(): string {\n return snowyflake.nextId().toString();\n}\n\nexport function getDeviceWorkerId(): string {\n return snowyflake.workerId.toString();\n}\n","export type SystemAdminMenuKey = 'menu' | 'resource';\n\nexport type SystemAdminSubMenu = {\n key: SystemAdminMenuKey;\n label: string;\n};\n\nexport type SystemAdminMenuGroup = {\n key: 'system';\n label: string;\n children: SystemAdminSubMenu[];\n};\n\n/** 系统管理菜单结构:菜单管理、权限点管理为其子菜单 */\nexport const SYSTEM_ADMIN_MENU: SystemAdminMenuGroup = {\n key: 'system',\n label: '系统管理',\n children: [\n { key: 'menu', label: '菜单管理' },\n { key: 'resource', label: '权限点管理' },\n ],\n};\n\nexport const SYSTEM_ADMIN_DEFAULT_KEY: SystemAdminMenuKey = 'menu';\n","export type PageDirection = 'previous' | 'current' | 'next';\n\nexport type ListPaginationParams = {\n pageToken?: string;\n pageSize?: string;\n pageDirection?: PageDirection;\n};\n\nexport type ListPaginationResult = {\n pageToken: string;\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n};\n\n/** 通用状态:权限点 1 启用 / 0 禁用;菜单 1 显示 / 0 隐藏 */\nexport type ResourceStatus = 0 | 1;\n\n/** 权限点类型 */\nexport type ApiResourceType = 'api';\n\n/** 菜单资源类型 */\nexport type MenuResourceType = 'page' | 'menu' | 'button';\n\nexport type ResourceType = ApiResourceType | MenuResourceType;\n\nexport type AuthorizationResource = {\n resourceId: string;\n type: ApiResourceType;\n name: string;\n identification: string;\n status: ResourceStatus;\n private: boolean;\n description: string;\n};\n\nexport type AuthorizationResourceFormValues = {\n name: string;\n identification: string;\n status: ResourceStatus;\n private: boolean;\n description: string;\n};\n\nexport type CreateAuthorizationResourceBody = AuthorizationResourceFormValues & {\n resourceId: string;\n type: ApiResourceType;\n};\n\nexport type UpdateAuthorizationResourceBody = Partial<AuthorizationResourceFormValues> & {\n type?: ApiResourceType;\n};\n\nexport type FetchAuthorizationResourcesParams = {\n pagination?: ListPaginationParams;\n};\n\nexport type AuthorizationResourceListResult = {\n records: AuthorizationResource[];\n pageToken: string;\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n};\n\nexport type MenuResource = {\n resourceId: string;\n /** 上级菜单 ID;无上级时为 null */\n parentId: string | null;\n type: MenuResourceType;\n name: string;\n identification: string;\n permissionPointIds: string[];\n /** 关联权限点名称(列表展示用,后端可能返回) */\n permissionPointNames?: string[];\n status: ResourceStatus;\n};\n\nexport type MenuResourceFormValues = {\n /** 上级菜单 ID;选择「无」时为 null */\n parentId: string | null;\n type: MenuResourceType;\n name: string;\n identification: string;\n permissionPointIds: string[];\n status: ResourceStatus;\n};\n\nexport type CreateMenuResourceBody = MenuResourceFormValues & {\n resourceId: string;\n};\n\nexport type UpdateMenuResourceBody = Partial<MenuResourceFormValues>;\n\nexport type FetchMenuResourcesParams = {\n pagination?: ListPaginationParams;\n};\n\nexport type MenuResourceListResult = {\n records: MenuResource[];\n pageToken: string;\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n};\n\nexport const RESOURCE_TYPE_API: ApiResourceType = 'api';\nexport const MENU_TYPE_PAGE: MenuResourceType = 'page';\nexport const MENU_TYPE_MENU: MenuResourceType = 'menu';\nexport const MENU_TYPE_BUTTON: MenuResourceType = 'button';\n\n/** 菜单列表查询 type 参数 */\nexport const MENU_LIST_TYPE_PARAM = 'page,menu,button';\n\n/**\n * 上级菜单选择「无」时,表单 select 使用的空值。\n * 提交接口时会转换为 parentId: null。\n */\nexport const ROOT_PARENT_ID = '';\n\nexport const RESOURCE_STATUS_ENABLED: ResourceStatus = 1;\nexport const RESOURCE_STATUS_DISABLED: ResourceStatus = 0;\n\nexport const RESOURCE_STATUS_OPTIONS: { label: string; value: ResourceStatus }[] = [\n { label: '启用', value: RESOURCE_STATUS_ENABLED },\n { label: '禁用', value: RESOURCE_STATUS_DISABLED },\n];\n\n/** 菜单可见性 */\nexport const MENU_VISIBILITY_OPTIONS: { label: string; value: ResourceStatus }[] = [\n { label: '显示', value: RESOURCE_STATUS_ENABLED },\n { label: '隐藏', value: RESOURCE_STATUS_DISABLED },\n];\n\nexport const RESOURCE_PRIVATE_OPTIONS: { label: string; value: boolean }[] = [\n { label: '是', value: true },\n { label: '否', value: false },\n];\n\nexport const MENU_TYPE_OPTIONS: { label: string; value: MenuResourceType }[] = [\n { label: '目录', value: MENU_TYPE_PAGE },\n { label: '菜单', value: MENU_TYPE_MENU },\n { label: '按钮', value: MENU_TYPE_BUTTON },\n];\n\nexport const MENU_TYPE_LABEL: Record<MenuResourceType, string> = {\n page: '目录',\n menu: '菜单',\n button: '按钮',\n};\n","import type { ListPaginationResult } from './types';\n\nexport function appendQueryParam(parts: string[], key: string, value: string): void {\n if (value !== undefined && value !== null && String(value) !== '') {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n}\n\nexport function extractPagination(payload: unknown): ListPaginationResult {\n if (!payload || typeof payload !== 'object') {\n return {\n pageToken: '',\n hasPreviousPage: false,\n hasNextPage: false,\n };\n }\n\n const envelope = payload as Record<string, unknown>;\n const pagination = (\n envelope.pagination && typeof envelope.pagination === 'object'\n ? envelope.pagination\n : envelope.page && typeof envelope.page === 'object'\n ? envelope.page\n : null\n ) as Record<string, unknown> | null;\n\n const rawPageToken =\n pagination?.['page-token'] ??\n pagination?.pageToken ??\n pagination?.nextPageToken ??\n envelope['page-token'] ??\n envelope.pageToken ??\n '';\n const pageToken =\n rawPageToken === undefined || rawPageToken === null ? '' : String(rawPageToken);\n\n const hasPreviousPage = Boolean(\n pagination?.hasPreviousPage ??\n pagination?.hasPrevious ??\n pagination?.hasPre ??\n pagination?.previous ??\n envelope.hasPreviousPage ??\n envelope.hasPrevious,\n );\n const hasNextPage = Boolean(\n pagination?.hasNextPage ??\n pagination?.hasNext ??\n pagination?.next ??\n envelope.hasNextPage ??\n envelope.hasNext,\n );\n\n return {\n pageToken,\n hasPreviousPage,\n hasNextPage,\n };\n}\n\nexport function extractRecords(payload: unknown): unknown[] {\n if (!payload) return [];\n if (Array.isArray(payload)) return payload;\n\n if (typeof payload === 'object') {\n const envelope = payload as Record<string, unknown>;\n const data = envelope.data;\n\n if (Array.isArray(data)) return data;\n\n if (data && typeof data === 'object') {\n const nested = data as Record<string, unknown>;\n if (Array.isArray(nested.records)) return nested.records;\n if (Array.isArray(nested.items)) return nested.items;\n if (Array.isArray(nested.list)) return nested.list;\n if (Array.isArray(nested.content)) return nested.content;\n }\n\n if (Array.isArray(envelope.records)) return envelope.records;\n if (Array.isArray(envelope.items)) return envelope.items;\n if (Array.isArray(envelope.list)) return envelope.list;\n if (Array.isArray(envelope.content)) return envelope.content;\n }\n\n return [];\n}\n","import { getAppClientId } from '../utils/snowflake';\nimport { appendQueryParam, extractPagination, extractRecords } from './pagination';\nimport {\n MENU_LIST_TYPE_PARAM,\n MENU_TYPE_BUTTON,\n MENU_TYPE_MENU,\n MENU_TYPE_PAGE,\n RESOURCE_STATUS_DISABLED,\n RESOURCE_STATUS_ENABLED,\n RESOURCE_TYPE_API,\n type AuthorizationResource,\n type AuthorizationResourceFormValues,\n type AuthorizationResourceListResult,\n type CreateAuthorizationResourceBody,\n type CreateMenuResourceBody,\n type FetchAuthorizationResourcesParams,\n type FetchMenuResourcesParams,\n type MenuResource,\n type MenuResourceFormValues,\n type MenuResourceListResult,\n type MenuResourceType,\n type ResourceStatus,\n type UpdateAuthorizationResourceBody,\n type UpdateMenuResourceBody,\n} from './types';\n\nexport type HttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE';\n\nexport type ResourceRequestOptions = {\n method: HttpMethod;\n url: string;\n body?: unknown;\n signal?: AbortSignal;\n};\n\n/**\n * 由宿主应用注入的请求函数(可对接 Angel_HGAMS 的 apiGetJson / apiPostJson 等)。\n */\nexport type ResourceHttpRequest = <T = unknown>(\n options: ResourceRequestOptions,\n) => Promise<T>;\n\nexport type AuthorizationResourceApi = {\n list: (\n params?: FetchAuthorizationResourcesParams,\n signal?: AbortSignal,\n ) => Promise<AuthorizationResourceListResult>;\n create: (\n values: AuthorizationResourceFormValues,\n signal?: AbortSignal,\n ) => Promise<unknown>;\n update: (\n resourceId: string,\n values: AuthorizationResourceFormValues,\n signal?: AbortSignal,\n ) => Promise<unknown>;\n remove: (resourceId: string, signal?: AbortSignal) => Promise<unknown>;\n};\n\nexport type MenuResourceApi = {\n list: (\n params?: FetchMenuResourcesParams,\n signal?: AbortSignal,\n ) => Promise<MenuResourceListResult>;\n /** 拉取权限点(type=api),供菜单表单多选 */\n listPermissionPoints: (\n params?: FetchAuthorizationResourcesParams,\n signal?: AbortSignal,\n ) => Promise<AuthorizationResourceListResult>;\n create: (values: MenuResourceFormValues, signal?: AbortSignal) => Promise<unknown>;\n update: (\n resourceId: string,\n values: MenuResourceFormValues,\n signal?: AbortSignal,\n ) => Promise<unknown>;\n remove: (resourceId: string, signal?: AbortSignal) => Promise<unknown>;\n};\n\nfunction toResourceStatus(value: unknown): ResourceStatus {\n const n = Number(value);\n return n === RESOURCE_STATUS_ENABLED ? RESOURCE_STATUS_ENABLED : RESOURCE_STATUS_DISABLED;\n}\n\nfunction toBoolean(value: unknown): boolean {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'number') return value !== 0;\n if (typeof value === 'string') {\n const v = value.trim().toLowerCase();\n return v === 'true' || v === '1' || v === 'yes' || v === '是';\n }\n return false;\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value\n .map((item) => {\n if (item && typeof item === 'object') {\n const row = item as Record<string, unknown>;\n const id = row.resourceId ?? row.resource_id ?? row.id;\n return id === undefined || id === null ? '' : String(id);\n }\n return String(item ?? '');\n })\n .filter(Boolean);\n }\n if (typeof value === 'string' && value.trim()) {\n return value\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nfunction toMenuType(value: unknown): MenuResourceType {\n const v = String(value ?? '').toLowerCase();\n if (v === MENU_TYPE_PAGE || v === MENU_TYPE_MENU || v === MENU_TYPE_BUTTON) {\n return v;\n }\n return MENU_TYPE_MENU;\n}\n\nexport function mapAuthorizationResource(item: unknown): AuthorizationResource | null {\n if (!item || typeof item !== 'object') return null;\n const row = item as Record<string, unknown>;\n const resourceId = row.resourceId ?? row.resource_id ?? row.id;\n if (resourceId === undefined || resourceId === null || resourceId === '') return null;\n\n return {\n resourceId: String(resourceId),\n type: RESOURCE_TYPE_API,\n name: String(row.name ?? ''),\n identification: String(row.identification ?? row.identity ?? ''),\n status: toResourceStatus(row.status),\n private: toBoolean(row.private ?? row.isPrivate ?? row.is_private),\n description: String(row.description ?? row.desc ?? ''),\n };\n}\n\nexport function mapMenuResource(item: unknown): MenuResource | null {\n if (!item || typeof item !== 'object') return null;\n const row = item as Record<string, unknown>;\n const resourceId = row.resourceId ?? row.resource_id ?? row.id;\n if (resourceId === undefined || resourceId === null || resourceId === '') return null;\n\n const permissionPointIds = toStringArray(\n row.permissionPointIds ??\n row.permission_point_ids ??\n row.permissionPoints ??\n row.permissions,\n );\n\n const permissionNamesRaw =\n row.permissionPointNames ?? row.permission_point_names ?? row.permissionNames;\n const permissionPointNames = Array.isArray(permissionNamesRaw)\n ? permissionNamesRaw.map((n) => String(n ?? '')).filter(Boolean)\n : undefined;\n\n const rawParentId = row.parentId ?? row.parent_id;\n const parentId =\n rawParentId === undefined ||\n rawParentId === null ||\n rawParentId === '' ||\n String(rawParentId) === '0'\n ? null\n : String(rawParentId);\n\n return {\n resourceId: String(resourceId),\n parentId,\n type: toMenuType(row.type),\n name: String(row.name ?? ''),\n identification: String(row.identification ?? row.identity ?? row.path ?? ''),\n permissionPointIds,\n permissionPointNames,\n status: toResourceStatus(row.status),\n };\n}\n\nfunction buildListUrl(type: string, params?: { pagination?: FetchAuthorizationResourcesParams['pagination'] }): string {\n const parts: string[] = [];\n appendQueryParam(parts, 'type', type);\n appendQueryParam(parts, 'page-token', params?.pagination?.pageToken ?? '');\n appendQueryParam(parts, 'page-size', params?.pagination?.pageSize ?? '20');\n appendQueryParam(parts, 'page-direction', params?.pagination?.pageDirection ?? 'current');\n return `/authorization-resources?${parts.join('&')}`;\n}\n\nexport function buildCreateBody(\n values: AuthorizationResourceFormValues,\n resourceId = getAppClientId(),\n): CreateAuthorizationResourceBody {\n return {\n resourceId,\n type: RESOURCE_TYPE_API,\n name: values.name.trim(),\n identification: values.identification.trim(),\n status: values.status,\n private: values.private,\n description: values.description.trim(),\n };\n}\n\nexport function buildUpdateBody(\n values: AuthorizationResourceFormValues,\n): UpdateAuthorizationResourceBody {\n return {\n type: RESOURCE_TYPE_API,\n name: values.name.trim(),\n identification: values.identification.trim(),\n status: values.status,\n private: values.private,\n description: values.description.trim(),\n };\n}\n\nexport function buildCreateMenuBody(\n values: MenuResourceFormValues,\n resourceId = getAppClientId(),\n): CreateMenuResourceBody {\n return {\n resourceId,\n parentId: values.parentId ? values.parentId : null,\n type: values.type,\n name: values.name.trim(),\n identification: values.identification.trim(),\n permissionPointIds: [...values.permissionPointIds],\n status: values.status,\n };\n}\n\nexport function buildUpdateMenuBody(values: MenuResourceFormValues): UpdateMenuResourceBody {\n return {\n parentId: values.parentId ? values.parentId : null,\n type: values.type,\n name: values.name.trim(),\n identification: values.identification.trim(),\n permissionPointIds: [...values.permissionPointIds],\n status: values.status,\n };\n}\n\nexport function createAuthorizationResourceApi(\n request: ResourceHttpRequest,\n): AuthorizationResourceApi {\n return {\n async list(params, signal) {\n const json = await request<unknown>({\n method: 'GET',\n url: buildListUrl(RESOURCE_TYPE_API, params),\n signal,\n });\n const records = extractRecords(json)\n .map(mapAuthorizationResource)\n .filter((item): item is AuthorizationResource => item !== null);\n const pagination = extractPagination(json);\n return {\n records,\n ...pagination,\n };\n },\n\n async create(values, signal) {\n return request({\n method: 'POST',\n url: '/authorization-resources',\n body: buildCreateBody(values),\n signal,\n });\n },\n\n async update(resourceId, values, signal) {\n return request({\n method: 'PATCH',\n url: `/authorization-resources/${encodeURIComponent(resourceId)}`,\n body: buildUpdateBody(values),\n signal,\n });\n },\n\n async remove(resourceId, signal) {\n return request({\n method: 'DELETE',\n url: `/authorization-resources/${encodeURIComponent(resourceId)}`,\n signal,\n });\n },\n };\n}\n\nexport function createMenuResourceApi(request: ResourceHttpRequest): MenuResourceApi {\n const permissionApi = createAuthorizationResourceApi(request);\n\n return {\n async list(params, signal) {\n const json = await request<unknown>({\n method: 'GET',\n url: buildListUrl(MENU_LIST_TYPE_PARAM, params),\n signal,\n });\n const records = extractRecords(json)\n .map(mapMenuResource)\n .filter((item): item is MenuResource => item !== null);\n const pagination = extractPagination(json);\n return {\n records,\n ...pagination,\n };\n },\n\n listPermissionPoints(params, signal) {\n return permissionApi.list(params, signal);\n },\n\n async create(values, signal) {\n return request({\n method: 'POST',\n url: '/authorization-resources',\n body: buildCreateMenuBody(values),\n signal,\n });\n },\n\n async update(resourceId, values, signal) {\n return request({\n method: 'PATCH',\n url: `/authorization-resources/${encodeURIComponent(resourceId)}`,\n body: buildUpdateMenuBody(values),\n signal,\n });\n },\n\n async remove(resourceId, signal) {\n return request({\n method: 'DELETE',\n url: `/authorization-resources/${encodeURIComponent(resourceId)}`,\n signal,\n });\n },\n };\n}\n\nexport type CreateDefaultResourceRequestOptions = {\n /** API 前缀,如 `/api` 或完整域名 */\n baseUrl?: string;\n /** 追加请求头(如 Authorization) */\n getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n credentials?: RequestCredentials;\n};\n\n/**\n * 基于 fetch 的默认请求实现,便于快速接入。\n * 生产环境建议注入宿主应用已有的 request 封装。\n */\nexport function createDefaultResourceRequest(\n options: CreateDefaultResourceRequestOptions = {},\n): ResourceHttpRequest {\n const baseUrl = (options.baseUrl ?? '').replace(/\\/+$/, '');\n const credentials = options.credentials ?? 'include';\n\n return async function request<T = unknown>({\n method,\n url,\n body,\n signal,\n }: ResourceRequestOptions): Promise<T> {\n const path = url.startsWith('http') ? url : `${baseUrl}${url.startsWith('/') ? url : `/${url}`}`;\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...(await options.getHeaders?.()),\n };\n\n let payload: BodyInit | undefined;\n if (body !== undefined) {\n headers['Content-Type'] = 'application/json';\n payload = JSON.stringify(body);\n }\n\n const response = await fetch(path, {\n method,\n headers,\n body: payload,\n credentials,\n signal,\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new Error(text || `HTTP ${response.status}`);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n const text = await response.text();\n if (!text) return undefined as T;\n return JSON.parse(text) as T;\n };\n}\n"]}
|
package/dist/react/index.cjs
CHANGED
|
@@ -39,6 +39,9 @@ __export(react_exports, {
|
|
|
39
39
|
RESOURCE_TYPE_API: () => RESOURCE_TYPE_API,
|
|
40
40
|
ROOT_PARENT_ID: () => ROOT_PARENT_ID,
|
|
41
41
|
ResourceManager: () => ResourceManager,
|
|
42
|
+
SYSTEM_ADMIN_DEFAULT_KEY: () => SYSTEM_ADMIN_DEFAULT_KEY,
|
|
43
|
+
SYSTEM_ADMIN_MENU: () => SYSTEM_ADMIN_MENU,
|
|
44
|
+
SystemAdmin: () => SystemAdmin,
|
|
42
45
|
appendQueryParam: () => appendQueryParam,
|
|
43
46
|
buildCreateBody: () => buildCreateBody,
|
|
44
47
|
buildCreateMenuBody: () => buildCreateMenuBody,
|
|
@@ -285,7 +288,7 @@ var MENU_TYPE_PAGE = "page";
|
|
|
285
288
|
var MENU_TYPE_MENU = "menu";
|
|
286
289
|
var MENU_TYPE_BUTTON = "button";
|
|
287
290
|
var MENU_LIST_TYPE_PARAM = "page,menu,button";
|
|
288
|
-
var ROOT_PARENT_ID = "
|
|
291
|
+
var ROOT_PARENT_ID = "";
|
|
289
292
|
var RESOURCE_STATUS_ENABLED = 1;
|
|
290
293
|
var RESOURCE_STATUS_DISABLED = 0;
|
|
291
294
|
var RESOURCE_STATUS_OPTIONS = [
|
|
@@ -502,10 +505,11 @@ function mapMenuResource(item) {
|
|
|
502
505
|
);
|
|
503
506
|
const permissionNamesRaw = row.permissionPointNames ?? row.permission_point_names ?? row.permissionNames;
|
|
504
507
|
const permissionPointNames = Array.isArray(permissionNamesRaw) ? permissionNamesRaw.map((n) => String(n ?? "")).filter(Boolean) : void 0;
|
|
505
|
-
const
|
|
508
|
+
const rawParentId = row.parentId ?? row.parent_id;
|
|
509
|
+
const parentId = rawParentId === void 0 || rawParentId === null || rawParentId === "" || String(rawParentId) === "0" ? null : String(rawParentId);
|
|
506
510
|
return {
|
|
507
511
|
resourceId: String(resourceId),
|
|
508
|
-
parentId
|
|
512
|
+
parentId,
|
|
509
513
|
type: toMenuType(row.type),
|
|
510
514
|
name: String(row.name ?? ""),
|
|
511
515
|
identification: String(row.identification ?? row.identity ?? row.path ?? ""),
|
|
@@ -546,7 +550,7 @@ function buildUpdateBody(values) {
|
|
|
546
550
|
function buildCreateMenuBody(values, resourceId = getAppClientId()) {
|
|
547
551
|
return {
|
|
548
552
|
resourceId,
|
|
549
|
-
parentId: values.parentId
|
|
553
|
+
parentId: values.parentId ? values.parentId : null,
|
|
550
554
|
type: values.type,
|
|
551
555
|
name: values.name.trim(),
|
|
552
556
|
identification: values.identification.trim(),
|
|
@@ -556,7 +560,7 @@ function buildCreateMenuBody(values, resourceId = getAppClientId()) {
|
|
|
556
560
|
}
|
|
557
561
|
function buildUpdateMenuBody(values) {
|
|
558
562
|
return {
|
|
559
|
-
parentId: values.parentId
|
|
563
|
+
parentId: values.parentId ? values.parentId : null,
|
|
560
564
|
type: values.type,
|
|
561
565
|
name: values.name.trim(),
|
|
562
566
|
identification: values.identification.trim(),
|
|
@@ -1220,7 +1224,7 @@ var import_react3 = require("react");
|
|
|
1220
1224
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
1221
1225
|
var PAGE_SIZE_OPTIONS2 = ["10", "20", "50", "100"];
|
|
1222
1226
|
var emptyForm2 = () => ({
|
|
1223
|
-
parentId:
|
|
1227
|
+
parentId: null,
|
|
1224
1228
|
type: MENU_TYPE_MENU,
|
|
1225
1229
|
name: "",
|
|
1226
1230
|
identification: "",
|
|
@@ -1304,7 +1308,7 @@ function MenuManager({
|
|
|
1304
1308
|
const openEdit = (row) => {
|
|
1305
1309
|
setEditing(row);
|
|
1306
1310
|
setForm({
|
|
1307
|
-
parentId: row.parentId
|
|
1311
|
+
parentId: row.parentId ?? null,
|
|
1308
1312
|
type: row.type,
|
|
1309
1313
|
name: row.name,
|
|
1310
1314
|
identification: row.identification,
|
|
@@ -1480,10 +1484,13 @@ function MenuManager({
|
|
|
1480
1484
|
"select",
|
|
1481
1485
|
{
|
|
1482
1486
|
style: styles2.input,
|
|
1483
|
-
value: form.parentId,
|
|
1484
|
-
onChange: (e) => setForm((prev) => ({
|
|
1487
|
+
value: form.parentId ?? ROOT_PARENT_ID,
|
|
1488
|
+
onChange: (e) => setForm((prev) => ({
|
|
1489
|
+
...prev,
|
|
1490
|
+
parentId: e.target.value ? e.target.value : null
|
|
1491
|
+
})),
|
|
1485
1492
|
children: [
|
|
1486
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("option", { value: ROOT_PARENT_ID, children: "\
|
|
1493
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("option", { value: ROOT_PARENT_ID, children: "\u65E0" }),
|
|
1487
1494
|
parentOptions.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("option", { value: opt.value, children: opt.label }, opt.value))
|
|
1488
1495
|
]
|
|
1489
1496
|
}
|
|
@@ -1836,6 +1843,149 @@ var styles2 = {
|
|
|
1836
1843
|
paddingTop: 4
|
|
1837
1844
|
}
|
|
1838
1845
|
};
|
|
1846
|
+
|
|
1847
|
+
// src/react/SystemAdmin.tsx
|
|
1848
|
+
var import_react4 = require("react");
|
|
1849
|
+
|
|
1850
|
+
// src/admin/menu.ts
|
|
1851
|
+
var SYSTEM_ADMIN_MENU = {
|
|
1852
|
+
key: "system",
|
|
1853
|
+
label: "\u7CFB\u7EDF\u7BA1\u7406",
|
|
1854
|
+
children: [
|
|
1855
|
+
{ key: "menu", label: "\u83DC\u5355\u7BA1\u7406" },
|
|
1856
|
+
{ key: "resource", label: "\u6743\u9650\u70B9\u7BA1\u7406" }
|
|
1857
|
+
]
|
|
1858
|
+
};
|
|
1859
|
+
var SYSTEM_ADMIN_DEFAULT_KEY = "menu";
|
|
1860
|
+
|
|
1861
|
+
// src/react/SystemAdmin.tsx
|
|
1862
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
1863
|
+
function SystemAdmin({
|
|
1864
|
+
menuApi,
|
|
1865
|
+
resourceApi,
|
|
1866
|
+
defaultActiveKey = SYSTEM_ADMIN_DEFAULT_KEY,
|
|
1867
|
+
activeKey: controlledKey,
|
|
1868
|
+
onActiveKeyChange,
|
|
1869
|
+
title = SYSTEM_ADMIN_MENU.label,
|
|
1870
|
+
toolbarExtra
|
|
1871
|
+
}) {
|
|
1872
|
+
const [innerKey, setInnerKey] = (0, import_react4.useState)(defaultActiveKey);
|
|
1873
|
+
const activeKey = controlledKey ?? innerKey;
|
|
1874
|
+
const setActiveKey = (key) => {
|
|
1875
|
+
if (controlledKey === void 0) setInnerKey(key);
|
|
1876
|
+
onActiveKeyChange?.(key);
|
|
1877
|
+
};
|
|
1878
|
+
const activeLabel = (0, import_react4.useMemo)(
|
|
1879
|
+
() => SYSTEM_ADMIN_MENU.children.find((item) => item.key === activeKey)?.label ?? "",
|
|
1880
|
+
[activeKey]
|
|
1881
|
+
);
|
|
1882
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: styles3.root, children: [
|
|
1883
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("aside", { style: styles3.sidebar, children: [
|
|
1884
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: styles3.sidebarTitle, children: title }),
|
|
1885
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("nav", { style: styles3.nav, children: SYSTEM_ADMIN_MENU.children.map((item) => {
|
|
1886
|
+
const active = item.key === activeKey;
|
|
1887
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1888
|
+
"button",
|
|
1889
|
+
{
|
|
1890
|
+
type: "button",
|
|
1891
|
+
style: {
|
|
1892
|
+
...styles3.navItem,
|
|
1893
|
+
...active ? styles3.navItemActive : null
|
|
1894
|
+
},
|
|
1895
|
+
onClick: () => setActiveKey(item.key),
|
|
1896
|
+
children: item.label
|
|
1897
|
+
},
|
|
1898
|
+
item.key
|
|
1899
|
+
);
|
|
1900
|
+
}) })
|
|
1901
|
+
] }),
|
|
1902
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("main", { style: styles3.content, children: [
|
|
1903
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: styles3.contentHeader, children: [
|
|
1904
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: styles3.breadcrumb, children: [
|
|
1905
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: styles3.breadcrumbParent, children: title }),
|
|
1906
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: styles3.breadcrumbSep, children: "/" }),
|
|
1907
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: styles3.breadcrumbCurrent, children: activeLabel })
|
|
1908
|
+
] }),
|
|
1909
|
+
toolbarExtra
|
|
1910
|
+
] }),
|
|
1911
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: styles3.panel, children: activeKey === "menu" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MenuManager, { api: menuApi, title: "\u83DC\u5355\u7BA1\u7406" }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ResourceManager, { api: resourceApi, title: "\u6743\u9650\u70B9\u7BA1\u7406" }) })
|
|
1912
|
+
] })
|
|
1913
|
+
] });
|
|
1914
|
+
}
|
|
1915
|
+
var styles3 = {
|
|
1916
|
+
root: {
|
|
1917
|
+
display: "flex",
|
|
1918
|
+
minHeight: 560,
|
|
1919
|
+
border: "1px solid #eaecf0",
|
|
1920
|
+
borderRadius: 12,
|
|
1921
|
+
overflow: "hidden",
|
|
1922
|
+
background: "#fff",
|
|
1923
|
+
fontFamily: '"PingFang SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, sans-serif',
|
|
1924
|
+
color: "#101828"
|
|
1925
|
+
},
|
|
1926
|
+
sidebar: {
|
|
1927
|
+
width: 200,
|
|
1928
|
+
flexShrink: 0,
|
|
1929
|
+
borderRight: "1px solid #eaecf0",
|
|
1930
|
+
background: "#f9fafb",
|
|
1931
|
+
padding: "16px 12px"
|
|
1932
|
+
},
|
|
1933
|
+
sidebarTitle: {
|
|
1934
|
+
fontSize: 14,
|
|
1935
|
+
fontWeight: 600,
|
|
1936
|
+
color: "#344054",
|
|
1937
|
+
padding: "4px 10px 12px"
|
|
1938
|
+
},
|
|
1939
|
+
nav: {
|
|
1940
|
+
display: "flex",
|
|
1941
|
+
flexDirection: "column",
|
|
1942
|
+
gap: 4
|
|
1943
|
+
},
|
|
1944
|
+
navItem: {
|
|
1945
|
+
border: "none",
|
|
1946
|
+
background: "transparent",
|
|
1947
|
+
textAlign: "left",
|
|
1948
|
+
padding: "10px 12px",
|
|
1949
|
+
borderRadius: 8,
|
|
1950
|
+
fontSize: 14,
|
|
1951
|
+
color: "#475467",
|
|
1952
|
+
cursor: "pointer"
|
|
1953
|
+
},
|
|
1954
|
+
navItemActive: {
|
|
1955
|
+
background: "#e6f7f9",
|
|
1956
|
+
color: "#049BAD",
|
|
1957
|
+
fontWeight: 600
|
|
1958
|
+
},
|
|
1959
|
+
content: {
|
|
1960
|
+
flex: 1,
|
|
1961
|
+
minWidth: 0,
|
|
1962
|
+
display: "flex",
|
|
1963
|
+
flexDirection: "column",
|
|
1964
|
+
background: "#fff"
|
|
1965
|
+
},
|
|
1966
|
+
contentHeader: {
|
|
1967
|
+
display: "flex",
|
|
1968
|
+
alignItems: "center",
|
|
1969
|
+
justifyContent: "space-between",
|
|
1970
|
+
gap: 12,
|
|
1971
|
+
padding: "12px 16px",
|
|
1972
|
+
borderBottom: "1px solid #f2f4f7"
|
|
1973
|
+
},
|
|
1974
|
+
breadcrumb: {
|
|
1975
|
+
display: "flex",
|
|
1976
|
+
alignItems: "center",
|
|
1977
|
+
gap: 8,
|
|
1978
|
+
fontSize: 13
|
|
1979
|
+
},
|
|
1980
|
+
breadcrumbParent: { color: "#98a2b3" },
|
|
1981
|
+
breadcrumbSep: { color: "#d0d5dd" },
|
|
1982
|
+
breadcrumbCurrent: { color: "#344054", fontWeight: 600 },
|
|
1983
|
+
panel: {
|
|
1984
|
+
flex: 1,
|
|
1985
|
+
minHeight: 0,
|
|
1986
|
+
overflow: "auto"
|
|
1987
|
+
}
|
|
1988
|
+
};
|
|
1839
1989
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1840
1990
|
0 && (module.exports = {
|
|
1841
1991
|
Can,
|
|
@@ -1856,6 +2006,9 @@ var styles2 = {
|
|
|
1856
2006
|
RESOURCE_TYPE_API,
|
|
1857
2007
|
ROOT_PARENT_ID,
|
|
1858
2008
|
ResourceManager,
|
|
2009
|
+
SYSTEM_ADMIN_DEFAULT_KEY,
|
|
2010
|
+
SYSTEM_ADMIN_MENU,
|
|
2011
|
+
SystemAdmin,
|
|
1859
2012
|
appendQueryParam,
|
|
1860
2013
|
buildCreateBody,
|
|
1861
2014
|
buildCreateMenuBody,
|