@flatbiz/antd 3.0.11 → 3.0.13

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/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/dialog-drawer.tsx","@flatbiz/antd/src/dialog/dialog-modal.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/tag-wrapper/index.tsx","@flatbiz/antd/src/table-column/render.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './1_root.less';\nimport './2_base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name: string) => {\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Menu, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'overlay'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [visible, setVisible] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setVisible(true);\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n result.finally(() => {\n setVisible(false);\n setLoading(false);\n });\n return;\n }\n setVisible(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n void item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <Button\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </Button>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n setVisible(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n visible={visible}\n okButtonProps={{\n loading,\n }}\n >\n <Button\n size=\"small\"\n {...otherProps}\n onClick={onConfirmtTriggerClick}\n type={buttonType}\n danger\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItems.push(confirm);\n } else {\n menuItems.push(nromal);\n }\n });\n\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n overlay={<Menu items={menuItems} />}\n onVisibleChange={(_visible) => {\n console.log(visible);\n if (!_visible) {\n setVisible(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPromise, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中使用ReactElement类型\n * 1. 一般为antd Button组件,可设置type=link,会有设置的hover效果\n * 2. 任何permission、confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\n}\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const viewList = useMemo(() => {\n return props.operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n const has = item && !item.hidden && !item.isFold;\n if (item && item.permission) {\n return hasPermission(item.permission) && has;\n }\n return has;\n }) as ButtonOperateItem[];\n }, [props.operateList]);\n\n const foldList = useMemo(() => {\n const filterList = props.operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n const has = item && !item.hidden && item.isFold;\n if (item && item.permission) {\n return hasPermission(item.permission) && has;\n }\n return has;\n }) as ButtonOperateItem[];\n return [...filterList].map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\n }, [props.operateList]);\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={<Divider type=\"vertical\" />}\n size={props.size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n if (isValidElement(item)) return item;\n const {\n text,\n color,\n onClick,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return null;\n if (permission && !hasPermission(permission)) return null;\n const newStyle = color && !otherProps.disabled ? { color, ...style } : style;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onVisibleChange={(_visible) => {\n if (!_visible) {\n setLoading(false);\n }\n }}\n >\n <Button {...otherProps} onClick={undefined} type={type} danger style={newStyle}>\n {text}\n </Button>\n </Popconfirm>\n );\n }\n return (\n <Button {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </Button>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick: (e) => Promise<void> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n\n const debounceDuration = isUndefinedOrNull(props.debounceDuration) ? 500 : props.debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDuration);\n\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value: string | number, selectedList: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持多选\n * 2. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 3. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const { serviceConfig, modelKey, fieldNames, isDynamicLoad, requestMessageConfig, ...otherProps } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n />\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return moment(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment, { Moment } from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<moment.Moment>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [Moment | null, Moment | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\n\nexport type FormItemNamePath = string | number | Array<string | number>;\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: Omit<DateRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_date_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const DateRangePickerWrapperFormItem = (props: DateRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","export const bodyAppendDivElement = () => {\n const div = document.createElement('div');\n const id = `id_${Date.now()}`;\n div.setAttribute('id', id);\n document.body.append(div);\n return {\n divElement: div,\n elementId: id,\n };\n};\n\nexport const removeBodyChild = (element: string) => {\n try {\n document.body.removeChild(document.querySelector(element) as Node);\n } catch (error) {\n //\n }\n};\n\nexport interface BodyAppendDivElementProps {\n divElement: HTMLDivElement;\n elementId: string;\n}\n","import { isPromise } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, ConfigProvider, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n width = 600,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response.then(onClose).finally(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n <Button {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </Button>\n <Button type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle} loading={loading}>\n {okText || '提交'}\n </Button>\n </Space>\n );\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Drawer\n maskClosable={false}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n extra={operatePosition === 'header' ? operateGroup : null}\n footer={operatePosition === 'footer' ? operateGroup : null}\n {...otherProps}\n visible={visible}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. operatePosition='footer' 设置footer后 onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * 1. operatePosition='header' 设置extra后 onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { isPromise } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n className,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response.then(onClose).finally(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n centered={true}\n destroyOnClose\n {...otherProps}\n className={classNames('dialog-modal', className)}\n visible={visible}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationOldProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * @deprecated 请使用【dialogDrawer】组件替换\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper = (props: DrawerFormProps) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n\nexport type SelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getSelectorList: () => TPlainObject[];\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 2. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\n * 2. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = (props) => {\n const {\n serviceConfig,\n showAllOption,\n onSelectorListChange,\n onSelectorListAllChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList: outerSelectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const serviceRequestParams = serviceConfig?.params;\n const hasServiceRequestParams = useMemo(() => {\n return serviceRequestParams && Object.keys(serviceRequestParams).length > 0;\n }, [serviceRequestParams]);\n\n const [loading, setLoading] = useState(false);\n // 将params排序后转成字符串\n const serviceRequestParamsStringify = useMemo(() => {\n try {\n if (hasServiceRequestParams) {\n const sortDataStringify = JSON.stringify(json.sort(serviceRequestParams));\n if (sortDataStringify === '{}') {\n return undefined;\n }\n return sortDataStringify;\n }\n } catch (error) {}\n return undefined;\n }, [hasServiceRequestParams, serviceRequestParams]);\n\n const prevServiceRequestParamsStringify = usePrevious(serviceRequestParamsStringify);\n\n const isSearch = operateType === 'search';\n\n const hasOuterSelectorList = props.hasOwnProperty('selectorList');\n\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n\n const requestPreKey = `__selector_wraapper_request_progress_${modelKey}`;\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = useMemo(() => {\n return { label: 'label', value: 'value', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames } as LabelValueItem<string>;\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n [optionsItemLabelField]: isTrue ? '全部' : showAllOption.label,\n [optionsItemValueField]: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [optionsItemLabelField, optionsItemValueField, showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple', 'tags']);\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, labelInValueFieldNamesMerge.value);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, labelInValueFieldNamesMerge, value]);\n\n const stateSelectorList = useMemo(() => {\n if (isSearch) {\n return arrayFind(state.requestRespCacheData, 'search', 'request')?.response;\n }\n return state.requestRespCacheData.find((item) => item.request === serviceRequestParamsStringify)\n ?.response;\n }, [isSearch, serviceRequestParamsStringify, state.requestRespCacheData]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig?.onRequestResultAdapter\n ? serviceConfig?.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = async (inputValue?: string, searchId?: string | number) => {\n try {\n setLoading(true);\n const params = serviceRequestParams || {};\n void actions.changeRequestStatus('request-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await serviceConfig?.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n\n if (isSearch) {\n void actions.onSearchRequestRespHandle(respAdapterData);\n } else {\n void actions.onRequestRespHandle({\n respData: respAdapterData,\n requestStringify: serviceRequestParamsStringify,\n });\n }\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n // void message.error(error.message || '获取数据异常');\n onSelectorRequestError?.(error);\n }\n };\n\n const serviceRequest = {\n hasProcessRequest: () => {\n const process = window[requestPreKey];\n if (serviceRequestParamsStringify) {\n if (isArray(process) && process.includes(serviceRequestParamsStringify)) return true;\n } else {\n return !!process;\n }\n return false;\n },\n setProcessRequestStatus: () => {\n if (serviceRequestParamsStringify) {\n const cacheList = (window[requestPreKey] || []) as string;\n if (!cacheList.includes(serviceRequestParamsStringify)) {\n window[requestPreKey] = cacheList.concat(serviceRequestParamsStringify);\n }\n } else {\n window[requestPreKey] = [];\n }\n },\n };\n\n const prevRequestHandle = () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n\n // 判断相同的 params 是否已经在请求数据中,避免重复请求\n if (serviceRequest.hasProcessRequest()) {\n return;\n }\n serviceRequest.setProcessRequestStatus();\n // 去调用接口\n void startDataSourceRequest();\n };\n\n useEffectCustom(() => {\n if (hasOuterSelectorList || isSearch) return;\n if (hasServiceRequestParams) {\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys;\n if (requiredParamsKeys && requiredParamsKeys.length > 0) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return serviceRequestParams[key] === '' || isUndefinedOrNull(serviceRequestParams[key]);\n });\n if (isEmpty) {\n if (stateSelectorList && stateSelectorList.length > 0) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n window[requestPreKey] = undefined;\n void actions.resetSelectorList({\n selectorList: [],\n requestStatus: 'no-dependencies-params',\n });\n } else {\n void actions.changeRequestStatus('no-dependencies-params');\n }\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n props.onChange?.(undefined);\n }\n return;\n }\n }\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n if (stateSelectorList === undefined) {\n prevRequestHandle();\n }\n }, [serviceRequestParams]);\n\n hooks.useUpdateEffect(() => {\n if (state.setSelectorListCount > 1) {\n // 第一次不调用\n onSelectorListChange?.(stateSelectorList);\n }\n onSelectorListAllChange?.(stateSelectorList);\n }, [state.setSelectorListCount]);\n\n useEffectCustom(() => {\n if (hasOuterSelectorList) {\n void actions.resetSelectorList({\n selectorList: outerSelectorList || [],\n });\n }\n }, [outerSelectorList]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectorList({\n selectorList: [],\n });\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n\n if (labelInValue) {\n const { label, value } = labelInValueFieldNamesMerge;\n const labelInValueList = selectedList.map((item) => {\n return {\n [label]: item[optionsItemLabelField],\n [value]: item[optionsItemValueField],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig['value']) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n if (state.requestStatus === 'request-error' || state.requestStatus === 'request-progress') {\n return [];\n }\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList || []);\n }, [allOptionConfig, state.requestStatus, stateSelectorList]);\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {(selectorAllList || []).map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid?: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n setUploadList(\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n };\n }),\n );\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = (\n props.onRequestResultAdapter ? props.onRequestResultAdapter(respData.data) : respData.data\n ) as TPlainObject;\n result[fieldNames.uid] = result[fieldNames.uid] || info.file.uid;\n result[fieldNames.name] = result[fieldNames.name] || info.file.name;\n if (props.maxCount === 1) {\n onChange?.([result]);\n } else {\n onChange?.((value || []).concat(result));\n }\n } else {\n if (onUploadError) {\n onUploadError(respData.message as string);\n } else {\n void message.error((respData.message as string) || '上传操作失败...');\n }\n fileList[fileList.length - 1] = {\n ...fileList[fileList.length - 1],\n status: 'error',\n };\n }\n props.onUploadChange?.(info);\n // 此处不执行 setUploadList([...fileList]);\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n }) => ReactElement | null;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, renderMiddleware, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n const tableRowName = [...props.name, record.name];\n const completeName = columnItem.dataIndex ? [...tableRowName, columnItem.dataIndex] : tableRowName;\n const customRender = renderMiddleware?.({\n name: completeName,\n tableRowIndex: record.name,\n operation: record.operation,\n tableRowName,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","export const editorTemplates = {\n block: {\n title: '块级卡片',\n description: '块级卡片',\n content: `<div style=\"{$varStyle} background-color:var(--editor-card-bgcolor);padding: 5px 20px;border-radius: 2px;color:#555\">\n <p>#自定义内容</p>\n </div><p></p>`,\n },\n primary_p: {\n title: 'primary_p',\n description: 'primary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-primary)\">#自定义内容</p><p></p>',\n },\n secondary_p: {\n title: 'secondary_p',\n description: 'secondary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-secondary)\">#自定义内容</p><p></p>',\n },\n warning_p: {\n title: 'warning_p',\n description: 'warning色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-warning)\">#自定义内容</p><p></p>',\n },\n danger_p: {\n title: 'danger_p',\n description: 'danger色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-danger)\">#自定义内容</p><p></p>',\n },\n success_p: {\n title: 'success_p',\n description: 'success色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-success)\">#自定义内容</p><p></p>',\n },\n p: {\n title: 'p',\n description: 'p',\n content: '<p></p>',\n },\n};\n","export type varStyles =\n | '--fa-color-primary'\n | '--fa-color-secondary'\n | '--fa-color-warning'\n | '--fa-color-danger'\n | '--fa-color-success'\n | '--editor-card-bgcolor';\n\nexport const defaultVarStyle: Record<varStyles, string> = {\n '--fa-color-primary': '#1677ff',\n '--fa-color-secondary': '#1677ff',\n '--fa-color-warning': '#ff8f1f',\n '--fa-color-danger': '#ff3141',\n '--fa-color-success': '#00b578',\n '--editor-card-bgcolor': '#f5f5f9',\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties, useMemo } from 'react';\nimport './style.less';\nimport { editorTemplates } from './template';\nimport { defaultVarStyle, varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n const varStyleString = useMemo(() => {\n const merge = { ...defaultVarStyle, ...props.varStyle };\n let varStyleString = '';\n Object.keys(merge).map((key) => {\n varStyleString += `${key}:${merge[key]};`;\n });\n return varStyleString;\n }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n templates: [\n editorTemplates.block,\n editorTemplates.primary_p,\n editorTemplates.secondary_p,\n editorTemplates.warning_p,\n editorTemplates.danger_p,\n editorTemplates.success_p,\n editorTemplates.p,\n ],\n template_replace_values: {\n varStyle: varStyleString,\n },\n template_preview_replace_values: {\n varStyle: varStyleString,\n },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { useEffect, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type FileUploadItem = {\n fileKey: string;\n fileName: string;\n};\n\ntype AntdFileUploadItem = {\n uid: string;\n name: string;\n fileKey: string;\n};\n\nexport type FileUploadProps = {\n onChange?: (value?: FileUploadItem[]) => void;\n onUploadError?: (message?: string) => void;\n value?: FileUploadItem[];\n onPreview?: (item: FileUploadItem) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n fileKey?: string;\n fileName?: string;\n };\n} & Omit<UploadProps, 'onChange' | 'fileList' | 'onPreview'>;\n\n/**\n * 文件上传,结合Form使用最佳\n * @deprecated 请使用【UploadWrapper】组件替换\n * ```\n * 接口返回结构:\n * formData上传接口必须返回fileKey值\n * {\n * code: '0000',\n * data: {\n * fileKey: '预览文件对应的fileKey'\n * }\n * }\n * 可通过fieldNames配置接口返回值属性名称映射\n * ```\n * ```\n * 最佳使用方式:\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <FileUpload action={uploadUrl} onPreview={onPreviewFile}>\n * <Button type=\"primary\">选择文件导入</Button>\n * </FileUpload>\n * </Form.Item>\n * ```\n *\n */\nexport const FileUpload = (props: FileUploadProps) => {\n useEffectCustom(() => {\n console.error('@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换');\n }, []);\n\n const { onChange, onUploadError, onPreview, value, ...otherProps } = props;\n const [uploadValue, setUploadValue] = useState<AntdFileUploadItem[]>([]);\n const fieldNames = extend(\n {\n fileKey: 'fileKey',\n fileName: 'fileName',\n },\n props.fieldNames,\n ) as FileUploadItem;\n\n useEffect(() => {\n if (value && isArray(value)) {\n setUploadValue(\n value.map((item) => {\n return {\n uid: item['uid'] || item[fieldNames.fileKey],\n name: item[fieldNames.fileName],\n fileKey: item[fieldNames.fileKey],\n url: item[fieldNames.fileKey],\n thumbUrl: item[fieldNames.fileKey],\n };\n }),\n );\n }\n }, [fieldNames.fileKey, fieldNames.fileName, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = respData.data || {};\n const uploadItem = {\n uid: info.file.uid,\n fileName: result[fieldNames.fileName] || (info.file.name as string),\n fileKey: result[fieldNames.fileKey],\n } as FileUploadItem;\n const respValue = (value || []).concat(uploadItem);\n onChange?.(respValue as unknown as FileUploadItem[]);\n } else {\n onUploadError?.(respData.message as string);\n }\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item['uid'] || item[fieldNames.fileKey];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n onUploadError?.();\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadValue([...info.fileList]);\n props.onUploadChange?.(info);\n });\n\n const onUploadPreview = hooks.useCallbackRef((file) => {\n onPreview?.({\n fileKey: file[fieldNames.fileKey],\n fileName: file[fieldNames.fileName],\n });\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n onPreview={onUploadPreview}\n fileList={uploadValue}\n className={classNames('v-file-upload', otherProps.className)}\n >\n {props.children}\n </Upload>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={props.style}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={15}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n return (\n <Tooltip title={props.hoverTips}>\n <div\n className={classNames('icon-wrapper', `icon-wrapper-${props.size || 'middle'}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </div>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { ModalOperation, ModalOperationProps } from './modal-operation';\nimport './style.less';\n\nexport type ModalFormProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n // 设置了 ModalProps footer属性后,operationProps配置将失效\n operationProps?: ModalOperationProps;\n footer?: null | React.ReactNode;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * @deprecated 请使用【dialogModal】组件替换\n * ```\n */\nexport const ModalWraper = (props: ModalFormProps) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n return (\n <Modal\n className={classNames('modal-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <div className=\"modal-wraper-content\">\n {children}\n {pageLoading && <PageLoader />}\n </div>\n {footer !== null && (\n <div className=\"modal-wraper-content-footer\">\n {footer ? footer : <ModalOperation {...operationProps} />}\n </div>\n )}\n </Modal>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n/**\n * 组件单词写错,请输入\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWraperModel('key值').useStore();\n * ```\n */\nexport const createModalWraperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","export const Page404 = () => {\n return <div className=\"v-404\">404</div>;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const titleClassName = classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n });\n\n const style = extend({}, props.style, { padding: props.padding, width: props.width });\n\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { arrayFindByLoosely, isUndefinedOrNull, LabelValueItem, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TTagItem = { label: string; value: string | number | boolean; color?: string };\n\nexport type TagWrapperProps = {\n labelValueList: LabelValueItem<string | number | boolean>[];\n colorList?: { value: string | number | boolean; color: string }[];\n value?: TTagItem['value'];\n // 是否强制匹配\n forceMatch?: boolean;\n};\n\n/**\n * 通过配置显示Tag效果\n * @param props\n * @returns\n * ```\n * forceMatch: 是否强制匹配(默认值true)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n *\n * 例如1:(与value匹配)\n * <TagWrapper labelValueList=[{ label: '启用', value: 1 }] colorList=[{ value: 1, color: 'red' }] value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 例如2:(与label匹配)\n * <TagWrapper labelValueList=[{ label: '启用', value: 1 }] value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 例如3:(未匹配到,显示value值)\n * <TagWrapper labelValueList=[{ label: '启用', value: 1 }] value=\"审核中\" />\n * =>\n * 审核中\n * ```\n */\nexport const TagWrapper: FC<TagWrapperProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value) || !props.labelValueList) {\n return undefined;\n }\n\n const target = props.labelValueList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n if (props.colorList) {\n const colorTarget = arrayFindByLoosely(props.colorList, target.value, 'value');\n if (colorTarget) {\n return { color: colorTarget.color, label: target.label };\n }\n }\n return { label: target.label };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: props.value };\n }, [props.colorList, props.forceMatch, props.labelValueList, props.value]);\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagWrapper.defaultProps = {\n forceMatch: true,\n};\n","import { isNumber, isObject, isPlainObject } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Tooltip } from 'antd';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagWrapper, TagWrapperProps } from '../tag-wrapper';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number) => {\n return (value: string | number) => {\n if (isUndefinedOrNull(value)) return;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny) => ButtonOperateProps) => {\n return (_value: string | number, record) => {\n const operateProps = options(record);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType) => {\n return (value: string | number) => {\n try {\n return flatbizDate.format(value, dateFormatType);\n } catch (error) {\n return value;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagWrapperProps['labelValueList'],\n colorList?: TagWrapperProps['colorList'],\n) => {\n return (value: string | number) => {\n return (\n <TagWrapper labelValueList={selectorList} colorList={colorList} value={value} forceMatch={false} />\n );\n };\n};\n\nconst tableColumnObjectRender = (key: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value;\n };\n};\n\nexport const tableCellRender = {\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度20个【字节】\n * ```\n * showMaxNumber: 显示最大【字节】长度\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n const isMultiple = otherProps.treeCheckable;\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n dropdownClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.dropdownClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={renderValueList as any}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: any[]): any[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","useState","visible","_useState","setVisible","loading","_useState2","setLoading","onConfirmtTriggerClick","_hooks","useCallbackRef","event","stopPropagation","onConfirm","item","result","onClick","_isPromise","finally","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","_extends","buttonType","nromal","key","label","_createElement","Button","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","console","log","ButtonOperate","viewList","useMemo","operateList","filter","isValidElement","has","isFold","foldList","filterList","map","className","_classNames","classNames","_jsxs","Space","split","Divider","wrap","_isUndefined","placement","undefined","createElement","length","foldIcon","jsx","_MoreOutlined","defaultProps","ButtonWrapper","debounceDuration","isUndefinedOrNull","useDebounceClick","e","catch","error","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","useRef","curRef","current","useSafeState","initialState","setState","isMounted","useIsMounted","value","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","targetOption","$await_3","concat","onChange","values","selectList","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","CssNodeHover","toArray","cloneElement","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","onOpenChange","open","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","content","configProviderProps","okButtonExtraProps","cancelButtonExtraProps","operatePosition","_props$operatePositio","_props$width","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","operateGroup","jsxs","ConfigProvider","locale","zh_CN","componentSize","space","Drawer","maskClosable","destroyOnClose","contentWrapperStyle","maxWidth","extra","footer","getContainer","dialogDrawer","_bodyAppendDivElement","ReactDOM","render","close","_window$elementId","_window","call","onAfterClose","afterClose","Modal","centered","dialogModal","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWraper","operationProps","keyboard","forceRender","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","onCompositionStart","onCompositionEnd","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListChange","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","keys","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","targetList","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","useUpdateEffect","filterOption","input","option","mergeString","_isString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","_ref2","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","_isBoolean","warn","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","targetIndex","findIndex","tempUid","splice","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","editorTemplates","primary_p","secondary_p","warning_p","danger_p","success_p","p","defaultVarStyle","EditorWrapper","_","editor","getContent","respValue","varStyleString","merge","varStyle","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","templates","template_replace_values","template_preview_replace_values","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","childrens","Children","direction","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_extends2","itemProps","newProps","FormItemCard","_classNames2","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","Gap","inline","IconWrapper","Tooltip","hoverTips","LabelValueLayout","labelWidth","Descriptions","column","bordered","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","modalModels","createModalWraperModel","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","createModalWrapperModel","PageFixedFooter","Page404","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_auto","label_align_left","label_align_right","formItemClassName","preDefinedClassName","formItem","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","contentStyle","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","TagWrapper","tagItem","labelValueList","colorList","colorTarget","arrayFindByLoosely","forceMatch","tableColumnTooltipRender","showMaxNumber","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","pageNo","pageSize","_record","tableColumnSelectorRender","tableColumnObjectRender","_isPlainObject","_get","tableCellRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","list","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","onChangeHandle","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Array","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","allState","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","checked","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isNumber","getValueOrDefault","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","checkableResponseParentNode","_props$checkableRespo","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","$await_4","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/dialog-drawer.tsx","@flatbiz/antd/src/dialog/dialog-modal.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/tag-wrapper/index.tsx","@flatbiz/antd/src/table-column/render.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './1_root.less';\nimport './2_base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Menu, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'overlay'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [visible, setVisible] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setVisible(true);\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n result.finally(() => {\n setVisible(false);\n setLoading(false);\n });\n return;\n }\n setVisible(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n void item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <Button\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </Button>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n setVisible(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n visible={visible}\n okButtonProps={{\n loading,\n }}\n >\n <Button\n size=\"small\"\n {...otherProps}\n onClick={onConfirmtTriggerClick}\n type={buttonType}\n danger\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItems.push(confirm);\n } else {\n menuItems.push(nromal);\n }\n });\n\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n overlay={<Menu items={menuItems} />}\n onVisibleChange={(_visible) => {\n console.log(visible);\n if (!_visible) {\n setVisible(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中使用ReactElement类型\n * 1. 一般为antd Button组件,可设置type=link,会有设置的hover效果\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\n}\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (item.permission) {\n return hasPermission(item.permission);\n }\n return !item.hidden;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item.isFold;\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item.isFold;\n }) as ButtonOperateItem[];\n\n return [...filterList].map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\n }, [operateList]);\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={<Divider type=\"vertical\" />}\n size={props.size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n if (isValidElement(item)) return item;\n const { text, color, onClick, needConfirm, confirmMessage, style, popconfirmProps, ...otherProps } =\n item;\n const newStyle = color && !otherProps.disabled ? { color, ...style } : style;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onVisibleChange={(_visible) => {\n if (!_visible) {\n setLoading(false);\n }\n }}\n >\n <Button {...otherProps} onClick={undefined} type={type} danger style={newStyle}>\n {text}\n </Button>\n </Popconfirm>\n );\n }\n return (\n <Button {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </Button>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick: (e) => Promise<void> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n\n const debounceDuration = isUndefinedOrNull(props.debounceDuration) ? 500 : props.debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDuration);\n\n if (!hasPermission(props.name)) {\n return null;\n }\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value: string | number, selectedList: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const { serviceConfig, modelKey, fieldNames, isDynamicLoad, requestMessageConfig, ...otherProps } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n />\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return moment(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment, { Moment } from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<moment.Moment>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [Moment | null, Moment | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\n\nexport type FormItemNamePath = string | number | Array<string | number>;\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: Omit<DateRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_date_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const DateRangePickerWrapperFormItem = (props: DateRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","export const bodyAppendDivElement = () => {\n const div = document.createElement('div');\n const id = `id_${Date.now()}`;\n div.setAttribute('id', id);\n document.body.append(div);\n return {\n divElement: div,\n elementId: id,\n };\n};\n\nexport const removeBodyChild = (element: string) => {\n try {\n document.body.removeChild(document.querySelector(element) as Node);\n } catch (error) {\n //\n }\n};\n\nexport interface BodyAppendDivElementProps {\n divElement: HTMLDivElement;\n elementId: string;\n}\n","import { isPromise } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, ConfigProvider, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = (e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n };\n const operateGroup = (\n <Space>\n <Button {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </Button>\n <Button type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle} loading={loading}>\n {okText || '提交'}\n </Button>\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n return operateGroup;\n };\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Drawer\n maskClosable={false}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n extra={operatePosition === 'header' ? operateRenderHandle() : null}\n footer={operatePosition === 'footer' ? operateRenderHandle() : null}\n {...otherProps}\n visible={visible}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { isPromise } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n className,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n centered={true}\n destroyOnClose\n {...otherProps}\n className={classNames('dialog-modal', className)}\n visible={visible}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationOldProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * @deprecated 请使用【dialogDrawer】组件替换\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper = (props: DrawerFormProps) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n\nexport type SelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getSelectorList: () => TPlainObject[];\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 2. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\n * 2. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = (props) => {\n const {\n serviceConfig,\n showAllOption,\n onSelectorListChange,\n onSelectorListAllChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList: outerSelectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const serviceRequestParams = serviceConfig?.params;\n const hasServiceRequestParams = useMemo(() => {\n return serviceRequestParams && Object.keys(serviceRequestParams).length > 0;\n }, [serviceRequestParams]);\n\n const [loading, setLoading] = useState(false);\n // 将params排序后转成字符串\n const serviceRequestParamsStringify = useMemo(() => {\n try {\n if (hasServiceRequestParams) {\n const sortDataStringify = JSON.stringify(json.sort(serviceRequestParams));\n if (sortDataStringify === '{}') {\n return undefined;\n }\n return sortDataStringify;\n }\n } catch (error) {}\n return undefined;\n }, [hasServiceRequestParams, serviceRequestParams]);\n\n const prevServiceRequestParamsStringify = usePrevious(serviceRequestParamsStringify);\n\n const isSearch = operateType === 'search';\n\n const hasOuterSelectorList = props.hasOwnProperty('selectorList');\n\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n\n const requestPreKey = `__selector_wraapper_request_progress_${modelKey}`;\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = useMemo(() => {\n return { label: 'label', value: 'value', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames } as LabelValueItem<string>;\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n [optionsItemLabelField]: isTrue ? '全部' : showAllOption.label,\n [optionsItemValueField]: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [optionsItemLabelField, optionsItemValueField, showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple', 'tags']);\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, labelInValueFieldNamesMerge.value);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, labelInValueFieldNamesMerge, value]);\n\n const stateSelectorList = useMemo(() => {\n if (isSearch) {\n return arrayFind(state.requestRespCacheData, 'search', 'request')?.response;\n }\n return state.requestRespCacheData.find((item) => item.request === serviceRequestParamsStringify)\n ?.response;\n }, [isSearch, serviceRequestParamsStringify, state.requestRespCacheData]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig?.onRequestResultAdapter\n ? serviceConfig?.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = async (inputValue?: string, searchId?: string | number) => {\n try {\n setLoading(true);\n const params = serviceRequestParams || {};\n void actions.changeRequestStatus('request-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await serviceConfig?.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n\n if (isSearch) {\n void actions.onSearchRequestRespHandle(respAdapterData);\n } else {\n void actions.onRequestRespHandle({\n respData: respAdapterData,\n requestStringify: serviceRequestParamsStringify,\n });\n }\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n // void message.error(error.message || '获取数据异常');\n onSelectorRequestError?.(error);\n }\n };\n\n const serviceRequest = {\n hasProcessRequest: () => {\n const process = window[requestPreKey];\n if (serviceRequestParamsStringify) {\n if (isArray(process) && process.includes(serviceRequestParamsStringify)) return true;\n } else {\n return !!process;\n }\n return false;\n },\n setProcessRequestStatus: () => {\n if (serviceRequestParamsStringify) {\n const cacheList = (window[requestPreKey] || []) as string;\n if (!cacheList.includes(serviceRequestParamsStringify)) {\n window[requestPreKey] = cacheList.concat(serviceRequestParamsStringify);\n }\n } else {\n window[requestPreKey] = [];\n }\n },\n };\n\n const prevRequestHandle = () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n\n // 判断相同的 params 是否已经在请求数据中,避免重复请求\n if (serviceRequest.hasProcessRequest()) {\n return;\n }\n serviceRequest.setProcessRequestStatus();\n // 去调用接口\n void startDataSourceRequest();\n };\n\n useEffectCustom(() => {\n if (hasOuterSelectorList || isSearch) return;\n if (hasServiceRequestParams) {\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys;\n if (requiredParamsKeys && requiredParamsKeys.length > 0) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return serviceRequestParams[key] === '' || isUndefinedOrNull(serviceRequestParams[key]);\n });\n if (isEmpty) {\n if (stateSelectorList && stateSelectorList.length > 0) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n window[requestPreKey] = undefined;\n void actions.resetSelectorList({\n selectorList: [],\n requestStatus: 'no-dependencies-params',\n });\n } else {\n void actions.changeRequestStatus('no-dependencies-params');\n }\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n props.onChange?.(undefined);\n }\n return;\n }\n }\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n if (stateSelectorList === undefined) {\n prevRequestHandle();\n }\n }, [serviceRequestParams]);\n\n hooks.useUpdateEffect(() => {\n if (state.setSelectorListCount > 1) {\n // 第一次不调用\n onSelectorListChange?.(stateSelectorList);\n }\n onSelectorListAllChange?.(stateSelectorList);\n }, [state.setSelectorListCount]);\n\n useEffectCustom(() => {\n if (hasOuterSelectorList) {\n void actions.resetSelectorList({\n selectorList: outerSelectorList || [],\n });\n }\n }, [outerSelectorList]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectorList({\n selectorList: [],\n });\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n\n if (labelInValue) {\n const { label, value } = labelInValueFieldNamesMerge;\n const labelInValueList = selectedList.map((item) => {\n return {\n [label]: item[optionsItemLabelField],\n [value]: item[optionsItemValueField],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig['value']) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n if (state.requestStatus === 'request-error' || state.requestStatus === 'request-progress') {\n return [];\n }\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList || []);\n }, [allOptionConfig, state.requestStatus, stateSelectorList]);\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {(selectorAllList || []).map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid?: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n setUploadList(\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n };\n }),\n );\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = (\n props.onRequestResultAdapter ? props.onRequestResultAdapter(respData.data) : respData.data\n ) as TPlainObject;\n result[fieldNames.uid] = result[fieldNames.uid] || info.file.uid;\n result[fieldNames.name] = result[fieldNames.name] || info.file.name;\n if (props.maxCount === 1) {\n onChange?.([result]);\n } else {\n onChange?.((value || []).concat(result));\n }\n } else {\n if (onUploadError) {\n onUploadError(respData.message as string);\n } else {\n void message.error((respData.message as string) || '上传操作失败...');\n }\n fileList[fileList.length - 1] = {\n ...fileList[fileList.length - 1],\n status: 'error',\n };\n }\n props.onUploadChange?.(info);\n // 此处不执行 setUploadList([...fileList]);\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n }) => ReactElement | null;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, renderMiddleware, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n const tableRowName = [...props.name, record.name];\n const completeName = columnItem.dataIndex ? [...tableRowName, columnItem.dataIndex] : tableRowName;\n const customRender = renderMiddleware?.({\n name: completeName,\n tableRowIndex: record.name,\n operation: record.operation,\n tableRowName,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","export const editorTemplates = {\n block: {\n title: '块级卡片',\n description: '块级卡片',\n content: `<div style=\"{$varStyle} background-color:var(--editor-card-bgcolor);padding: 5px 20px;border-radius: 2px;color:#555\">\n <p>#自定义内容</p>\n </div><p></p>`,\n },\n primary_p: {\n title: 'primary_p',\n description: 'primary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-primary)\">#自定义内容</p><p></p>',\n },\n secondary_p: {\n title: 'secondary_p',\n description: 'secondary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-secondary)\">#自定义内容</p><p></p>',\n },\n warning_p: {\n title: 'warning_p',\n description: 'warning色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-warning)\">#自定义内容</p><p></p>',\n },\n danger_p: {\n title: 'danger_p',\n description: 'danger色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-danger)\">#自定义内容</p><p></p>',\n },\n success_p: {\n title: 'success_p',\n description: 'success色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-success)\">#自定义内容</p><p></p>',\n },\n p: {\n title: 'p',\n description: 'p',\n content: '<p></p>',\n },\n};\n","export type varStyles =\n | '--fa-color-primary'\n | '--fa-color-secondary'\n | '--fa-color-warning'\n | '--fa-color-danger'\n | '--fa-color-success'\n | '--editor-card-bgcolor';\n\nexport const defaultVarStyle: Record<varStyles, string> = {\n '--fa-color-primary': '#1677ff',\n '--fa-color-secondary': '#1677ff',\n '--fa-color-warning': '#ff8f1f',\n '--fa-color-danger': '#ff3141',\n '--fa-color-success': '#00b578',\n '--editor-card-bgcolor': '#f5f5f9',\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties, useMemo } from 'react';\nimport './style.less';\nimport { editorTemplates } from './template';\nimport { defaultVarStyle, varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n const varStyleString = useMemo(() => {\n const merge = { ...defaultVarStyle, ...props.varStyle };\n let varStyleString = '';\n Object.keys(merge).map((key) => {\n varStyleString += `${key}:${merge[key]};`;\n });\n return varStyleString;\n }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n templates: [\n editorTemplates.block,\n editorTemplates.primary_p,\n editorTemplates.secondary_p,\n editorTemplates.warning_p,\n editorTemplates.danger_p,\n editorTemplates.success_p,\n editorTemplates.p,\n ],\n template_replace_values: {\n varStyle: varStyleString,\n },\n template_preview_replace_values: {\n varStyle: varStyleString,\n },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { useEffect, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type FileUploadItem = {\n fileKey: string;\n fileName: string;\n};\n\ntype AntdFileUploadItem = {\n uid: string;\n name: string;\n fileKey: string;\n};\n\nexport type FileUploadProps = {\n onChange?: (value?: FileUploadItem[]) => void;\n onUploadError?: (message?: string) => void;\n value?: FileUploadItem[];\n onPreview?: (item: FileUploadItem) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n fileKey?: string;\n fileName?: string;\n };\n} & Omit<UploadProps, 'onChange' | 'fileList' | 'onPreview'>;\n\n/**\n * 文件上传,结合Form使用最佳\n * @deprecated 请使用【UploadWrapper】组件替换\n * ```\n * 接口返回结构:\n * formData上传接口必须返回fileKey值\n * {\n * code: '0000',\n * data: {\n * fileKey: '预览文件对应的fileKey'\n * }\n * }\n * 可通过fieldNames配置接口返回值属性名称映射\n * ```\n * ```\n * 最佳使用方式:\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <FileUpload action={uploadUrl} onPreview={onPreviewFile}>\n * <Button type=\"primary\">选择文件导入</Button>\n * </FileUpload>\n * </Form.Item>\n * ```\n *\n */\nexport const FileUpload = (props: FileUploadProps) => {\n useEffectCustom(() => {\n console.error('@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换');\n }, []);\n\n const { onChange, onUploadError, onPreview, value, ...otherProps } = props;\n const [uploadValue, setUploadValue] = useState<AntdFileUploadItem[]>([]);\n const fieldNames = extend(\n {\n fileKey: 'fileKey',\n fileName: 'fileName',\n },\n props.fieldNames,\n ) as FileUploadItem;\n\n useEffect(() => {\n if (value && isArray(value)) {\n setUploadValue(\n value.map((item) => {\n return {\n uid: item['uid'] || item[fieldNames.fileKey],\n name: item[fieldNames.fileName],\n fileKey: item[fieldNames.fileKey],\n url: item[fieldNames.fileKey],\n thumbUrl: item[fieldNames.fileKey],\n };\n }),\n );\n }\n }, [fieldNames.fileKey, fieldNames.fileName, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = respData.data || {};\n const uploadItem = {\n uid: info.file.uid,\n fileName: result[fieldNames.fileName] || (info.file.name as string),\n fileKey: result[fieldNames.fileKey],\n } as FileUploadItem;\n const respValue = (value || []).concat(uploadItem);\n onChange?.(respValue as unknown as FileUploadItem[]);\n } else {\n onUploadError?.(respData.message as string);\n }\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item['uid'] || item[fieldNames.fileKey];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n onUploadError?.();\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadValue([...info.fileList]);\n props.onUploadChange?.(info);\n });\n\n const onUploadPreview = hooks.useCallbackRef((file) => {\n onPreview?.({\n fileKey: file[fieldNames.fileKey],\n fileName: file[fieldNames.fileName],\n });\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n onPreview={onUploadPreview}\n fileList={uploadValue}\n className={classNames('v-file-upload', otherProps.className)}\n >\n {props.children}\n </Upload>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={props.style}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={15}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n return (\n <Tooltip title={props.hoverTips}>\n <div\n className={classNames('icon-wrapper', `icon-wrapper-${props.size || 'middle'}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </div>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { ModalOperation, ModalOperationProps } from './modal-operation';\nimport './style.less';\n\nexport type ModalFormProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n // 设置了 ModalProps footer属性后,operationProps配置将失效\n operationProps?: ModalOperationProps;\n footer?: null | React.ReactNode;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * @deprecated 请使用【dialogModal】组件替换\n * ```\n */\nexport const ModalWraper = (props: ModalFormProps) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n return (\n <Modal\n className={classNames('modal-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <div className=\"modal-wraper-content\">\n {children}\n {pageLoading && <PageLoader />}\n </div>\n {footer !== null && (\n <div className=\"modal-wraper-content-footer\">\n {footer ? footer : <ModalOperation {...operationProps} />}\n </div>\n )}\n </Modal>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n/**\n * 组件单词写错,请输入\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWraperModel('key值').useStore();\n * ```\n */\nexport const createModalWraperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","export const Page404 = () => {\n return <div className=\"v-404\">404</div>;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_160: 'form-label-160',\n label_width_170: 'form-label-170',\n label_width_180: 'form-label-180',\n label_width_190: 'form-label-190',\n label_width_200: 'form-label-200',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_160: 'form-item-label-160',\n label_width_170: 'form-item-label-170',\n label_width_180: 'form-item-label-180',\n label_width_190: 'form-item-label-190',\n label_width_200: 'form-item-label-200',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const titleClassName = classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n });\n\n const style = extend({}, props.style, { padding: props.padding, width: props.width });\n\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { arrayFindByLoosely, isUndefinedOrNull, LabelValueItem, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TTagItem = { label: string; value: string | number | boolean; color?: string };\n\nexport type TagWrapperProps = {\n labelValueList: LabelValueItem<string | number | boolean>[];\n colorList?: { value: string | number | boolean; color: string }[];\n value?: TTagItem['value'];\n // 是否强制匹配\n forceMatch?: boolean;\n};\n\n/**\n * 通过配置显示Tag效果\n * @param props\n * @returns\n * ```\n * forceMatch: 是否强制匹配(默认值true)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n *\n * 例如1:(与value匹配)\n * <TagWrapper labelValueList=[{ label: '启用', value: 1 }] colorList=[{ value: 1, color: 'red' }] value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 例如2:(与label匹配)\n * <TagWrapper labelValueList=[{ label: '启用', value: 1 }] value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 例如3:(未匹配到,显示value值)\n * <TagWrapper labelValueList=[{ label: '启用', value: 1 }] value=\"审核中\" />\n * =>\n * 审核中\n * ```\n */\nexport const TagWrapper: FC<TagWrapperProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value) || !props.labelValueList) {\n return undefined;\n }\n\n const target = props.labelValueList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n if (props.colorList) {\n const colorTarget = arrayFindByLoosely(props.colorList, target.value, 'value');\n if (colorTarget) {\n return { color: colorTarget.color, label: target.label };\n }\n }\n return { label: target.label };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: props.value };\n }, [props.colorList, props.forceMatch, props.labelValueList, props.value]);\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagWrapper.defaultProps = {\n forceMatch: true,\n};\n","import { isNumber, isObject, isPlainObject } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Tooltip } from 'antd';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagWrapper, TagWrapperProps } from '../tag-wrapper';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number) => {\n return (value: string | number) => {\n if (isUndefinedOrNull(value)) return;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny) => ButtonOperateProps) => {\n return (_value: string | number, record) => {\n const operateProps = options(record);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType) => {\n return (value: string | number) => {\n try {\n return flatbizDate.format(value, dateFormatType);\n } catch (error) {\n return value;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagWrapperProps['labelValueList'],\n colorList?: TagWrapperProps['colorList'],\n) => {\n return (value: string | number) => {\n return (\n <TagWrapper labelValueList={selectorList} colorList={colorList} value={value} forceMatch={false} />\n );\n };\n};\n\nconst tableColumnObjectRender = (key: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value;\n };\n};\n\nexport const tableCellRender = {\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度20个【字节】\n * ```\n * showMaxNumber: 显示最大【字节】长度\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n const isMultiple = otherProps.treeCheckable;\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n dropdownClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.dropdownClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={renderValueList as any}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: any[]): any[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","useState","visible","_useState","setVisible","loading","_useState2","setLoading","onConfirmtTriggerClick","_hooks","useCallbackRef","event","stopPropagation","onConfirm","item","result","onClick","_isPromise","finally","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","_extends","buttonType","nromal","key","label","_createElement","Button","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","console","log","ButtonOperate","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","map","className","_classNames","classNames","_jsxs","Space","split","Divider","wrap","_isUndefined","placement","undefined","createElement","length","foldIcon","jsx","_MoreOutlined","defaultProps","ButtonWrapper","debounceDuration","isUndefinedOrNull","useDebounceClick","e","catch","error","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","useRef","curRef","current","useSafeState","initialState","setState","isMounted","useIsMounted","value","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","targetOption","$await_3","concat","onChange","values","selectList","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","CssNodeHover","toArray","cloneElement","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","onOpenChange","open","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","content","configProviderProps","okButtonExtraProps","cancelButtonExtraProps","operatePosition","_props$operatePositio","operateRender","_props$width","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","operateGroup","jsxs","operateRenderHandle","ConfigProvider","locale","zh_CN","componentSize","space","Drawer","maskClosable","destroyOnClose","contentWrapperStyle","maxWidth","extra","footer","getContainer","dialogDrawer","_bodyAppendDivElement","ReactDOM","render","close","_window$elementId","_window","call","onAfterClose","afterClose","Modal","centered","dialogModal","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWraper","operationProps","keyboard","forceRender","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","onCompositionStart","onCompositionEnd","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListChange","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","keys","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","targetList","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","useUpdateEffect","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","_ref2","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","_isBoolean","warn","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","targetIndex","findIndex","tempUid","splice","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","editorTemplates","primary_p","secondary_p","warning_p","danger_p","success_p","p","defaultVarStyle","EditorWrapper","_","editor","getContent","respValue","varStyleString","merge","varStyle","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","templates","template_replace_values","template_preview_replace_values","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","childrens","Children","direction","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_extends2","itemProps","newProps","FormItemCard","_classNames2","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","Gap","inline","IconWrapper","Tooltip","hoverTips","LabelValueLayout","labelWidth","Descriptions","column","bordered","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","modalModels","createModalWraperModel","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","createModalWrapperModel","PageFixedFooter","Page404","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_160","label_width_170","label_width_180","label_width_190","label_width_200","label_width_auto","label_align_left","label_align_right","formItemClassName","preDefinedClassName","formItem","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","contentStyle","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","TagWrapper","tagItem","labelValueList","colorList","colorTarget","arrayFindByLoosely","forceMatch","tableColumnTooltipRender","showMaxNumber","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","pageNo","pageSize","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableCellRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","list","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","onChangeHandle","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Array","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","allState","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","checked","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isNumber","getValueOrDefault","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","checkableResponseParentNode","_props$checkableRespo","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","$await_4","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}