react-toolkits 2.22.21 → 2.22.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/lib/{chunk-XQWJ5ZAA.js → chunk-2MBSA3L6.js} +2 -2
- package/lib/{chunk-XQWJ5ZAA.js.map → chunk-2MBSA3L6.js.map} +1 -1
- package/lib/{chunk-GD42VZYO.js → chunk-B43QB5MO.js} +2 -2
- package/lib/{chunk-GD42VZYO.js.map → chunk-B43QB5MO.js.map} +1 -1
- package/lib/{chunk-GUZYFAYW.js → chunk-CZVEA2JJ.js} +2 -2
- package/lib/{chunk-GUZYFAYW.js.map → chunk-CZVEA2JJ.js.map} +1 -1
- package/lib/chunk-OLBC35WM.js +3 -0
- package/lib/chunk-OLBC35WM.js.map +1 -0
- package/lib/{chunk-4LG4V23K.js → chunk-TPXP7CV6.js} +2 -2
- package/lib/{chunk-4LG4V23K.js.map → chunk-TPXP7CV6.js.map} +1 -1
- package/lib/chunk-UCD6QQ6P.js +2 -0
- package/lib/{chunk-A32VE3TQ.js.map → chunk-UCD6QQ6P.js.map} +1 -1
- package/lib/{chunk-F6U4XQKJ.js → chunk-W2MMCJBD.js} +2 -2
- package/lib/{chunk-F6U4XQKJ.js.map → chunk-W2MMCJBD.js.map} +1 -1
- package/lib/{chunk-WF6CQ4VD.js → chunk-WMINTIJ3.js} +2 -2
- package/lib/{chunk-WF6CQ4VD.js.map → chunk-WMINTIJ3.js.map} +1 -1
- package/lib/{chunk-LGVGDPRR.js → chunk-YQM2SZ3L.js} +2 -2
- package/lib/{chunk-LGVGDPRR.js.map → chunk-YQM2SZ3L.js.map} +1 -1
- package/lib/{createMenuItem-STIQZAS2.js → createMenuItem-4NN325FZ.js} +2 -2
- package/lib/{createMenuItem-STIQZAS2.js.map → createMenuItem-4NN325FZ.js.map} +1 -1
- package/lib/index.css +155 -65
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/{menuItemList-FO2YJKSU.js → menuItemList-YQ7GEN7E.js} +2 -2
- package/lib/{menuItemList-FO2YJKSU.js.map → menuItemList-YQ7GEN7E.js.map} +1 -1
- package/lib/{roleDetail-BTJNVKA3.js → roleDetail-MR2BNOSV.js} +2 -2
- package/lib/{roleDetail-BTJNVKA3.js.map → roleDetail-MR2BNOSV.js.map} +1 -1
- package/lib/{roleList-JLF5HIXG.js → roleList-OOGK2WEY.js} +2 -2
- package/lib/{roleList-JLF5HIXG.js.map → roleList-OOGK2WEY.js.map} +1 -1
- package/lib/{updateMenuItem-W62ZGTDH.js → updateMenuItem-CZWG6ZF3.js} +2 -2
- package/lib/{updateMenuItem-W62ZGTDH.js.map → updateMenuItem-CZWG6ZF3.js.map} +1 -1
- package/lib/{userDetail-UNBXTXAK.js → userDetail-45KDOBZ3.js} +2 -2
- package/lib/{userDetail-UNBXTXAK.js.map → userDetail-45KDOBZ3.js.map} +1 -1
- package/lib/{userList-PD5SOROE.js → userList-6J6JXFM4.js} +2 -2
- package/lib/{userList-PD5SOROE.js.map → userList-6J6JXFM4.js.map} +1 -1
- package/package.json +3 -3
- package/lib/chunk-A32VE3TQ.js +0 -2
- package/lib/chunk-KXTBMJYF.js +0 -3
- package/lib/chunk-KXTBMJYF.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/filterFormWrapper/FilterFormWrapper.tsx","../src/components/highlight/Highlight.tsx","../src/components/queryList/stores.ts","../src/components/queryList/QueryList.tsx"],"names":["FilterFormWrapper","props","extras","isConfirming","onConfirm","onReset","children","buttonsAlign","showReset","t","useTranslation","colorFillAlter","lineWidth","lineType","colorBorder","borderRadiusLG","theme","jsx","jsxs","Space","Button","item","Fragment","FilterFormWrapper_default","splitByTags","str","regex","part","renderToString","node","container","root","createRoot","resolve","flushSync","Highlight","texts","htmlString","setHtmlString","useState","useEffect","result","text","index","Highlight_default","DEFAULT_PAYLOAD","createStore","create","devtools","subscribeWithSelector","set","get","id","url","queryKey","refetch","state","existingInstance","updatedInstance","newInstances","instance","payload","newPayload","isEqual","payloadChanged","currentPayload","error","store","useQueryListStore","QueryListAction","DEFAULT_CACHE_TIME","DEFAULT_STALE_TIME","BODYLESS_METHODS","BODY_SUPPORTED_METHODS","SPIN_STYLE","identifierCounter","generateUniqueIdentifier","InternalQueryList","ref","form","identifier","code","onePage","defaultSize","refreshInterval","tableExtra","renderForm","afterSuccess","afterError","footer","pageSizeOptions","request","dataAdapter","tableProps","formInstance","Form","finalIdentifier","useMemo","action","useRef","accessible","isChecking","usePermission","isValid","setIsValid","isInitialized","isUpdatingFromPayload","subscribedPayload","s","ky","useKy","page","size","filters","resolvedRequest","method","body","searchParams","headers","cacheTime","staleTime","normalizedMethod","isBodylessMethod","supportsBody","defaultRequestData","requestBody","requestSearchParams","requestHeaders","shouldPoll","data","isLoading","useQuery","kyOptions","response","err","errorObj","failureCount","retryError","attemptIndex","resolvedDataAdapter","adapter","defaultAdapter","dataSource","total","pagination","currentPage","currentSize","useCallback","formRenderer","cloneElement","e","tableExtraRenderer","renderFooter","currentFormValues","init","value","rafId","useImperativeHandle","Spin","Table","Result","QueryList","forwardRef","QueryList_default"],"mappings":"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","file":"chunk-4LG4V23K.js","sourcesContent":["import { Button, Space, theme } from 'antd'\nimport type { Key, PropsWithChildren, ReactNode } from 'react'\nimport { Fragment } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nexport interface FilterFormWrapperProps extends PropsWithChildren {\n onConfirm?: () => void | Promise<void>\n onReset?: () => void\n extras?: { key: Key; children: ReactNode }[]\n isConfirming?: boolean\n buttonsAlign?: 'left' | 'right' | 'bottom'\n showReset?: boolean\n}\n\nconst FilterFormWrapper = (props: FilterFormWrapperProps) => {\n const { extras, isConfirming, onConfirm, onReset, children, buttonsAlign = 'left', showReset } = props\n const { t } = useTranslation()\n const {\n token: { colorFillAlter, lineWidth, lineType, colorBorder, borderRadiusLG },\n } = theme.useToken()\n\n const style = {\n maxWidth: 'none',\n background: colorFillAlter,\n borderWidth: lineWidth,\n borderStyle: lineType,\n borderColor: colorBorder,\n borderRadius: borderRadiusLG,\n padding: 24,\n marginBottom: 24,\n }\n\n return (\n <div style={style}>\n <div className={`flex ${buttonsAlign === 'bottom' ? 'flex-col' : 'flex-row'}`}>\n <div className={`${buttonsAlign === 'left' ? 'flex-grow-0' : 'flex-1'}`}>{children}</div>\n <div className={`${buttonsAlign === 'bottom' ? 'text-end' : 'text-start'} ml-4`}>\n <Space>\n <Button type=\"primary\" disabled={isConfirming} onClick={onConfirm}>\n {t('FilterFormWrapper.confirmText')}\n </Button>\n {extras?.map(item => <Fragment key={item.key}>{item.children}</Fragment>)}\n {showReset && <Button onClick={onReset}>{t('FilterFormWrapper.resetText')}</Button>}\n </Space>\n </div>\n </div>\n </div>\n )\n}\n\nexport default FilterFormWrapper\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport { flushSync } from 'react-dom'\nimport { createRoot } from 'react-dom/client'\n\nconst splitByTags = (str: string) => {\n const regex = /(<[^>]*>)/\n return str.split(regex).filter(part => part !== '')\n}\n\nfunction renderToString(node: ReactNode): Promise<string> {\n const container = document.createElement('div')\n const root = createRoot(container)\n\n return new Promise(resolve => {\n setTimeout(() => {\n flushSync(() => {\n root.render(node)\n })\n resolve(container.innerHTML)\n })\n })\n}\n\nexport interface HighlightProps extends PropsWithChildren {\n texts: Array<string | number>\n}\n\nconst Highlight = (props: HighlightProps) => {\n const { texts, children } = props\n const [htmlString, setHtmlString] = useState<string>('')\n\n useEffect(() => {\n renderToString(children).then(str => {\n const result = splitByTags(str)\n\n for (const text of texts) {\n for (let index = 0; index < result.length; index++) {\n // TODO: 忽略 HTML tag\n result[index] = result[index].replace(String(text), `<span style='color: #DC143C;'>${text}</span>`)\n }\n }\n\n setHtmlString(result.join(''))\n })\n }, [children, texts])\n\n return <div dangerouslySetInnerHTML={{ __html: htmlString }}></div>\n}\n\nexport default Highlight\n","import { isEqual } from 'lodash-es'\nimport { create } from 'zustand'\nimport { devtools, subscribeWithSelector } from 'zustand/middleware'\n\nimport type { QueryListPayload } from './QueryList'\n\n// Query 更新函数类型\ntype QueryRefetchFunction = () => void | Promise<unknown>\n\n// QueryList 实例信息\ninterface QueryListInstance {\n id: string\n url: string\n queryKey: readonly unknown[]\n payload: QueryListPayload\n refetch: QueryRefetchFunction\n}\n\n// 简化的状态接口\ninterface QueryListState {\n // 实例管理\n instances: Map<string, QueryListInstance>\n\n // 核心方法\n registerInstance(id: string, url: string, queryKey: readonly unknown[], refetch: QueryRefetchFunction): void\n unregisterInstance(id: string): void\n updatePayload(id: string, payload: QueryListPayload): void\n getPayload(id: string): QueryListPayload\n refetch(id: string, payload?: QueryListPayload): Promise<void>\n\n // 工具方法\n getInstance(id: string): QueryListInstance | undefined\n getAllInstances(): QueryListInstance[]\n}\n\n// 稳定的默认 payload 引用,避免未注册时每次返回新对象导致 getSnapshot 无限循环\nconst DEFAULT_PAYLOAD: QueryListPayload = Object.freeze({\n page: 1,\n size: 10,\n filters: Object.freeze({}),\n})\n\n// 创建简化的 store\nconst createStore = () =>\n create<QueryListState>()(\n devtools(\n subscribeWithSelector((set, get) => ({\n instances: new Map(),\n\n registerInstance(id, url, queryKey, refetch) {\n set(state => {\n const existingInstance = state.instances.get(id)\n\n // 如果实例已存在,只更新refetch函数\n if (existingInstance) {\n // 仅当 refetch 变更时才更新,避免无意义 setState\n if (existingInstance.refetch !== refetch) {\n const updatedInstance = {\n ...existingInstance,\n refetch,\n }\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n return { instances: newInstances }\n }\n return state\n }\n\n // 创建新实例\n const instance: QueryListInstance = {\n id,\n url,\n queryKey,\n payload: DEFAULT_PAYLOAD,\n refetch,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, instance)\n\n return { instances: newInstances }\n })\n },\n unregisterInstance(id) {\n set(state => {\n const newInstances = new Map(state.instances)\n const existed = newInstances.delete(id)\n\n if (existed) {\n return { instances: newInstances }\n }\n return state\n })\n },\n updatePayload(id, payload) {\n set(state => {\n const instance = state.instances.get(id)\n if (!instance) return state\n\n const newPayload = { ...instance.payload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(instance.payload, newPayload)) {\n const updatedInstance = {\n ...instance,\n payload: newPayload,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n\n return { instances: newInstances }\n }\n\n return state\n })\n },\n getPayload(id) {\n const instance = get().instances.get(id)\n return instance?.payload ?? DEFAULT_PAYLOAD\n },\n async refetch(id, payload) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`QueryList instance with id \"${id}\" not found`)\n return\n }\n\n let payloadChanged = false\n\n // 更新 payload 如果提供且确实有变化\n if (payload) {\n const currentPayload = instance.payload\n const newPayload = { ...currentPayload, ...payload }\n\n if (!isEqual(currentPayload, newPayload)) {\n get().updatePayload(id, payload)\n payloadChanged = true\n }\n }\n\n // 若 payload 发生变化,queryKey 会变化,React Query 会自动触发请求,此处不再手动 refetch,避免重复请求\n if (payloadChanged) {\n return\n }\n\n // 否则手动触发一次请求\n try {\n await instance.refetch()\n } catch (error) {\n console.error(`Failed to refetch QueryList instance \"${id}\":`, error)\n throw error\n }\n },\n\n getInstance(id) {\n return get().instances.get(id)\n },\n\n getAllInstances() {\n return Array.from(get().instances.values())\n },\n })),\n {\n name: 'query-list-store',\n },\n ),\n )\n\n// 创建 store 实例\nconst store = createStore()\n\nexport const useQueryListStore = store\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useQuery } from '@tanstack/react-query'\nimport type { FormInstance } from 'antd'\nimport { Form, Result, Spin, Table } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { TableProps } from 'antd/es/table'\nimport type { Options as KyOptions } from 'ky'\nimport { isEqual } from 'lodash-es'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { cloneElement, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport type { FilterFormWrapperProps } from '@/components/filterFormWrapper'\nimport { FilterFormWrapper } from '@/components/filterFormWrapper'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nimport { useQueryListStore } from './stores'\n\nexport interface ListResponse<T = any> {\n list: T[]\n total: number\n}\n\nexport interface QueryListPayload<Values = any> {\n page?: number\n size?: number\n filters?: Values\n}\n\n// 缓存配置\nexport interface CacheConfig {\n cacheTime?: number // 缓存时间(毫秒)\n staleTime?: number // 数据新鲜时间(毫秒)\n}\n\n// 支持的 HTTP 请求方法类型\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD'\n\n// 简化的请求配置\nexport interface QueryListRequestConfig extends CacheConfig {\n url: string\n method?: HttpMethod\n body?: FormData | Record<string | number, any>\n searchParams?: Record<string | number, any>\n headers?: Record<string, string>\n}\n\nexport type QueryListRequestConfigType<Values = any> =\n | QueryListRequestConfig\n | ((payload: QueryListPayload<Values>) => QueryListRequestConfig)\n\nexport enum QueryListAction {\n Confirm,\n Reset,\n Jump,\n Init,\n}\n\nexport interface QueryListDataType<Item> {\n dataSource: Item[]\n total: number\n}\n\nexport interface QueryListRef<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any> {\n data: Data | undefined\n dataSource: Item[] | undefined\n form: FormInstance<Values>\n}\n\nexport interface QueryListDataAdapter<Item extends AnyObject = AnyObject> {\n total?: number\n items?: Item[]\n}\n\nexport type QueryListDataAdapterConfig<Item extends AnyObject = AnyObject, Data = any> =\n | QueryListDataAdapter<Item>\n | ((data: Data) => QueryListDataAdapter<Item>)\n\nexport interface QueryListProps<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any>\n extends Omit<TableProps<Item>, 'pagination' | 'dataSource' | 'loading' | 'footer'>,\n Pick<FilterFormWrapperProps, 'buttonsAlign' | 'showReset'> {\n identifier?: string // 可选的标识符,用于标识和外部控制,未提供时自动生成\n code?: string\n form?: FormInstance<Values>\n refreshInterval?: number\n onePage?: boolean // 无分页\n defaultSize?: number\n pageSizeOptions?: number[]\n request: QueryListRequestConfigType<Values> // 必需的请求配置\n tableExtra?: ReactNode | ((form: FormInstance<Values>, data?: Data) => ReactNode)\n renderForm?: (form: FormInstance<Values>) => ReactElement\n afterSuccess?: (action: QueryListAction, form: FormInstance<Values>, data?: Data) => void\n afterError?: (error: Error, action: QueryListAction, form: FormInstance<Values>) => void\n dataAdapter?: QueryListDataAdapterConfig<Item, Data>\n footer?: (data: Data | undefined) => ReactNode\n}\n\n// 常量定义\nconst DEFAULT_CACHE_TIME = 5 * 60 * 1000 // 默认缓存5分钟\nconst DEFAULT_STALE_TIME = 30 * 1000 // 默认30秒内数据新鲜\n\n// 无请求体的 HTTP 方法\nconst BODYLESS_METHODS: HttpMethod[] = ['GET', 'HEAD']\n\n// 支持请求体的 HTTP 方法\nconst BODY_SUPPORTED_METHODS: HttpMethod[] = ['POST', 'PUT', 'PATCH', 'DELETE']\n\nconst SPIN_STYLE: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n}\n\n// 生成唯一 identifier 的计数器\nlet identifierCounter = 0\n\n// 生成唯一 identifier 的函数\nconst generateUniqueIdentifier = (): string => {\n return `queryList_${Date.now()}_${++identifierCounter}`\n}\n\nconst InternalQueryList = <Item extends AnyObject = AnyObject, Values extends AnyObject = any, Data = any>(\n props: QueryListProps<Item, Values, Data>,\n ref: Ref<QueryListRef<Item, Values, Data>>,\n) => {\n const { t } = useTranslation()\n\n const {\n form,\n identifier,\n code,\n onePage,\n buttonsAlign,\n showReset,\n defaultSize = 10,\n refreshInterval = 0,\n tableExtra,\n renderForm,\n afterSuccess,\n afterError,\n footer,\n pageSizeOptions,\n request,\n dataAdapter,\n ...tableProps\n } = props\n\n const [formInstance] = Form.useForm<Values>(form)\n\n // 生成或使用提供的 identifier\n const finalIdentifier = useMemo(() => {\n return identifier || generateUniqueIdentifier()\n }, [identifier])\n const action = useRef<QueryListAction>(QueryListAction.Init)\n const { data: accessible, isLoading: isChecking } = usePermission(code)\n const [isValid, setIsValid] = useState(false)\n const isInitialized = useRef(false)\n const isUpdatingFromPayload = useRef(false) // 防止循环更新的标志\n\n // 仅订阅当前 identifier 的 payload,避免因其它实例变化导致不必要重渲染\n const subscribedPayload = useQueryListStore(s => s.getPayload(finalIdentifier))\n const ky = useKy()\n\n const { page, size = defaultSize, filters } = subscribedPayload\n\n const payload = { page, size, filters }\n\n // 处理 request 配置(对象或函数)\n const resolvedRequest = typeof request === 'function' ? request(payload) : request\n\n const {\n url,\n method = 'GET',\n body,\n searchParams,\n headers,\n cacheTime = DEFAULT_CACHE_TIME,\n staleTime = DEFAULT_STALE_TIME,\n } = resolvedRequest\n\n // 验证请求方法\n const normalizedMethod = method.toUpperCase() as HttpMethod\n const allSupportedMethods: HttpMethod[] = [...BODYLESS_METHODS, ...BODY_SUPPORTED_METHODS]\n\n if (!allSupportedMethods.includes(normalizedMethod)) {\n console.warn(`QueryList: 不支持的 HTTP 请求方法 \"${method}\",将使用 GET 方法`)\n }\n\n // 根据请求方法决定参数传递方式\n const isBodylessMethod = BODYLESS_METHODS.includes(normalizedMethod)\n const supportsBody = BODY_SUPPORTED_METHODS.includes(normalizedMethod)\n\n const defaultRequestData = { ...filters, ...(!onePage && { page, size }) }\n\n // 使用用户提供的参数,否则使用默认请求数据\n const requestBody = body || (supportsBody ? defaultRequestData : undefined)\n const requestSearchParams = searchParams || defaultRequestData\n\n const requestHeaders = headers\n\n const shouldPoll = useRef(false)\n\n // 构建更完整的 queryKey,包含所有影响请求结果的参数\n const queryKey = [\n 'queryList',\n url,\n finalIdentifier,\n normalizedMethod,\n page,\n size,\n filters,\n requestBody,\n requestSearchParams,\n requestHeaders,\n ] as const\n\n const { data, isLoading, refetch } = useQuery({\n queryKey,\n queryFn: async () => {\n try {\n const kyOptions: KyOptions = {\n method: normalizedMethod,\n searchParams: requestSearchParams,\n headers: requestHeaders,\n }\n\n // 只有非无请求体方法才允许有 body\n if (requestBody && !isBodylessMethod) {\n if (requestBody instanceof FormData) {\n // FormData 使用 body 方式传递\n kyOptions.body = requestBody\n } else if (typeof requestBody === 'string') {\n // 字符串直接作为 body\n kyOptions.body = requestBody\n } else {\n // 对象类型使用 .json 方式传递\n kyOptions.json = requestBody\n }\n }\n\n const response = await ky.request<Data>({ url, ...kyOptions })\n shouldPoll.current = true\n afterSuccess?.(action.current, formInstance, response)\n return response\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n afterError?.(errorObj, action.current, formInstance)\n throw errorObj\n }\n },\n retry: (failureCount, retryError) => {\n // 自定义重试逻辑\n if (failureCount >= 3) return false\n if (retryError?.message?.includes('401')) return false // 认证错误不重试\n return true\n },\n retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), // 指数退避\n refetchOnWindowFocus: false,\n refetchInterval: shouldPoll.current ? refreshInterval : 0,\n // 缓存配置\n gcTime: cacheTime,\n staleTime,\n enabled: accessible && isValid,\n })\n\n // 处理 dataAdapter 配置\n const resolvedDataAdapter = useMemo(() => {\n const adapter = dataAdapter\n const defaultAdapter: QueryListDataAdapter<Item> = {\n total: (data as ListResponse<Item>)?.total,\n items: (data as ListResponse<Item>)?.list,\n }\n\n if (typeof adapter === 'function') {\n return {\n ...defaultAdapter,\n ...adapter(data as Data),\n }\n }\n return {\n ...defaultAdapter,\n ...adapter,\n }\n }, [dataAdapter, data])\n\n // 在组件挂载时注册实例,避免因 queryKey/refetch 身份变化反复注册\n useEffect(() => {\n useQueryListStore.getState().registerInstance(finalIdentifier, url, queryKey, refetch)\n return () => {\n useQueryListStore.getState().unregisterInstance(finalIdentifier)\n }\n }, [finalIdentifier, url])\n\n const dataSource = resolvedDataAdapter.items\n const total = resolvedDataAdapter.total\n\n const pagination = useMemo(() => {\n if (onePage) return false\n\n return {\n pageSizeOptions,\n showSizeChanger: true,\n showQuickJumper: true,\n current: page,\n pageSize: size,\n total,\n onChange: async (currentPage: number, currentSize: number) => {\n action.current = QueryListAction.Jump\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: currentPage,\n size: currentSize,\n })\n },\n }\n }, [onePage, pageSizeOptions, page, size, total, finalIdentifier])\n\n const onConfirm = useCallback(async () => {\n action.current = QueryListAction.Confirm\n try {\n await formInstance.validateFields()\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const onReset = useCallback(async () => {\n action.current = QueryListAction.Reset\n formInstance.resetFields()\n\n try {\n await formInstance.validateFields({ validateOnly: true })\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const formRenderer =\n typeof renderForm === 'function' ? (\n <FilterFormWrapper\n showReset={showReset}\n buttonsAlign={buttonsAlign}\n isConfirming={isLoading}\n onReset={onReset}\n onConfirm={onConfirm}\n >\n {cloneElement(renderForm(formInstance), {\n onKeyUp: (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onConfirm()\n }\n },\n })}\n </FilterFormWrapper>\n ) : (\n // 屏蔽 Form 组件的警告(Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?)\n <Form form={formInstance} />\n )\n\n const tableExtraRenderer = typeof tableExtra === 'function' ? tableExtra(formInstance, data) : tableExtra\n\n const renderFooter = footer ? () => footer(data) : undefined\n\n // 监听 payload.filters 变化并同步更新表单实例\n useEffect(() => {\n if (!isInitialized.current || isUpdatingFromPayload.current) {\n return\n }\n\n // 获取当前表单的值\n const currentFormValues = formInstance.getFieldsValue()\n\n // 如果 payload 中的 filters 与当前表单值不同,则更新表单\n if (filters && !isEqual(currentFormValues, filters)) {\n isUpdatingFromPayload.current = true\n formInstance.setFieldsValue(filters)\n // 使用 setTimeout 确保在下一个事件循环中重置标志\n setTimeout(() => {\n isUpdatingFromPayload.current = false\n }, 0)\n }\n }, [filters, formInstance])\n\n // 首次挂载时自动校验表单,校验通过则更新 payload 并允许请求\n useEffect(() => {\n if (!accessible || isInitialized.current) {\n return\n }\n\n const init = async () => {\n console.log('QueryList init starting')\n try {\n formInstance.resetFields()\n const value = await formInstance.validateFields({ validateOnly: true })\n console.log('QueryList init validation success:', value)\n useQueryListStore.getState().updatePayload(finalIdentifier, {\n page: 1,\n filters: value,\n })\n setIsValid(true)\n console.log('QueryList init completed, isValid set to true')\n } catch (error) {\n console.log('QueryList init validation failed:', error)\n setIsValid(false)\n } finally {\n isInitialized.current = true\n }\n }\n\n const rafId = requestAnimationFrame(() => {\n Promise.resolve().then(init)\n })\n\n return () => {\n if (rafId) {\n cancelAnimationFrame(rafId)\n }\n }\n }, [accessible, finalIdentifier, formInstance])\n\n useImperativeHandle(\n ref,\n () => ({\n data,\n dataSource,\n form: formInstance,\n refetch,\n }),\n [data, dataSource, formInstance, refetch],\n )\n\n if (isChecking) {\n return <Spin style={SPIN_STYLE} />\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('global.noEntitlement')} />\n }\n\n return (\n <div>\n {formRenderer}\n {tableExtraRenderer}\n <Table\n {...tableProps}\n dataSource={dataSource}\n loading={isLoading}\n pagination={pagination}\n footer={renderFooter}\n />\n </div>\n )\n}\n\nconst QueryList = forwardRef(InternalQueryList) as <\n Item extends AnyObject = AnyObject,\n Values extends object | undefined = undefined,\n Data = any,\n>(\n props: QueryListProps<Item, Values, Data> & { ref?: Ref<QueryListRef<Item, Values, Data>> },\n) => ReactElement\n\nexport default QueryList\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/filterFormWrapper/FilterFormWrapper.tsx","../src/components/highlight/Highlight.tsx","../src/components/queryList/stores.ts","../src/components/queryList/QueryList.tsx"],"names":["FilterFormWrapper","props","extras","isConfirming","onConfirm","onReset","children","buttonsAlign","showReset","t","useTranslation","colorFillAlter","lineWidth","lineType","colorBorder","borderRadiusLG","theme","jsx","jsxs","Space","Button","item","Fragment","FilterFormWrapper_default","splitByTags","str","regex","part","renderToString","node","container","root","createRoot","resolve","flushSync","Highlight","texts","htmlString","setHtmlString","useState","useEffect","result","text","index","Highlight_default","DEFAULT_PAYLOAD","createStore","create","devtools","subscribeWithSelector","set","get","id","url","queryKey","refetch","state","existingInstance","updatedInstance","newInstances","instance","payload","newPayload","isEqual","payloadChanged","currentPayload","error","store","useQueryListStore","QueryListAction","DEFAULT_CACHE_TIME","DEFAULT_STALE_TIME","BODYLESS_METHODS","BODY_SUPPORTED_METHODS","SPIN_STYLE","identifierCounter","generateUniqueIdentifier","InternalQueryList","ref","form","identifier","code","onePage","defaultSize","refreshInterval","tableExtra","renderForm","afterSuccess","afterError","footer","pageSizeOptions","request","dataAdapter","tableProps","formInstance","Form","finalIdentifier","useMemo","action","useRef","accessible","isChecking","usePermission","isValid","setIsValid","isInitialized","isUpdatingFromPayload","subscribedPayload","s","ky","useKy","page","size","filters","resolvedRequest","method","body","searchParams","headers","cacheTime","staleTime","normalizedMethod","isBodylessMethod","supportsBody","defaultRequestData","requestBody","requestSearchParams","requestHeaders","shouldPoll","data","isLoading","useQuery","kyOptions","response","err","errorObj","failureCount","retryError","attemptIndex","resolvedDataAdapter","adapter","defaultAdapter","dataSource","total","pagination","currentPage","currentSize","useCallback","formRenderer","cloneElement","e","tableExtraRenderer","renderFooter","currentFormValues","init","value","rafId","useImperativeHandle","Spin","Table","Result","QueryList","forwardRef","QueryList_default"],"mappings":"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","file":"chunk-TPXP7CV6.js","sourcesContent":["import { Button, Space, theme } from 'antd'\nimport type { Key, PropsWithChildren, ReactNode } from 'react'\nimport { Fragment } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nexport interface FilterFormWrapperProps extends PropsWithChildren {\n onConfirm?: () => void | Promise<void>\n onReset?: () => void\n extras?: { key: Key; children: ReactNode }[]\n isConfirming?: boolean\n buttonsAlign?: 'left' | 'right' | 'bottom'\n showReset?: boolean\n}\n\nconst FilterFormWrapper = (props: FilterFormWrapperProps) => {\n const { extras, isConfirming, onConfirm, onReset, children, buttonsAlign = 'left', showReset } = props\n const { t } = useTranslation()\n const {\n token: { colorFillAlter, lineWidth, lineType, colorBorder, borderRadiusLG },\n } = theme.useToken()\n\n const style = {\n maxWidth: 'none',\n background: colorFillAlter,\n borderWidth: lineWidth,\n borderStyle: lineType,\n borderColor: colorBorder,\n borderRadius: borderRadiusLG,\n padding: 24,\n marginBottom: 24,\n }\n\n return (\n <div style={style}>\n <div className={`flex ${buttonsAlign === 'bottom' ? 'flex-col' : 'flex-row'}`}>\n <div className={`${buttonsAlign === 'left' ? 'flex-grow-0' : 'flex-1'}`}>{children}</div>\n <div className={`${buttonsAlign === 'bottom' ? 'text-end' : 'text-start'} ml-4`}>\n <Space>\n <Button type=\"primary\" disabled={isConfirming} onClick={onConfirm}>\n {t('FilterFormWrapper.confirmText')}\n </Button>\n {extras?.map(item => <Fragment key={item.key}>{item.children}</Fragment>)}\n {showReset && <Button onClick={onReset}>{t('FilterFormWrapper.resetText')}</Button>}\n </Space>\n </div>\n </div>\n </div>\n )\n}\n\nexport default FilterFormWrapper\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport { flushSync } from 'react-dom'\nimport { createRoot } from 'react-dom/client'\n\nconst splitByTags = (str: string) => {\n const regex = /(<[^>]*>)/\n return str.split(regex).filter(part => part !== '')\n}\n\nfunction renderToString(node: ReactNode): Promise<string> {\n const container = document.createElement('div')\n const root = createRoot(container)\n\n return new Promise(resolve => {\n setTimeout(() => {\n flushSync(() => {\n root.render(node)\n })\n resolve(container.innerHTML)\n })\n })\n}\n\nexport interface HighlightProps extends PropsWithChildren {\n texts: Array<string | number>\n}\n\nconst Highlight = (props: HighlightProps) => {\n const { texts, children } = props\n const [htmlString, setHtmlString] = useState<string>('')\n\n useEffect(() => {\n renderToString(children).then(str => {\n const result = splitByTags(str)\n\n for (const text of texts) {\n for (let index = 0; index < result.length; index++) {\n // TODO: 忽略 HTML tag\n result[index] = result[index].replace(String(text), `<span style='color: #DC143C;'>${text}</span>`)\n }\n }\n\n setHtmlString(result.join(''))\n })\n }, [children, texts])\n\n return <div dangerouslySetInnerHTML={{ __html: htmlString }}></div>\n}\n\nexport default Highlight\n","import { isEqual } from 'lodash-es'\nimport { create } from 'zustand'\nimport { devtools, subscribeWithSelector } from 'zustand/middleware'\n\nimport type { QueryListPayload } from './QueryList'\n\n// Query 更新函数类型\ntype QueryRefetchFunction = () => void | Promise<unknown>\n\n// QueryList 实例信息\ninterface QueryListInstance {\n id: string\n url: string\n queryKey: readonly unknown[]\n payload: QueryListPayload\n refetch: QueryRefetchFunction\n}\n\n// 简化的状态接口\ninterface QueryListState {\n // 实例管理\n instances: Map<string, QueryListInstance>\n\n // 核心方法\n registerInstance(id: string, url: string, queryKey: readonly unknown[], refetch: QueryRefetchFunction): void\n unregisterInstance(id: string): void\n updatePayload(id: string, payload: QueryListPayload): void\n getPayload(id: string): QueryListPayload\n refetch(id: string, payload?: QueryListPayload): Promise<void>\n\n // 工具方法\n getInstance(id: string): QueryListInstance | undefined\n getAllInstances(): QueryListInstance[]\n}\n\n// 稳定的默认 payload 引用,避免未注册时每次返回新对象导致 getSnapshot 无限循环\nconst DEFAULT_PAYLOAD: QueryListPayload = Object.freeze({\n page: 1,\n size: 10,\n filters: Object.freeze({}),\n})\n\n// 创建简化的 store\nconst createStore = () =>\n create<QueryListState>()(\n devtools(\n subscribeWithSelector((set, get) => ({\n instances: new Map(),\n\n registerInstance(id, url, queryKey, refetch) {\n set(state => {\n const existingInstance = state.instances.get(id)\n\n // 如果实例已存在,只更新refetch函数\n if (existingInstance) {\n // 仅当 refetch 变更时才更新,避免无意义 setState\n if (existingInstance.refetch !== refetch) {\n const updatedInstance = {\n ...existingInstance,\n refetch,\n }\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n return { instances: newInstances }\n }\n return state\n }\n\n // 创建新实例\n const instance: QueryListInstance = {\n id,\n url,\n queryKey,\n payload: DEFAULT_PAYLOAD,\n refetch,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, instance)\n\n return { instances: newInstances }\n })\n },\n unregisterInstance(id) {\n set(state => {\n const newInstances = new Map(state.instances)\n const existed = newInstances.delete(id)\n\n if (existed) {\n return { instances: newInstances }\n }\n return state\n })\n },\n updatePayload(id, payload) {\n set(state => {\n const instance = state.instances.get(id)\n if (!instance) return state\n\n const newPayload = { ...instance.payload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(instance.payload, newPayload)) {\n const updatedInstance = {\n ...instance,\n payload: newPayload,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n\n return { instances: newInstances }\n }\n\n return state\n })\n },\n getPayload(id) {\n const instance = get().instances.get(id)\n return instance?.payload ?? DEFAULT_PAYLOAD\n },\n async refetch(id, payload) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`QueryList instance with id \"${id}\" not found`)\n return\n }\n\n let payloadChanged = false\n\n // 更新 payload 如果提供且确实有变化\n if (payload) {\n const currentPayload = instance.payload\n const newPayload = { ...currentPayload, ...payload }\n\n if (!isEqual(currentPayload, newPayload)) {\n get().updatePayload(id, payload)\n payloadChanged = true\n }\n }\n\n // 若 payload 发生变化,queryKey 会变化,React Query 会自动触发请求,此处不再手动 refetch,避免重复请求\n if (payloadChanged) {\n return\n }\n\n // 否则手动触发一次请求\n try {\n await instance.refetch()\n } catch (error) {\n console.error(`Failed to refetch QueryList instance \"${id}\":`, error)\n throw error\n }\n },\n\n getInstance(id) {\n return get().instances.get(id)\n },\n\n getAllInstances() {\n return Array.from(get().instances.values())\n },\n })),\n {\n name: 'query-list-store',\n },\n ),\n )\n\n// 创建 store 实例\nconst store = createStore()\n\nexport const useQueryListStore = store\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useQuery } from '@tanstack/react-query'\nimport type { FormInstance } from 'antd'\nimport { Form, Result, Spin, Table } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { TableProps } from 'antd/es/table'\nimport type { Options as KyOptions } from 'ky'\nimport { isEqual } from 'lodash-es'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { cloneElement, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport type { FilterFormWrapperProps } from '@/components/filterFormWrapper'\nimport { FilterFormWrapper } from '@/components/filterFormWrapper'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nimport { useQueryListStore } from './stores'\n\nexport interface ListResponse<T = any> {\n list: T[]\n total: number\n}\n\nexport interface QueryListPayload<Values = any> {\n page?: number\n size?: number\n filters?: Values\n}\n\n// 缓存配置\nexport interface CacheConfig {\n cacheTime?: number // 缓存时间(毫秒)\n staleTime?: number // 数据新鲜时间(毫秒)\n}\n\n// 支持的 HTTP 请求方法类型\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD'\n\n// 简化的请求配置\nexport interface QueryListRequestConfig extends CacheConfig {\n url: string\n method?: HttpMethod\n body?: FormData | Record<string | number, any>\n searchParams?: Record<string | number, any>\n headers?: Record<string, string>\n}\n\nexport type QueryListRequestConfigType<Values = any> =\n | QueryListRequestConfig\n | ((payload: QueryListPayload<Values>) => QueryListRequestConfig)\n\nexport enum QueryListAction {\n Confirm,\n Reset,\n Jump,\n Init,\n}\n\nexport interface QueryListDataType<Item> {\n dataSource: Item[]\n total: number\n}\n\nexport interface QueryListRef<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any> {\n data: Data | undefined\n dataSource: Item[] | undefined\n form: FormInstance<Values>\n}\n\nexport interface QueryListDataAdapter<Item extends AnyObject = AnyObject> {\n total?: number\n items?: Item[]\n}\n\nexport type QueryListDataAdapterConfig<Item extends AnyObject = AnyObject, Data = any> =\n | QueryListDataAdapter<Item>\n | ((data: Data) => QueryListDataAdapter<Item>)\n\nexport interface QueryListProps<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any>\n extends Omit<TableProps<Item>, 'pagination' | 'dataSource' | 'loading' | 'footer'>,\n Pick<FilterFormWrapperProps, 'buttonsAlign' | 'showReset'> {\n identifier?: string // 可选的标识符,用于标识和外部控制,未提供时自动生成\n code?: string\n form?: FormInstance<Values>\n refreshInterval?: number\n onePage?: boolean // 无分页\n defaultSize?: number\n pageSizeOptions?: number[]\n request: QueryListRequestConfigType<Values> // 必需的请求配置\n tableExtra?: ReactNode | ((form: FormInstance<Values>, data?: Data) => ReactNode)\n renderForm?: (form: FormInstance<Values>) => ReactElement\n afterSuccess?: (action: QueryListAction, form: FormInstance<Values>, data?: Data) => void\n afterError?: (error: Error, action: QueryListAction, form: FormInstance<Values>) => void\n dataAdapter?: QueryListDataAdapterConfig<Item, Data>\n footer?: (data: Data | undefined) => ReactNode\n}\n\n// 常量定义\nconst DEFAULT_CACHE_TIME = 5 * 60 * 1000 // 默认缓存5分钟\nconst DEFAULT_STALE_TIME = 30 * 1000 // 默认30秒内数据新鲜\n\n// 无请求体的 HTTP 方法\nconst BODYLESS_METHODS: HttpMethod[] = ['GET', 'HEAD']\n\n// 支持请求体的 HTTP 方法\nconst BODY_SUPPORTED_METHODS: HttpMethod[] = ['POST', 'PUT', 'PATCH', 'DELETE']\n\nconst SPIN_STYLE: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n}\n\n// 生成唯一 identifier 的计数器\nlet identifierCounter = 0\n\n// 生成唯一 identifier 的函数\nconst generateUniqueIdentifier = (): string => {\n return `queryList_${Date.now()}_${++identifierCounter}`\n}\n\nconst InternalQueryList = <Item extends AnyObject = AnyObject, Values extends AnyObject = any, Data = any>(\n props: QueryListProps<Item, Values, Data>,\n ref: Ref<QueryListRef<Item, Values, Data>>,\n) => {\n const { t } = useTranslation()\n\n const {\n form,\n identifier,\n code,\n onePage,\n buttonsAlign,\n showReset,\n defaultSize = 10,\n refreshInterval = 0,\n tableExtra,\n renderForm,\n afterSuccess,\n afterError,\n footer,\n pageSizeOptions,\n request,\n dataAdapter,\n ...tableProps\n } = props\n\n const [formInstance] = Form.useForm<Values>(form)\n\n // 生成或使用提供的 identifier\n const finalIdentifier = useMemo(() => {\n return identifier || generateUniqueIdentifier()\n }, [identifier])\n const action = useRef<QueryListAction>(QueryListAction.Init)\n const { data: accessible, isLoading: isChecking } = usePermission(code)\n const [isValid, setIsValid] = useState(false)\n const isInitialized = useRef(false)\n const isUpdatingFromPayload = useRef(false) // 防止循环更新的标志\n\n // 仅订阅当前 identifier 的 payload,避免因其它实例变化导致不必要重渲染\n const subscribedPayload = useQueryListStore(s => s.getPayload(finalIdentifier))\n const ky = useKy()\n\n const { page, size = defaultSize, filters } = subscribedPayload\n\n const payload = { page, size, filters }\n\n // 处理 request 配置(对象或函数)\n const resolvedRequest = typeof request === 'function' ? request(payload) : request\n\n const {\n url,\n method = 'GET',\n body,\n searchParams,\n headers,\n cacheTime = DEFAULT_CACHE_TIME,\n staleTime = DEFAULT_STALE_TIME,\n } = resolvedRequest\n\n // 验证请求方法\n const normalizedMethod = method.toUpperCase() as HttpMethod\n const allSupportedMethods: HttpMethod[] = [...BODYLESS_METHODS, ...BODY_SUPPORTED_METHODS]\n\n if (!allSupportedMethods.includes(normalizedMethod)) {\n console.warn(`QueryList: 不支持的 HTTP 请求方法 \"${method}\",将使用 GET 方法`)\n }\n\n // 根据请求方法决定参数传递方式\n const isBodylessMethod = BODYLESS_METHODS.includes(normalizedMethod)\n const supportsBody = BODY_SUPPORTED_METHODS.includes(normalizedMethod)\n\n const defaultRequestData = { ...filters, ...(!onePage && { page, size }) }\n\n // 使用用户提供的参数,否则使用默认请求数据\n const requestBody = body || (supportsBody ? defaultRequestData : undefined)\n const requestSearchParams = searchParams || defaultRequestData\n\n const requestHeaders = headers\n\n const shouldPoll = useRef(false)\n\n // 构建更完整的 queryKey,包含所有影响请求结果的参数\n const queryKey = [\n 'queryList',\n url,\n finalIdentifier,\n normalizedMethod,\n page,\n size,\n filters,\n requestBody,\n requestSearchParams,\n requestHeaders,\n ] as const\n\n const { data, isLoading, refetch } = useQuery({\n queryKey,\n queryFn: async () => {\n try {\n const kyOptions: KyOptions = {\n method: normalizedMethod,\n searchParams: requestSearchParams,\n headers: requestHeaders,\n }\n\n // 只有非无请求体方法才允许有 body\n if (requestBody && !isBodylessMethod) {\n if (requestBody instanceof FormData) {\n // FormData 使用 body 方式传递\n kyOptions.body = requestBody\n } else if (typeof requestBody === 'string') {\n // 字符串直接作为 body\n kyOptions.body = requestBody\n } else {\n // 对象类型使用 .json 方式传递\n kyOptions.json = requestBody\n }\n }\n\n const response = await ky.request<Data>({ url, ...kyOptions })\n shouldPoll.current = true\n afterSuccess?.(action.current, formInstance, response)\n return response\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n afterError?.(errorObj, action.current, formInstance)\n throw errorObj\n }\n },\n retry: (failureCount, retryError) => {\n // 自定义重试逻辑\n if (failureCount >= 3) return false\n if (retryError?.message?.includes('401')) return false // 认证错误不重试\n return true\n },\n retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), // 指数退避\n refetchOnWindowFocus: false,\n refetchInterval: shouldPoll.current ? refreshInterval : 0,\n // 缓存配置\n gcTime: cacheTime,\n staleTime,\n enabled: accessible && isValid,\n })\n\n // 处理 dataAdapter 配置\n const resolvedDataAdapter = useMemo(() => {\n const adapter = dataAdapter\n const defaultAdapter: QueryListDataAdapter<Item> = {\n total: (data as ListResponse<Item>)?.total,\n items: (data as ListResponse<Item>)?.list,\n }\n\n if (typeof adapter === 'function') {\n return {\n ...defaultAdapter,\n ...adapter(data as Data),\n }\n }\n return {\n ...defaultAdapter,\n ...adapter,\n }\n }, [dataAdapter, data])\n\n // 在组件挂载时注册实例,避免因 queryKey/refetch 身份变化反复注册\n useEffect(() => {\n useQueryListStore.getState().registerInstance(finalIdentifier, url, queryKey, refetch)\n return () => {\n useQueryListStore.getState().unregisterInstance(finalIdentifier)\n }\n }, [finalIdentifier, url])\n\n const dataSource = resolvedDataAdapter.items\n const total = resolvedDataAdapter.total\n\n const pagination = useMemo(() => {\n if (onePage) return false\n\n return {\n pageSizeOptions,\n showSizeChanger: true,\n showQuickJumper: true,\n current: page,\n pageSize: size,\n total,\n onChange: async (currentPage: number, currentSize: number) => {\n action.current = QueryListAction.Jump\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: currentPage,\n size: currentSize,\n })\n },\n }\n }, [onePage, pageSizeOptions, page, size, total, finalIdentifier])\n\n const onConfirm = useCallback(async () => {\n action.current = QueryListAction.Confirm\n try {\n await formInstance.validateFields()\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const onReset = useCallback(async () => {\n action.current = QueryListAction.Reset\n formInstance.resetFields()\n\n try {\n await formInstance.validateFields({ validateOnly: true })\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const formRenderer =\n typeof renderForm === 'function' ? (\n <FilterFormWrapper\n showReset={showReset}\n buttonsAlign={buttonsAlign}\n isConfirming={isLoading}\n onReset={onReset}\n onConfirm={onConfirm}\n >\n {cloneElement(renderForm(formInstance), {\n onKeyUp: (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onConfirm()\n }\n },\n })}\n </FilterFormWrapper>\n ) : (\n // 屏蔽 Form 组件的警告(Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?)\n <Form form={formInstance} />\n )\n\n const tableExtraRenderer = typeof tableExtra === 'function' ? tableExtra(formInstance, data) : tableExtra\n\n const renderFooter = footer ? () => footer(data) : undefined\n\n // 监听 payload.filters 变化并同步更新表单实例\n useEffect(() => {\n if (!isInitialized.current || isUpdatingFromPayload.current) {\n return\n }\n\n // 获取当前表单的值\n const currentFormValues = formInstance.getFieldsValue()\n\n // 如果 payload 中的 filters 与当前表单值不同,则更新表单\n if (filters && !isEqual(currentFormValues, filters)) {\n isUpdatingFromPayload.current = true\n formInstance.setFieldsValue(filters)\n // 使用 setTimeout 确保在下一个事件循环中重置标志\n setTimeout(() => {\n isUpdatingFromPayload.current = false\n }, 0)\n }\n }, [filters, formInstance])\n\n // 首次挂载时自动校验表单,校验通过则更新 payload 并允许请求\n useEffect(() => {\n if (!accessible || isInitialized.current) {\n return\n }\n\n const init = async () => {\n console.log('QueryList init starting')\n try {\n formInstance.resetFields()\n const value = await formInstance.validateFields({ validateOnly: true })\n console.log('QueryList init validation success:', value)\n useQueryListStore.getState().updatePayload(finalIdentifier, {\n page: 1,\n filters: value,\n })\n setIsValid(true)\n console.log('QueryList init completed, isValid set to true')\n } catch (error) {\n console.log('QueryList init validation failed:', error)\n setIsValid(false)\n } finally {\n isInitialized.current = true\n }\n }\n\n const rafId = requestAnimationFrame(() => {\n Promise.resolve().then(init)\n })\n\n return () => {\n if (rafId) {\n cancelAnimationFrame(rafId)\n }\n }\n }, [accessible, finalIdentifier, formInstance])\n\n useImperativeHandle(\n ref,\n () => ({\n data,\n dataSource,\n form: formInstance,\n refetch,\n }),\n [data, dataSource, formInstance, refetch],\n )\n\n if (isChecking) {\n return <Spin style={SPIN_STYLE} />\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('global.noEntitlement')} />\n }\n\n return (\n <div>\n {formRenderer}\n {tableExtraRenderer}\n <Table\n {...tableProps}\n dataSource={dataSource}\n loading={isLoading}\n pagination={pagination}\n footer={renderFooter}\n />\n </div>\n )\n}\n\nconst QueryList = forwardRef(InternalQueryList) as <\n Item extends AnyObject = AnyObject,\n Values extends object | undefined = undefined,\n Data = any,\n>(\n props: QueryListProps<Item, Values, Data> & { ref?: Ref<QueryListRef<Item, Values, Data>> },\n) => ReactElement\n\nexport default QueryList\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {i}from'./chunk-OLBC35WM.js';import {has,template,get}from'lodash-es';import {useMemo}from'react';function l(){let t=i(e=>e.locale);return {t:useMemo(()=>(e,r)=>has(t,e)?template(get(t,e))(r):e,[t])}}export{l as a};//# sourceMappingURL=chunk-UCD6QQ6P.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-UCD6QQ6P.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/locale/hooks.ts"],"names":["useTranslation","locale","useToolkitsStore","state","useMemo","key","data","has","template","get"],"mappings":"yGAmBO,SAASA,CAAAA,EAAiB,CAC/B,IAAMC,CAAAA,CAASC,EAAiBC,CAASA,EAAAA,CAAAA,CAAM,MAAM,CAAA,CAQrD,OAAO,CAAE,EANCC,OACR,CAAA,IAAM,CAACC,CAAoBC,CAAAA,CAAAA,GACzBC,IAAIN,CAAQI,CAAAA,CAAG,EAAIG,QAASC,CAAAA,GAAAA,CAAIR,EAAQI,CAAa,CAAC,EAAEC,CAAI,CAAA,CAAID,EAClE,CAACJ,CAAM,CACT,CAEW,CACb","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/locale/hooks.ts"],"names":["useTranslation","locale","useToolkitsStore","state","useMemo","key","data","has","template","get"],"mappings":"yGAmBO,SAASA,CAAAA,EAAiB,CAC/B,IAAMC,CAAAA,CAASC,EAAiBC,CAASA,EAAAA,CAAAA,CAAM,MAAM,CAAA,CAQrD,OAAO,CAAE,EANCC,OACR,CAAA,IAAM,CAACC,CAAoBC,CAAAA,CAAAA,GACzBC,IAAIN,CAAQI,CAAAA,CAAG,EAAIG,QAASC,CAAAA,GAAAA,CAAIR,EAAQI,CAAa,CAAC,EAAEC,CAAI,CAAA,CAAID,EAClE,CAACJ,CAAM,CACT,CAEW,CACb","file":"chunk-UCD6QQ6P.js","sourcesContent":["import { get, has, template } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport type { Locale } from './index'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const locale = useToolkitsStore(state => state.locale)\n\n const t = useMemo(\n () => (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key,\n [locale],\n )\n\n return { t }\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {l,m,i}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {l,m,i}from'./chunk-OLBC35WM.js';import {useQuery,useQueryClient,useMutation}from'@tanstack/react-query';function q(){let e=l();return useQuery({queryKey:m.roles.all,queryFn:()=>e.get("/api/usystem/role/all")})}function v(e){let r=i(i=>i.permissionVersion),t=l(),n=r==="v2"?"v2":"v1";return useQuery({queryKey:m.roles.detail(e,n),queryFn:()=>t.get(`/api/usystem/role/${n==="v2"?"infoV2":"info"}?name=${e}`)})}function f(){let{permissionVersion:e}=i(i=>i),r=l(),t=useQueryClient(),n=e==="v2"?"v2":"v1";return useMutation({mutationKey:m.roles.create(n),mutationFn:({name:i,permissions:y})=>r.post(n==="v2"?"/api/usystem/role/createV2":"/api/usystem/role/create",{name:i,permissions:y}),onSuccess:()=>{t.invalidateQueries({queryKey:m.roles.all});}})}function K(){let{permissionVersion:e}=i(i=>i),r=l(),t=useQueryClient(),n=e==="v2"?"v2":"v1";return useMutation({mutationKey:m.roles.update(n),mutationFn:({id:i,name:y,permissions:p})=>r.post(n==="v2"?"/api/usystem/role/updateV2":"/api/usystem/role/update",{id:i,name:y,permissions:p}),onSuccess:()=>{t.invalidateQueries({queryKey:m.roles.all});}})}function R(){let e=l(),r=useQueryClient();return useMutation({mutationKey:m.roles.delete,mutationFn:({id:t,name:n})=>e.post("/api/usystem/role/delete",{id:t,name:n}),onSuccess:()=>{r.invalidateQueries({queryKey:m.roles.all});}})}function k(){let e=l(),r=useQueryClient();return useMutation({mutationKey:m.users.create,mutationFn:t=>e.post("/api/usystem/user/create",t),onSuccess:()=>{r.invalidateQueries({queryKey:m.users.all});}})}function x(){let e=l(),r=useQueryClient();return useMutation({mutationKey:m.users.update,mutationFn:t=>e.post("/api/usystem/user/update",t),onSuccess:()=>{r.invalidateQueries({queryKey:m.users.all});}})}function F(){let e=l(),r=useQueryClient();return useMutation({mutationKey:m.users.delete,mutationFn:({id:t,name:n})=>e.post("/api/usystem/user/delete",{id:t,name:n}),onSuccess:()=>{r.invalidateQueries({queryKey:m.users.all});}})}function P(){let e=l();return useQuery({queryKey:m.permissions.allPermissions,queryFn:()=>e.get("/api/usystem/user/allPermssions")})}function C(){let e=l();return useQuery({queryKey:m.permissions.allPermissionsV2,queryFn:()=>e.get("/api/usystem/user/allPermssionsV2")})}export{q as a,v as b,f as c,K as d,R as e,k as f,x as g,F as h,P as i,C as j};//# sourceMappingURL=chunk-W2MMCJBD.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-W2MMCJBD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/services/index.ts"],"names":["useAllRoles","ky","useKy","useQuery","queryKeys","useRole","name","permissionVersion","useToolkitsStore","state","version","useCreateRole","s","queryClient","useQueryClient","useMutation","permissions","useUpdateRole","id","useRemoveRole","useCreateUser","arg","useUpdateUser","useRemoveUser","useAllPermissions","useAllPermissionsV2"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/services/index.ts"],"names":["useAllRoles","ky","useKy","useQuery","queryKeys","useRole","name","permissionVersion","useToolkitsStore","state","version","useCreateRole","s","queryClient","useQueryClient","useMutation","permissions","useUpdateRole","id","useRemoveRole","useCreateUser","arg","useUpdateUser","useRemoveUser","useAllPermissions","useAllPermissionsV2"],"mappings":"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","file":"chunk-W2MMCJBD.js","sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\n\nimport type { PermissionEnumItem, RoleEnumItem, RoleV1, RoleV2 } from '../types'\n\nexport function useAllRoles() {\n const ky = useKy()\n return useQuery({\n queryKey: queryKeys.roles.all,\n queryFn: () => ky.get<RoleEnumItem[]>('/api/usystem/role/all'),\n })\n}\n\nexport function useRole(name: string) {\n const permissionVersion = useToolkitsStore(state => state.permissionVersion)\n const ky = useKy()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useQuery({\n queryKey: queryKeys.roles.detail(name, version),\n queryFn: () => ky.get<RoleV1 | RoleV2>(`/api/usystem/role/${version === 'v2' ? 'infoV2' : 'info'}?name=${name}`),\n })\n}\n\nexport function useCreateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.create(version),\n mutationFn: ({ name, permissions }: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/createV2' : '/api/usystem/role/create', { name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useUpdateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.update(version),\n mutationFn: ({\n id,\n name,\n permissions,\n }: {\n id: number\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/updateV2' : '/api/usystem/role/update', { id, name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useRemoveRole() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.roles.delete,\n mutationFn: ({ id, name }: { id: number; name: string }) => ky.post('/api/usystem/role/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useCreateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.create,\n mutationFn: (\n arg:\n | { name: string; roles: string[] }\n | {\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n },\n ) => ky.post('/api/usystem/user/create', arg),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useUpdateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.update,\n mutationFn: (\n arg:\n | { id: string; name: string; roles: string[] }\n | {\n id: string\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n },\n ) => ky.post('/api/usystem/user/update', arg),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useRemoveUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.delete,\n mutationFn: ({ id, name }: { id: string; name: string }) => ky.post('/api/usystem/user/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useAllPermissions() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissions,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssions'),\n })\n}\n\nexport function useAllPermissionsV2() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissionsV2,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssionsV2'),\n })\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$1,f,g}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$1,f,g}from'./chunk-W2MMCJBD.js';import {d}from'./chunk-YQM2SZ3L.js';import {a}from'./chunk-UCD6QQ6P.js';import {i,l,m,h}from'./chunk-OLBC35WM.js';import {MinusCircleOutlined}from'@ant-design/icons';import {useQuery}from'@tanstack/react-query';import {App,Form,Input,Select,Row,Col,Empty,Button,Typography}from'antd';import {last,first}from'lodash-es';import {Fragment as Fragment$1}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var {Text:A}=Typography,K=(r,t)=>{last(r)===h?t?.([h]):first(r)===h?t?.(r.slice(1)):t?.(r);},Y=r=>{let{onChange:t,...l$1}=r,s=l(),{data:g,isLoading:p}=useQuery({queryKey:m.enums.gameGroups,queryFn:()=>s.get("/api/enum/get?enum=game_group&type=all")}),d=[{label:"\u901A\u7528",value:h}].concat(g?.map(a=>({label:a,value:a}))??[]);return jsx(Select,{...l$1,allowClear:!0,showSearch:!0,mode:"tags",optionFilterProp:"label",loading:p,options:d,onChange:a=>K(a,t)})},k=r=>{let{groups:t,onChange:l$1,...s}=r,g=l(),{permissionVersion:p}=i(),d=p==="v3",a=p==="v4",{data:c,isLoading:h}=useQuery({queryKey:m.enums.gameIds(a?[]:t??[]),queryFn:()=>g.get(`/api/enum/game_group/get_game_ids${a?"":`?game_groups=${t?.join(",")}`}`).then(o=>o?.list),enabled:a||d&&!!t?.length}),y=c?.map(o=>({label:o.name,value:o.id}));return jsx(Select,{...s,allowClear:!0,showSearch:!0,optionFilterProp:"label",mode:"tags",loading:h,options:y,onChange:o=>K(o,l$1)})},de=({mode:r,onSuccess:t})=>{let{message:l}=App.useApp(),{t:s}=a(),{data:g$1,isLoading:p}=a$1(),d$1=f(),a$2=g(),c=r==="create",h=s(c?"User.createTitle":"User.updateTitle"),y=jsxs(Fragment,{children:[jsx(Form.Item,{label:s("global.name"),name:"name",rules:[{required:!0}],children:jsx(Input,{disabled:!c})}),jsx(Form.Item,{label:s("global.role"),name:"roles",children:jsx(Select,{allowClear:!0,showSearch:!0,mode:"multiple",loading:p,optionFilterProp:"label",options:g$1?.map(C=>({label:C.name,value:C.name}))})})]});return d({title:h,width:"600px",formProps:{autoComplete:"off",labelCol:{flex:"80px"}},content:y,onConfirm:async(C,L)=>{c?(await d$1.mutateAsync(C),l.success(s("User.createSuccessfully"))):(await a$2.mutateAsync({...C,id:L?.id}),l.success(s("User.updateSuccessfully"))),t?.();}})},Ce=({mode:r,onSuccess:t})=>{let{message:l}=App.useApp(),{t:s}=a(),{data:g$1,isLoading:p}=a$1(),d$1=f(),a$2=g(),c=r==="create",h=s(c?"User.createTitle":"User.updateTitle"),{permissionVersion:y}=i(),o=y==="v3",C=jsxs(Fragment,{children:[jsx(Form.Item,{label:s("global.name"),name:"name",rules:[{required:!0}],children:jsx(Input,{disabled:!c})}),jsx(Form.List,{name:"permissions",children:(F,{add:U,remove:B})=>jsxs(Row,{gutter:8,children:[o&&jsx(Col,{span:8,className:"text-center mb-4",children:jsx(A,{strong:!0,children:s("global.projectGroup")})}),jsx(Col,{span:o?10:14,className:"text-center mb-4",children:jsx(A,{strong:!0,children:s("global.game")})}),jsx(Col,{span:o?6:10,className:"text-center mb-4",children:jsx(A,{strong:!0,children:s("global.role")})}),F.map(n=>jsxs(Fragment$1,{children:[o&&jsx(Col,{span:8,children:jsx(Form.Item,{noStyle:!0,shouldUpdate:!0,children:({setFieldValue:i})=>jsx(Form.Item,{name:[n.name,"game_group"],children:jsx(Y,{onChange:()=>{i(["permissions",n.name,"game_ids"],[]);}})})})}),jsx(Col,{span:o?10:14,children:o?jsx(Form.Item,{noStyle:!0,shouldUpdate:(i,f)=>i.permissions[n.name]?.game_group!==f.permissions[n.name]?.game_group,children:({getFieldValue:i})=>{let f=i(["permissions",n.name,"game_group"]);return jsx(Form.Item,{name:[n.name,"game_ids"],dependencies:[["permissions",n.name,"game_group"]],rules:[{required:!!f?.length,message:"\u8BF7\u9009\u62E9\u6E38\u620F"}],children:jsx(k,{groups:f})})}}):jsx(Form.Item,{name:[n.name,"game_ids"],rules:[{required:!0,message:"\u8BF7\u9009\u62E9\u6E38\u620F"}],children:jsx(k,{})})}),jsx(Col,{span:o?6:10,children:jsxs("div",{className:"flex",children:[jsx("div",{className:"flex-1",children:jsx(Form.Item,{name:[n.name,"role"],rules:[{required:!0,message:"\u8BF7\u9009\u62E9\u89D2\u8272"},({getFieldValue:i})=>({validator(f,D){return i("permissions").filter((v,E)=>!!v&&E!==n.name).some(v=>v.role===D)?Promise.reject(new Error("\u8BF7\u52FF\u91CD\u590D\u9009\u62E9\u89D2\u8272")):Promise.resolve()}})],children:jsx(Select,{allowClear:!0,showSearch:!0,optionFilterProp:"label",loading:p,options:g$1?.map(i=>({label:i.name,value:i.name}))})})}),jsx("div",{className:"w-8 text-center",children:jsx(Form.Item,{children:jsx(MinusCircleOutlined,{onClick:()=>{B(n.name);}})})})]})})]},n.key)),F.length===0&&jsx(Col,{span:24,children:jsx(Empty,{className:"mb-6"})}),jsx(Col,{span:24,children:jsx(Button,{block:!0,type:"dashed",onClick:()=>U(),children:s("global.add")})})]})})]});return d({title:h,width:"1000px",formProps:{autoComplete:"off",labelCol:{flex:"80px"}},content:C,onConfirm:async(F,U)=>{c?(await d$1.mutateAsync(F),l.success(s("User.createSuccessfully"))):(await a$2.mutateAsync({...F,id:U?.id}),l.success(s("User.updateSuccessfully"))),t?.();}})};export{de as a,Ce as b};//# sourceMappingURL=chunk-WMINTIJ3.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-WMINTIJ3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Text","Typography","handleWildcardSelection","value","onChange","last","WILDCARD","first","GroupSelect","props","rest","ky","useKy","data","isLoading","useQuery","queryKeys","options","group","jsx","Select","GameSelect","groups","permissionVersion","useToolkitsStore","isV3","isV4","response","useUserModal","mode","onSuccess","message","App","t","useTranslation","roles","isRolesLoading","useAllRoles","create","useCreateUser","update","useUpdateUser","isCreateMode","title","content","jsxs","Fragment","Form","Input","role","useFormModal","values","extraValues","useUserModalV2","fields","add","remove","Row","Col","field","setFieldValue","prevValues","nextValues","getFieldValue","_groups","_rule","item","index","MinusCircleOutlined","Empty","Button"],"mappings":"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","file":"chunk-WF6CQ4VD.js","sourcesContent":["import { MinusCircleOutlined } from '@ant-design/icons'\nimport { useQuery } from '@tanstack/react-query'\nimport { App, Button, Col, Empty, Form, Input, Row, Select, Typography } from 'antd'\nimport { first, last } from 'lodash-es'\nimport { Fragment } from 'react'\nimport { type FC } from 'react'\n\nimport { useToolkitsStore } from '@/components'\nimport { PermissionVersion, WILDCARD } from '@/constants'\nimport { useFormModal } from '@/hooks/modal'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { queryKeys } from '@/queryKeys'\n\nimport { useAllRoles, useCreateUser, useUpdateUser } from '../services'\n\nconst { Text } = Typography\n\n/**\n * 处理通配符选择逻辑\n * - 如果最后选择的是通配符,则只保留通配符\n * - 如果第一个是通配符但又选择了其他项,则移除通配符\n */\nconst handleWildcardSelection = (value: string[], onChange?: (value: string[]) => void) => {\n if (last(value) === WILDCARD) {\n onChange?.([WILDCARD])\n } else if (first(value) === WILDCARD) {\n onChange?.(value.slice(1))\n } else {\n onChange?.(value)\n }\n}\n\ninterface GroupSelectProps {\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst GroupSelect: FC<GroupSelectProps> = props => {\n const { onChange, ...rest } = props\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameGroups,\n queryFn: () => ky.get<string[]>('/api/enum/get?enum=game_group&type=all'),\n })\n\n const options = [{ label: '通用', value: WILDCARD }].concat(\n data?.map(group => ({ label: group, value: group })) ?? [],\n )\n\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n mode=\"tags\"\n optionFilterProp=\"label\"\n loading={isLoading}\n options={options}\n onChange={value => handleWildcardSelection(value, onChange)}\n />\n )\n}\n\ninterface GameSelectProps {\n groups?: string[]\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\n/**\n * 游戏选择组件\n * - V3: 依赖 groups 参数,需要先选择项目组才能加载游戏列表\n * - V4: 不依赖 groups,直接加载所有游戏列表\n */\nconst GameSelect: FC<GameSelectProps> = props => {\n const { groups, onChange, ...rest } = props\n const ky = useKy()\n const { permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n const isV4 = permissionVersion === PermissionVersion.V4\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameIds(isV4 ? [] : (groups ?? [])),\n queryFn: () =>\n ky\n .get<{\n list: {\n id: string\n name: string\n }[]\n }>(`/api/enum/game_group/get_game_ids${isV4 ? '' : `?game_groups=${groups?.join(',')}`}`)\n .then(response => response?.list),\n enabled: isV4 || (isV3 && !!groups?.length),\n })\n\n const options = data?.map((group: { id: string; name: string }) => ({ label: group.name, value: group.id }))\n\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n optionFilterProp=\"label\"\n mode=\"tags\"\n loading={isLoading}\n options={options}\n onChange={value => handleWildcardSelection(value, onChange)}\n />\n )\n}\n\ninterface UserModalFormSchema {\n name: string\n roles: string[]\n}\n\nexport const useUserModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item label={t('global.role')} name=\"roles\">\n <Select\n allowClear\n showSearch\n mode=\"multiple\"\n loading={isRolesLoading}\n optionFilterProp=\"label\"\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (values: UserModalFormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalFormSchema, { id: string }>({\n title,\n width: '600px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n\ninterface UserModalV2FormSchema {\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n}\n\n/**\n * 用户弹窗 V2 版本(用于 V3 和 V4 权限系统)\n * - V3: 显示项目组选择,游戏列表依赖项目组\n * - V4: 隐藏项目组选择,游戏列表独立加载\n */\nexport const useUserModalV2 = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n const isCreateMode = mode === 'create'\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n const { permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.List name=\"permissions\">\n {(fields, { add, remove }) => (\n <Row gutter={8}>\n {isV3 && (\n <Col span={8} className=\"text-center mb-4\">\n <Text strong>{t('global.projectGroup')}</Text>\n </Col>\n )}\n <Col span={isV3 ? 10 : 14} className=\"text-center mb-4\">\n <Text strong>{t('global.game')}</Text>\n </Col>\n <Col span={isV3 ? 6 : 10} className=\"text-center mb-4\">\n <Text strong>{t('global.role')}</Text>\n </Col>\n {fields.map(field => (\n <Fragment key={field.key}>\n {isV3 && (\n <Col span={8}>\n <Form.Item noStyle shouldUpdate>\n {({ setFieldValue }) => (\n <Form.Item name={[field.name, 'game_group']}>\n <GroupSelect\n onChange={() => {\n setFieldValue(['permissions', field.name, 'game_ids'], [])\n }}\n />\n </Form.Item>\n )}\n </Form.Item>\n </Col>\n )}\n <Col span={isV3 ? 10 : 14}>\n {isV3 ? (\n <Form.Item\n noStyle\n shouldUpdate={(prevValues, nextValues) =>\n prevValues.permissions[field.name]?.game_group !==\n nextValues.permissions[field.name]?.game_group\n }\n >\n {({ getFieldValue }) => {\n const _groups = getFieldValue(['permissions', field.name, 'game_group'])\n\n return (\n <Form.Item\n name={[field.name, 'game_ids']}\n dependencies={[['permissions', field.name, 'game_group']]}\n rules={[{ required: !!_groups?.length, message: '请选择游戏' }]}\n >\n <GameSelect groups={_groups} />\n </Form.Item>\n )\n }}\n </Form.Item>\n ) : (\n <Form.Item name={[field.name, 'game_ids']} rules={[{ required: true, message: '请选择游戏' }]}>\n <GameSelect />\n </Form.Item>\n )}\n </Col>\n <Col span={isV3 ? 6 : 10}>\n <div className=\"flex\">\n <div className=\"flex-1\">\n <Form.Item\n name={[field.name, 'role']}\n rules={[\n { required: true, message: '请选择角色' },\n ({ getFieldValue }) => ({\n validator(_rule, value) {\n const items = getFieldValue('permissions') as UserModalV2FormSchema['permissions']\n const otherItems = items.filter((item, index) => !!item && index !== field.name)\n if (otherItems.some(item => item.role === value)) {\n return Promise.reject(new Error('请勿重复选择角色'))\n }\n return Promise.resolve()\n },\n }),\n ]}\n >\n <Select\n allowClear\n showSearch\n optionFilterProp=\"label\"\n loading={isRolesLoading}\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </div>\n <div className=\"w-8 text-center\">\n <Form.Item>\n <MinusCircleOutlined\n onClick={() => {\n remove(field.name)\n }}\n />\n </Form.Item>\n </div>\n </div>\n </Col>\n </Fragment>\n ))}\n {fields.length === 0 && (\n <Col span={24}>\n <Empty className=\"mb-6\" />\n </Col>\n )}\n <Col span={24}>\n <Button block type=\"dashed\" onClick={() => add()}>\n {t('global.add')}\n </Button>\n </Col>\n </Row>\n )}\n </Form.List>\n </>\n )\n\n const onConfirm = async (values: UserModalV2FormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalV2FormSchema, { id: string }>({\n title,\n width: '1000px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Text","Typography","handleWildcardSelection","value","onChange","last","WILDCARD","first","GroupSelect","props","rest","ky","useKy","data","isLoading","useQuery","queryKeys","options","group","jsx","Select","GameSelect","groups","permissionVersion","useToolkitsStore","isV3","isV4","response","useUserModal","mode","onSuccess","message","App","t","useTranslation","roles","isRolesLoading","useAllRoles","create","useCreateUser","update","useUpdateUser","isCreateMode","title","content","jsxs","Fragment","Form","Input","role","useFormModal","values","extraValues","useUserModalV2","fields","add","remove","Row","Col","field","setFieldValue","prevValues","nextValues","getFieldValue","_groups","_rule","item","index","MinusCircleOutlined","Empty","Button"],"mappings":"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","file":"chunk-WMINTIJ3.js","sourcesContent":["import { MinusCircleOutlined } from '@ant-design/icons'\nimport { useQuery } from '@tanstack/react-query'\nimport { App, Button, Col, Empty, Form, Input, Row, Select, Typography } from 'antd'\nimport { first, last } from 'lodash-es'\nimport { Fragment } from 'react'\nimport { type FC } from 'react'\n\nimport { useToolkitsStore } from '@/components'\nimport { PermissionVersion, WILDCARD } from '@/constants'\nimport { useFormModal } from '@/hooks/modal'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { queryKeys } from '@/queryKeys'\n\nimport { useAllRoles, useCreateUser, useUpdateUser } from '../services'\n\nconst { Text } = Typography\n\n/**\n * 处理通配符选择逻辑\n * - 如果最后选择的是通配符,则只保留通配符\n * - 如果第一个是通配符但又选择了其他项,则移除通配符\n */\nconst handleWildcardSelection = (value: string[], onChange?: (value: string[]) => void) => {\n if (last(value) === WILDCARD) {\n onChange?.([WILDCARD])\n } else if (first(value) === WILDCARD) {\n onChange?.(value.slice(1))\n } else {\n onChange?.(value)\n }\n}\n\ninterface GroupSelectProps {\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst GroupSelect: FC<GroupSelectProps> = props => {\n const { onChange, ...rest } = props\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameGroups,\n queryFn: () => ky.get<string[]>('/api/enum/get?enum=game_group&type=all'),\n })\n\n const options = [{ label: '通用', value: WILDCARD }].concat(\n data?.map(group => ({ label: group, value: group })) ?? [],\n )\n\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n mode=\"tags\"\n optionFilterProp=\"label\"\n loading={isLoading}\n options={options}\n onChange={value => handleWildcardSelection(value, onChange)}\n />\n )\n}\n\ninterface GameSelectProps {\n groups?: string[]\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\n/**\n * 游戏选择组件\n * - V3: 依赖 groups 参数,需要先选择项目组才能加载游戏列表\n * - V4: 不依赖 groups,直接加载所有游戏列表\n */\nconst GameSelect: FC<GameSelectProps> = props => {\n const { groups, onChange, ...rest } = props\n const ky = useKy()\n const { permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n const isV4 = permissionVersion === PermissionVersion.V4\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameIds(isV4 ? [] : (groups ?? [])),\n queryFn: () =>\n ky\n .get<{\n list: {\n id: string\n name: string\n }[]\n }>(`/api/enum/game_group/get_game_ids${isV4 ? '' : `?game_groups=${groups?.join(',')}`}`)\n .then(response => response?.list),\n enabled: isV4 || (isV3 && !!groups?.length),\n })\n\n const options = data?.map((group: { id: string; name: string }) => ({ label: group.name, value: group.id }))\n\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n optionFilterProp=\"label\"\n mode=\"tags\"\n loading={isLoading}\n options={options}\n onChange={value => handleWildcardSelection(value, onChange)}\n />\n )\n}\n\ninterface UserModalFormSchema {\n name: string\n roles: string[]\n}\n\nexport const useUserModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item label={t('global.role')} name=\"roles\">\n <Select\n allowClear\n showSearch\n mode=\"multiple\"\n loading={isRolesLoading}\n optionFilterProp=\"label\"\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (values: UserModalFormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalFormSchema, { id: string }>({\n title,\n width: '600px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n\ninterface UserModalV2FormSchema {\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n}\n\n/**\n * 用户弹窗 V2 版本(用于 V3 和 V4 权限系统)\n * - V3: 显示项目组选择,游戏列表依赖项目组\n * - V4: 隐藏项目组选择,游戏列表独立加载\n */\nexport const useUserModalV2 = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n const isCreateMode = mode === 'create'\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n const { permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.List name=\"permissions\">\n {(fields, { add, remove }) => (\n <Row gutter={8}>\n {isV3 && (\n <Col span={8} className=\"text-center mb-4\">\n <Text strong>{t('global.projectGroup')}</Text>\n </Col>\n )}\n <Col span={isV3 ? 10 : 14} className=\"text-center mb-4\">\n <Text strong>{t('global.game')}</Text>\n </Col>\n <Col span={isV3 ? 6 : 10} className=\"text-center mb-4\">\n <Text strong>{t('global.role')}</Text>\n </Col>\n {fields.map(field => (\n <Fragment key={field.key}>\n {isV3 && (\n <Col span={8}>\n <Form.Item noStyle shouldUpdate>\n {({ setFieldValue }) => (\n <Form.Item name={[field.name, 'game_group']}>\n <GroupSelect\n onChange={() => {\n setFieldValue(['permissions', field.name, 'game_ids'], [])\n }}\n />\n </Form.Item>\n )}\n </Form.Item>\n </Col>\n )}\n <Col span={isV3 ? 10 : 14}>\n {isV3 ? (\n <Form.Item\n noStyle\n shouldUpdate={(prevValues, nextValues) =>\n prevValues.permissions[field.name]?.game_group !==\n nextValues.permissions[field.name]?.game_group\n }\n >\n {({ getFieldValue }) => {\n const _groups = getFieldValue(['permissions', field.name, 'game_group'])\n\n return (\n <Form.Item\n name={[field.name, 'game_ids']}\n dependencies={[['permissions', field.name, 'game_group']]}\n rules={[{ required: !!_groups?.length, message: '请选择游戏' }]}\n >\n <GameSelect groups={_groups} />\n </Form.Item>\n )\n }}\n </Form.Item>\n ) : (\n <Form.Item name={[field.name, 'game_ids']} rules={[{ required: true, message: '请选择游戏' }]}>\n <GameSelect />\n </Form.Item>\n )}\n </Col>\n <Col span={isV3 ? 6 : 10}>\n <div className=\"flex\">\n <div className=\"flex-1\">\n <Form.Item\n name={[field.name, 'role']}\n rules={[\n { required: true, message: '请选择角色' },\n ({ getFieldValue }) => ({\n validator(_rule, value) {\n const items = getFieldValue('permissions') as UserModalV2FormSchema['permissions']\n const otherItems = items.filter((item, index) => !!item && index !== field.name)\n if (otherItems.some(item => item.role === value)) {\n return Promise.reject(new Error('请勿重复选择角色'))\n }\n return Promise.resolve()\n },\n }),\n ]}\n >\n <Select\n allowClear\n showSearch\n optionFilterProp=\"label\"\n loading={isRolesLoading}\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </div>\n <div className=\"w-8 text-center\">\n <Form.Item>\n <MinusCircleOutlined\n onClick={() => {\n remove(field.name)\n }}\n />\n </Form.Item>\n </div>\n </div>\n </Col>\n </Fragment>\n ))}\n {fields.length === 0 && (\n <Col span={24}>\n <Empty className=\"mb-6\" />\n </Col>\n )}\n <Col span={24}>\n <Button block type=\"dashed\" onClick={() => add()}>\n {t('global.add')}\n </Button>\n </Col>\n </Row>\n )}\n </Form.List>\n </>\n )\n\n const onConfirm = async (values: UserModalV2FormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalV2FormSchema, { id: string }>({\n title,\n width: '1000px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$2}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$2}from'./chunk-UCD6QQ6P.js';import {a as a$1}from'./chunk-CZVEA2JJ.js';import {a,b}from'./chunk-OLBC35WM.js';import {Modal,Form,Button,Tooltip}from'antd';import {jsx}from'react/jsx-runtime';import {useMemo,useEffect,useState,useCallback}from'react';var U=p=>{let{children:e,code:n,showLoading:l,disabled:s,config:c,...o}=p,d=n?Array.isArray(n)?n:[n]:[],{data:a,isLoading:u}=a$1(d,c),{t}=a$2();return u?jsx(Button,{loading:l,disabled:!l,...o,children:e}):typeof a=="boolean"||a&&Object.values(a).some(Boolean)?jsx(Button,{disabled:s,...o,children:e}):jsx(Tooltip,{defaultOpen:!1,title:t("global.noEntitlement"),children:jsx(Button,{disabled:!0,...o,children:e})})},S=U;var w=a();function C(p){let{content:e,onConfirm:n,afterOpen:l,afterClose:s,...c}=p,o=useMemo(()=>b(),[]),{show:d,hide:a,isOpen:u,cleanup:t}=w();useEffect(()=>()=>{t(o);},[o,t]);let P=u(o),[M,m]=useState(!1),f=typeof e=="function",O=useCallback(async()=>{d(o),await l?.();},[o,d,l]),i=useCallback(()=>{a(o);},[o,a]),r=useCallback(async()=>{i(),await s?.();},[i,s]),x=useCallback(async()=>{try{m(!0),await n?.(),i(),await s?.();}catch(b){throw console.error("Modal confirm error:",b),b}finally{m(!1);}},[n,i,s]),y=jsx(Modal,{...c,open:P,confirmLoading:M,onOk:x,onCancel:r,children:f?e({hide:i}):e});return {id:o,show:O,hide:i,modal:y}}function K(p){let{content:e,form:n,formProps:l,onConfirm:s,onSuccess:c,afterClose:o,...d}=p,[a,u]=useState({}),[t]=Form.useForm(n),P=typeof e=="function",{id:M,show:m,hide:f,modal:O}=C({...d,content:r=>jsx(Form,{...l,form:t,children:P?e(a,r):e}),onConfirm:async()=>{try{let r=await t.validateFields();await s?.(r,a),c?.(),f();}catch(r){throw console.error("Form validation or submission error:",r),r}},afterClose:()=>{u({}),o?.(t);}}),i=useCallback(r=>{let{initialValues:x,extraValues:y}=r||{};y!==void 0&&u(y),x&&t.setFieldsValue(x),m();},[t,m]);return {id:M,show:i,hide:f,modal:O}}export{S as a,w as b,C as c,K as d};//# sourceMappingURL=chunk-YQM2SZ3L.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-YQM2SZ3L.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/authButton/AuthButton.tsx","../src/hooks/modal/stores.ts","../src/hooks/modal/modal.tsx","../src/hooks/modal/formModal.tsx"],"names":["AuthButton","props","children","code","showLoading","disabled","config","restProps","codes","data","isLoading","usePermission","useTranslation","jsx","Button","Tooltip","AuthButton_default","useModalStore","createVisibilityStore","useModal","content","onConfirm","afterOpen","afterClose","modalProps","_id","useMemo","generateId","show","hide","isOpen","cleanup","useEffect","open","confirmLoading","setConfirmLoading","useState","isRenderFunction","_show","useCallback","_hide","onCancel","onOk","error","internalModal","Modal","useFormModal","form","formProps","onSuccess","internalExtraValues","setInternalExtraValues","internalForm","Form","id","modal","operation","values","showForm","options","initialValues","extraValues"],"mappings":"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","file":"chunk-LGVGDPRR.js","sourcesContent":["import type { ButtonProps } from 'antd'\nimport { Button, Tooltip } from 'antd'\nimport type { Options as KyOptions } from 'ky'\nimport type { FC, PropsWithChildren } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nexport interface AuthButtonProps extends ButtonProps {\n /** 权限码,支持单个或多个 */\n code?: string | string[]\n /** 加载时是否显示 loading 状态 */\n showLoading?: boolean\n /** 请求配置 */\n config?: KyOptions\n}\n\n/**\n * 授权按钮组件\n * 根据权限码自动控制按钮的启用/禁用状态\n * - 有权限:正常显示可点击按钮\n * - 无权限:显示禁用按钮并带有提示\n * - 加载中:显示加载状态\n */\nconst AuthButton: FC<PropsWithChildren<AuthButtonProps>> = props => {\n const { children, code, showLoading, disabled, config, ...restProps } = props\n const codes = code ? (Array.isArray(code) ? code : [code]) : []\n const { data, isLoading } = usePermission(codes, config)\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <Button loading={showLoading} disabled={!showLoading} {...restProps}>\n {children}\n </Button>\n )\n }\n\n // 只要有一个权限即可\n if (typeof data === 'boolean' || (data && Object.values(data).some(Boolean))) {\n return (\n <Button disabled={disabled} {...restProps}>\n {children}\n </Button>\n )\n }\n\n return (\n <Tooltip defaultOpen={false} title={t('global.noEntitlement')}>\n <Button disabled {...restProps}>\n {children}\n </Button>\n </Tooltip>\n )\n}\n\nexport default AuthButton\n\n","import { createVisibilityStore } from '@/utils'\n\nexport const useModalStore = createVisibilityStore()\n","import type { ModalProps } from 'antd'\nimport { Modal } from 'antd'\nimport { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { generateId } from '@/utils'\n\nimport { useModalStore } from './stores'\n\nexport interface UseModalOperation {\n hide: () => void\n}\n\nexport interface UseModalProps extends Omit<ModalProps, 'open' | 'confirmLoading' | 'onOk' | 'onCancel'> {\n content?: ReactNode | ((operation: UseModalOperation) => ReactNode)\n onConfirm?: () => void | Promise<void>\n afterOpen?: () => void | Promise<void>\n afterClose?: () => void | Promise<void>\n}\n\nexport function useModal(props: UseModalProps) {\n const { content, onConfirm, afterOpen, afterClose, ...modalProps } = props\n\n const _id = useMemo(() => generateId(), [])\n const { show, hide, isOpen, cleanup } = useModalStore()\n\n // 组件销毁时清理 ID\n useEffect(() => {\n return () => {\n cleanup(_id)\n }\n }, [_id, cleanup])\n\n const open = isOpen(_id)\n const [confirmLoading, setConfirmLoading] = useState(false)\n const isRenderFunction = typeof content === 'function'\n\n const _show = useCallback(async () => {\n show(_id)\n await afterOpen?.()\n }, [_id, show, afterOpen])\n\n const _hide = useCallback(() => {\n hide(_id)\n }, [_id, hide])\n\n const onCancel: ModalProps['onCancel'] = useCallback(async () => {\n _hide()\n await afterClose?.()\n }, [_hide, afterClose])\n\n const onOk = useCallback(async () => {\n try {\n setConfirmLoading(true)\n await onConfirm?.()\n _hide()\n await afterClose?.()\n } catch (error) {\n console.error('Modal confirm error:', error)\n throw error\n } finally {\n setConfirmLoading(false)\n }\n }, [onConfirm, _hide, afterClose])\n\n const internalModal = (\n <Modal {...modalProps} open={open} confirmLoading={confirmLoading} onOk={onOk} onCancel={onCancel}>\n {isRenderFunction ? content({ hide: _hide }) : content}\n </Modal>\n )\n\n return {\n id: _id,\n show: _show,\n hide: _hide,\n modal: internalModal,\n }\n}\n","import type { FormInstance, FormProps } from 'antd'\nimport { Form } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { ReactNode } from 'react'\nimport { useCallback, useState } from 'react'\n\nimport type { RecursivePartial } from '@/types'\n\nimport { useModal, type UseModalOperation, type UseModalProps } from './modal'\n\nexport interface ShowFormOptions<Values extends AnyObject, ExtraValues> {\n initialValues?: RecursivePartial<Values>\n extraValues?: ExtraValues\n}\n\nexport interface UseFormModalProps<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>\n extends Omit<UseModalProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {\n formProps?: Omit<FormProps, 'form'>\n form?: FormInstance<Values>\n content?: ReactNode | ((extraValues: ExtraValues, operation: UseModalOperation) => ReactNode)\n onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>\n onSuccess?: () => void\n afterClose?: (form: FormInstance<Values>) => void\n}\n\nexport interface UseFormModalReturn<Values extends AnyObject, ExtraValues> {\n id: number\n show: (options?: ShowFormOptions<Values, ExtraValues>) => void\n hide: () => void\n modal: ReactNode\n}\n\nexport function useFormModal<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>(\n props: UseFormModalProps<Values, ExtraValues>,\n): UseFormModalReturn<Values, ExtraValues> {\n const { content, form, formProps, onConfirm, onSuccess, afterClose, ...modalProps } = props\n const [internalExtraValues, setInternalExtraValues] = useState<ExtraValues>({} as ExtraValues)\n const [internalForm] = Form.useForm<Values>(form)\n\n const isRenderFunction = typeof content === 'function'\n\n const { id, show, hide, modal } = useModal({\n ...modalProps,\n content: operation => (\n <Form {...formProps} form={internalForm}>\n {isRenderFunction ? content(internalExtraValues, operation) : content}\n </Form>\n ),\n onConfirm: async () => {\n try {\n const values = await internalForm.validateFields()\n await onConfirm?.(values, internalExtraValues)\n onSuccess?.()\n hide()\n } catch (error) {\n console.error('Form validation or submission error:', error)\n throw error\n }\n },\n afterClose: () => {\n setInternalExtraValues({} as ExtraValues)\n afterClose?.(internalForm)\n },\n })\n\n const showForm = useCallback(\n (options?: ShowFormOptions<Values, ExtraValues>) => {\n const { initialValues, extraValues } = options || {}\n\n if (extraValues !== undefined) {\n setInternalExtraValues(extraValues)\n }\n\n if (initialValues) {\n internalForm.setFieldsValue(initialValues)\n }\n\n show()\n },\n [internalForm, show],\n )\n\n return {\n id,\n show: showForm,\n hide,\n modal,\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/authButton/AuthButton.tsx","../src/hooks/modal/stores.ts","../src/hooks/modal/modal.tsx","../src/hooks/modal/formModal.tsx"],"names":["AuthButton","props","children","code","showLoading","disabled","config","restProps","codes","data","isLoading","usePermission","useTranslation","jsx","Button","Tooltip","AuthButton_default","useModalStore","createVisibilityStore","useModal","content","onConfirm","afterOpen","afterClose","modalProps","_id","useMemo","generateId","show","hide","isOpen","cleanup","useEffect","open","confirmLoading","setConfirmLoading","useState","isRenderFunction","_show","useCallback","_hide","onCancel","onOk","error","internalModal","Modal","useFormModal","form","formProps","onSuccess","internalExtraValues","setInternalExtraValues","internalForm","Form","id","modal","operation","values","showForm","options","initialValues","extraValues"],"mappings":"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","file":"chunk-YQM2SZ3L.js","sourcesContent":["import type { ButtonProps } from 'antd'\nimport { Button, Tooltip } from 'antd'\nimport type { Options as KyOptions } from 'ky'\nimport type { FC, PropsWithChildren } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nexport interface AuthButtonProps extends ButtonProps {\n /** 权限码,支持单个或多个 */\n code?: string | string[]\n /** 加载时是否显示 loading 状态 */\n showLoading?: boolean\n /** 请求配置 */\n config?: KyOptions\n}\n\n/**\n * 授权按钮组件\n * 根据权限码自动控制按钮的启用/禁用状态\n * - 有权限:正常显示可点击按钮\n * - 无权限:显示禁用按钮并带有提示\n * - 加载中:显示加载状态\n */\nconst AuthButton: FC<PropsWithChildren<AuthButtonProps>> = props => {\n const { children, code, showLoading, disabled, config, ...restProps } = props\n const codes = code ? (Array.isArray(code) ? code : [code]) : []\n const { data, isLoading } = usePermission(codes, config)\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <Button loading={showLoading} disabled={!showLoading} {...restProps}>\n {children}\n </Button>\n )\n }\n\n // 只要有一个权限即可\n if (typeof data === 'boolean' || (data && Object.values(data).some(Boolean))) {\n return (\n <Button disabled={disabled} {...restProps}>\n {children}\n </Button>\n )\n }\n\n return (\n <Tooltip defaultOpen={false} title={t('global.noEntitlement')}>\n <Button disabled {...restProps}>\n {children}\n </Button>\n </Tooltip>\n )\n}\n\nexport default AuthButton\n\n","import { createVisibilityStore } from '@/utils'\n\nexport const useModalStore = createVisibilityStore()\n","import type { ModalProps } from 'antd'\nimport { Modal } from 'antd'\nimport { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { generateId } from '@/utils'\n\nimport { useModalStore } from './stores'\n\nexport interface UseModalOperation {\n hide: () => void\n}\n\nexport interface UseModalProps extends Omit<ModalProps, 'open' | 'confirmLoading' | 'onOk' | 'onCancel'> {\n content?: ReactNode | ((operation: UseModalOperation) => ReactNode)\n onConfirm?: () => void | Promise<void>\n afterOpen?: () => void | Promise<void>\n afterClose?: () => void | Promise<void>\n}\n\nexport function useModal(props: UseModalProps) {\n const { content, onConfirm, afterOpen, afterClose, ...modalProps } = props\n\n const _id = useMemo(() => generateId(), [])\n const { show, hide, isOpen, cleanup } = useModalStore()\n\n // 组件销毁时清理 ID\n useEffect(() => {\n return () => {\n cleanup(_id)\n }\n }, [_id, cleanup])\n\n const open = isOpen(_id)\n const [confirmLoading, setConfirmLoading] = useState(false)\n const isRenderFunction = typeof content === 'function'\n\n const _show = useCallback(async () => {\n show(_id)\n await afterOpen?.()\n }, [_id, show, afterOpen])\n\n const _hide = useCallback(() => {\n hide(_id)\n }, [_id, hide])\n\n const onCancel: ModalProps['onCancel'] = useCallback(async () => {\n _hide()\n await afterClose?.()\n }, [_hide, afterClose])\n\n const onOk = useCallback(async () => {\n try {\n setConfirmLoading(true)\n await onConfirm?.()\n _hide()\n await afterClose?.()\n } catch (error) {\n console.error('Modal confirm error:', error)\n throw error\n } finally {\n setConfirmLoading(false)\n }\n }, [onConfirm, _hide, afterClose])\n\n const internalModal = (\n <Modal {...modalProps} open={open} confirmLoading={confirmLoading} onOk={onOk} onCancel={onCancel}>\n {isRenderFunction ? content({ hide: _hide }) : content}\n </Modal>\n )\n\n return {\n id: _id,\n show: _show,\n hide: _hide,\n modal: internalModal,\n }\n}\n","import type { FormInstance, FormProps } from 'antd'\nimport { Form } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { ReactNode } from 'react'\nimport { useCallback, useState } from 'react'\n\nimport type { RecursivePartial } from '@/types'\n\nimport { useModal, type UseModalOperation, type UseModalProps } from './modal'\n\nexport interface ShowFormOptions<Values extends AnyObject, ExtraValues> {\n initialValues?: RecursivePartial<Values>\n extraValues?: ExtraValues\n}\n\nexport interface UseFormModalProps<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>\n extends Omit<UseModalProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {\n formProps?: Omit<FormProps, 'form'>\n form?: FormInstance<Values>\n content?: ReactNode | ((extraValues: ExtraValues, operation: UseModalOperation) => ReactNode)\n onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>\n onSuccess?: () => void\n afterClose?: (form: FormInstance<Values>) => void\n}\n\nexport interface UseFormModalReturn<Values extends AnyObject, ExtraValues> {\n id: number\n show: (options?: ShowFormOptions<Values, ExtraValues>) => void\n hide: () => void\n modal: ReactNode\n}\n\nexport function useFormModal<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>(\n props: UseFormModalProps<Values, ExtraValues>,\n): UseFormModalReturn<Values, ExtraValues> {\n const { content, form, formProps, onConfirm, onSuccess, afterClose, ...modalProps } = props\n const [internalExtraValues, setInternalExtraValues] = useState<ExtraValues>({} as ExtraValues)\n const [internalForm] = Form.useForm<Values>(form)\n\n const isRenderFunction = typeof content === 'function'\n\n const { id, show, hide, modal } = useModal({\n ...modalProps,\n content: operation => (\n <Form {...formProps} form={internalForm}>\n {isRenderFunction ? content(internalExtraValues, operation) : content}\n </Form>\n ),\n onConfirm: async () => {\n try {\n const values = await internalForm.validateFields()\n await onConfirm?.(values, internalExtraValues)\n onSuccess?.()\n hide()\n } catch (error) {\n console.error('Form validation or submission error:', error)\n throw error\n }\n },\n afterClose: () => {\n setInternalExtraValues({} as ExtraValues)\n afterClose?.(internalForm)\n },\n })\n\n const showForm = useCallback(\n (options?: ShowFormOptions<Values, ExtraValues>) => {\n const { initialValues, extraValues } = options || {}\n\n if (extraValues !== undefined) {\n setInternalExtraValues(extraValues)\n }\n\n if (initialValues) {\n internalForm.setFieldsValue(initialValues)\n }\n\n show()\n },\n [internalForm, show],\n )\n\n return {\n id,\n show: showForm,\n hide,\n modal,\n }\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=createMenuItem-
|
|
1
|
+
import {a}from'./chunk-2MBSA3L6.js';import {j,f}from'./chunk-OLBC35WM.js';import {Editor}from'@monaco-editor/react';import {App,Form,Card,Input,Switch,InputNumber,Button}from'antd';import {useNavigate}from'react-router-dom';import {jsx,jsxs}from'react/jsx-runtime';var y=j(()=>{let{message:p}=App.useApp(),[c]=Form.useForm(),o=useNavigate(),{mutate:I}=a();return jsx(Card,{title:"\u521B\u5EFA\u83DC\u5355\u9879",children:jsxs(Form,{scrollToFirstError:!0,form:c,labelCol:{flex:"120px"},initialValues:{is_common:!1,is_model:!1,order:0},onFinish:async d=>{let{permissions:s,front_route:f$1,...F}=d;await I({...F,front_route:f+f$1,permissions:s?JSON.parse(s):void 0}),p.success("\u521B\u5EFA\u6210\u529F",.8,()=>o("..",{relative:"route"}));},children:[jsx(Form.Item,{label:"\u83DC\u5355\u9879\u540D\u79F0",name:"category",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"\u524D\u7AEF\u8DEF\u7531",name:"front_route",rules:[{required:!0}],children:jsx(Input,{prefix:f})}),jsx(Form.Item,{label:"\u6A21\u677F\u540D\u79F0",name:"model_name",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"Is Common",name:"is_common",rules:[{required:!0}],valuePropName:"checked",children:jsx(Switch,{})}),jsx(Form.Item,{label:"Order",name:"order",children:jsx(InputNumber,{className:"w-full"})}),jsx(Form.Item,{label:"\u63A5\u53E3\u89C4\u5219",name:"permissions",children:jsx(Editor,{theme:"vs-dark",height:"300px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Schema",name:"scheme",rules:[{required:!0}],children:jsx(Editor,{theme:"vs-dark",height:"600px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Ext",name:"ext",children:jsx(Input.TextArea,{rows:5})}),jsx(Form.Item,{children:jsxs("div",{className:"flex justify-center gap-8",children:[jsx(Button,{type:"primary",htmlType:"submit",children:"\u63D0\u4EA4"}),jsx(Button,{onClick:()=>{o("..",{relative:"path"});},children:"\u53D6\u6D88"})]})})]})})},{isGlobal:!0}),M=y;export{M as default};//# sourceMappingURL=createMenuItem-4NN325FZ.js.map
|
|
2
|
+
//# sourceMappingURL=createMenuItem-4NN325FZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/menu/pages/createMenuItem/index.tsx"],"names":["CreateMenuItem","withContext","message","App","form","Form","navigate","useNavigate","createMenu","useCreateMenu","jsx","Card","jsxs","values","permissions","front_route","rest","FRONTEND_ROUTE_PREFIX","Input","Switch","InputNumber","Editor","Button","createMenuItem_default"],"mappings":"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","file":"createMenuItem-
|
|
1
|
+
{"version":3,"sources":["../src/modules/menu/pages/createMenuItem/index.tsx"],"names":["CreateMenuItem","withContext","message","App","form","Form","navigate","useNavigate","createMenu","useCreateMenu","jsx","Card","jsxs","values","permissions","front_route","rest","FRONTEND_ROUTE_PREFIX","Input","Switch","InputNumber","Editor","Button","createMenuItem_default"],"mappings":"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","file":"createMenuItem-4NN325FZ.js","sourcesContent":["import { Editor } from '@monaco-editor/react'\nimport { App, Button, Card, Form, Input, InputNumber, Switch } from 'antd'\nimport { useNavigate } from 'react-router-dom'\n\nimport { withContext } from '@/components/toolkitsProvider'\nimport { FRONTEND_ROUTE_PREFIX } from '@/constants'\nimport type { MenuListItem } from '@/types'\n\nimport { useCreateMenu } from '../../services'\n\ntype FormSchema = Omit<MenuListItem, 'id' | 'permissions'> & { permissions: string }\n\nconst CreateMenuItem = withContext(\n () => {\n const { message } = App.useApp()\n const [form] = Form.useForm<FormSchema>()\n const navigate = useNavigate()\n const { mutate: createMenu } = useCreateMenu()\n\n const onFinish = async (values: FormSchema) => {\n const { permissions, front_route, ...rest } = values\n await createMenu({\n ...rest,\n front_route: FRONTEND_ROUTE_PREFIX + front_route,\n permissions: permissions ? JSON.parse(permissions) : undefined,\n })\n message.success('创建成功', 0.8, () => navigate('..', { relative: 'route' }))\n }\n\n return (\n <Card title=\"创建菜单项\">\n <Form\n scrollToFirstError\n form={form}\n labelCol={{ flex: '120px' }}\n initialValues={{ is_common: false, is_model: false, order: 0 }}\n onFinish={onFinish}\n >\n <Form.Item label=\"菜单项名称\" name=\"category\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"前端路由\" name=\"front_route\" rules={[{ required: true }]}>\n <Input prefix={FRONTEND_ROUTE_PREFIX} />\n </Form.Item>\n <Form.Item label=\"模板名称\" name=\"model_name\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"Is Common\" name=\"is_common\" rules={[{ required: true }]} valuePropName=\"checked\">\n <Switch />\n </Form.Item>\n <Form.Item label=\"Order\" name=\"order\">\n <InputNumber className=\"w-full\" />\n </Form.Item>\n <Form.Item label=\"接口规则\" name=\"permissions\">\n <Editor\n theme=\"vs-dark\"\n height=\"300px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Schema\" name=\"scheme\" rules={[{ required: true }]}>\n <Editor\n theme=\"vs-dark\"\n height=\"600px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Ext\" name=\"ext\">\n <Input.TextArea rows={5} />\n </Form.Item>\n <Form.Item>\n <div className=\"flex justify-center gap-8\">\n <Button type=\"primary\" htmlType=\"submit\">\n 提交\n </Button>\n <Button\n onClick={() => {\n navigate('..', { relative: 'path' })\n }}\n >\n 取消\n </Button>\n </div>\n </Form.Item>\n </Form>\n </Card>\n )\n },\n { isGlobal: true },\n)\n\nexport default CreateMenuItem\n"]}
|