openxiangda 1.0.20 → 1.0.22

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/index.ts","../../src/runtime/core/client.ts","../../src/runtime/react/createReactPage.tsx","../../src/runtime/react/provider.tsx","../../src/runtime/react/store.ts","../../src/styles/antd-theme.ts","../../src/runtime/react/hooks/useCurrentUser.ts","../../src/runtime/react/hooks/usePageContext.ts","../../src/runtime/react/hooks/useDataSource.ts","../../src/runtime/react/hooks/usePageSdk.ts","../../src/runtime/react/hooks/useFormViewPermissions.ts","../../src/runtime/react/hooks/useMessage.ts","../../src/runtime/react/hooks/useModal.ts","../../src/runtime/react/hooks/useNavigation.ts","../../src/runtime/react/hooks/usePageProps.ts","../../src/runtime/react/hooks/usePageRoute.ts"],"sourcesContent":["export * from \"./core\"\nexport * from \"./react\"\n","import type {\n ApiPermissionListParams,\n ApproveTaskParams,\n AssignPermissionsParams,\n AssignRolesParams,\n BatchAddUsersToRoleParams,\n BatchSendNotificationByTypeParams,\n ConnectorCallParams,\n ConnectorInvokeParams,\n ConnectorInvokeResult,\n CreateApiPermissionParams,\n CreateFormPermissionGroupDto,\n CreatePagePermissionGroupDto,\n CreateRoleParams,\n CreateUiPermissionParams,\n CurrentUserDepartmentParents,\n DataManagementConfigParams,\n FormAdvancedSearchParams,\n FormChangeRecordParams,\n FormCreateParams,\n FormExportParams,\n FormGetDetailParams,\n FormImportParams,\n FormRemoveParams,\n FormSearchParams,\n FormUpdateParams,\n GetParentDepartmentsOptions,\n GetProcessInstanceParams,\n GetUserRolesParams,\n ImportExportRecordDownloadParams,\n ImportExportRecordQuery,\n PageApiResponse,\n PageBinaryResponse,\n PageContext,\n PageDataSourceDescriptor,\n PageDepartmentRecord,\n PageHttpMethod,\n PageListResult,\n PageOffsetListResult,\n PagePermissionGroup,\n PageRequestOptions,\n PageSdk,\n PageSdkError,\n PageTransportDownloadPayload,\n PageTransportRequestPayload,\n FormPermissionGroup,\n RoleListParams,\n RoleUsersParams,\n SaveDataManagementConfigParams,\n SearchExpression,\n SearchGroup,\n SearchRule,\n SearchSortItem,\n SubFormRule,\n SwitchAppRoleParams,\n SwitchPlatformRoleParams,\n TerminateProcessInstanceParams,\n TriggerCallbackTaskParams,\n UiPermissionListParams,\n UpdateApiPermissionParams,\n UpdateFormPermissionGroupDto,\n UpdatePagePermissionGroupDto,\n UpdateRoleParams,\n UpdateUiPermissionParams,\n UpdateUserParams,\n QueryFormPermissionGroupDto,\n QueryPagePermissionGroupDto,\n UserListParams,\n UserMenuPermissionsResponse,\n ValidateUserParams,\n CreateUserParams,\n SendNotificationByTypeParams,\n SendNotificationResult,\n ViewFieldPermissionValue,\n ViewPermissionSummary,\n} from \"./types\"\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nconst isSearchRuleLike = (value: unknown): value is SearchRule | SubFormRule =>\n isRecord(value) &&\n typeof value.key === \"string\" &&\n (value.componentName === undefined || typeof value.componentName === \"string\")\n\nconst isBlobLike = (value: unknown): value is Blob =>\n typeof Blob !== \"undefined\" && value instanceof Blob\n\nconst normalizeMethod = (value: PageHttpMethod | string): PageHttpMethod => {\n const method = String(value || \"get\").toLowerCase()\n if (\n method === \"get\" ||\n method === \"post\" ||\n method === \"put\" ||\n method === \"delete\" ||\n method === \"patch\"\n ) {\n return method\n }\n return \"get\"\n}\n\nconst resolveAppType = (\n context: PageContext,\n explicitAppType?: string,\n): string => {\n const appType = String(explicitAppType || context.app.appType || \"\").trim()\n if (!appType) {\n throw new Error(\"appType 不能为空\")\n }\n return appType\n}\n\nconst buildAppPath = (\n context: PageContext,\n explicitAppType: string | undefined,\n suffix: string,\n) => `/${resolveAppType(context, explicitAppType)}${suffix}`\n\nconst encodePathSegment = (value: string) => encodeURIComponent(String(value))\n\nconst getHeaderValue = (\n headers: Record<string, unknown> | undefined,\n name: string,\n): string | undefined => {\n if (!headers) {\n return undefined\n }\n const target = name.toLowerCase()\n const entry = Object.entries(headers).find(\n ([key]) => key.toLowerCase() === target,\n )\n return entry ? String(entry[1]) : undefined\n}\n\nconst parseContentDispositionFileName = (\n contentDisposition?: string,\n): string | undefined => {\n if (!contentDisposition) {\n return undefined\n }\n\n const utf8Match = contentDisposition.match(/filename\\*=UTF-8''([^;]+)/i)\n if (utf8Match?.[1]) {\n try {\n return decodeURIComponent(utf8Match[1])\n } catch {\n return utf8Match[1]\n }\n }\n\n const quotedMatch = contentDisposition.match(/filename=\"([^\"]+)\"/i)\n if (quotedMatch?.[1]) {\n return quotedMatch[1]\n }\n\n const plainMatch = contentDisposition.match(/filename=([^;]+)/i)\n if (plainMatch?.[1]) {\n return plainMatch[1].trim()\n }\n\n return undefined\n}\n\nconst parseConnectorCallName = (name: string) => {\n const value = String(name || \"\").trim()\n const separatorIndex = value.indexOf(\".\")\n if (separatorIndex <= 0 || separatorIndex === value.length - 1) {\n throw new Error(\"连接器调用名必须是 connector.api 格式\")\n }\n\n return {\n connector: value.slice(0, separatorIndex),\n api: value.slice(separatorIndex + 1),\n }\n}\n\nconst serializeQuery = (query?: Record<string, unknown>) => {\n if (!query) {\n return undefined\n }\n\n const params = new URLSearchParams()\n\n const appendValue = (key: string, value: unknown) => {\n if (value === undefined || value === null || value === \"\") {\n return\n }\n if (Array.isArray(value)) {\n value.forEach((item) => appendValue(key, item))\n return\n }\n if (value instanceof Date) {\n params.append(key, value.toISOString())\n return\n }\n params.append(key, String(value))\n }\n\n Object.entries(query).forEach(([key, value]) => {\n appendValue(key, value)\n })\n\n const serialized = params.toString()\n return serialized || undefined\n}\n\nconst toLegacyRules = (value: Record<string, unknown>) =>\n Object.entries(value).flatMap(([key, itemValue]) => {\n if (itemValue === undefined) {\n return []\n }\n return [\n {\n key,\n operator: Array.isArray(itemValue) ? \"IN\" : \"EQ\",\n value: itemValue,\n },\n ]\n })\n\nconst toSearchGroup = (value: unknown): SearchGroup | undefined => {\n if (value === undefined || value === null || value === \"\") {\n return undefined\n }\n\n if (typeof value === \"string\") {\n try {\n return toSearchGroup(JSON.parse(value))\n } catch {\n return undefined\n }\n }\n\n if (Array.isArray(value)) {\n const rules: Array<SearchRule | SubFormRule> = []\n const conditions: SearchGroup[] = []\n\n value.forEach((item) => {\n const group = toSearchGroup(item)\n if (group) {\n if (group.rules?.length) {\n rules.push(...group.rules)\n }\n if (group.conditions?.length) {\n conditions.push(...group.conditions)\n }\n return\n }\n\n if (isSearchRuleLike(item)) {\n rules.push(item)\n return\n }\n\n if (isRecord(item)) {\n rules.push(...(toLegacyRules(item) as SearchRule[]))\n }\n })\n\n if (rules.length === 0 && conditions.length === 0) {\n return undefined\n }\n\n return {\n logic: \"AND\",\n ...(rules.length > 0 ? { rules } : {}),\n ...(conditions.length > 0 ? { conditions } : {}),\n }\n }\n\n if (isRecord(value)) {\n if (isSearchRuleLike(value)) {\n return {\n logic: \"AND\",\n rules: [value],\n }\n }\n\n if (\"rules\" in value || \"conditions\" in value || \"logic\" in value) {\n const nextGroup: SearchGroup = {\n logic:\n value.logic === \"OR\" || value.logic === \"AND\" ? value.logic : \"AND\",\n }\n\n if (Array.isArray(value.rules)) {\n nextGroup.rules = value.rules.filter(isSearchRuleLike)\n }\n\n if (Array.isArray(value.conditions)) {\n nextGroup.conditions = value.conditions\n .map((item) => toSearchGroup(item))\n .filter((item): item is SearchGroup => Boolean(item))\n }\n\n if (!nextGroup.rules?.length && !nextGroup.conditions?.length) {\n return undefined\n }\n\n return nextGroup\n }\n\n const rules = toLegacyRules(value)\n if (rules.length === 0) {\n return undefined\n }\n return {\n logic: \"AND\",\n rules,\n }\n }\n\n return undefined\n}\n\nconst mergeSearchExpressions = (base: unknown, extra: unknown) => {\n const baseGroup = toSearchGroup(base)\n const extraGroup = toSearchGroup(extra)\n\n if (!baseGroup) {\n return extraGroup\n }\n\n if (!extraGroup) {\n return baseGroup\n }\n\n return {\n logic: \"AND\",\n conditions: [baseGroup, extraGroup],\n } satisfies SearchGroup\n}\n\nconst serializeSearchExpression = (value?: SearchExpression | string) => {\n if (value === undefined || value === null || value === \"\") {\n return undefined\n }\n if (typeof value === \"string\") {\n return value\n }\n const group = toSearchGroup(value)\n return group ? JSON.stringify(group) : undefined\n}\n\nconst normalizeAdvancedOrder = (value?: SearchSortItem | SearchSortItem[]) => {\n if (!value) {\n return undefined\n }\n const nextValue = Array.isArray(value) ? value : [value]\n return JSON.stringify(nextValue)\n}\n\nconst normalizeDynamicOrder = (value?: string | SearchSortItem) => {\n if (!value) {\n return undefined\n }\n if (typeof value === \"string\") {\n return value\n }\n return `${value.id}:${value.isAsc === \"n\" ? \"-\" : \"+\"}`\n}\n\nconst normalizeJsonResponse = <TResult = unknown, TRaw = TResult>(\n rawResponse: unknown,\n): PageApiResponse<TResult, TRaw> => {\n const topLevelCode = Number((rawResponse as { code?: number })?.code)\n const nestedCode = Number(\n (rawResponse as { data?: { code?: number } })?.data?.code,\n )\n const code = Number.isFinite(topLevelCode)\n ? topLevelCode\n : Number.isFinite(nestedCode)\n ? nestedCode\n : 200\n\n const topLevelResult =\n isRecord(rawResponse) && \"result\" in rawResponse\n ? (rawResponse.result as TResult)\n : undefined\n const nestedResult =\n isRecord((rawResponse as { data?: unknown })?.data) &&\n \"result\" in ((rawResponse as { data?: Record<string, unknown> }).data || {})\n ? ((rawResponse as { data?: Record<string, unknown> }).data\n ?.result as TResult)\n : undefined\n const topLevelData =\n isRecord(rawResponse) && \"data\" in rawResponse\n ? (rawResponse.data as TRaw)\n : undefined\n\n const result =\n topLevelResult !== undefined\n ? topLevelResult\n : nestedResult !== undefined\n ? nestedResult\n : topLevelData !== undefined\n ? (topLevelData as unknown as TResult)\n : isRecord(rawResponse)\n ? (rawResponse as TResult)\n : null\n\n const nestedSuccess =\n typeof (rawResponse as { data?: { success?: boolean } })?.data?.success ===\n \"boolean\"\n ? (rawResponse as { data?: { success?: boolean } }).data?.success\n : undefined\n\n const success =\n typeof (rawResponse as { success?: boolean })?.success === \"boolean\"\n ? Boolean((rawResponse as { success?: boolean }).success)\n : typeof nestedSuccess === \"boolean\"\n ? Boolean(nestedSuccess)\n : code >= 200 && code < 300\n\n return {\n code,\n success,\n message:\n typeof (rawResponse as { message?: string })?.message === \"string\"\n ? (rawResponse as { message?: string }).message\n : typeof (rawResponse as { data?: { message?: string } })?.data\n ?.message === \"string\"\n ? (rawResponse as { data?: { message?: string } }).data?.message\n : undefined,\n result,\n data:\n topLevelData !== undefined\n ? topLevelData\n : topLevelResult !== undefined\n ? (topLevelResult as unknown as TRaw)\n : undefined,\n raw: rawResponse,\n }\n}\n\nconst normalizeBinaryResponse = (rawResponse: unknown): PageBinaryResponse => {\n if (isRecord(rawResponse) && isBlobLike(rawResponse.blob)) {\n return rawResponse as unknown as PageBinaryResponse\n }\n\n if (isBlobLike(rawResponse)) {\n return {\n blob: rawResponse,\n raw: rawResponse,\n }\n }\n\n const responseData = (rawResponse as { data?: unknown })?.data\n const responseHeaders = isRecord(\n (rawResponse as { headers?: unknown })?.headers,\n )\n ? ((rawResponse as { headers?: Record<string, unknown> }).headers as Record<\n string,\n unknown\n >)\n : undefined\n\n if (!isBlobLike(responseData)) {\n throw new Error(\"transport.download 未返回 Blob 数据\")\n }\n\n const contentDisposition = getHeaderValue(\n responseHeaders,\n \"content-disposition\",\n )\n\n return {\n blob: responseData,\n fileName: parseContentDispositionFileName(contentDisposition),\n contentType:\n getHeaderValue(responseHeaders, \"content-type\") || responseData.type,\n headers: responseHeaders\n ? Object.fromEntries(\n Object.entries(responseHeaders).map(([key, value]) => [\n key,\n value === undefined ? undefined : String(value),\n ]),\n )\n : undefined,\n raw: rawResponse,\n }\n}\n\nconst toSdkError = (\n input: unknown,\n payload: PageTransportRequestPayload | PageTransportDownloadPayload,\n): PageSdkError => {\n const normalizedResponse = isRecord(input)\n ? normalizeJsonResponse(input)\n : undefined\n\n const nextError =\n input instanceof Error\n ? input\n : new Error(\n normalizedResponse?.message ||\n `请求失败: ${String(payload.method).toUpperCase()} ${payload.path}`,\n )\n\n const sdkError = nextError as PageSdkError\n sdkError.method = String(payload.method).toUpperCase()\n sdkError.path = payload.path\n sdkError.response = normalizedResponse\n sdkError.raw = input\n return sdkError\n}\n\nconst ensureSuccess = <TResult = unknown, TRaw = TResult>(\n response: PageApiResponse<TResult, TRaw>,\n payload: PageTransportRequestPayload,\n) => {\n if (!response.success) {\n throw toSdkError(response, payload)\n }\n return response\n}\n\nconst resolveFormInstanceId = (params: {\n formInstId?: string\n formInstanceId?: string\n}) => {\n const formInstanceId = String(\n params.formInstId || params.formInstanceId || \"\",\n ).trim()\n if (!formInstanceId) {\n throw new Error(\"formInstanceId 不能为空\")\n }\n return formInstanceId\n}\n\nconst withDefaultAppType = <\n T extends {\n appType?: string\n scope?: string\n },\n>(\n context: PageContext,\n params: T | undefined,\n) => {\n if (!params) {\n return params\n }\n\n if (params.appType) {\n return params\n }\n\n if (params.scope === \"app\") {\n return {\n ...params,\n appType: context.app.appType,\n }\n }\n\n return params\n}\n\nexport const createPageSdk = (context: PageContext): PageSdk => {\n const request = async <TResult = unknown, TRaw = TResult>(\n options: PageRequestOptions,\n ) => {\n const payload: PageTransportRequestPayload = {\n path: options.path,\n method: normalizeMethod(options.method),\n query: serializeQuery(options.query),\n body: options.body,\n headers: options.headers,\n }\n\n try {\n const rawResponse = await context.bridge.invoke<unknown>(\n \"transport.request\",\n payload,\n )\n return ensureSuccess(\n normalizeJsonResponse<TResult, TRaw>(rawResponse),\n payload,\n )\n } catch (error) {\n throw toSdkError(error, payload)\n }\n }\n\n const download = async (options: PageRequestOptions) => {\n const payload: PageTransportDownloadPayload = {\n path: options.path,\n method: normalizeMethod(options.method),\n query: serializeQuery(options.query),\n body: options.body,\n headers: options.headers,\n }\n\n try {\n const rawResponse = await context.bridge.invoke<unknown>(\n \"transport.download\",\n payload,\n )\n return normalizeBinaryResponse(rawResponse)\n } catch (error) {\n throw toSdkError(error, payload)\n }\n }\n\n const connector = {\n invoke: <TResult = unknown, TBody = unknown>(\n params: ConnectorInvokeParams<TBody>,\n ) =>\n request<ConnectorInvokeResult<TResult>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/connectors/actions/invoke\",\n ),\n method: \"post\",\n body: {\n connector: params.connector,\n api: params.api,\n pathParams: params.pathParams,\n query: params.query,\n body: params.body,\n headers: params.headers,\n requestBodyType: params.requestBodyType,\n responseType: params.responseType,\n },\n }),\n call: <TResult = unknown, TBody = unknown>(\n name: string,\n params: ConnectorCallParams<TBody> = {},\n ) => {\n const target = parseConnectorCallName(name)\n return connector.invoke<TResult, TBody>({\n ...params,\n connector: target.connector,\n api: target.api,\n })\n },\n download: <TBody = unknown>(\n params: ConnectorInvokeParams<TBody>,\n ): Promise<PageBinaryResponse> =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/connectors/actions/download\",\n ),\n method: \"post\",\n body: {\n connector: params.connector,\n api: params.api,\n pathParams: params.pathParams,\n query: params.query,\n body: params.body,\n headers: params.headers,\n requestBodyType: params.requestBodyType,\n responseType: \"binary\",\n },\n }),\n }\n\n const form = {\n getDetail: <T = unknown>(params: FormGetDetailParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/getFormDataById.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n },\n }),\n create: <T = unknown, TRaw = unknown>(params: FormCreateParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/saveFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formDataJson: JSON.stringify(params.data || {}),\n },\n }),\n update: <T = unknown, TRaw = unknown>(params: FormUpdateParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/updateFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n updateFormDataJson:\n params.updateFormDataJson || JSON.stringify(params.data || {}),\n },\n }),\n remove: <T = unknown, TRaw = unknown>(params: FormRemoveParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/deleteFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n },\n }),\n getChangeRecords: <T = unknown>(params: FormChangeRecordParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/getFormDataChangeRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n page: params.page,\n pageSize: params.pageSize,\n },\n }),\n search: <T = unknown>(params: FormSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/searchFormDatas.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n searchFieldJson: serializeSearchExpression(params.search),\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n originatorId: params.originatorId,\n createFrom: params.createFrom,\n createTo: params.createTo,\n modifiedFrom: params.modifiedFrom,\n modifiedTo: params.modifiedTo,\n dynamicOrder: normalizeDynamicOrder(params.dynamicOrder),\n instanceStatus: params.instanceStatus,\n },\n }),\n searchIds: <T = string>(params: FormSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/searchFormDataIds.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n searchFieldJson: serializeSearchExpression(params.search),\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n originatorId: params.originatorId,\n createFrom: params.createFrom,\n createTo: params.createTo,\n modifiedFrom: params.modifiedFrom,\n modifiedTo: params.modifiedTo,\n dynamicOrder: normalizeDynamicOrder(params.dynamicOrder),\n instanceStatus: params.instanceStatus,\n },\n }),\n advancedSearch: <T = unknown>(params: FormAdvancedSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedSearch.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n filters: serializeSearchExpression(params.filters),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: normalizeAdvancedOrder(params.order),\n instanceStatus: params.instanceStatus,\n },\n }),\n advancedExport: (params: FormExportParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedExport.xlsx\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n filters: serializeSearchExpression(params.filters),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: normalizeAdvancedOrder(params.order),\n instanceStatus: params.instanceStatus,\n exportAll: params.exportAll,\n embedImages: params.embedImages,\n exportFields: params.exportFields?.join(\",\"),\n },\n }),\n downloadImportTemplate: (params: DataManagementConfigParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedExportTemplate.xlsx\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n },\n }),\n importPreview: <T = unknown>(params: FormImportParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importPreview.xlsx\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n fileBase64: params.fileBase64,\n fileName: params.fileName,\n },\n }),\n importExcel: <T = unknown>(params: FormImportParams) =>\n request<T>({\n path: buildAppPath(context, params.appType, \"/v1/form/import.xlsx\"),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n fileBase64: params.fileBase64,\n fileName: params.fileName,\n },\n }),\n getImportRecords: <T = unknown>(params: ImportExportRecordQuery) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n },\n }),\n getExportRecords: <T = unknown>(params: ImportExportRecordQuery) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/exportRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n },\n }),\n downloadImportSource: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecord/downloadSource.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n downloadImportFailed: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecord/downloadFailed.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n downloadExportRecord: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/exportRecord/download.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n getDataManagementConfig: <T = unknown>(\n params: DataManagementConfigParams,\n ) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/dataManagement/config/get.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n },\n }),\n saveDataManagementConfig: <T = unknown>(\n params: SaveDataManagementConfigParams,\n ) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/dataManagement/config/save.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n config: params.config,\n },\n }),\n }\n\n const user = {\n create: <T = unknown>(params: CreateUserParams) =>\n request<T>({\n path: \"/user/create\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(params: UpdateUserParams) =>\n request<T>({\n path: \"/user/update\",\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/user/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = unknown>(id = \"current\") =>\n request<T>({\n path: `/user/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n getCurrent: <T = unknown>() =>\n request<T>({\n path: \"/user/current\",\n method: \"get\",\n }),\n getByUsername: <T = unknown>(username: string) =>\n request<T>({\n path: `/user/username/${encodePathSegment(username)}`,\n method: \"get\",\n }),\n list: <T = unknown>(params?: UserListParams) =>\n request<T>({\n path: \"/user/list\",\n method: \"get\",\n query: {\n ids: params?.ids,\n departmentIds: params?.departmentIds,\n name: params?.name,\n username: params?.username,\n phone: params?.phone,\n email: params?.email,\n page: params?.page,\n pageSize: params?.pageSize,\n },\n }),\n search: <T = unknown>(keyword?: string) =>\n request<T>({\n path: \"/user/search\",\n method: \"get\",\n query: {\n keyword,\n },\n }),\n listAll: <T = unknown>() =>\n request<T>({\n path: \"/user/all\",\n method: \"get\",\n }),\n listByDepartment: <T = unknown>(departmentId: string) =>\n request<T>({\n path: `/user/department/${encodePathSegment(departmentId)}`,\n method: \"get\",\n }),\n validate: <T = unknown>(params: ValidateUserParams) =>\n request<T>({\n path: \"/user/validate\",\n method: \"post\",\n body: params,\n }),\n }\n\n const getParentDepartments = <T = PageDepartmentRecord[]>(\n departmentId: string,\n options: GetParentDepartmentsOptions = {},\n ) =>\n request<T>({\n path: `/department/${encodePathSegment(departmentId)}/parentDepartments`,\n method: \"get\",\n query: {\n includeSelf: options.includeSelf ?? true,\n },\n })\n\n const department = {\n getParentDepartments,\n getCurrentUserParentDepartments: async (\n options: GetParentDepartmentsOptions = {},\n ): Promise<CurrentUserDepartmentParents[]> => {\n const departments = (context.user.departments || []).filter(\n (item) => typeof item.id === \"string\" && item.id.trim(),\n )\n\n return Promise.all(\n departments.map(async (item) => {\n const response = await getParentDepartments(item.id || \"\", {\n includeSelf: options.includeSelf,\n })\n return {\n department: item,\n parents: response.result || [],\n }\n }),\n )\n },\n }\n\n const role = {\n create: <T = unknown>(params: CreateRoleParams) =>\n request<T>({\n path: \"/role/\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateRoleParams) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = unknown>(id: string) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = unknown>(params?: RoleListParams) =>\n request<T>({\n path: \"/role/\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n listUsers: <T = unknown>(roleId: string, params?: RoleUsersParams) =>\n request<T>({\n path: `/role/${encodePathSegment(roleId)}/users`,\n method: \"get\",\n query: params as Record<string, unknown> | undefined,\n }),\n assignRoles: <T = unknown>(params: AssignRolesParams) =>\n request<T>({\n path: \"/role/assign\",\n method: \"post\",\n body: params,\n }),\n addUserRole: <T = boolean>(params: { userId: string; roleId: string }) =>\n request<T>({\n path: \"/role/add\",\n method: \"post\",\n body: params,\n }),\n removeUserRole: <T = boolean>(params: { userId: string; roleId: string }) =>\n request<T>({\n path: \"/role/remove\",\n method: \"post\",\n body: params,\n }),\n batchAddUsers: <T = unknown>(params: BatchAddUsersToRoleParams) =>\n request<T>({\n path: \"/role/batch-add-users\",\n method: \"post\",\n body: params,\n }),\n getMyRoles: <T = unknown>(params?: GetUserRolesParams) =>\n request<T>({\n path: \"/role/my/roles\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n getCurrentRole: <T = unknown>(params?: GetUserRolesParams) =>\n request<T>({\n path: \"/role/my/current\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n switchPlatformRole: <T = boolean>(params: SwitchPlatformRoleParams) =>\n request<T>({\n path: \"/role/switch/platform\",\n method: \"post\",\n body: params,\n }),\n switchAppRole: <T = boolean>(params: SwitchAppRoleParams) =>\n request<T>({\n path: \"/role/switch/app\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n }\n\n const permission = {\n formGroup: {\n create: <T = FormPermissionGroup>(params: CreateFormPermissionGroupDto) =>\n request<T>({\n path: \"/permission/form-group/\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n update: <T = FormPermissionGroup>(\n id: string,\n params: UpdateFormPermissionGroupDto,\n ) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"put\",\n body: {\n ...params,\n ...(params.appType\n ? { appType: resolveAppType(context, params.appType) }\n : {}),\n },\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = FormPermissionGroup | null>(id: string) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = PageOffsetListResult<FormPermissionGroup>>(\n params?: QueryFormPermissionGroupDto,\n ) =>\n request<T>({\n path: \"/permission/form-group/\",\n method: \"get\",\n query: {\n ...params,\n appType: resolveAppType(context, params?.appType),\n },\n }),\n getViewFieldPermissions: <\n T = Record<string, ViewFieldPermissionValue>,\n >(params: {\n appType?: string\n formUuid: string\n }) =>\n request<T>({\n path: \"/permission/form-group/field-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, params.appType),\n formUuid: params.formUuid,\n },\n }),\n getViewPermissionSummary: <T = ViewPermissionSummary>(params: {\n appType?: string\n formUuid: string\n }) =>\n request<T>({\n path: \"/permission/form-group/view-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, params.appType),\n formUuid: params.formUuid,\n },\n }),\n },\n pageGroup: {\n create: <T = PagePermissionGroup>(params: CreatePagePermissionGroupDto) =>\n request<T>({\n path: \"/permission/page-group/\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n update: <T = PagePermissionGroup>(\n id: string,\n params: UpdatePagePermissionGroupDto,\n ) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"put\",\n body: {\n ...params,\n ...(params.appType\n ? { appType: resolveAppType(context, params.appType) }\n : {}),\n },\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = PagePermissionGroup | null>(id: string) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = PageOffsetListResult<PagePermissionGroup>>(\n params?: QueryPagePermissionGroupDto,\n ) =>\n request<T>({\n path: \"/permission/page-group/\",\n method: \"get\",\n query: {\n ...params,\n appType: resolveAppType(context, params?.appType),\n },\n }),\n getUserMenuPermissions: <T = UserMenuPermissionsResponse>(\n appType?: string,\n ) =>\n request<T>({\n path: \"/permission/page-group/user-menu-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, appType),\n },\n }),\n },\n api: {\n create: <T = unknown>(params: CreateApiPermissionParams) =>\n request<T>({\n path: \"/permission/api\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateApiPermissionParams) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n list: <T = unknown>(params?: ApiPermissionListParams) =>\n request<T>({\n path: \"/permission/api\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n assign: <T = boolean>(params: AssignPermissionsParams) =>\n request<T>({\n path: \"/permission/api/assign\",\n method: \"post\",\n body: params,\n }),\n getByRole: <T = unknown>(roleId: string) =>\n request<T>({\n path: `/permission/api/role/${encodePathSegment(roleId)}`,\n method: \"get\",\n }),\n getRolesByPermission: <T = unknown>(permissionId: string) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(permissionId)}/roles`,\n method: \"get\",\n }),\n },\n ui: {\n create: <T = unknown>(params: CreateUiPermissionParams) =>\n request<T>({\n path: \"/permission/api/ui\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateUiPermissionParams) =>\n request<T>({\n path: `/permission/api/ui/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/api/ui/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n list: <T = unknown>(params?: UiPermissionListParams) =>\n request<T>({\n path: \"/permission/api/ui\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n assign: <T = boolean>(params: AssignPermissionsParams) =>\n request<T>({\n path: \"/permission/api/ui/assign\",\n method: \"post\",\n body: params,\n }),\n getMyPlatform: <T = unknown>() =>\n request<T>({\n path: \"/permission/api/ui/me/platform\",\n method: \"get\",\n }),\n getMyApp: <T = unknown>(appType?: string) =>\n request<T>({\n path: \"/permission/api/ui/me/app\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, appType),\n },\n }),\n },\n }\n\n const process = {\n getInstance: <T = unknown>(params: GetProcessInstanceParams) =>\n request<T>({\n path: buildAppPath(context, params.appType, \"/v1/process/instance\"),\n method: \"get\",\n query: {\n instanceId: params.instanceId,\n },\n }),\n terminateInstance: <T = unknown>(params: TerminateProcessInstanceParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/terminateInstance.json\",\n ),\n method: \"post\",\n body: {\n processInstanceId: params.processInstanceId,\n reason: params.reason,\n },\n }),\n approveTask: <T = unknown>(params: ApproveTaskParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/approveTask.json\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n triggerCallbackTask: <T = unknown>(params: TriggerCallbackTaskParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/triggerCallback.json\",\n ),\n method: \"post\",\n body: {\n taskId: params.taskId,\n payload: params.payload,\n },\n }),\n }\n\n const notification = {\n sendByType: <T = SendNotificationResult>(\n params: SendNotificationByTypeParams,\n ) =>\n request<T>({\n path: \"/api/notification-config/send-by-type\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n batchSendByType: <T = SendNotificationResult>(\n params: BatchSendNotificationByTypeParams,\n ) =>\n request<T>({\n path: \"/api/notification-config/batch-send-by-type\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n }\n\n const sdk: PageSdk = {\n context,\n request,\n download,\n transport: {\n request,\n download,\n },\n connector,\n form,\n user,\n department,\n role,\n permission,\n process,\n notification,\n dataSource: {\n run: async <TResult = unknown, TRaw = TResult>(\n name: string,\n params: Record<string, unknown> = {},\n ): Promise<PageApiResponse<TResult, TRaw>> => {\n const descriptor = (context.page.dataSources || []).find(\n (item) => item.key === name,\n ) as PageDataSourceDescriptor | undefined\n\n if (!descriptor) {\n throw new Error(`未找到数据源: ${String(name || \"\")}`)\n }\n\n const runtimeParams = params\n const resolvedFormUuid = String(\n runtimeParams.formUuid || descriptor.formUuid || \"\",\n ).trim()\n\n switch (descriptor.type) {\n case \"form.list\":\n return form.advancedSearch<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormAdvancedSearchParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n filters: mergeSearchExpressions(\n descriptor.defaultFilter,\n runtimeParams.filters as SearchExpression | string | undefined,\n ),\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.detail\":\n return form.getDetail<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormGetDetailParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.create\":\n return form.create<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormCreateParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.update\":\n return form.update<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormUpdateParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.delete\":\n return form.remove<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormRemoveParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n default:\n throw new Error(`暂不支持的数据源类型: ${String(descriptor.type)}`)\n }\n },\n },\n navigation: context.navigation,\n ui: context.ui,\n }\n\n return sdk\n}\n","import { StyleProvider } from \"@ant-design/cssinjs\";\nimport { App as AntdApp, ConfigProvider, message } from \"antd\";\nimport zhCN from \"antd/locale/zh_CN.js\";\nimport React from \"react\";\nimport { createRoot } from \"react-dom/client\";\n\nimport { PageProvider } from \"./provider\";\nimport { antdTheme } from \"../../styles/antd-theme\";\n\nimport type { PageContext } from \"../core/types\";\n\ntype RootLike = {\n render: (node: React.ReactNode) => void;\n unmount: () => void;\n};\n\nconst NAMESPACE_ROOT_CLASS = \"sy-app-workspace\";\nconst RUNTIME_PORTAL_ATTR = \"data-sy-runtime-portal\";\nconst PORTAL_CONTAINER_STACK_GLOBAL = \"__OPENXIANGDA_PORTAL_CONTAINER_STACK__\";\nconst PORTAL_CONTAINER_RESOLVER_GLOBAL = \"__OPENXIANGDA_GET_PORTAL_CONTAINER__\";\nconst MESSAGE_PROXY_GLOBAL = \"__OPENXIANGDA_ANTD_MESSAGE_PROXY__\";\nconst MESSAGE_METHODS = [\n \"open\",\n \"success\",\n \"info\",\n \"warning\",\n \"error\",\n \"loading\",\n \"destroy\",\n] as const;\n\ntype RuntimePortalHandle = {\n container: HTMLElement;\n release: () => void;\n};\n\ntype MessageMethod = (typeof MESSAGE_METHODS)[number];\n\ntype AntdMessageProxyState = {\n apiStack: Array<Record<string, unknown>>;\n installed: boolean;\n originalMethods: Partial<Record<MessageMethod, (...args: unknown[]) => unknown>>;\n};\n\nconst createRuntimeRoot = (el: HTMLElement): RootLike => {\n return createRoot(el);\n};\n\nconst isShadowRoot = (rootNode: Node | null | undefined): rootNode is ShadowRoot =>\n typeof ShadowRoot !== \"undefined\" && rootNode instanceof ShadowRoot;\n\nconst getStyleContainer = (el: HTMLElement): HTMLElement | ShadowRoot => {\n const rootNode = el.getRootNode?.();\n if (isShadowRoot(rootNode)) {\n return rootNode;\n }\n return document.head;\n};\n\nconst getRuntimeRoot = (el: HTMLElement, triggerNode?: HTMLElement) => {\n const rootNode = el.getRootNode?.();\n if (isShadowRoot(rootNode)) return el;\n const triggerRoot = triggerNode?.closest?.<HTMLElement>(\n `.${NAMESPACE_ROOT_CLASS}`,\n );\n return (\n triggerRoot ||\n el.closest<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n el.querySelector<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n el\n );\n};\n\nconst getRuntimeOverlayContainer = (\n el: HTMLElement,\n portalContainer: HTMLElement | null,\n): {\n getPopupContainer: (triggerNode?: HTMLElement) => HTMLElement | ShadowRoot;\n getTargetContainer: () => HTMLElement | ShadowRoot;\n} => {\n const getOverlayRoot = (triggerNode?: HTMLElement) => {\n if (portalContainer?.isConnected) return portalContainer;\n return getRuntimeRoot(el, triggerNode);\n };\n\n return {\n getPopupContainer: (triggerNode?: HTMLElement) => {\n return getOverlayRoot(triggerNode);\n },\n getTargetContainer: () => getRuntimeRoot(el),\n };\n};\n\nconst createAntdConfig = (\n overlayContainer: ReturnType<typeof getRuntimeOverlayContainer>,\n) => ({\n locale: zhCN,\n prefixCls: \"sy-ant\",\n iconPrefixCls: \"sy-anticon\",\n theme: antdTheme,\n getPopupContainer: overlayContainer.getPopupContainer,\n getTargetContainer: overlayContainer.getTargetContainer,\n});\n\nconst createPortalContainer = (el: HTMLElement) => {\n const rootNode = el.getRootNode?.();\n const parent = isShadowRoot(rootNode)\n ? rootNode\n : el.ownerDocument?.body || document.body;\n const portalContainer = el.ownerDocument.createElement(\"div\");\n portalContainer.setAttribute(RUNTIME_PORTAL_ATTR, \"\");\n portalContainer.classList.add(NAMESPACE_ROOT_CLASS);\n parent.appendChild(portalContainer);\n return portalContainer;\n};\n\nconst getAntdMessageProxyState = (): AntdMessageProxyState => {\n const globalScope = globalThis as typeof globalThis & {\n [MESSAGE_PROXY_GLOBAL]?: AntdMessageProxyState;\n };\n if (!globalScope[MESSAGE_PROXY_GLOBAL]) {\n globalScope[MESSAGE_PROXY_GLOBAL] = {\n apiStack: [],\n installed: false,\n originalMethods: {},\n };\n }\n return globalScope[MESSAGE_PROXY_GLOBAL];\n};\n\nconst installAntdMessageProxy = () => {\n const state = getAntdMessageProxyState();\n if (state.installed) return state;\n MESSAGE_METHODS.forEach((method) => {\n const originalMethod = (message as unknown as Record<string, unknown>)[method];\n if (typeof originalMethod !== \"function\") return;\n state.originalMethods[method] = originalMethod.bind(message) as (\n ...args: unknown[]\n ) => unknown;\n (message as unknown as Record<string, unknown>)[method] = (\n ...args: unknown[]\n ) => {\n const api = state.apiStack.at(-1);\n const apiMethod = api?.[method];\n if (typeof apiMethod === \"function\") {\n return apiMethod(...args);\n }\n return state.originalMethods[method]?.(...args);\n };\n });\n state.installed = true;\n return state;\n};\n\nconst registerAntdMessageApi = (api: Record<string, unknown>) => {\n const state = installAntdMessageProxy();\n state.apiStack.push(api);\n return () => {\n const position = state.apiStack.lastIndexOf(api);\n if (position >= 0) {\n state.apiStack.splice(position, 1);\n }\n };\n};\n\nconst installRuntimePortalContainer = (el: HTMLElement): RuntimePortalHandle => {\n const globalScope = globalThis as typeof globalThis & {\n [PORTAL_CONTAINER_STACK_GLOBAL]?: HTMLElement[];\n [PORTAL_CONTAINER_RESOLVER_GLOBAL]?: () => HTMLElement;\n };\n const portalContainer = createPortalContainer(el);\n const stack = Array.isArray(globalScope[PORTAL_CONTAINER_STACK_GLOBAL])\n ? globalScope[PORTAL_CONTAINER_STACK_GLOBAL]\n : [];\n stack.push(portalContainer);\n globalScope[PORTAL_CONTAINER_STACK_GLOBAL] = stack;\n globalScope[PORTAL_CONTAINER_RESOLVER_GLOBAL] = () => {\n for (let index = stack.length - 1; index >= 0; index -= 1) {\n const candidate = stack[index];\n if (candidate?.isConnected) {\n return candidate;\n }\n }\n return (\n document.querySelector<HTMLElement>(`[${RUNTIME_PORTAL_ATTR}]`) ||\n document.querySelector<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n document.body\n );\n };\n\n return {\n container: portalContainer,\n release: () => {\n const position = stack.lastIndexOf(portalContainer);\n if (position >= 0) {\n stack.splice(position, 1);\n }\n portalContainer.remove();\n },\n };\n};\n\nconst installAntdStaticHolder = (\n el: HTMLElement,\n portalContainer: HTMLElement | null,\n) => {\n installAntdMessageProxy();\n const getMessageContainer = () => {\n if (portalContainer?.isConnected) return portalContainer;\n return getRuntimeRoot(el);\n };\n\n ConfigProvider.config({\n prefixCls: \"sy-ant\",\n iconPrefixCls: \"sy-anticon\",\n theme: antdTheme,\n holderRender: (children) => {\n if (!el.isConnected) {\n return (\n <ConfigProvider\n prefixCls=\"sy-ant\"\n iconPrefixCls=\"sy-anticon\"\n theme={antdTheme}\n >\n {children}\n </ConfigProvider>\n );\n }\n const overlayContainer = getRuntimeOverlayContainer(el, portalContainer);\n return (\n <StyleProvider hashPriority=\"high\" container={getStyleContainer(el)}>\n <ConfigProvider {...createAntdConfig(overlayContainer)}>\n {children}\n </ConfigProvider>\n </StyleProvider>\n );\n },\n });\n message.config({\n prefixCls: \"sy-ant-message\",\n getContainer: getMessageContainer,\n });\n};\n\nconst RuntimeMessageBridge = ({ children }: { children: React.ReactNode }) => {\n const appContext = AntdApp.useApp();\n React.useLayoutEffect(() => {\n return registerAntdMessageApi(\n appContext.message as unknown as Record<string, unknown>,\n );\n }, [appContext.message]);\n return <>{children}</>;\n};\n\nexport const createReactPage = (\n AppComponent: React.ComponentType,\n): {\n mount: (el: HTMLElement, context: PageContext) => void;\n update: (el: HTMLElement, context: PageContext) => void;\n unmount: () => void;\n} => {\n let root: RootLike | null = null;\n let currentContainer: HTMLElement | null = null;\n let releasePortalContainer: (() => void) | null = null;\n let portalContainer: HTMLElement | null = null;\n\n const render = (el: HTMLElement, context: PageContext) => {\n el.classList.add(NAMESPACE_ROOT_CLASS);\n if (!root || currentContainer !== el || !portalContainer?.isConnected) {\n root?.unmount();\n releasePortalContainer?.();\n root = createRuntimeRoot(el);\n currentContainer = el;\n const portalHandle = installRuntimePortalContainer(el);\n portalContainer = portalHandle.container;\n releasePortalContainer = portalHandle.release;\n }\n const overlayContainer = getRuntimeOverlayContainer(el, portalContainer);\n installAntdStaticHolder(el, portalContainer);\n const antdConfig = createAntdConfig(overlayContainer);\n\n root.render(\n <StyleProvider hashPriority=\"high\" container={getStyleContainer(el)}>\n <ConfigProvider {...antdConfig}>\n <AntdApp>\n <RuntimeMessageBridge>\n <PageProvider context={context}>\n <AppComponent />\n </PageProvider>\n </RuntimeMessageBridge>\n </AntdApp>\n </ConfigProvider>\n </StyleProvider>,\n );\n };\n\n return {\n mount: (el, context) => {\n render(el, context);\n },\n update: (el, context) => {\n render(el, context);\n },\n unmount: () => {\n root?.unmount();\n releasePortalContainer?.();\n root = null;\n currentContainer = null;\n releasePortalContainer = null;\n portalContainer = null;\n },\n };\n};\n","import React, { useMemo } from \"react\"\n\nimport { ReactPageContext } from \"./store\"\nimport { createPageSdk } from \"../core/client\"\n\nimport type { PageSdkStore } from \"./store\"\nimport type { PageContext } from \"../core/types\"\n\nexport interface PageProviderProps {\n context: PageContext\n children: React.ReactNode\n}\n\nexport const PageProvider: React.FC<PageProviderProps> = ({\n context,\n children,\n}) => {\n const value = useMemo<PageSdkStore>(\n () => ({\n context,\n sdk: createPageSdk(context),\n }),\n [context],\n )\n\n return (\n <ReactPageContext.Provider value={value}>\n {children}\n </ReactPageContext.Provider>\n )\n}\n","import { createContext, useContext } from \"react\"\n\nimport type { PageContext, PageSdk } from \"../core/types\"\n\nexport interface PageSdkStore {\n context: PageContext\n sdk: PageSdk\n}\n\nexport const ReactPageContext = createContext<PageSdkStore | null>(null)\n\nexport const usePageSdkStore = () => {\n const store = useContext(ReactPageContext)\n if (!store) {\n throw new Error(\"usePageSdkStore 必须在 PageProvider 内使用\")\n }\n return store\n}\n","import type { ThemeConfig } from 'antd';\n\nexport const antdTheme: ThemeConfig = {\n cssVar: { prefix: 'sy-ant' },\n hashed: false,\n token: {\n colorPrimary: '#1677ff',\n colorInfo: '#1677ff',\n colorSuccess: '#52c41a',\n colorWarning: '#faad14',\n colorError: '#ff4d4f',\n colorText: 'rgba(0,0,0,0.88)',\n colorTextSecondary: 'rgba(0,0,0,0.65)',\n colorTextTertiary: 'rgba(0,0,0,0.45)',\n colorTextDisabled: 'rgba(0,0,0,0.25)',\n colorBgContainer: '#ffffff',\n colorBgLayout: '#f5f5f5',\n colorBgElevated: '#ffffff',\n colorBorder: '#d9d9d9',\n colorBorderSecondary: '#f0f0f0',\n borderRadius: 6,\n borderRadiusSM: 4,\n borderRadiusLG: 8,\n fontSize: 14,\n controlHeight: 32,\n },\n components: {\n Form: { itemMarginBottom: 16 },\n Card: { paddingLG: 24 },\n },\n};\n\nexport default antdTheme;\n","import { useMemo } from \"react\"\n\nimport { usePageContext } from \"./usePageContext\"\n\nimport type { PageUserInfo, PageUserType } from \"../../core/types\"\n\nexport interface CurrentUserState {\n user: PageUserInfo & { userType: PageUserType; isGuest: boolean }\n isGuest: boolean\n isInternalUser: boolean\n displayName: string\n primaryDepartment: NonNullable<PageUserInfo[\"departments\"]>[number] | null\n}\n\nexport const useCurrentUser = (): CurrentUserState => {\n const { user } = usePageContext()\n\n return useMemo(() => {\n const userType: PageUserType =\n user.userType === \"guest\" || user.isGuest ? \"guest\" : \"normal\"\n const isGuest = userType === \"guest\"\n\n return {\n user: {\n ...user,\n isGuest,\n userType,\n },\n isGuest,\n isInternalUser: !isGuest,\n displayName: user.name || user.username || user.id,\n primaryDepartment: user.departments?.[0] || null,\n }\n }, [user])\n}\n","import { usePageSdkStore } from \"../store\"\n\nimport type { PageContext } from \"../../core/types\"\n\nexport const usePageContext = (): PageContext => {\n return usePageSdkStore().context\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\"\n\nimport { usePageSdk } from \"./usePageSdk\"\n\nimport type { PageApiResponse } from \"../../core/types\"\nimport type { Dispatch, SetStateAction } from \"react\"\n\nconst createParamsSignature = (value: unknown): string => {\n try {\n return JSON.stringify(value || {})\n } catch {\n return \"\"\n }\n}\n\nexport interface UseDataSourceOptions<\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n> {\n params?: TParams\n immediate?: boolean\n transform?: (result: TResult, response: PageApiResponse<TResult>) => TData\n}\n\nexport interface UseDataSourceResult<\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n> {\n response: PageApiResponse<TResult> | null\n result: TResult | null\n data: TData | null\n loading: boolean\n error: Error | null\n refresh: (params?: TParams) => Promise<PageApiResponse<TResult> | null>\n run: (params?: TParams) => Promise<PageApiResponse<TResult> | null>\n setResponse: Dispatch<SetStateAction<PageApiResponse<TResult> | null>>\n setResult: Dispatch<SetStateAction<TResult | null>>\n setData: Dispatch<SetStateAction<TData | null>>\n}\n\nexport const useDataSource = <\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n>(\n name: string,\n options: UseDataSourceOptions<TResult, TData, TParams> = {},\n): UseDataSourceResult<TResult, TData, TParams> => {\n const sdk = usePageSdk()\n const { params, immediate = true, transform } = options\n const paramsRef = useRef(params)\n const transformRef = useRef(transform)\n const paramsSignature = createParamsSignature(params)\n const [response, setResponse] = useState<PageApiResponse<TResult> | null>(\n null,\n )\n const [result, setResult] = useState<TResult | null>(null)\n const [data, setData] = useState<TData | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n paramsRef.current = params\n transformRef.current = transform\n\n const run = useCallback(\n async (overrideParams?: TParams) => {\n setLoading(true)\n setError(null)\n try {\n const response = await sdk.dataSource.run<TResult>(\n name,\n overrideParams || paramsRef.current || {},\n )\n setResponse(response)\n setResult(response.result as TResult | null)\n const activeTransform = transformRef.current\n const nextData = activeTransform\n ? activeTransform(response.result as TResult, response)\n : ((response.result ?? null) as unknown as TData | null)\n setData(nextData)\n return response\n } catch (runtimeError) {\n const nextError =\n runtimeError instanceof Error\n ? runtimeError\n : new Error(String(runtimeError))\n setError(nextError)\n setResponse(null)\n setResult(null)\n return null\n } finally {\n setLoading(false)\n }\n },\n [name, sdk.dataSource],\n )\n\n useEffect(() => {\n if (!immediate) {\n return\n }\n void run()\n }, [immediate, paramsSignature, run])\n\n return {\n response,\n result,\n data,\n loading,\n error,\n refresh: run,\n run,\n setResponse,\n setResult,\n setData,\n }\n}\n","import { usePageSdkStore } from \"../store\"\n\nimport type { PageSdk } from \"../../core/types\"\n\nexport const usePageSdk = (): PageSdk => {\n return usePageSdkStore().sdk\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\"\n\nimport { usePageSdk } from \"./usePageSdk\"\n\nimport type {\n PageApiResponse,\n ViewFieldPermissionValue,\n ViewOperationPermission,\n ViewPermissionSummary,\n} from \"../../core/types\"\n\nexport interface UseFormViewPermissionsOptions {\n appType?: string\n immediate?: boolean\n}\n\nexport interface UseFormViewPermissionsState {\n summary: ViewPermissionSummary\n response: PageApiResponse<ViewPermissionSummary> | null\n loading: boolean\n error: Error | null\n refresh: () => Promise<PageApiResponse<ViewPermissionSummary> | null>\n can: (operation: ViewOperationPermission) => boolean\n getFieldPermission: (fieldName: string) => ViewFieldPermissionValue | null\n}\n\nconst EMPTY_SUMMARY: ViewPermissionSummary = {\n fieldPermissions: {},\n operations: [],\n}\n\nconst toError = (error: unknown): Error => {\n if (error instanceof Error) {\n return error\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n return new Error(error.message)\n }\n return new Error(String(error || \"获取查看态权限失败\"))\n}\n\nexport const useFormViewPermissions = (\n formUuid: string,\n options: UseFormViewPermissionsOptions = {},\n): UseFormViewPermissionsState => {\n const sdk = usePageSdk()\n const [summary, setSummary] = useState<ViewPermissionSummary>(EMPTY_SUMMARY)\n const [response, setResponse] =\n useState<PageApiResponse<ViewPermissionSummary> | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const immediate = options.immediate ?? true\n\n const refresh = useCallback(async () => {\n const normalizedFormUuid = String(formUuid || \"\").trim()\n if (!normalizedFormUuid) {\n setSummary(EMPTY_SUMMARY)\n setResponse(null)\n return null\n }\n\n setLoading(true)\n setError(null)\n\n try {\n const nextResponse =\n await sdk.permission.formGroup.getViewPermissionSummary({\n appType: options.appType,\n formUuid: normalizedFormUuid,\n })\n const nextSummary = nextResponse.result || EMPTY_SUMMARY\n setResponse(nextResponse)\n setSummary({\n fieldPermissions: nextSummary.fieldPermissions || {},\n operations: nextSummary.operations || [],\n })\n return nextResponse\n } catch (requestError) {\n const nextError = toError(requestError)\n setError(nextError)\n setResponse(null)\n setSummary(EMPTY_SUMMARY)\n return null\n } finally {\n setLoading(false)\n }\n }, [formUuid, options.appType, sdk])\n\n useEffect(() => {\n if (!immediate) {\n return\n }\n void refresh()\n }, [immediate, refresh])\n\n const operationSet = useMemo(\n () => new Set(summary.operations),\n [summary.operations],\n )\n\n const can = useCallback(\n (operation: ViewOperationPermission) => operationSet.has(operation),\n [operationSet],\n )\n\n const getFieldPermission = useCallback(\n (fieldName: string) => summary.fieldPermissions[fieldName] || null,\n [summary.fieldPermissions],\n )\n\n return {\n summary,\n response,\n loading,\n error,\n refresh,\n can,\n getFieldPermission,\n }\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageMessageApi } from \"../../core/types\"\n\nexport const useMessage = (): PageMessageApi => {\n return usePageContext().ui.message\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageModalApi } from \"../../core/types\"\n\nexport const useModal = (): PageModalApi => {\n return usePageContext().ui.modal\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageNavigationApi } from \"../../core/types\"\n\nexport const useNavigation = (): PageNavigationApi => {\n return usePageContext().navigation\n}\n","import { usePageContext } from \"./usePageContext\"\n\nexport const usePageProps = <T extends object = Record<string, unknown>>() => {\n return usePageContext().page.props as T\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageRouteInfo } from \"../../core/types\"\n\nexport const usePageRoute = (): PageRouteInfo => {\n return usePageContext().route\n}\n"],"mappings":"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","names":["import_react","import_client","import_react","import_jsx_runtime","zhCN","AntdApp","React","import_react","import_react","response","import_react"]}
1
+ {"version":3,"sources":["../../src/runtime/index.ts","../../src/runtime/core/client.ts","../../src/runtime/react/createReactPage.tsx","../../src/runtime/react/provider.tsx","../../src/runtime/react/store.ts","../../src/styles/antd-theme.ts","../../src/runtime/react/hooks/useCurrentUser.ts","../../src/runtime/react/hooks/usePageContext.ts","../../src/runtime/react/hooks/useDataSource.ts","../../src/runtime/react/hooks/usePageSdk.ts","../../src/runtime/react/hooks/useFormViewPermissions.ts","../../src/runtime/react/hooks/useMessage.ts","../../src/runtime/react/hooks/useModal.ts","../../src/runtime/react/hooks/useNavigation.ts","../../src/runtime/react/hooks/usePageProps.ts","../../src/runtime/react/hooks/usePageRoute.ts"],"sourcesContent":["export * from \"./core\"\nexport * from \"./react\"\n","import type {\n ApiPermissionListParams,\n ApproveTaskParams,\n AssignPermissionsParams,\n AssignRolesParams,\n BatchAddUsersToRoleParams,\n BatchSendNotificationByTypeParams,\n ConnectorCallParams,\n ConnectorInvokeParams,\n ConnectorInvokeResult,\n CreateApiPermissionParams,\n CreateFormPermissionGroupDto,\n CreatePagePermissionGroupDto,\n CreateRoleParams,\n CreateUiPermissionParams,\n CurrentUserDepartmentParents,\n DataManagementConfigParams,\n FormAdvancedSearchParams,\n FormChangeRecordParams,\n FormCreateParams,\n FormExportParams,\n FormGetDetailParams,\n FormImportParams,\n FormRemoveParams,\n FormSearchParams,\n FormUpdateParams,\n GetParentDepartmentsOptions,\n GetProcessInstanceParams,\n GetUserRolesParams,\n ImportExportRecordDownloadParams,\n ImportExportRecordQuery,\n PageApiResponse,\n PageBinaryResponse,\n PageContext,\n PageDataSourceDescriptor,\n PageDepartmentRecord,\n PageHttpMethod,\n PageListResult,\n PageOffsetListResult,\n PagePermissionGroup,\n PageRequestOptions,\n PageSdk,\n PageSdkError,\n PageTransportDownloadPayload,\n PageTransportRequestPayload,\n PreviewNotificationTemplateParams,\n FormPermissionGroup,\n RoleListParams,\n RoleUsersParams,\n SaveDataManagementConfigParams,\n SearchExpression,\n SearchGroup,\n SearchRule,\n SearchSortItem,\n SubFormRule,\n SwitchAppRoleParams,\n SwitchPlatformRoleParams,\n TerminateProcessInstanceParams,\n TriggerCallbackTaskParams,\n UiPermissionListParams,\n UpdateApiPermissionParams,\n UpdateFormPermissionGroupDto,\n UpdatePagePermissionGroupDto,\n UpdateRoleParams,\n UpdateUiPermissionParams,\n UpdateUserParams,\n QueryFormPermissionGroupDto,\n QueryPagePermissionGroupDto,\n UserListParams,\n UserMenuPermissionsResponse,\n ValidateUserParams,\n CreateUserParams,\n SendNotificationByTypeParams,\n SendNotificationResult,\n ViewFieldPermissionValue,\n ViewPermissionSummary,\n} from \"./types\"\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nconst isSearchRuleLike = (value: unknown): value is SearchRule | SubFormRule =>\n isRecord(value) &&\n typeof value.key === \"string\" &&\n (value.componentName === undefined || typeof value.componentName === \"string\")\n\nconst isBlobLike = (value: unknown): value is Blob =>\n typeof Blob !== \"undefined\" && value instanceof Blob\n\nconst normalizeMethod = (value: PageHttpMethod | string): PageHttpMethod => {\n const method = String(value || \"get\").toLowerCase()\n if (\n method === \"get\" ||\n method === \"post\" ||\n method === \"put\" ||\n method === \"delete\" ||\n method === \"patch\"\n ) {\n return method\n }\n return \"get\"\n}\n\nconst resolveAppType = (\n context: PageContext,\n explicitAppType?: string,\n): string => {\n const appType = String(explicitAppType || context.app.appType || \"\").trim()\n if (!appType) {\n throw new Error(\"appType 不能为空\")\n }\n return appType\n}\n\nconst buildAppPath = (\n context: PageContext,\n explicitAppType: string | undefined,\n suffix: string,\n) => `/${resolveAppType(context, explicitAppType)}${suffix}`\n\nconst buildOpenXiangdaAppPath = (\n context: PageContext,\n explicitAppType: string | undefined,\n suffix: string,\n) =>\n `/openxiangda-api/v1/apps/${encodePathSegment(\n resolveAppType(context, explicitAppType),\n )}${suffix}`\n\nconst encodePathSegment = (value: string) => encodeURIComponent(String(value))\n\nconst getHeaderValue = (\n headers: Record<string, unknown> | undefined,\n name: string,\n): string | undefined => {\n if (!headers) {\n return undefined\n }\n const target = name.toLowerCase()\n const entry = Object.entries(headers).find(\n ([key]) => key.toLowerCase() === target,\n )\n return entry ? String(entry[1]) : undefined\n}\n\nconst parseContentDispositionFileName = (\n contentDisposition?: string,\n): string | undefined => {\n if (!contentDisposition) {\n return undefined\n }\n\n const utf8Match = contentDisposition.match(/filename\\*=UTF-8''([^;]+)/i)\n if (utf8Match?.[1]) {\n try {\n return decodeURIComponent(utf8Match[1])\n } catch {\n return utf8Match[1]\n }\n }\n\n const quotedMatch = contentDisposition.match(/filename=\"([^\"]+)\"/i)\n if (quotedMatch?.[1]) {\n return quotedMatch[1]\n }\n\n const plainMatch = contentDisposition.match(/filename=([^;]+)/i)\n if (plainMatch?.[1]) {\n return plainMatch[1].trim()\n }\n\n return undefined\n}\n\nconst parseConnectorCallName = (name: string) => {\n const value = String(name || \"\").trim()\n const separatorIndex = value.indexOf(\".\")\n if (separatorIndex <= 0 || separatorIndex === value.length - 1) {\n throw new Error(\"连接器调用名必须是 connector.api 格式\")\n }\n\n return {\n connector: value.slice(0, separatorIndex),\n api: value.slice(separatorIndex + 1),\n }\n}\n\nconst serializeQuery = (query?: Record<string, unknown>) => {\n if (!query) {\n return undefined\n }\n\n const params = new URLSearchParams()\n\n const appendValue = (key: string, value: unknown) => {\n if (value === undefined || value === null || value === \"\") {\n return\n }\n if (Array.isArray(value)) {\n value.forEach((item) => appendValue(key, item))\n return\n }\n if (value instanceof Date) {\n params.append(key, value.toISOString())\n return\n }\n params.append(key, String(value))\n }\n\n Object.entries(query).forEach(([key, value]) => {\n appendValue(key, value)\n })\n\n const serialized = params.toString()\n return serialized || undefined\n}\n\nconst toLegacyRules = (value: Record<string, unknown>) =>\n Object.entries(value).flatMap(([key, itemValue]) => {\n if (itemValue === undefined) {\n return []\n }\n return [\n {\n key,\n operator: Array.isArray(itemValue) ? \"IN\" : \"EQ\",\n value: itemValue,\n },\n ]\n })\n\nconst toSearchGroup = (value: unknown): SearchGroup | undefined => {\n if (value === undefined || value === null || value === \"\") {\n return undefined\n }\n\n if (typeof value === \"string\") {\n try {\n return toSearchGroup(JSON.parse(value))\n } catch {\n return undefined\n }\n }\n\n if (Array.isArray(value)) {\n const rules: Array<SearchRule | SubFormRule> = []\n const conditions: SearchGroup[] = []\n\n value.forEach((item) => {\n const group = toSearchGroup(item)\n if (group) {\n if (group.rules?.length) {\n rules.push(...group.rules)\n }\n if (group.conditions?.length) {\n conditions.push(...group.conditions)\n }\n return\n }\n\n if (isSearchRuleLike(item)) {\n rules.push(item)\n return\n }\n\n if (isRecord(item)) {\n rules.push(...(toLegacyRules(item) as SearchRule[]))\n }\n })\n\n if (rules.length === 0 && conditions.length === 0) {\n return undefined\n }\n\n return {\n logic: \"AND\",\n ...(rules.length > 0 ? { rules } : {}),\n ...(conditions.length > 0 ? { conditions } : {}),\n }\n }\n\n if (isRecord(value)) {\n if (isSearchRuleLike(value)) {\n return {\n logic: \"AND\",\n rules: [value],\n }\n }\n\n if (\"rules\" in value || \"conditions\" in value || \"logic\" in value) {\n const nextGroup: SearchGroup = {\n logic:\n value.logic === \"OR\" || value.logic === \"AND\" ? value.logic : \"AND\",\n }\n\n if (Array.isArray(value.rules)) {\n nextGroup.rules = value.rules.filter(isSearchRuleLike)\n }\n\n if (Array.isArray(value.conditions)) {\n nextGroup.conditions = value.conditions\n .map((item) => toSearchGroup(item))\n .filter((item): item is SearchGroup => Boolean(item))\n }\n\n if (!nextGroup.rules?.length && !nextGroup.conditions?.length) {\n return undefined\n }\n\n return nextGroup\n }\n\n const rules = toLegacyRules(value)\n if (rules.length === 0) {\n return undefined\n }\n return {\n logic: \"AND\",\n rules,\n }\n }\n\n return undefined\n}\n\nconst mergeSearchExpressions = (base: unknown, extra: unknown) => {\n const baseGroup = toSearchGroup(base)\n const extraGroup = toSearchGroup(extra)\n\n if (!baseGroup) {\n return extraGroup\n }\n\n if (!extraGroup) {\n return baseGroup\n }\n\n return {\n logic: \"AND\",\n conditions: [baseGroup, extraGroup],\n } satisfies SearchGroup\n}\n\nconst serializeSearchExpression = (value?: SearchExpression | string) => {\n if (value === undefined || value === null || value === \"\") {\n return undefined\n }\n if (typeof value === \"string\") {\n return value\n }\n const group = toSearchGroup(value)\n return group ? JSON.stringify(group) : undefined\n}\n\nconst normalizeAdvancedOrder = (value?: SearchSortItem | SearchSortItem[]) => {\n if (!value) {\n return undefined\n }\n const nextValue = Array.isArray(value) ? value : [value]\n return JSON.stringify(nextValue)\n}\n\nconst normalizeDynamicOrder = (value?: string | SearchSortItem) => {\n if (!value) {\n return undefined\n }\n if (typeof value === \"string\") {\n return value\n }\n return `${value.id}:${value.isAsc === \"n\" ? \"-\" : \"+\"}`\n}\n\nconst normalizeJsonResponse = <TResult = unknown, TRaw = TResult>(\n rawResponse: unknown,\n): PageApiResponse<TResult, TRaw> => {\n const topLevelCode = Number((rawResponse as { code?: number })?.code)\n const nestedCode = Number(\n (rawResponse as { data?: { code?: number } })?.data?.code,\n )\n const code = Number.isFinite(topLevelCode)\n ? topLevelCode\n : Number.isFinite(nestedCode)\n ? nestedCode\n : 200\n\n const topLevelResult =\n isRecord(rawResponse) && \"result\" in rawResponse\n ? (rawResponse.result as TResult)\n : undefined\n const nestedResult =\n isRecord((rawResponse as { data?: unknown })?.data) &&\n \"result\" in ((rawResponse as { data?: Record<string, unknown> }).data || {})\n ? ((rawResponse as { data?: Record<string, unknown> }).data\n ?.result as TResult)\n : undefined\n const topLevelData =\n isRecord(rawResponse) && \"data\" in rawResponse\n ? (rawResponse.data as TRaw)\n : undefined\n\n const result =\n topLevelResult !== undefined\n ? topLevelResult\n : nestedResult !== undefined\n ? nestedResult\n : topLevelData !== undefined\n ? (topLevelData as unknown as TResult)\n : isRecord(rawResponse)\n ? (rawResponse as TResult)\n : null\n\n const nestedSuccess =\n typeof (rawResponse as { data?: { success?: boolean } })?.data?.success ===\n \"boolean\"\n ? (rawResponse as { data?: { success?: boolean } }).data?.success\n : undefined\n\n const success =\n typeof (rawResponse as { success?: boolean })?.success === \"boolean\"\n ? Boolean((rawResponse as { success?: boolean }).success)\n : typeof nestedSuccess === \"boolean\"\n ? Boolean(nestedSuccess)\n : code >= 200 && code < 300\n\n return {\n code,\n success,\n message:\n typeof (rawResponse as { message?: string })?.message === \"string\"\n ? (rawResponse as { message?: string }).message\n : typeof (rawResponse as { data?: { message?: string } })?.data\n ?.message === \"string\"\n ? (rawResponse as { data?: { message?: string } }).data?.message\n : undefined,\n result,\n data:\n topLevelData !== undefined\n ? topLevelData\n : topLevelResult !== undefined\n ? (topLevelResult as unknown as TRaw)\n : undefined,\n raw: rawResponse,\n }\n}\n\nconst normalizeBinaryResponse = (rawResponse: unknown): PageBinaryResponse => {\n if (isRecord(rawResponse) && isBlobLike(rawResponse.blob)) {\n return rawResponse as unknown as PageBinaryResponse\n }\n\n if (isBlobLike(rawResponse)) {\n return {\n blob: rawResponse,\n raw: rawResponse,\n }\n }\n\n const responseData = (rawResponse as { data?: unknown })?.data\n const responseHeaders = isRecord(\n (rawResponse as { headers?: unknown })?.headers,\n )\n ? ((rawResponse as { headers?: Record<string, unknown> }).headers as Record<\n string,\n unknown\n >)\n : undefined\n\n if (!isBlobLike(responseData)) {\n throw new Error(\"transport.download 未返回 Blob 数据\")\n }\n\n const contentDisposition = getHeaderValue(\n responseHeaders,\n \"content-disposition\",\n )\n\n return {\n blob: responseData,\n fileName: parseContentDispositionFileName(contentDisposition),\n contentType:\n getHeaderValue(responseHeaders, \"content-type\") || responseData.type,\n headers: responseHeaders\n ? Object.fromEntries(\n Object.entries(responseHeaders).map(([key, value]) => [\n key,\n value === undefined ? undefined : String(value),\n ]),\n )\n : undefined,\n raw: rawResponse,\n }\n}\n\nconst toSdkError = (\n input: unknown,\n payload: PageTransportRequestPayload | PageTransportDownloadPayload,\n): PageSdkError => {\n const normalizedResponse = isRecord(input)\n ? normalizeJsonResponse(input)\n : undefined\n\n const nextError =\n input instanceof Error\n ? input\n : new Error(\n normalizedResponse?.message ||\n `请求失败: ${String(payload.method).toUpperCase()} ${payload.path}`,\n )\n\n const sdkError = nextError as PageSdkError\n sdkError.method = String(payload.method).toUpperCase()\n sdkError.path = payload.path\n sdkError.response = normalizedResponse\n sdkError.raw = input\n return sdkError\n}\n\nconst ensureSuccess = <TResult = unknown, TRaw = TResult>(\n response: PageApiResponse<TResult, TRaw>,\n payload: PageTransportRequestPayload,\n) => {\n if (!response.success) {\n throw toSdkError(response, payload)\n }\n return response\n}\n\nconst resolveFormInstanceId = (params: {\n formInstId?: string\n formInstanceId?: string\n}) => {\n const formInstanceId = String(\n params.formInstId || params.formInstanceId || \"\",\n ).trim()\n if (!formInstanceId) {\n throw new Error(\"formInstanceId 不能为空\")\n }\n return formInstanceId\n}\n\nconst withDefaultAppType = <\n T extends {\n appType?: string\n scope?: string\n },\n>(\n context: PageContext,\n params: T | undefined,\n) => {\n if (!params) {\n return params\n }\n\n if (params.appType) {\n return params\n }\n\n if (params.scope === \"app\") {\n return {\n ...params,\n appType: context.app.appType,\n }\n }\n\n return params\n}\n\nexport const createPageSdk = (context: PageContext): PageSdk => {\n const request = async <TResult = unknown, TRaw = TResult>(\n options: PageRequestOptions,\n ) => {\n const payload: PageTransportRequestPayload = {\n path: options.path,\n method: normalizeMethod(options.method),\n query: serializeQuery(options.query),\n body: options.body,\n headers: options.headers,\n }\n\n try {\n const rawResponse = await context.bridge.invoke<unknown>(\n \"transport.request\",\n payload,\n )\n return ensureSuccess(\n normalizeJsonResponse<TResult, TRaw>(rawResponse),\n payload,\n )\n } catch (error) {\n throw toSdkError(error, payload)\n }\n }\n\n const download = async (options: PageRequestOptions) => {\n const payload: PageTransportDownloadPayload = {\n path: options.path,\n method: normalizeMethod(options.method),\n query: serializeQuery(options.query),\n body: options.body,\n headers: options.headers,\n }\n\n try {\n const rawResponse = await context.bridge.invoke<unknown>(\n \"transport.download\",\n payload,\n )\n return normalizeBinaryResponse(rawResponse)\n } catch (error) {\n throw toSdkError(error, payload)\n }\n }\n\n const connector = {\n invoke: <TResult = unknown, TBody = unknown>(\n params: ConnectorInvokeParams<TBody>,\n ) =>\n request<ConnectorInvokeResult<TResult>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/connectors/actions/invoke\",\n ),\n method: \"post\",\n body: {\n connector: params.connector,\n api: params.api,\n pathParams: params.pathParams,\n query: params.query,\n body: params.body,\n headers: params.headers,\n requestBodyType: params.requestBodyType,\n responseType: params.responseType,\n },\n }),\n call: <TResult = unknown, TBody = unknown>(\n name: string,\n params: ConnectorCallParams<TBody> = {},\n ) => {\n const target = parseConnectorCallName(name)\n return connector.invoke<TResult, TBody>({\n ...params,\n connector: target.connector,\n api: target.api,\n })\n },\n download: <TBody = unknown>(\n params: ConnectorInvokeParams<TBody>,\n ): Promise<PageBinaryResponse> =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/connectors/actions/download\",\n ),\n method: \"post\",\n body: {\n connector: params.connector,\n api: params.api,\n pathParams: params.pathParams,\n query: params.query,\n body: params.body,\n headers: params.headers,\n requestBodyType: params.requestBodyType,\n responseType: \"binary\",\n },\n }),\n }\n\n const form = {\n getDetail: <T = unknown>(params: FormGetDetailParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/getFormDataById.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n },\n }),\n create: <T = unknown, TRaw = unknown>(params: FormCreateParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/saveFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formDataJson: JSON.stringify(params.data || {}),\n },\n }),\n update: <T = unknown, TRaw = unknown>(params: FormUpdateParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/updateFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n updateFormDataJson:\n params.updateFormDataJson || JSON.stringify(params.data || {}),\n },\n }),\n remove: <T = unknown, TRaw = unknown>(params: FormRemoveParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/deleteFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n },\n }),\n getChangeRecords: <T = unknown>(params: FormChangeRecordParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/getFormDataChangeRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n page: params.page,\n pageSize: params.pageSize,\n },\n }),\n search: <T = unknown>(params: FormSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/searchFormDatas.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n searchFieldJson: serializeSearchExpression(params.search),\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n originatorId: params.originatorId,\n createFrom: params.createFrom,\n createTo: params.createTo,\n modifiedFrom: params.modifiedFrom,\n modifiedTo: params.modifiedTo,\n dynamicOrder: normalizeDynamicOrder(params.dynamicOrder),\n instanceStatus: params.instanceStatus,\n },\n }),\n searchIds: <T = string>(params: FormSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/searchFormDataIds.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n searchFieldJson: serializeSearchExpression(params.search),\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n originatorId: params.originatorId,\n createFrom: params.createFrom,\n createTo: params.createTo,\n modifiedFrom: params.modifiedFrom,\n modifiedTo: params.modifiedTo,\n dynamicOrder: normalizeDynamicOrder(params.dynamicOrder),\n instanceStatus: params.instanceStatus,\n },\n }),\n advancedSearch: <T = unknown>(params: FormAdvancedSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedSearch.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n filters: serializeSearchExpression(params.filters),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: normalizeAdvancedOrder(params.order),\n instanceStatus: params.instanceStatus,\n },\n }),\n advancedExport: (params: FormExportParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedExport.xlsx\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n filters: serializeSearchExpression(params.filters),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: normalizeAdvancedOrder(params.order),\n instanceStatus: params.instanceStatus,\n exportAll: params.exportAll,\n embedImages: params.embedImages,\n exportFields: params.exportFields?.join(\",\"),\n },\n }),\n downloadImportTemplate: (params: DataManagementConfigParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedExportTemplate.xlsx\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n },\n }),\n importPreview: <T = unknown>(params: FormImportParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importPreview.xlsx\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n fileBase64: params.fileBase64,\n fileName: params.fileName,\n },\n }),\n importExcel: <T = unknown>(params: FormImportParams) =>\n request<T>({\n path: buildAppPath(context, params.appType, \"/v1/form/import.xlsx\"),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n fileBase64: params.fileBase64,\n fileName: params.fileName,\n },\n }),\n getImportRecords: <T = unknown>(params: ImportExportRecordQuery) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n },\n }),\n getExportRecords: <T = unknown>(params: ImportExportRecordQuery) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/exportRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n },\n }),\n downloadImportSource: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecord/downloadSource.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n downloadImportFailed: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecord/downloadFailed.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n downloadExportRecord: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/exportRecord/download.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n getDataManagementConfig: <T = unknown>(\n params: DataManagementConfigParams,\n ) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/dataManagement/config/get.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n },\n }),\n saveDataManagementConfig: <T = unknown>(\n params: SaveDataManagementConfigParams,\n ) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/dataManagement/config/save.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n config: params.config,\n },\n }),\n }\n\n const user = {\n create: <T = unknown>(params: CreateUserParams) =>\n request<T>({\n path: \"/user/create\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(params: UpdateUserParams) =>\n request<T>({\n path: \"/user/update\",\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/user/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = unknown>(id = \"current\") =>\n request<T>({\n path: `/user/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n getCurrent: <T = unknown>() =>\n request<T>({\n path: \"/user/current\",\n method: \"get\",\n }),\n getByUsername: <T = unknown>(username: string) =>\n request<T>({\n path: `/user/username/${encodePathSegment(username)}`,\n method: \"get\",\n }),\n list: <T = unknown>(params?: UserListParams) =>\n request<T>({\n path: \"/user/list\",\n method: \"get\",\n query: {\n ids: params?.ids,\n departmentIds: params?.departmentIds,\n name: params?.name,\n username: params?.username,\n phone: params?.phone,\n email: params?.email,\n page: params?.page,\n pageSize: params?.pageSize,\n },\n }),\n search: <T = unknown>(keyword?: string) =>\n request<T>({\n path: \"/user/search\",\n method: \"get\",\n query: {\n keyword,\n },\n }),\n listAll: <T = unknown>() =>\n request<T>({\n path: \"/user/all\",\n method: \"get\",\n }),\n listByDepartment: <T = unknown>(departmentId: string) =>\n request<T>({\n path: `/user/department/${encodePathSegment(departmentId)}`,\n method: \"get\",\n }),\n validate: <T = unknown>(params: ValidateUserParams) =>\n request<T>({\n path: \"/user/validate\",\n method: \"post\",\n body: params,\n }),\n }\n\n const getParentDepartments = <T = PageDepartmentRecord[]>(\n departmentId: string,\n options: GetParentDepartmentsOptions = {},\n ) =>\n request<T>({\n path: `/department/${encodePathSegment(departmentId)}/parentDepartments`,\n method: \"get\",\n query: {\n includeSelf: options.includeSelf ?? true,\n },\n })\n\n const department = {\n getParentDepartments,\n getCurrentUserParentDepartments: async (\n options: GetParentDepartmentsOptions = {},\n ): Promise<CurrentUserDepartmentParents[]> => {\n const departments = (context.user.departments || []).filter(\n (item) => typeof item.id === \"string\" && item.id.trim(),\n )\n\n return Promise.all(\n departments.map(async (item) => {\n const response = await getParentDepartments(item.id || \"\", {\n includeSelf: options.includeSelf,\n })\n return {\n department: item,\n parents: response.result || [],\n }\n }),\n )\n },\n }\n\n const role = {\n create: <T = unknown>(params: CreateRoleParams) =>\n request<T>({\n path: \"/role/\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateRoleParams) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = unknown>(id: string) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = unknown>(params?: RoleListParams) =>\n request<T>({\n path: \"/role/\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n listUsers: <T = unknown>(roleId: string, params?: RoleUsersParams) =>\n request<T>({\n path: `/role/${encodePathSegment(roleId)}/users`,\n method: \"get\",\n query: params as Record<string, unknown> | undefined,\n }),\n assignRoles: <T = unknown>(params: AssignRolesParams) =>\n request<T>({\n path: \"/role/assign\",\n method: \"post\",\n body: params,\n }),\n addUserRole: <T = boolean>(params: { userId: string; roleId: string }) =>\n request<T>({\n path: \"/role/add\",\n method: \"post\",\n body: params,\n }),\n removeUserRole: <T = boolean>(params: { userId: string; roleId: string }) =>\n request<T>({\n path: \"/role/remove\",\n method: \"post\",\n body: params,\n }),\n batchAddUsers: <T = unknown>(params: BatchAddUsersToRoleParams) =>\n request<T>({\n path: \"/role/batch-add-users\",\n method: \"post\",\n body: params,\n }),\n getMyRoles: <T = unknown>(params?: GetUserRolesParams) =>\n request<T>({\n path: \"/role/my/roles\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n getCurrentRole: <T = unknown>(params?: GetUserRolesParams) =>\n request<T>({\n path: \"/role/my/current\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n switchPlatformRole: <T = boolean>(params: SwitchPlatformRoleParams) =>\n request<T>({\n path: \"/role/switch/platform\",\n method: \"post\",\n body: params,\n }),\n switchAppRole: <T = boolean>(params: SwitchAppRoleParams) =>\n request<T>({\n path: \"/role/switch/app\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n }\n\n const permission = {\n formGroup: {\n create: <T = FormPermissionGroup>(params: CreateFormPermissionGroupDto) =>\n request<T>({\n path: \"/permission/form-group/\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n update: <T = FormPermissionGroup>(\n id: string,\n params: UpdateFormPermissionGroupDto,\n ) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"put\",\n body: {\n ...params,\n ...(params.appType\n ? { appType: resolveAppType(context, params.appType) }\n : {}),\n },\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = FormPermissionGroup | null>(id: string) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = PageOffsetListResult<FormPermissionGroup>>(\n params?: QueryFormPermissionGroupDto,\n ) =>\n request<T>({\n path: \"/permission/form-group/\",\n method: \"get\",\n query: {\n ...params,\n appType: resolveAppType(context, params?.appType),\n },\n }),\n getViewFieldPermissions: <\n T = Record<string, ViewFieldPermissionValue>,\n >(params: {\n appType?: string\n formUuid: string\n }) =>\n request<T>({\n path: \"/permission/form-group/field-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, params.appType),\n formUuid: params.formUuid,\n },\n }),\n getViewPermissionSummary: <T = ViewPermissionSummary>(params: {\n appType?: string\n formUuid: string\n }) =>\n request<T>({\n path: \"/permission/form-group/view-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, params.appType),\n formUuid: params.formUuid,\n },\n }),\n },\n pageGroup: {\n create: <T = PagePermissionGroup>(params: CreatePagePermissionGroupDto) =>\n request<T>({\n path: \"/permission/page-group/\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n update: <T = PagePermissionGroup>(\n id: string,\n params: UpdatePagePermissionGroupDto,\n ) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"put\",\n body: {\n ...params,\n ...(params.appType\n ? { appType: resolveAppType(context, params.appType) }\n : {}),\n },\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = PagePermissionGroup | null>(id: string) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = PageOffsetListResult<PagePermissionGroup>>(\n params?: QueryPagePermissionGroupDto,\n ) =>\n request<T>({\n path: \"/permission/page-group/\",\n method: \"get\",\n query: {\n ...params,\n appType: resolveAppType(context, params?.appType),\n },\n }),\n getUserMenuPermissions: <T = UserMenuPermissionsResponse>(\n appType?: string,\n ) =>\n request<T>({\n path: \"/permission/page-group/user-menu-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, appType),\n },\n }),\n },\n api: {\n create: <T = unknown>(params: CreateApiPermissionParams) =>\n request<T>({\n path: \"/permission/api\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateApiPermissionParams) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n list: <T = unknown>(params?: ApiPermissionListParams) =>\n request<T>({\n path: \"/permission/api\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n assign: <T = boolean>(params: AssignPermissionsParams) =>\n request<T>({\n path: \"/permission/api/assign\",\n method: \"post\",\n body: params,\n }),\n getByRole: <T = unknown>(roleId: string) =>\n request<T>({\n path: `/permission/api/role/${encodePathSegment(roleId)}`,\n method: \"get\",\n }),\n getRolesByPermission: <T = unknown>(permissionId: string) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(permissionId)}/roles`,\n method: \"get\",\n }),\n },\n ui: {\n create: <T = unknown>(params: CreateUiPermissionParams) =>\n request<T>({\n path: \"/permission/api/ui\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateUiPermissionParams) =>\n request<T>({\n path: `/permission/api/ui/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/api/ui/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n list: <T = unknown>(params?: UiPermissionListParams) =>\n request<T>({\n path: \"/permission/api/ui\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n assign: <T = boolean>(params: AssignPermissionsParams) =>\n request<T>({\n path: \"/permission/api/ui/assign\",\n method: \"post\",\n body: params,\n }),\n getMyPlatform: <T = unknown>() =>\n request<T>({\n path: \"/permission/api/ui/me/platform\",\n method: \"get\",\n }),\n getMyApp: <T = unknown>(appType?: string) =>\n request<T>({\n path: \"/permission/api/ui/me/app\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, appType),\n },\n }),\n },\n }\n\n const process = {\n getInstance: <T = unknown>(params: GetProcessInstanceParams) =>\n request<T>({\n path: buildAppPath(context, params.appType, \"/v1/process/instance\"),\n method: \"get\",\n query: {\n instanceId: params.instanceId,\n },\n }),\n terminateInstance: <T = unknown>(params: TerminateProcessInstanceParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/terminateInstance.json\",\n ),\n method: \"post\",\n body: {\n processInstanceId: params.processInstanceId,\n reason: params.reason,\n },\n }),\n approveTask: <T = unknown>(params: ApproveTaskParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/approveTask.json\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n triggerCallbackTask: <T = unknown>(params: TriggerCallbackTaskParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/triggerCallback.json\",\n ),\n method: \"post\",\n body: {\n taskId: params.taskId,\n payload: params.payload,\n },\n }),\n }\n\n const notification = {\n sendByType: <T = SendNotificationResult>(\n params: SendNotificationByTypeParams,\n ) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n \"/notifications/send-by-type\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n batchSendByType: <T = SendNotificationResult>(\n params: BatchSendNotificationByTypeParams,\n ) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n \"/notifications/batch-send-by-type\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n findConfig: <T = unknown>(\n notificationType: string,\n params: { appType?: string; formUuid?: string } = {},\n ) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n `/notifications/type-configs/${encodePathSegment(notificationType)}`,\n ),\n method: \"get\",\n query: params.formUuid ? { formUuid: params.formUuid } : undefined,\n }),\n previewTemplate: <T = unknown>(params: PreviewNotificationTemplateParams) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n \"/notifications/templates/preview\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n }\n\n const sdk: PageSdk = {\n context,\n request,\n download,\n transport: {\n request,\n download,\n },\n connector,\n form,\n user,\n department,\n role,\n permission,\n process,\n notification,\n dataSource: {\n run: async <TResult = unknown, TRaw = TResult>(\n name: string,\n params: Record<string, unknown> = {},\n ): Promise<PageApiResponse<TResult, TRaw>> => {\n const descriptor = (context.page.dataSources || []).find(\n (item) => item.key === name,\n ) as PageDataSourceDescriptor | undefined\n\n if (!descriptor) {\n throw new Error(`未找到数据源: ${String(name || \"\")}`)\n }\n\n const runtimeParams = params\n const resolvedFormUuid = String(\n runtimeParams.formUuid || descriptor.formUuid || \"\",\n ).trim()\n\n switch (descriptor.type) {\n case \"form.list\":\n return form.advancedSearch<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormAdvancedSearchParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n filters: mergeSearchExpressions(\n descriptor.defaultFilter,\n runtimeParams.filters as SearchExpression | string | undefined,\n ),\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.detail\":\n return form.getDetail<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormGetDetailParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.create\":\n return form.create<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormCreateParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.update\":\n return form.update<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormUpdateParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.delete\":\n return form.remove<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormRemoveParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n default:\n throw new Error(`暂不支持的数据源类型: ${String(descriptor.type)}`)\n }\n },\n },\n navigation: context.navigation,\n ui: context.ui,\n }\n\n return sdk\n}\n","import { StyleProvider } from \"@ant-design/cssinjs\";\nimport { App as AntdApp, ConfigProvider, message } from \"antd\";\nimport zhCN from \"antd/locale/zh_CN.js\";\nimport React from \"react\";\nimport { createRoot } from \"react-dom/client\";\n\nimport { PageProvider } from \"./provider\";\nimport { antdTheme } from \"../../styles/antd-theme\";\n\nimport type { PageContext } from \"../core/types\";\n\ntype RootLike = {\n render: (node: React.ReactNode) => void;\n unmount: () => void;\n};\n\nconst NAMESPACE_ROOT_CLASS = \"sy-app-workspace\";\nconst RUNTIME_PORTAL_ATTR = \"data-sy-runtime-portal\";\nconst PORTAL_CONTAINER_STACK_GLOBAL = \"__OPENXIANGDA_PORTAL_CONTAINER_STACK__\";\nconst PORTAL_CONTAINER_RESOLVER_GLOBAL = \"__OPENXIANGDA_GET_PORTAL_CONTAINER__\";\nconst MESSAGE_PROXY_GLOBAL = \"__OPENXIANGDA_ANTD_MESSAGE_PROXY__\";\nconst MESSAGE_METHODS = [\n \"open\",\n \"success\",\n \"info\",\n \"warning\",\n \"error\",\n \"loading\",\n \"destroy\",\n] as const;\n\ntype RuntimePortalHandle = {\n container: HTMLElement;\n release: () => void;\n};\n\ntype MessageMethod = (typeof MESSAGE_METHODS)[number];\n\ntype AntdMessageProxyState = {\n apiStack: Array<Record<string, unknown>>;\n installed: boolean;\n originalMethods: Partial<Record<MessageMethod, (...args: unknown[]) => unknown>>;\n};\n\nconst createRuntimeRoot = (el: HTMLElement): RootLike => {\n return createRoot(el);\n};\n\nconst isShadowRoot = (rootNode: Node | null | undefined): rootNode is ShadowRoot =>\n typeof ShadowRoot !== \"undefined\" && rootNode instanceof ShadowRoot;\n\nconst getStyleContainer = (el: HTMLElement): HTMLElement | ShadowRoot => {\n const rootNode = el.getRootNode?.();\n if (isShadowRoot(rootNode)) {\n return rootNode;\n }\n return document.head;\n};\n\nconst getRuntimeRoot = (el: HTMLElement, triggerNode?: HTMLElement) => {\n const rootNode = el.getRootNode?.();\n if (isShadowRoot(rootNode)) return el;\n const triggerRoot = triggerNode?.closest?.<HTMLElement>(\n `.${NAMESPACE_ROOT_CLASS}`,\n );\n return (\n triggerRoot ||\n el.closest<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n el.querySelector<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n el\n );\n};\n\nconst getRuntimeOverlayContainer = (\n el: HTMLElement,\n portalContainer: HTMLElement | null,\n): {\n getPopupContainer: (triggerNode?: HTMLElement) => HTMLElement | ShadowRoot;\n getTargetContainer: () => HTMLElement | ShadowRoot;\n} => {\n const getOverlayRoot = (triggerNode?: HTMLElement) => {\n if (portalContainer?.isConnected) return portalContainer;\n return getRuntimeRoot(el, triggerNode);\n };\n\n return {\n getPopupContainer: (triggerNode?: HTMLElement) => {\n return getOverlayRoot(triggerNode);\n },\n getTargetContainer: () => getRuntimeRoot(el),\n };\n};\n\nconst createAntdConfig = (\n overlayContainer: ReturnType<typeof getRuntimeOverlayContainer>,\n) => ({\n locale: zhCN,\n prefixCls: \"sy-ant\",\n iconPrefixCls: \"sy-anticon\",\n theme: antdTheme,\n getPopupContainer: overlayContainer.getPopupContainer,\n getTargetContainer: overlayContainer.getTargetContainer,\n});\n\nconst createPortalContainer = (el: HTMLElement) => {\n const rootNode = el.getRootNode?.();\n const parent = isShadowRoot(rootNode)\n ? rootNode\n : el.ownerDocument?.body || document.body;\n const portalContainer = el.ownerDocument.createElement(\"div\");\n portalContainer.setAttribute(RUNTIME_PORTAL_ATTR, \"\");\n portalContainer.classList.add(NAMESPACE_ROOT_CLASS);\n parent.appendChild(portalContainer);\n return portalContainer;\n};\n\nconst getAntdMessageProxyState = (): AntdMessageProxyState => {\n const globalScope = globalThis as typeof globalThis & {\n [MESSAGE_PROXY_GLOBAL]?: AntdMessageProxyState;\n };\n if (!globalScope[MESSAGE_PROXY_GLOBAL]) {\n globalScope[MESSAGE_PROXY_GLOBAL] = {\n apiStack: [],\n installed: false,\n originalMethods: {},\n };\n }\n return globalScope[MESSAGE_PROXY_GLOBAL];\n};\n\nconst installAntdMessageProxy = () => {\n const state = getAntdMessageProxyState();\n if (state.installed) return state;\n MESSAGE_METHODS.forEach((method) => {\n const originalMethod = (message as unknown as Record<string, unknown>)[method];\n if (typeof originalMethod !== \"function\") return;\n state.originalMethods[method] = originalMethod.bind(message) as (\n ...args: unknown[]\n ) => unknown;\n (message as unknown as Record<string, unknown>)[method] = (\n ...args: unknown[]\n ) => {\n const api = state.apiStack.at(-1);\n const apiMethod = api?.[method];\n if (typeof apiMethod === \"function\") {\n return apiMethod(...args);\n }\n return state.originalMethods[method]?.(...args);\n };\n });\n state.installed = true;\n return state;\n};\n\nconst registerAntdMessageApi = (api: Record<string, unknown>) => {\n const state = installAntdMessageProxy();\n state.apiStack.push(api);\n return () => {\n const position = state.apiStack.lastIndexOf(api);\n if (position >= 0) {\n state.apiStack.splice(position, 1);\n }\n };\n};\n\nconst installRuntimePortalContainer = (el: HTMLElement): RuntimePortalHandle => {\n const globalScope = globalThis as typeof globalThis & {\n [PORTAL_CONTAINER_STACK_GLOBAL]?: HTMLElement[];\n [PORTAL_CONTAINER_RESOLVER_GLOBAL]?: () => HTMLElement;\n };\n const portalContainer = createPortalContainer(el);\n const stack = Array.isArray(globalScope[PORTAL_CONTAINER_STACK_GLOBAL])\n ? globalScope[PORTAL_CONTAINER_STACK_GLOBAL]\n : [];\n stack.push(portalContainer);\n globalScope[PORTAL_CONTAINER_STACK_GLOBAL] = stack;\n globalScope[PORTAL_CONTAINER_RESOLVER_GLOBAL] = () => {\n for (let index = stack.length - 1; index >= 0; index -= 1) {\n const candidate = stack[index];\n if (candidate?.isConnected) {\n return candidate;\n }\n }\n return (\n document.querySelector<HTMLElement>(`[${RUNTIME_PORTAL_ATTR}]`) ||\n document.querySelector<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n document.body\n );\n };\n\n return {\n container: portalContainer,\n release: () => {\n const position = stack.lastIndexOf(portalContainer);\n if (position >= 0) {\n stack.splice(position, 1);\n }\n portalContainer.remove();\n },\n };\n};\n\nconst installAntdStaticHolder = (\n el: HTMLElement,\n portalContainer: HTMLElement | null,\n) => {\n installAntdMessageProxy();\n const getMessageContainer = () => {\n if (portalContainer?.isConnected) return portalContainer;\n return getRuntimeRoot(el);\n };\n\n ConfigProvider.config({\n prefixCls: \"sy-ant\",\n iconPrefixCls: \"sy-anticon\",\n theme: antdTheme,\n holderRender: (children) => {\n if (!el.isConnected) {\n return (\n <ConfigProvider\n prefixCls=\"sy-ant\"\n iconPrefixCls=\"sy-anticon\"\n theme={antdTheme}\n >\n {children}\n </ConfigProvider>\n );\n }\n const overlayContainer = getRuntimeOverlayContainer(el, portalContainer);\n return (\n <StyleProvider hashPriority=\"high\" container={getStyleContainer(el)}>\n <ConfigProvider {...createAntdConfig(overlayContainer)}>\n {children}\n </ConfigProvider>\n </StyleProvider>\n );\n },\n });\n message.config({\n prefixCls: \"sy-ant-message\",\n getContainer: getMessageContainer,\n });\n};\n\nconst RuntimeMessageBridge = ({ children }: { children: React.ReactNode }) => {\n const appContext = AntdApp.useApp();\n React.useLayoutEffect(() => {\n return registerAntdMessageApi(\n appContext.message as unknown as Record<string, unknown>,\n );\n }, [appContext.message]);\n return <>{children}</>;\n};\n\nexport const createReactPage = (\n AppComponent: React.ComponentType,\n): {\n mount: (el: HTMLElement, context: PageContext) => void;\n update: (el: HTMLElement, context: PageContext) => void;\n unmount: () => void;\n} => {\n let root: RootLike | null = null;\n let currentContainer: HTMLElement | null = null;\n let releasePortalContainer: (() => void) | null = null;\n let portalContainer: HTMLElement | null = null;\n\n const render = (el: HTMLElement, context: PageContext) => {\n el.classList.add(NAMESPACE_ROOT_CLASS);\n if (!root || currentContainer !== el || !portalContainer?.isConnected) {\n root?.unmount();\n releasePortalContainer?.();\n root = createRuntimeRoot(el);\n currentContainer = el;\n const portalHandle = installRuntimePortalContainer(el);\n portalContainer = portalHandle.container;\n releasePortalContainer = portalHandle.release;\n }\n const overlayContainer = getRuntimeOverlayContainer(el, portalContainer);\n installAntdStaticHolder(el, portalContainer);\n const antdConfig = createAntdConfig(overlayContainer);\n\n root.render(\n <StyleProvider hashPriority=\"high\" container={getStyleContainer(el)}>\n <ConfigProvider {...antdConfig}>\n <AntdApp>\n <RuntimeMessageBridge>\n <PageProvider context={context}>\n <AppComponent />\n </PageProvider>\n </RuntimeMessageBridge>\n </AntdApp>\n </ConfigProvider>\n </StyleProvider>,\n );\n };\n\n return {\n mount: (el, context) => {\n render(el, context);\n },\n update: (el, context) => {\n render(el, context);\n },\n unmount: () => {\n root?.unmount();\n releasePortalContainer?.();\n root = null;\n currentContainer = null;\n releasePortalContainer = null;\n portalContainer = null;\n },\n };\n};\n","import React, { useMemo } from \"react\"\n\nimport { ReactPageContext } from \"./store\"\nimport { createPageSdk } from \"../core/client\"\n\nimport type { PageSdkStore } from \"./store\"\nimport type { PageContext } from \"../core/types\"\n\nexport interface PageProviderProps {\n context: PageContext\n children: React.ReactNode\n}\n\nexport const PageProvider: React.FC<PageProviderProps> = ({\n context,\n children,\n}) => {\n const value = useMemo<PageSdkStore>(\n () => ({\n context,\n sdk: createPageSdk(context),\n }),\n [context],\n )\n\n return (\n <ReactPageContext.Provider value={value}>\n {children}\n </ReactPageContext.Provider>\n )\n}\n","import { createContext, useContext } from \"react\"\n\nimport type { PageContext, PageSdk } from \"../core/types\"\n\nexport interface PageSdkStore {\n context: PageContext\n sdk: PageSdk\n}\n\nexport const ReactPageContext = createContext<PageSdkStore | null>(null)\n\nexport const usePageSdkStore = () => {\n const store = useContext(ReactPageContext)\n if (!store) {\n throw new Error(\"usePageSdkStore 必须在 PageProvider 内使用\")\n }\n return store\n}\n","import type { ThemeConfig } from 'antd';\n\nexport const antdTheme: ThemeConfig = {\n cssVar: { prefix: 'sy-ant' },\n hashed: false,\n token: {\n colorPrimary: '#1677ff',\n colorInfo: '#1677ff',\n colorSuccess: '#52c41a',\n colorWarning: '#faad14',\n colorError: '#ff4d4f',\n colorText: 'rgba(0,0,0,0.88)',\n colorTextSecondary: 'rgba(0,0,0,0.65)',\n colorTextTertiary: 'rgba(0,0,0,0.45)',\n colorTextDisabled: 'rgba(0,0,0,0.25)',\n colorBgContainer: '#ffffff',\n colorBgLayout: '#f5f5f5',\n colorBgElevated: '#ffffff',\n colorBorder: '#d9d9d9',\n colorBorderSecondary: '#f0f0f0',\n borderRadius: 6,\n borderRadiusSM: 4,\n borderRadiusLG: 8,\n fontSize: 14,\n controlHeight: 32,\n },\n components: {\n Form: { itemMarginBottom: 16 },\n Card: { paddingLG: 24 },\n },\n};\n\nexport default antdTheme;\n","import { useMemo } from \"react\"\n\nimport { usePageContext } from \"./usePageContext\"\n\nimport type { PageUserInfo, PageUserType } from \"../../core/types\"\n\nexport interface CurrentUserState {\n user: PageUserInfo & { userType: PageUserType; isGuest: boolean }\n isGuest: boolean\n isInternalUser: boolean\n displayName: string\n primaryDepartment: NonNullable<PageUserInfo[\"departments\"]>[number] | null\n}\n\nexport const useCurrentUser = (): CurrentUserState => {\n const { user } = usePageContext()\n\n return useMemo(() => {\n const userType: PageUserType =\n user.userType === \"guest\" || user.isGuest ? \"guest\" : \"normal\"\n const isGuest = userType === \"guest\"\n\n return {\n user: {\n ...user,\n isGuest,\n userType,\n },\n isGuest,\n isInternalUser: !isGuest,\n displayName: user.name || user.username || user.id,\n primaryDepartment: user.departments?.[0] || null,\n }\n }, [user])\n}\n","import { usePageSdkStore } from \"../store\"\n\nimport type { PageContext } from \"../../core/types\"\n\nexport const usePageContext = (): PageContext => {\n return usePageSdkStore().context\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\"\n\nimport { usePageSdk } from \"./usePageSdk\"\n\nimport type { PageApiResponse } from \"../../core/types\"\nimport type { Dispatch, SetStateAction } from \"react\"\n\nconst createParamsSignature = (value: unknown): string => {\n try {\n return JSON.stringify(value || {})\n } catch {\n return \"\"\n }\n}\n\nexport interface UseDataSourceOptions<\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n> {\n params?: TParams\n immediate?: boolean\n transform?: (result: TResult, response: PageApiResponse<TResult>) => TData\n}\n\nexport interface UseDataSourceResult<\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n> {\n response: PageApiResponse<TResult> | null\n result: TResult | null\n data: TData | null\n loading: boolean\n error: Error | null\n refresh: (params?: TParams) => Promise<PageApiResponse<TResult> | null>\n run: (params?: TParams) => Promise<PageApiResponse<TResult> | null>\n setResponse: Dispatch<SetStateAction<PageApiResponse<TResult> | null>>\n setResult: Dispatch<SetStateAction<TResult | null>>\n setData: Dispatch<SetStateAction<TData | null>>\n}\n\nexport const useDataSource = <\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n>(\n name: string,\n options: UseDataSourceOptions<TResult, TData, TParams> = {},\n): UseDataSourceResult<TResult, TData, TParams> => {\n const sdk = usePageSdk()\n const { params, immediate = true, transform } = options\n const paramsRef = useRef(params)\n const transformRef = useRef(transform)\n const paramsSignature = createParamsSignature(params)\n const [response, setResponse] = useState<PageApiResponse<TResult> | null>(\n null,\n )\n const [result, setResult] = useState<TResult | null>(null)\n const [data, setData] = useState<TData | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n paramsRef.current = params\n transformRef.current = transform\n\n const run = useCallback(\n async (overrideParams?: TParams) => {\n setLoading(true)\n setError(null)\n try {\n const response = await sdk.dataSource.run<TResult>(\n name,\n overrideParams || paramsRef.current || {},\n )\n setResponse(response)\n setResult(response.result as TResult | null)\n const activeTransform = transformRef.current\n const nextData = activeTransform\n ? activeTransform(response.result as TResult, response)\n : ((response.result ?? null) as unknown as TData | null)\n setData(nextData)\n return response\n } catch (runtimeError) {\n const nextError =\n runtimeError instanceof Error\n ? runtimeError\n : new Error(String(runtimeError))\n setError(nextError)\n setResponse(null)\n setResult(null)\n return null\n } finally {\n setLoading(false)\n }\n },\n [name, sdk.dataSource],\n )\n\n useEffect(() => {\n if (!immediate) {\n return\n }\n void run()\n }, [immediate, paramsSignature, run])\n\n return {\n response,\n result,\n data,\n loading,\n error,\n refresh: run,\n run,\n setResponse,\n setResult,\n setData,\n }\n}\n","import { usePageSdkStore } from \"../store\"\n\nimport type { PageSdk } from \"../../core/types\"\n\nexport const usePageSdk = (): PageSdk => {\n return usePageSdkStore().sdk\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\"\n\nimport { usePageSdk } from \"./usePageSdk\"\n\nimport type {\n PageApiResponse,\n ViewFieldPermissionValue,\n ViewOperationPermission,\n ViewPermissionSummary,\n} from \"../../core/types\"\n\nexport interface UseFormViewPermissionsOptions {\n appType?: string\n immediate?: boolean\n}\n\nexport interface UseFormViewPermissionsState {\n summary: ViewPermissionSummary\n response: PageApiResponse<ViewPermissionSummary> | null\n loading: boolean\n error: Error | null\n refresh: () => Promise<PageApiResponse<ViewPermissionSummary> | null>\n can: (operation: ViewOperationPermission) => boolean\n getFieldPermission: (fieldName: string) => ViewFieldPermissionValue | null\n}\n\nconst EMPTY_SUMMARY: ViewPermissionSummary = {\n fieldPermissions: {},\n operations: [],\n}\n\nconst toError = (error: unknown): Error => {\n if (error instanceof Error) {\n return error\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n return new Error(error.message)\n }\n return new Error(String(error || \"获取查看态权限失败\"))\n}\n\nexport const useFormViewPermissions = (\n formUuid: string,\n options: UseFormViewPermissionsOptions = {},\n): UseFormViewPermissionsState => {\n const sdk = usePageSdk()\n const [summary, setSummary] = useState<ViewPermissionSummary>(EMPTY_SUMMARY)\n const [response, setResponse] =\n useState<PageApiResponse<ViewPermissionSummary> | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const immediate = options.immediate ?? true\n\n const refresh = useCallback(async () => {\n const normalizedFormUuid = String(formUuid || \"\").trim()\n if (!normalizedFormUuid) {\n setSummary(EMPTY_SUMMARY)\n setResponse(null)\n return null\n }\n\n setLoading(true)\n setError(null)\n\n try {\n const nextResponse =\n await sdk.permission.formGroup.getViewPermissionSummary({\n appType: options.appType,\n formUuid: normalizedFormUuid,\n })\n const nextSummary = nextResponse.result || EMPTY_SUMMARY\n setResponse(nextResponse)\n setSummary({\n fieldPermissions: nextSummary.fieldPermissions || {},\n operations: nextSummary.operations || [],\n })\n return nextResponse\n } catch (requestError) {\n const nextError = toError(requestError)\n setError(nextError)\n setResponse(null)\n setSummary(EMPTY_SUMMARY)\n return null\n } finally {\n setLoading(false)\n }\n }, [formUuid, options.appType, sdk])\n\n useEffect(() => {\n if (!immediate) {\n return\n }\n void refresh()\n }, [immediate, refresh])\n\n const operationSet = useMemo(\n () => new Set(summary.operations),\n [summary.operations],\n )\n\n const can = useCallback(\n (operation: ViewOperationPermission) => operationSet.has(operation),\n [operationSet],\n )\n\n const getFieldPermission = useCallback(\n (fieldName: string) => summary.fieldPermissions[fieldName] || null,\n [summary.fieldPermissions],\n )\n\n return {\n summary,\n response,\n loading,\n error,\n refresh,\n can,\n getFieldPermission,\n }\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageMessageApi } from \"../../core/types\"\n\nexport const useMessage = (): PageMessageApi => {\n return usePageContext().ui.message\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageModalApi } from \"../../core/types\"\n\nexport const useModal = (): PageModalApi => {\n return usePageContext().ui.modal\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageNavigationApi } from \"../../core/types\"\n\nexport const useNavigation = (): PageNavigationApi => {\n return usePageContext().navigation\n}\n","import { usePageContext } from \"./usePageContext\"\n\nexport const usePageProps = <T extends object = Record<string, unknown>>() => {\n return usePageContext().page.props as T\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageRouteInfo } from \"../../core/types\"\n\nexport const usePageRoute = (): PageRouteInfo => {\n return usePageContext().route\n}\n"],"mappings":"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","names":["import_react","import_client","import_react","import_jsx_runtime","zhCN","AntdApp","React","import_react","import_react","response","import_react"]}
@@ -608,6 +608,69 @@ interface BatchSendNotificationByTypeParams {
608
608
  channels?: NotificationChannel[];
609
609
  }>;
610
610
  }
611
+ interface NotificationChannelConfig {
612
+ enabled?: boolean;
613
+ title?: string;
614
+ content?: string;
615
+ config?: Record<string, unknown>;
616
+ [key: string]: unknown;
617
+ }
618
+ interface NotificationChannelsConfig {
619
+ inapp?: NotificationChannelConfig;
620
+ email?: NotificationChannelConfig;
621
+ dingding?: NotificationChannelConfig;
622
+ wechat?: NotificationChannelConfig;
623
+ thirdparty_todo?: NotificationChannelConfig;
624
+ [key: string]: NotificationChannelConfig | undefined;
625
+ }
626
+ type NotificationConfigLevel = "platform" | "app" | "form";
627
+ interface NotificationTemplate {
628
+ id?: string;
629
+ code: string;
630
+ name: string;
631
+ content?: string;
632
+ description?: string;
633
+ level?: NotificationConfigLevel;
634
+ appType?: string;
635
+ formUuid?: string;
636
+ priority?: number;
637
+ enabled?: boolean;
638
+ variables?: string[];
639
+ channelsConfig?: NotificationChannelsConfig;
640
+ [key: string]: unknown;
641
+ }
642
+ interface NotificationTypeConfig {
643
+ id?: string;
644
+ notificationType: string;
645
+ level?: NotificationConfigLevel;
646
+ appType?: string;
647
+ formUuid?: string;
648
+ templateId?: string;
649
+ template?: NotificationTemplate;
650
+ enabled?: boolean;
651
+ priority?: number;
652
+ description?: string;
653
+ [key: string]: unknown;
654
+ }
655
+ interface PreviewNotificationTemplateParams {
656
+ appType?: string;
657
+ templateId?: string;
658
+ templateCode?: string;
659
+ code?: string;
660
+ level?: "app" | "form";
661
+ formUuid?: string;
662
+ payload?: Record<string, unknown>;
663
+ }
664
+ interface NotificationTemplatePreview {
665
+ defaultContent?: string;
666
+ channelPreviews?: Record<string, string>;
667
+ enabledChannels?: Array<NotificationChannel | string>;
668
+ [key: string]: unknown;
669
+ }
670
+ interface FindNotificationConfigParams {
671
+ appType?: string;
672
+ formUuid?: string;
673
+ }
611
674
  interface NotificationMessageRecord {
612
675
  id?: string;
613
676
  messageId?: string;
@@ -787,6 +850,8 @@ interface PageSdk {
787
850
  notification: {
788
851
  sendByType<T = SendNotificationResult>(params: SendNotificationByTypeParams): Promise<PageApiResponse<T>>;
789
852
  batchSendByType<T = SendNotificationResult>(params: BatchSendNotificationByTypeParams): Promise<PageApiResponse<T>>;
853
+ findConfig<T = NotificationTypeConfig | null>(notificationType: string, params?: FindNotificationConfigParams): Promise<PageApiResponse<T>>;
854
+ previewTemplate<T = NotificationTemplatePreview>(params: PreviewNotificationTemplateParams): Promise<PageApiResponse<T>>;
790
855
  };
791
856
  navigation: PageNavigationApi;
792
857
  ui: PageContext["ui"];
@@ -866,4 +931,4 @@ declare const usePageRoute: () => PageRouteInfo;
866
931
 
867
932
  declare const usePageSdk: () => PageSdk;
868
933
 
869
- export { type ApiPermissionListParams, type ApproveTaskParams, type AssignPermissionsParams, type AssignRolesParams, type BatchAddUsersToRoleParams, type BatchSendNotificationByTypeParams, type ChangeUserRoleParams, type ConnectorCallParams, type ConnectorInvokeParams, type ConnectorInvokeResult, type ConnectorRequestBodyType, type ConnectorResponseType, type CreateApiPermissionParams, type CreateFormPermissionGroupDto, type CreatePagePermissionGroupDto, type CreateRoleParams, type CreateUiPermissionParams, type CreateUserParams, type CurrentUserDepartmentParents, type CustomPageEntryConfig, type CustomPageEntryMode, type DataManagementConfigParams, type DataManagementFilterState, type DataPermissionConditionDto, type DataPermissionDto, type DataPermissionRuleDto, type FieldPermissionDto, type FormAdvancedSearchParams, type FormChangeRecordParams, type FormCreateParams, type FormExportParams, type FormGetDetailParams, type FormImportParams, type FormPermissionGroup, type FormRemoveParams, type FormSearchParams, type FormUpdateParams, type GetParentDepartmentsOptions, type GetProcessInstanceParams, type GetUserRolesParams, type ImportExportRecordDownloadParams, type ImportExportRecordQuery, type InstanceStatus, type NotificationChannel, type NotificationMessageRecord, type PageApiPermissionRecord, type PageApiResponse, type PageAppInfo, type PageBinaryResponse, type PageBridgeApi, type PageContext, type PageDataManagementConfig, type PageDataSourceDescriptor, type PageDepartmentInfo, type PageDepartmentRecord, type PageHttpMethod, type PageInfo, type PageListResult, type PageMessageApi, type PageModalApi, type PageNavigationApi, type PageOffsetListResult, type PagePermissionGroup, type PagePermissionInfo, PageProvider, type PageQueryValue, type PageRequestOptions, type PageRoleRecord, type PageRouteInfo, type PageScope, type PageSdk, type PageSdkError, type PageSdkMeta, type PageTransportDownloadPayload, type PageTransportRequestPayload, type PageUiPermissionRecord, type PageUiPermissionType, type PageUserInfo, type PageUserRecord, type PageUserType, type ProcessApproveAction, type QueryFormPermissionGroupDto, type QueryPagePermissionGroupDto, type RoleListParams, type RoleUsersParams, type SaveDataManagementConfigParams, type SearchComponentName, type SearchExpression, type SearchFieldKey, type SearchGroup, type SearchLogic, type SearchOperator, type SearchRule, type SearchSortItem, type SearchSystemField, type SendNotificationByTypeParams, type SendNotificationResult, type SubFormRule, type SwitchAppRoleParams, type SwitchPlatformRoleParams, type TerminateProcessInstanceParams, type TriggerCallbackTaskParams, type UiPermissionListParams, type UpdateApiPermissionParams, type UpdateFormPermissionGroupDto, type UpdatePagePermissionGroupDto, type UpdateRoleParams, type UpdateUiPermissionParams, type UpdateUserParams, type UserListParams, type UserMenuPermissionsResponse, type ValidateUserParams, type ViewFieldPermissionValue, type ViewOperationPermission, type ViewPermissionSummary, createPageSdk, createReactPage, useCurrentUser, useDataSource, useFormViewPermissions, useMessage, useModal, useNavigation, usePageContext, usePageProps, usePageRoute, usePageSdk };
934
+ export { type ApiPermissionListParams, type ApproveTaskParams, type AssignPermissionsParams, type AssignRolesParams, type BatchAddUsersToRoleParams, type BatchSendNotificationByTypeParams, type ChangeUserRoleParams, type ConnectorCallParams, type ConnectorInvokeParams, type ConnectorInvokeResult, type ConnectorRequestBodyType, type ConnectorResponseType, type CreateApiPermissionParams, type CreateFormPermissionGroupDto, type CreatePagePermissionGroupDto, type CreateRoleParams, type CreateUiPermissionParams, type CreateUserParams, type CurrentUserDepartmentParents, type CustomPageEntryConfig, type CustomPageEntryMode, type DataManagementConfigParams, type DataManagementFilterState, type DataPermissionConditionDto, type DataPermissionDto, type DataPermissionRuleDto, type FieldPermissionDto, type FindNotificationConfigParams, type FormAdvancedSearchParams, type FormChangeRecordParams, type FormCreateParams, type FormExportParams, type FormGetDetailParams, type FormImportParams, type FormPermissionGroup, type FormRemoveParams, type FormSearchParams, type FormUpdateParams, type GetParentDepartmentsOptions, type GetProcessInstanceParams, type GetUserRolesParams, type ImportExportRecordDownloadParams, type ImportExportRecordQuery, type InstanceStatus, type NotificationChannel, type NotificationChannelConfig, type NotificationChannelsConfig, type NotificationConfigLevel, type NotificationMessageRecord, type NotificationTemplate, type NotificationTemplatePreview, type NotificationTypeConfig, type PageApiPermissionRecord, type PageApiResponse, type PageAppInfo, type PageBinaryResponse, type PageBridgeApi, type PageContext, type PageDataManagementConfig, type PageDataSourceDescriptor, type PageDepartmentInfo, type PageDepartmentRecord, type PageHttpMethod, type PageInfo, type PageListResult, type PageMessageApi, type PageModalApi, type PageNavigationApi, type PageOffsetListResult, type PagePermissionGroup, type PagePermissionInfo, PageProvider, type PageQueryValue, type PageRequestOptions, type PageRoleRecord, type PageRouteInfo, type PageScope, type PageSdk, type PageSdkError, type PageSdkMeta, type PageTransportDownloadPayload, type PageTransportRequestPayload, type PageUiPermissionRecord, type PageUiPermissionType, type PageUserInfo, type PageUserRecord, type PageUserType, type PreviewNotificationTemplateParams, type ProcessApproveAction, type QueryFormPermissionGroupDto, type QueryPagePermissionGroupDto, type RoleListParams, type RoleUsersParams, type SaveDataManagementConfigParams, type SearchComponentName, type SearchExpression, type SearchFieldKey, type SearchGroup, type SearchLogic, type SearchOperator, type SearchRule, type SearchSortItem, type SearchSystemField, type SendNotificationByTypeParams, type SendNotificationResult, type SubFormRule, type SwitchAppRoleParams, type SwitchPlatformRoleParams, type TerminateProcessInstanceParams, type TriggerCallbackTaskParams, type UiPermissionListParams, type UpdateApiPermissionParams, type UpdateFormPermissionGroupDto, type UpdatePagePermissionGroupDto, type UpdateRoleParams, type UpdateUiPermissionParams, type UpdateUserParams, type UserListParams, type UserMenuPermissionsResponse, type ValidateUserParams, type ViewFieldPermissionValue, type ViewOperationPermission, type ViewPermissionSummary, createPageSdk, createReactPage, useCurrentUser, useDataSource, useFormViewPermissions, useMessage, useModal, useNavigation, usePageContext, usePageProps, usePageRoute, usePageSdk };