@flatbiz/antd 4.0.20 → 4.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-array-change.ts","@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/hooks/use-theme.ts","@flatbiz/antd/src/config-provider-wrapper/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/check-list/context.ts","@flatbiz/antd/src/check-list/utils.ts","@flatbiz/antd/src/check-list/check-list.tsx","@flatbiz/antd/src/check-list/check-list-item.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/types/index.ts","@flatbiz/antd/src/_utils/time.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/modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@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/easy-table/context.ts","@flatbiz/antd/src/easy-table/model.ts","@flatbiz/antd/src/easy-table/easy-table.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/simple-layout/index.tsx","@flatbiz/antd/src/easy-table/filter.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/editable-field/context.ts","@flatbiz/antd/src/editable-field/editable-field.tsx","@flatbiz/antd/src/editable-field/editable-field-provider.tsx","@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/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/flex-layout/index.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/form-item-wrapper/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-action/index.tsx","@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/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-list-select/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/tag-group/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.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 './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 { isUndefinedOrNull, TAny } 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: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n hidden?: boolean;\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\n if (props.hidden) {\n return null;\n }\n\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { useRef } from 'react';\n\nexport const useArrayChange = <T>(dataList: Array<T>, forceUpdate = true) => {\n const changeListRef = useRef<Array<T>>(dataList);\n const update = hooks.useForceUpdate();\n const arrayOperate = {\n add: hooks.useCallbackRef((dataItem: T | Array<T>, isUnshift?: boolean) => {\n if (isUnshift) {\n const targetList = isArray(dataItem) ? dataItem : [dataItem];\n changeListRef.current = [...targetList, ...changeListRef.current];\n } else {\n changeListRef.current = changeListRef.current.concat(dataItem);\n }\n forceUpdate && update();\n }),\n update: hooks.useCallbackRef((index: number, dataItem: T) => {\n const target = changeListRef.current[index];\n if (target) {\n changeListRef.current[index] = { ...target, ...dataItem };\n }\n forceUpdate && update();\n }),\n delete: hooks.useCallbackRef((index: number) => {\n const deleteItem = changeListRef.current.splice(index, 1);\n forceUpdate && update();\n return deleteItem;\n }),\n resetList: hooks.useCallbackRef((dataList: Array<T>) => {\n changeListRef.current = dataList;\n forceUpdate && update();\n }),\n getList: hooks.useCallbackRef(() => {\n return changeListRef.current;\n }),\n };\n return [changeListRef.current, arrayOperate] as const;\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 { theme } from 'antd';\n\nexport const useThemeToken = () => {\n const { token } = theme.useToken();\n return token;\n};\n","import { ConfigProvider } from 'antd';\nimport { ConfigProviderProps } from 'antd/es/config-provider';\nimport enUS from 'antd/locale/en_US';\nimport zhCN from 'antd/locale/zh_CN';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/zh-cn';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport weekday from 'dayjs/plugin/weekday';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\nimport weekYear from 'dayjs/plugin/weekYear';\nimport { useEffectCustom } from '../hooks';\ndayjs.extend(customParseFormat);\ndayjs.extend(advancedFormat);\ndayjs.extend(weekday);\ndayjs.extend(localeData);\ndayjs.extend(weekOfYear);\ndayjs.extend(weekYear);\ndayjs.extend(dayjsUtc);\n\nexport type ConfigProviderWrapperProps = Omit<ConfigProviderProps, 'locale'> & {\n locale?: 'en' | 'zh-cn';\n};\n\nexport const ConfigProviderWrapper = (props: ConfigProviderWrapperProps) => {\n const { locale, ...otherProps } = props;\n\n useEffectCustom(() => {\n dayjs.locale((props.locale as unknown as string) || 'zh-cn');\n }, []);\n return (\n <ConfigProvider\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...otherProps}\n locale={locale === 'en' ? enUS : zhCN}\n >\n {props.children}\n </ConfigProvider>\n );\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\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, 'menu'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setOpen(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 setOpen(false);\n setLoading(false);\n });\n return;\n }\n setOpen(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n return 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 <ButtonWrapper\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </ButtonWrapper>\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 setOpen(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n open={open}\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 menu={{ items: menuItems }}\n onOpenChange={(_open) => {\n if (!_open) {\n setOpen(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 { toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { OverrideToken } from 'antd/es/theme/interface';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper } from '../config-provider-wrapper';\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 // 是否折叠合拢\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true,则会隐藏\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 split?: boolean;\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 (!hasPermission(item.permission)) {\n return false;\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 const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const size = !props.split ? toArray<number>(props.size)[0] || 10 : 0;\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={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 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 onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n >\n <DefaultButton\n {...otherProps}\n onClick={undefined}\n type={type}\n danger\n style={style}\n color={color}\n >\n {text}\n </DefaultButton>\n </Popconfirm>\n );\n }\n return (\n <DefaultButton\n {...otherProps}\n type={type}\n style={style}\n key={index}\n onClick={onClick}\n color={color}\n >\n {text}\n </DefaultButton>\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\nconst DefaultButton = (props) => {\n if (props.color && !props.disabled) {\n let buttonTheme: OverrideToken['Button'] = {};\n if (props.type === 'link') {\n buttonTheme = {\n colorLink: props.color,\n colorLinkActive: props.color,\n colorLinkHover: props.color,\n };\n } else if (props.type === 'primary') {\n buttonTheme = {\n colorPrimary: props.color,\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n };\n } else {\n buttonTheme = {\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n colorText: props.color,\n colorBorder: props.color,\n };\n }\n\n return (\n <ConfigProviderWrapper\n theme={{\n components: {\n Button: buttonTheme,\n },\n }}\n >\n <ButtonWrapper {...props}>{props.children}</ButtonWrapper>\n </ConfigProviderWrapper>\n );\n }\n return <ButtonWrapper {...props}>{props.children}</ButtonWrapper>;\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n split: true,\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 { classNames, 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';\nimport './style.less';\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 onSelectorListChange?: (dataList: TPlainObject[]) => void;\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 * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = 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 onSelectorListChange?.(respAdapterData || []);\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 if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\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 const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\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 void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\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 const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n popupClassName={classNames('cascader-wrapper-popup', otherProps.popupClassName)}\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 onClear={onClear}\n />\n );\n});\n","import { createCtx } from '@wove/react';\nimport { CheckListItemValue } from './types';\n\nexport const [useCheckListCtx, CheckListCtxProvider] = createCtx<{\n checkedValues: CheckListItemValue[];\n onChange: (value: CheckListItemValue, defaultChange?: boolean) => void;\n stopPropagation?: boolean;\n}>();\n","import { toArray } from '@flatbiz/utils';\nimport { CheckListItemValue, CheckListValue } from './types';\n\nexport const getValueList = (value?: CheckListValue, multiple?: boolean) => {\n if (value !== undefined) {\n const valueList = toArray<CheckListItemValue>(value);\n return multiple ? valueList : valueList.splice(0, 1);\n }\n return null;\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { ReactNode, useMemo } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { useArrayChange } from '../hooks/use-array-change';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport { CheckListCtxProvider } from './context';\nimport './style.less';\nimport { CheckListItemValue } from './types';\nimport { getValueList } from './utils';\n\nexport type CheckListSelectedValue<T extends 'multi' | 'radio'> = T extends 'multi'\n ? CheckListItemValue[]\n : CheckListItemValue;\n\nexport type CheckListProps<T extends 'multi' | 'radio'> = {\n multiple?: boolean;\n onChange?: (value: CheckListSelectedValue<T>, operateValue: CheckListItemValue) => void;\n onPreChange?: (value: CheckListItemValue) => Promise<void>;\n value?: CheckListSelectedValue<T>;\n defaultValue?: CheckListSelectedValue<T>;\n beforeExtra?: ReactNode;\n afterExtra?: ReactNode;\n stopPropagation?: boolean;\n required?: boolean;\n} & CommonPropsWithChildren;\n\nexport const CheckList = <T extends 'multi' | 'radio'>(props: CheckListProps<T>) => {\n const [checkedValues, arrayOperate] = useArrayChange<CheckListItemValue>([]);\n\n const valueList = useMemo(() => {\n return getValueList(props.value, props.multiple);\n }, [props.value, props.multiple]);\n\n useEffectCustom(() => {\n const current = valueList || getValueList(props.defaultValue, props.multiple);\n arrayOperate.resetList(current || []);\n }, []);\n\n hooks.useUpdateEffect(() => {\n arrayOperate.resetList(valueList || []);\n }, [valueList]);\n\n const onChange = hooks.useCallbackRef(async (value: CheckListItemValue, defaultChange) => {\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n const targetIndex = checkedValues.findIndex((temp) => temp === value);\n if (props.multiple === true) {\n if (checkedValues.length === 1 && targetIndex >= 0 && props.required) {\n return;\n }\n if (targetIndex >= 0) {\n arrayOperate.delete(targetIndex);\n } else {\n arrayOperate.add(value);\n }\n } else {\n if (targetIndex >= 0 && props.required) {\n return;\n } else {\n arrayOperate.resetList(targetIndex >= 0 ? [] : [value]);\n }\n }\n if (!defaultChange) {\n const newValues = arrayOperate.getList();\n let selectedValue;\n if (props.multiple) {\n selectedValue = newValues.length > 0 ? extend([], newValues) : undefined;\n } else {\n selectedValue = newValues.length > 0 ? newValues[0] : undefined;\n }\n props.onChange?.(selectedValue as CheckListSelectedValue<T>, value);\n }\n });\n\n return (\n <div className={classNames('check-list', props.className)} style={props.style}>\n <CheckListCtxProvider\n value={{\n onChange,\n checkedValues,\n stopPropagation: props.stopPropagation,\n }}\n >\n {props.beforeExtra}\n {props.children}\n {props.afterExtra}\n </CheckListCtxProvider>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement } from 'react';\nimport { useCheckListCtx } from './context';\nimport { CheckListItemValue } from './types';\n\nexport type CheckListItemContentProps = {\n checked?: boolean;\n disabled?: boolean;\n onClick?: (event) => void;\n className?: string;\n readonly?: boolean;\n style?: CSSProperties;\n};\n\nexport type CheckListItemProps = {\n value: CheckListItemValue;\n disabled?: boolean;\n readonly?: boolean;\n children: (data: CheckListItemContentProps) => ReactElement;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const CheckListItem = (props: CheckListItemProps) => {\n const context = useCheckListCtx();\n\n if (context === null) {\n console.error('CheckList.Item can only be used inside CheckList.');\n return null;\n }\n\n const onClick = hooks.useCallbackRef((event) => {\n if (context.stopPropagation) {\n event.stopPropagation();\n }\n if (!props.disabled) {\n context?.onChange(props.value);\n }\n });\n\n const checked = context?.checkedValues.findIndex((temp) => temp === props.value) >= 0;\n const checkedClassPrefix = 'check-list';\n\n const className = classNames(\n `${checkedClassPrefix}-item`,\n {\n [`${checkedClassPrefix}-disabled`]: props.disabled,\n [`${checkedClassPrefix}-readonly`]: props.readonly,\n [`${checkedClassPrefix}-checked`]: checked,\n },\n props.className,\n );\n\n return props.children({\n onClick,\n checked,\n disabled: props.disabled,\n readonly: props.readonly,\n className,\n style: props.style,\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","export type FormItemNamePath = string | number | Array<string | number>;\n\nexport enum DayjsDateTypeEnum {\n YMDHms = 'YYYY-MM-DD HH:mm:ss',\n YMDHm = 'YYYY-MM-DD HH:mm',\n YMDH = 'YYYY-MM-DD HH',\n YMD = 'YYYY-MM-DD',\n}\n\nexport enum DayjsTimeTypeEnum {\n Hms = 'HH:mm:ss',\n Hm = 'HH:mm',\n H = 'HH',\n ms = 'mm:ss',\n m = 'mm',\n s = 'ss',\n}\n","import { Dayjs } from 'dayjs';\nimport { DayjsDateTypeEnum } from '../types';\n\nconst range = (start: number, end: number) => {\n const result: number[] = [];\n for (let i = start; i <= end; i++) {\n result.push(i);\n }\n return result;\n};\nexport const getDisabledHour = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledHourList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeHour = 0;\n let maxTimeHour = 23;\n\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n minTimeHour = options.minDateTime.get('hour');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n maxTimeHour = options.maxDateTime.get('hour');\n }\n let selectableMinute = range(minTimeHour, maxTimeHour);\n if (options.disabledHourList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledHourList?.includes(item));\n }\n return range(0, 23).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledMinute = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledMinuteList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeMinute = 0;\n let maxTimeMinute = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n minTimeMinute = options.minDateTime.get('minute');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n maxTimeMinute = options.maxDateTime.get('minute');\n }\n let selectableMinute = range(minTimeMinute, maxTimeMinute);\n if (options.disabledMinuteList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledMinuteList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledSecond = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledSecondList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeSecond = 0;\n let maxTimeSecond = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n minTimeSecond = options.minDateTime.get('second');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n maxTimeSecond = options.maxDateTime.get('second');\n }\n let selectableMinute = range(minTimeSecond, maxTimeSecond);\n if (options.disabledSecondList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledSecondList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport type { PickerDateProps } from 'antd/es/date-picker/generatePicker';\nimport dayjs from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<dayjs.Dayjs>, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:DayjsDateTypeEnum\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n\n format?: DayjsDateTypeEnum;\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型 DayjsDateTypeEnum.YMDHms;其他格式化类型自定义format\n * 4. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 5. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, 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: dayjs.Dayjs) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return dayjs(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || datePickerValue || dayjs(new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\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 type { Dayjs } from 'dayjs';\nimport dayjs from 'dayjs';\nimport { useMemo, useState } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<Dayjs>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate' | 'format'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:DayjsDateTypeEnum\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsDateTypeEnum;\n};\n\ntype RangeValue = [Dayjs | null, Dayjs | 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;其他格式化类型自定义format\n * 4. 可设置disabledDateConfig,来控制日期项的disbaled状态\n * 5. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 6. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { maxDays, minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\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 [dayjs(newDate1), dayjs(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Dayjs, Dayjs];\n\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime === true) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\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(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), 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 const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || dayjs(date1 || new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker.RangePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val as RangeValue)}\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';\nimport { FormItemNamePath } from '../types';\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 const bodyVal = Form.useWatch(bodyName, 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, bodyVal]);\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, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<\n ModalProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'okButtonProps' | 'cancelButtonProps'\n> & {\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?: ConfigProviderWrapperProps;\n okHidden?: boolean;\n cancelHidden?: boolean;\n okButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n cancelButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n cancelButtonProps,\n content,\n configProviderProps,\n className,\n okHidden,\n cancelHidden,\n footer,\n cancelText,\n okText,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(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 return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n const operateGroup = [\n <ButtonWrapper key=\"0\" {...cancelButtonProps} onClick={onCancelHandle} hidden={cancelHidden}>\n {cancelText || '取消'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"1\" type=\"primary\" {...okButtonProps} onClick={onOkHandle} hidden={okHidden}>\n {okText || '提交'}\n </ButtonWrapper>,\n ];\n\n const footerNew = footer || operateGroup;\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n maskClosable={true}\n centered={true}\n onCancel={onClose}\n destroyOnClose\n {...otherProps}\n className={classNames('v-dialog-modal', className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={divElement}\n footer={footerNew}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProviderWrapper>\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 window['__dialog_modal_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_modal_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '关闭',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelHidden: true,\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise, isString } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | '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?: ConfigProviderWrapperProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading' | 'hidden'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'hidden'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n okHidden?: boolean;\n cancelHidden?: boolean;\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 okHidden,\n cancelHidden,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(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 return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n {okHidden ? null : (\n <ButtonWrapper {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </ButtonWrapper>\n )}\n {cancelHidden ? null : (\n <ButtonWrapper type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle}>\n {okText || '提交'}\n </ButtonWrapper>\n )}\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n if (!okHidden || !cancelHidden) {\n return operateGroup;\n }\n return null;\n };\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Drawer\n maskClosable={true}\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 open={open}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProviderWrapper>\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 window['__dialog_drawer_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogDrawer.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_drawer_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal, theme } from 'antd';\nimport { CSSProperties, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useEffectCustom } from '../hooks';\nimport './loading.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogLoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogLoadingProps) => {\n const elementId = props.elementId;\n const { token } = theme.useToken();\n const colorPrimary = token.colorPrimary;\n\n const [open, setOpen] = useState(true);\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n });\n\n return (\n <Modal\n maskClosable={false}\n centered={true}\n destroyOnClose\n className={classNames('v-dialog-loading', props.className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={props.divElement}\n footer={null}\n // width={120}\n closable={false}\n style={{ '--v-loading-color': colorPrimary } as CSSProperties}\n >\n <div className={classNames('v-dialog-loading-content')}>\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">{props.message || '处理中'}</div>\n </div>\n </div>\n </Modal>\n );\n};\n\nexport const dialogLoading = {\n open: (props?: DialogLoadingProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_loading_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_loading_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n open: 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.open = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.open = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: 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 { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useEasyTableCtx, EasyTableCtxProvider] = createCtx<{\n modelKey: string;\n onRequest: (params?: TPlainObject) => void;\n tableList: TPlainObject[];\n tableTotal: number;\n loading?: boolean;\n initialValues?: TPlainObject;\n fieldNames: TPlainObject;\n}>();\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n queryCondition: TPlainObject;\n isInit: boolean;\n};\n\ntype ModelActionParams = {\n updateFilterCondition?: Partial<ModelState['queryCondition']>;\n resetFilterCondition: void;\n updateInitStatus: void;\n};\n\nconst defaultState: ModelState = {\n queryCondition: {},\n isInit: true,\n};\n\nconst _EasyTableModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n updateFilterCondition: (params) => {\n return (state) => {\n state.queryCondition = {\n ...state.queryCondition,\n ...params,\n };\n };\n },\n resetFilterCondition: () => {\n return (state) => {\n state.queryCondition = defaultState.queryCondition;\n };\n },\n updateInitStatus: () => {\n return (state) => {\n state.isInit = false;\n };\n },\n },\n state: defaultState,\n};\n\nconst easyTableModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const easyTableModel = (key: string) => {\n if (!easyTableModels[key]) {\n easyTableModels[key] = Model(_EasyTableModel);\n }\n return easyTableModels[key];\n};\n","import { cloneState } from '@dimjs/model';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\n\ntype EasyTableServiceConfig = {\n onRequest: (params?: TPlainObject) => Promise<TPlainObject>;\n requestParamsAdapter?: (params: TPlainObject) => TPlainObject;\n /**\n * 接口相应数据处理\n * @param params\n * ```\n * 返回数据为对象,包含两个字段\n * 1. 表格列表数据-Array\n * 2. 表格条数总数-Number\n * 其中 字段key 命名会通过 fieldNames 进行转义\n * ```\n */\n requestResultAdapter?: (params: TAny) => TPlainObject;\n};\n\nexport type EasyTableRefApi = {\n onRequest: (params?: TPlainObject) => void;\n queryCondition: TPlainObject;\n clearQueryCondition: (values?: TPlainObject) => void;\n};\n\nexport type EasyTableProps = {\n children: ReactElement | ReactElement[];\n modelKey: string;\n serviceConfig: EasyTableServiceConfig;\n initialValues?: TPlainObject;\n fieldNames?: { list?: string; total?: string; pageNo?: string; pageSize?: string };\n /** 初始化是否请求,默认值:true */\n initRequest?: boolean;\n};\n\n/**\n * 对 查询条件+表格数据 进行深度封装,内置数据交互处理\n * ```\n * 1. 需要获取查询条件、主动发起请求等可通过ref操作\n * 2. 可通过属性 initRequest 设置初始化是否请求数据\n * 3. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize\n * ```\n */\nexport const EasyTable = forwardRef<EasyTableRefApi, EasyTableProps>((props: EasyTableProps, ref) => {\n const [dataSource, setDataSource] = useState<TPlainObject[]>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n const [state, actions] = easyTableModel(props.modelKey).useStore();\n const fieldNames = {\n list: 'list',\n total: 'tatal',\n pageNo: 'pageNo',\n pageSize: 'pageSize',\n ...props.fieldNames,\n };\n\n useEffectCustom(() => {\n if (props.initRequest !== false || !state.isInit) {\n void onRequest(props.initialValues);\n }\n void actions.updateInitStatus();\n }, []);\n\n const onRequest = hooks.useCallbackRef(async (params) => {\n try {\n setLoading(true);\n const allState = await actions.updateFilterCondition(params);\n const queryCondition = cloneState(allState.queryCondition || {});\n const { requestParamsAdapter, onRequest, requestResultAdapter } = props.serviceConfig;\n const paramsNew = requestParamsAdapter ? requestParamsAdapter(queryCondition) : queryCondition;\n const respData = (await onRequest(paramsNew)) || {};\n const respDataNew = requestResultAdapter ? requestResultAdapter(respData) : respData;\n setDataSource(respDataNew[fieldNames.list]);\n setTotal(respDataNew[fieldNames.total]);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void message.error(error.message);\n }\n });\n\n const clearQueryCondition = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n if (values) {\n void actions.updateFilterCondition(values);\n }\n });\n\n useImperativeHandle(ref, () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n queryCondition: state.queryCondition,\n };\n });\n\n return (\n <EasyTableCtxProvider\n value={{\n modelKey: props.modelKey,\n onRequest,\n tableList: dataSource,\n tableTotal: total,\n loading,\n initialValues: props.initialValues,\n fieldNames,\n }}\n >\n {props.children}\n </EasyTableCtxProvider>\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 // 栅格占位格数,不考虑响应式\n span?: number;\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 * 1. 设置 span 栅格占位格数,不考虑响应式\n * 2. grid 自定义响应式网格布局\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\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) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n const span = temp.props?.span as number;\n return temp.props?.[screenType] || span || defaultGrid[screenType];\n });\n if (operateColIndex < 0) {\n return { gridList: _currentGridList, gridGroupList: [] };\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, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport { useThemeToken } from '../hooks';\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 theme = useThemeToken();\n const style = extend({ '--simple-layout-colorPrimary': theme.colorPrimary }, props.style, {\n padding: props.padding,\n 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 { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormOperateCol, FormOperateColProps, FormRow } from '../form-grid';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n // 查询按钮配置\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n // 重置按钮配置\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\n/**\n * 过滤条件\n * @param props\n * @returns\n *\n *```\n *1. 用法1\n * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * <EasyTableFilter>\n * <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * </EasyTableFilter>\n *\n * -- 自定义网格布局 使用 FormCol组件包装 Form.Item\n * <EasyTableFilter>\n * <FormCol span={12}><Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item></FormCol>\n * </EasyTableFilter>\n *\n * -- children 可为 function\n * <EasyTableFilter>\n * {(form) => {\n * return <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * }}\n * </EasyTableFilter>\n *2. 用户2(自定义布局)\n * EasyTableFilter设置 isPure = true,FormItem无布局规则\n *3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例\n *4. 默认布局下,可通过设置 filterOperate 设置操作按钮\n *```\n */\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const [form] = Form.useForm();\n\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children);\n const easyTableCtx = useEasyTableCtx();\n const [state, actions] = easyTableModel(easyTableCtx.modelKey).useStore();\n\n const onQuery = hooks.useCallbackRef(() => {\n easyTableCtx.onRequest(form.getFieldsValue());\n });\n\n const onReset = hooks.useCallbackRef(async () => {\n await actions.resetFilterCondition();\n form.resetFields();\n easyTableCtx.onRequest();\n });\n\n const formOperateColProps = {\n rightList: [\n <ButtonWrapper key=\"1\" type=\"primary\" onClick={onQuery} {...props.queryButtonProps}>\n {props.queryButtonProps?.text || '查询'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"2\" onClick={onReset} {...props.resetButtonProps}>\n {props.resetButtonProps?.text || '重置'}\n </ButtonWrapper>,\n ],\n ...props.filterOperate?.(form),\n };\n\n if (props.isPure) {\n return (\n <SimpleLayout>\n <Form\n form={form}\n initialValues={{\n ...easyTableCtx.initialValues,\n ...state.queryCondition,\n }}\n >\n {children}\n </Form>\n </SimpleLayout>\n );\n }\n\n const formRowChildren = childrens\n .map((item, index) => {\n if ((item as ReactElement).type['domTypeName'] === 'FormCol') {\n return item;\n }\n return <FormCol key={index}>{item}</FormCol>;\n })\n .concat(<FormOperateCol {...formOperateColProps} />);\n\n return (\n <SimpleLayout>\n <Form\n form={form}\n initialValues={{\n ...easyTableCtx.initialValues,\n ...state.queryCondition,\n }}\n >\n <FormRow gutter={[15, 0]}>{formRowChildren}</FormRow>\n </Form>\n </SimpleLayout>\n );\n};\n","import { TAny, TPlainObject } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement } from 'react';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'rowKey'> & {\n children?: ReactElement;\n /** 表格行 key 的取值,可以是字符串或一个函数 */\n rowKey: string | ((record: TPlainObject, index?: number) => React.Key);\n};\n\n/**\n * 表格渲染\n * @param props\n * ```\n * 1. 继承了 TableProps 可设置antd table功能\n * ```\n */\nexport const EasyTableTable = (props: EasyTableTableProps) => {\n const { children, ...otherProps } = props;\n\n const easyTableCtx = useEasyTableCtx();\n const [state] = easyTableModel(easyTableCtx.modelKey).useStore();\n const fieldNames = easyTableCtx.fieldNames;\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n easyTableCtx.onRequest({ [fieldNames.pageSize]: data.pageSize, [fieldNames.pageNo]: data.current });\n props.onChange?.(data, ...otherProps);\n };\n\n return (\n <SimpleLayout>\n {children ? <SimpleLayout>{children}</SimpleLayout> : null}\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n pagination={{\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo],\n pageSize: state.queryCondition[fieldNames.pageSize],\n total: easyTableCtx.tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n }}\n {...otherProps}\n rowKey={props.rowKey}\n onChange={onChangePage}\n loading={easyTableCtx.loading}\n dataSource={easyTableCtx.tableList}\n />\n </SimpleLayout>\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 hideHoverBgColor?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n },\n props.className,\n );\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { createContext } from 'react';\n\nexport type EditableFieldContextContextApi = {\n editable: boolean;\n editableIcon: boolean;\n isCtx: boolean;\n};\n\nexport const EditableFieldContext = createContext<EditableFieldContextContextApi>({\n editable: false,\n editableIcon: false,\n isCtx: false,\n});\n","import { CheckOutlined, CloseOutlined, EditOutlined } from '@ant-design/icons';\nimport { isArray, isNumber, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Space } from 'antd';\nimport { isValidElement, ReactElement, ReactNode, useContext, useEffect, useRef, useState } from 'react';\nimport { useThemeToken } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { IconWrapper } from '../icon-wrapper';\nimport { EditableFieldContext } from './context';\nimport './style.less';\n\nexport interface EditableFieldProps {\n editRender: ReactElement | ((data: { value?: TAny; onChange?: (data?: TAny) => void }) => ReactElement);\n viewRender?: (value?: TAny) => ReactNode;\n value?: TAny;\n onChange?: (data?: TAny) => void;\n placeholderValue?: string;\n\n className?: string;\n /** edit 区域是否铺满,editableIcon=false 无效 */\n isEditFull?: boolean;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否显示编辑操作icon,默认值:true */\n editableIcon?: boolean;\n}\n\n/**\n * 可编辑字段组件\n * @param props\n * @returns\n * ```\n * 字段渲染有两种状态\n * 1. 只读:如果value类型为复杂格式,必须要通过【viewRender】来进行处理操作,转成简单数据类型\n * 2. 编辑:FormItem value的格式要求必须满足编辑组件入参value要求\n * ```\n */\nexport const EditableField = (props: EditableFieldProps) => {\n const { value, onChange, viewRender, placeholderValue = '-', editRender, isEditFull } = props;\n const [isEdit, setIsEdit] = useState<boolean>(false);\n const tempValue = useRef<TAny>(value);\n const forceUpdate = hooks.useForceUpdate();\n const ctx = useContext(EditableFieldContext);\n\n const editableIcon = (function () {\n if (ctx.isCtx) {\n return props.editableIcon === undefined ? ctx.editableIcon : props.editableIcon;\n }\n return props.editableIcon === undefined ? true : props.editableIcon;\n })();\n const editable = (function () {\n if (ctx.isCtx) {\n return props.editable === undefined ? ctx.editable : props.editable;\n }\n return props.editable || false;\n })();\n\n const theme = useThemeToken();\n\n useEffectCustom(() => {\n tempValue.current = value;\n forceUpdate();\n }, [value]);\n\n useEffect(() => {\n setIsEdit(editable);\n }, [editable]);\n\n if (!isEdit) {\n const viewValue = viewRender?.(props.value) || props.value || placeholderValue;\n if (\n isString(viewValue) ||\n isNumber(viewValue) ||\n isUndefinedOrNull(viewValue) ||\n isValidElement(viewValue)\n ) {\n if (!editableIcon) {\n return viewValue;\n }\n return (\n <Space size={8}>\n <span>{viewValue}</span>\n <IconWrapper size=\"small\" icon={<EditOutlined />} onClick={setIsEdit.bind(null, true)} />\n </Space>\n );\n }\n console.warn('对象作为React子对象无效', viewValue);\n }\n\n const onCancel = () => {\n tempValue.current = value;\n setIsEdit(false);\n };\n\n const onEditChange = (value) => {\n let target = value;\n /** 为了处理 Input、TextArea等onChange取值 */\n if (typeof value === 'object' && !isArray(value) && value.target) {\n target = value.target?.value;\n }\n tempValue.current = target;\n if (editableIcon) {\n forceUpdate();\n } else {\n onChange?.(target);\n }\n };\n\n const onOk = () => {\n if (tempValue.current !== value) {\n onChange?.(tempValue.current);\n }\n setIsEdit(false);\n };\n\n const editRenderElement = isValidElement(editRender)\n ? editRender\n : editRender({ value: tempValue.current, onChange: onEditChange });\n\n if (!editableIcon) {\n return (\n <editRenderElement.type\n value={tempValue.current}\n onChange={onEditChange}\n {...editRenderElement.props}\n />\n );\n }\n\n return (\n <Space\n direction=\"horizontal\"\n size={12}\n style={{ display: 'flex', paddingRight: 6 }}\n className={classNames({ 'editable-field-full': isEditFull }, props.className)}\n >\n <span style={{ flex: 1 }}>\n <editRenderElement.type\n value={tempValue.current}\n onChange={onEditChange}\n {...editRenderElement.props}\n />\n </span>\n <IconWrapper\n size=\"small\"\n icon={<CheckOutlined style={{ color: theme.colorPrimary }} />}\n onClick={onOk}\n />\n <IconWrapper\n size=\"small\"\n icon={<CloseOutlined style={{ color: theme.colorPrimary }} />}\n onClick={onCancel}\n />\n </Space>\n );\n};\n","import { ReactElement } from 'react';\nimport { EditableFieldContext } from './context';\n\nexport interface EditableFieldProviderProps {\n children: ReactElement;\n editable?: boolean;\n editableIcon?: boolean;\n}\n\n/**\n * EditableField组件\n * @param props\n * @returns\n */\nexport const EditableFieldProvider = (props: EditableFieldProviderProps) => {\n const editable = props.editable === undefined ? true : props.editable;\n const editableIcon = props.editableIcon === undefined ? false : props.editableIcon;\n\n return (\n <EditableFieldContext.Provider value={{ editable, isCtx: true, editableIcon }}>\n {props.children}\n </EditableFieldContext.Provider>\n );\n};\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 inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, setInputKey] = 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 setInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={inputKey}\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 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 (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\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 inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, seInputKey] = 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 seInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={inputKey}\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 | 'mode'\n> & {\n /** 不支持 tags 模式,tags模式请使用antd Select 组件 */\n mode?: 'multiple';\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/**\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: SelectorWrapperProps) => {\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 = useMemo(() => serviceConfig?.params || {}, [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']);\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 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[optionsItemValueField]) {\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 tableRowIndex: props.tableRowIndex,\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","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties } from 'react';\nimport './style.less';\nimport { 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 { 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 { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport { useThemeToken } from '../../hooks';\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 const theme = useThemeToken();\n\n const style = { '--form-item-group-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={{ ...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 hidden?: boolean;\n required?: boolean;\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 hidden={props.hidden}\n required={props.required}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\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 { composeProps } from '@flatbiz/utils';\nimport { Form, FormItemProps } from 'antd';\nimport { cloneElement, isValidElement, ReactElement, ReactNode } from 'react';\n\nexport interface FormItemWrapperProps extends FormItemProps {\n wrapper?: (children: ReactNode) => ReactElement;\n}\n\ninterface FormItemWrapperChildrenProps {\n wrapper?: FormItemWrapperProps['wrapper'];\n children: React.ReactElement;\n}\n\nconst FormItemWrapperChildren = (props: FormItemWrapperChildrenProps) => {\n const { wrapper, children, ...rest } = props;\n // composeProps 合并执行 Form.Item 传的 onChange 以及组件本身的方法\n const _children = cloneElement(children, composeProps(children.props, rest, true));\n if (wrapper) {\n return wrapper(_children);\n }\n return _children;\n};\n\n/**\n * 对 Form.Item 的 children 增加 before、after\n * @param props\n * @returns\n */\nexport const FormItemWrapper = (props: FormItemWrapperProps) => {\n const { wrapper, children, ...rest } = props;\n\n return (\n <Form.Item {...rest}>\n {isValidElement(children) ? (\n <FormItemWrapperChildren wrapper={wrapper}>{children}</FormItemWrapperChildren>\n ) : (\n children\n )}\n </Form.Item>\n );\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 { 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 { Fragment, isValidElement, ReactElement, useState } from 'react';\n\ntype onClick = (e?: React.MouseEvent<HTMLElement>) => void;\n\nexport interface ModalActionProps {\n children: ReactElement | ((data: { onClose: () => void; open: boolean }) => ReactElement);\n action?:\n | (ReactElement & { onClick?: onClick })\n | ((data: { onClick: onClick; onClose: () => void; open: boolean }) => ReactElement);\n}\n\n/**\n * 弹框 触发器\n * ```\n * <ModalAction action={<Button type=\"primary\">打开</Button>}>\n * {({ onClose }) => (\n * <Modal onOk={onClose}>xxx</Modal>\n * )}\n * </ModalAction>\n * ```\n */\nexport const ModalAction = (props: ModalActionProps) => {\n const { action, children } = props;\n\n const [open, setOpen] = useState<boolean>(false);\n\n const handleOnClick = async (e: unknown) => {\n if (isValidElement(action)) {\n const { onClick } = action.props;\n if (typeof onClick === 'function') {\n await onClick?.(e);\n }\n }\n setOpen(true);\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const childrenReactElement = isValidElement(children) ? children : children({ onClose, open });\n\n return (\n <Fragment>\n {isValidElement(action) ? (\n <action.type {...action.props} onClick={handleOnClick} />\n ) : (\n action?.({ onClick: handleOnClick, onClose, open })\n )}\n <childrenReactElement.type\n open={open}\n onClose={onClose}\n onCancel={onClose}\n {...childrenReactElement.props}\n />\n </Fragment>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n open: 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.open = true;\n };\n },\n closeModal() {\n return (state) => {\n state.open = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: 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","import { Result } from 'antd';\n\nexport type Page404Props = {\n message?: string;\n};\n\nexport const Page404 = (props: Page404Props) => {\n return <Result status=\"404\" title=\"404\" subTitle={props.message} />;\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 label_value_vertical: 'form-label-value-vertical',\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 label_value_vertical: 'form-item-label-value-vertical',\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 { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n const theme = useThemeToken();\n\n const style = { '--rule-describe-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames('v-rule-describe', props.className)} style={style}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label;\n const optionsItemValueField = fieldNames?.value;\n const optionsItemDisabledField = fieldNames?.disabled;\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\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 { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagListSelectValue = string | number | boolean;\nexport type TagListSelectDataItem = { label: string; value: TagListSelectValue; color?: string };\n\nexport type TagListSelectProps = {\n dataList: TagListSelectDataItem[];\n /** 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同 */\n colorMap?: Record<string, string>;\n value?: TagListSelectValue;\n /** 是否强制匹配,默认值false */\n forceMatch?: boolean;\n};\n\n/**\n * 在列表数据中通过value匹配数据,以Tag形式展示\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagListSelect: FC<TagListSelectProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagListSelect.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } 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 { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagListSelect, TagListSelectProps } from '../tag-list-select';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\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, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value || defaultValue;\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: TagListSelectProps['dataList'],\n colorMap?: TagListSelectProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagListSelect dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容 */\n extra: ReactElement;\n onClick?: (e) => void;\n // 是否显示数据\n showData?: boolean;\n // 显示最大长度,多余省略\n showMaxNumber?: number;\n extraPosition?: 'before' | 'after';\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n if (options.extra && showData) {\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n if (options.extra) {\n return options.extra;\n }\n return <span onClick={options.onClick}>{value}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示数据,默认值:true\n * 3. onClick 点击事件,showData != false 有效\n * 4. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\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 * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content?: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} className={className} defaultActiveKey={defaultActiveKey} onChange={onChange} />\n );\n};\n","import { Space, SpaceProps, Tag } from 'antd';\nimport { FC } from 'react';\nimport { useThemeToken } from '../hooks';\n\ntype TagGroupDataItem = { label: string; value: string | number; color?: string };\n\nexport type TagGroupProps = {\n dataList: TagGroupDataItem[];\n /**\n * 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同\n */\n colorMap?: Record<string, string>;\n spaceProps?: SpaceProps;\n};\n\n/**\n * Tag 列表显示\n */\nexport const TagGroup: FC<TagGroupProps> = (props) => {\n const theme = useThemeToken();\n return (\n <Space wrap size={5} {...props.spaceProps}>\n {props.dataList.map((item, index) => {\n const color = item.color || props.colorMap?.[item.value] || theme.colorPrimary;\n return (\n <Tag color={color} key={index}>\n {item.label}\n </Tag>\n );\n })}\n </Space>\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\ndayjs.extend(isSameOrBefore);\ndayjs.extend(isSameOrAfter);\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * 1. minTime、maxTime设置为 DayjsTimeTypeEnum,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimePickerWrapper = (props: TimePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, format, ...otherProps } = props;\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const customFormat = format || DayjsTimeTypeEnum.Hms;\n\n const onChangeTime = hooks.useCallbackRef((time: dayjs.Dayjs | null, timeString: string) => {\n if (time) {\n onChange?.(timeString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value) {\n return dayjs(value, customFormat);\n }\n return undefined;\n }, [customFormat, props.value]);\n\n const getDisabledTime: TimePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n const showNow = useMemo(() => {\n const now = dayjs();\n return (\n now.isSameOrAfter(dayjs(minTime || '00:00:00', customFormat)) &&\n now.isSameOrBefore(dayjs(maxTime || '23:59:59', customFormat))\n );\n }, [customFormat, maxTime, minTime]);\n\n return (\n <TimePicker\n showNow={showNow}\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={customFormat}\n />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimeRangePickerProps } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type TimeRangePickerWrapperProps = Omit<TimeRangePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minTime、maxTime设置格式,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n// export declare type EventValue<DateType> = DateType | null;\n// export declare type RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 HH:mm:ss,其他格式化类型自定义format\n * 4. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, ...otherProps } = props;\n\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const format = useMemo(() => {\n return props.format || DayjsTimeTypeEnum.Hms;\n }, [props.format]);\n\n const onChangeTime = hooks.useCallbackRef((date, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n onChange?.([timeStart, timeEnd]);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value && value.length > 0) {\n return [\n value[0] ? dayjs(value[0], format) : value[0],\n value[1] ? dayjs(value[1], format) : value[1],\n ] as [Dayjs, Dayjs];\n }\n return undefined;\n }, [props.value, format]);\n\n const getDisabledTime: TimeRangePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n return (\n <TimePicker.RangePicker\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={format}\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 { useEffectCustom } from '../hooks';\nimport { TimeRangePickerWrapper, TimeRangePickerWrapperProps } from '../time-range-picker-wrapper';\nimport { FormItemNamePath } from '../types';\n\nexport type TimeRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 TimeRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n timeRangePickerWrapperProps?: Omit<TimeRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_time_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const TimeRangePickerWrapperFormItem = (props: TimeRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, timeRangePickerWrapperProps, ...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_time_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_time_${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 const bodyVal = Form.useWatch(bodyName, 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, bodyVal]);\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 <TimeRangePickerWrapper {...timeRangePickerWrapperProps} 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","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: TreeSelectorWrapperProps) => {\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 const isMultiple = otherProps.treeCheckable;\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 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 const treeSelectValue = useMemo(() => {\n if (isArray(renderValueList) && renderValueList.length === 0) {\n return undefined;\n }\n return isMultiple ? renderValueList : renderValueList[0];\n }, [isMultiple, renderValueList]);\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 popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeSelectValue}\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, TAny, 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?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => 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: TAny[]) => {\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: TAny[]): TAny[] =>\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","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonWrapper","useState","loading","_useState","setLoading","debounceDuration","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","hidden","jsx","Button","_extends","useArrayChange","dataList","forceUpdate","changeListRef","useRef","update","useForceUpdate","arrayOperate","add","useCallbackRef","dataItem","isUnshift","targetList","current","concat","index","target","delete","deleteItem","splice","resetList","getList","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useSafeState","initialState","setState","isMounted","useIsMounted","value","useThemeToken","theme","useToken","token","dayjs","extend","customParseFormat","advancedFormat","weekday","localeData","weekOfYear","weekYear","dayjsUtc","ConfigProviderWrapper","locale","otherProps","_excluded","ConfigProvider","componentSize","space","size","enUS","zhCN","DropdownMenuWrapper","menuList","dropdownOtherProps","menuItems","open","setOpen","_useState2","onConfirmtTriggerClick","event","stopPropagation","onConfirm","item","forEach","text","color","permission","needConfirm","confirmMessage","type","style","popconfirmProps","_excluded2","newStyle","buttonType","nromal","key","label","_createElement","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","menu","items","onOpenChange","_open","ButtonOperate","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","map","placement","DefaultButton","undefined","createElement","length","foldIcon","_MoreOutlined","buttonTheme","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","components","defaultProps","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","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","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","_extends2","targetOption","$await_3","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","popupClassName","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","_createCtx","_createCtx2","useCheckListCtx","CheckListCtxProvider","getValueList","CheckList","checkedValues","_useArrayChange","defaultValue","useUpdateEffect","defaultChange","targetIndex","newValues","selectedValue","onPreChange","$If_1","call","this","findIndex","temp","required","beforeExtra","afterExtra","CheckListItem","_classNames2","context","checked","checkedClassPrefix","readonly","CssNodeHover","cloneElement","DayjsDateTypeEnum","DayjsTimeTypeEnum","range","start","end","i","getDisabledHour","_options$minDateTime","_options$maxDateTime","minTimeHour","maxTimeHour","minDateTime","format","YMD","get","maxDateTime","selectableMinute","disabledHourList","_options$disabledHour","getDisabledMinute","_options$minDateTime2","_options$maxDateTime2","minTimeMinute","maxTimeMinute","YMDH","disabledMinuteList","_options$disabledMinu","getDisabledSecond","_options$minDateTime3","_options$maxDateTime3","minTimeSecond","maxTimeSecond","YMDHm","disabledSecondList","_options$disabledSeco","DatePickerWrapper","_ref","disabledDateConfig","minDate","maxDate","minDateTimeDayInst","maxDateTimeDayInst","customFormat","showTime","YMDHms","onChangeDate","date","dateString","getDisabledDate","currentDate","flatbizDate","in","gte","datePickerValue","dateNormalize","getDisabledTime","Date","disabledHours","disabledMinutes","disabledSeconds","DatePicker","disabledDate","disabledTime","width","DateRangePickerWrapper","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref2","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","cancelButtonProps","content","configProviderProps","okHidden","cancelHidden","footer","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","operateGroup","footerNew","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","_window$elementId2","_window2","dialogConfirm","dialogAlert","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","jsxs","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","dialogDrawer","closable","dialogLoading","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWrapperContent","operationProps","DrawerWrapperFooter","DrawerWrapper","keyboard","forceRender","Content","Footer","drawerModels","createDrawerWrapperModel","useEasyTableCtx","EasyTableCtxProvider","queryCondition","isInit","_EasyTableModel","updateFilterCondition","resetFilterCondition","updateInitStatus","easyTableModels","easyTableModel","EasyTable","dataSource","setDataSource","total","setTotal","_useState3","_easyTableModel$useSt","list","pageNo","pageSize","initRequest","initialValues","allState","_props$serviceConfig","requestParamsAdapter","_onRequest","requestResultAdapter","paramsNew","respDataNew","clearQueryCondition","$await_4","tableList","tableTotal","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_objectWithoutPropertiesLoose","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","keys","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","currentValue","hasOperateList","find","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_temp$props2","span","itemProps","newProps","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","contentStyle","EasyTableFilter","_props$queryButtonPro","_props$resetButtonPro","childrens","Children","easyTableCtx","onQuery","getFieldsValue","onReset","resetFields","formOperateColProps","queryButtonProps","resetButtonProps","filterOperate","isPure","formRowChildren","gutter","EasyTableTable","onChangePage","_easyTableCtx$onReque","_len","arguments","Array","_key","Table","scroll","x","bordered","pagination","showSizeChanger","showTotal","rowKey","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","EditableFieldContext","createContext","editable","editableIcon","isCtx","EditableField","viewRender","_props$placeholderVal","placeholderValue","editRender","isEditFull","isEdit","setIsEdit","tempValue","ctx","useContext","viewValue","_isNumber","_EditOutlined","warn","onEditChange","_value$target","editRenderElement","direction","display","paddingRight","flex","_CheckOutlined","_CloseOutlined","EditableFieldProvider","Provider","getEditable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","inputValueRef","isFirstUseValueRef","inputKey","setInputKey","nativeEvent","onCompositionEnd","InputSearchWrapper","defaultSearchInputKey","setDefaultSearchInputKey","Search","InputTextAreaWrapper","seInputKey","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","arrayField2LabelValue","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","isNumber","_isBoolean","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","tempUid","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","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","onTableAfterRender","block","_PlusOutlined","EditorWrapper","_","editor","getContent","respValue","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FlexLayout","gap","fullIndexList","fullIndex","_children$props","childrenStyle","marginRight","marginBottom","FormItemCard","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","FormItemWrapperChildren","wrapper","rest","_children","composeProps","FormItemWrapper","Gap","inline","LabelValueLayout","labelWidth","Descriptions","column","ModalAction","action","handleOnClick","_onClick","$If_2","childrenReactElement","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","modalModels","createModalWrapperModel","PageFixedFooter","Page404","Result","subTitle","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","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","isCancel","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","ruleItemDescStyle","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagListSelect","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","handle","showData","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","isSticky","_props$isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","cacheKey","activeKey","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","Tabs","TagGroup","spaceProps","isSameOrBefore","isSameOrAfter","TimePickerWrapper","disabledTimeConfig","minTime","maxTime","Hms","onChangeTime","time","timeString","timePickerValue","hour","minute","showNow","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckable","treeCheckStrictly","innerOperateValue","setInnerOperateValue","log","expandedKeys","getTreeExpandedKeys","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","treeSelectValue","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","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/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-array-change.ts","@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/hooks/use-theme.ts","@flatbiz/antd/src/config-provider-wrapper/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/check-list/context.ts","@flatbiz/antd/src/check-list/utils.ts","@flatbiz/antd/src/check-list/check-list.tsx","@flatbiz/antd/src/check-list/check-list-item.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/types/index.ts","@flatbiz/antd/src/_utils/time.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/modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@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/easy-table/context.ts","@flatbiz/antd/src/easy-table/model.ts","@flatbiz/antd/src/easy-table/easy-table.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/simple-layout/index.tsx","@flatbiz/antd/src/easy-table/filter.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/editable-field/context.ts","@flatbiz/antd/src/editable-field/editable-field.tsx","@flatbiz/antd/src/editable-field/editable-field-provider.tsx","@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/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/flex-layout/index.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/form-item-wrapper/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/local-loading/index.tsx","@flatbiz/antd/src/modal-action/index.tsx","@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/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-list-select/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/tag-group/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.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 './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 { isUndefinedOrNull, TAny } 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: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n hidden?: boolean;\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\n if (props.hidden) {\n return null;\n }\n\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { useRef } from 'react';\n\nexport const useArrayChange = <T>(dataList: Array<T>, forceUpdate = true) => {\n const changeListRef = useRef<Array<T>>(dataList);\n const update = hooks.useForceUpdate();\n const arrayOperate = {\n add: hooks.useCallbackRef((dataItem: T | Array<T>, isUnshift?: boolean) => {\n if (isUnshift) {\n const targetList = isArray(dataItem) ? dataItem : [dataItem];\n changeListRef.current = [...targetList, ...changeListRef.current];\n } else {\n changeListRef.current = changeListRef.current.concat(dataItem);\n }\n forceUpdate && update();\n }),\n update: hooks.useCallbackRef((index: number, dataItem: T) => {\n const target = changeListRef.current[index];\n if (target) {\n changeListRef.current[index] = { ...target, ...dataItem };\n }\n forceUpdate && update();\n }),\n delete: hooks.useCallbackRef((index: number) => {\n const deleteItem = changeListRef.current.splice(index, 1);\n forceUpdate && update();\n return deleteItem;\n }),\n resetList: hooks.useCallbackRef((dataList: Array<T>) => {\n changeListRef.current = dataList;\n forceUpdate && update();\n }),\n getList: hooks.useCallbackRef(() => {\n return changeListRef.current;\n }),\n };\n return [changeListRef.current, arrayOperate] as const;\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 { theme } from 'antd';\n\nexport const useThemeToken = () => {\n const { token } = theme.useToken();\n return token;\n};\n","import { ConfigProvider } from 'antd';\nimport { ConfigProviderProps } from 'antd/es/config-provider';\nimport enUS from 'antd/locale/en_US';\nimport zhCN from 'antd/locale/zh_CN';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/zh-cn';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport weekday from 'dayjs/plugin/weekday';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\nimport weekYear from 'dayjs/plugin/weekYear';\nimport { useEffectCustom } from '../hooks';\ndayjs.extend(customParseFormat);\ndayjs.extend(advancedFormat);\ndayjs.extend(weekday);\ndayjs.extend(localeData);\ndayjs.extend(weekOfYear);\ndayjs.extend(weekYear);\ndayjs.extend(dayjsUtc);\n\nexport type ConfigProviderWrapperProps = Omit<ConfigProviderProps, 'locale'> & {\n locale?: 'en' | 'zh-cn';\n};\n\nexport const ConfigProviderWrapper = (props: ConfigProviderWrapperProps) => {\n const { locale, ...otherProps } = props;\n\n useEffectCustom(() => {\n dayjs.locale((props.locale as unknown as string) || 'zh-cn');\n }, []);\n return (\n <ConfigProvider\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...otherProps}\n locale={locale === 'en' ? enUS : zhCN}\n >\n {props.children}\n </ConfigProvider>\n );\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\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, 'menu'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setOpen(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 setOpen(false);\n setLoading(false);\n });\n return;\n }\n setOpen(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n return 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 <ButtonWrapper\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </ButtonWrapper>\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 setOpen(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n open={open}\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 menu={{ items: menuItems }}\n onOpenChange={(_open) => {\n if (!_open) {\n setOpen(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 { toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { OverrideToken } from 'antd/es/theme/interface';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper } from '../config-provider-wrapper';\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 // 是否折叠合拢\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true,则会隐藏\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 split?: boolean;\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 (!hasPermission(item.permission)) {\n return false;\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 const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const size = !props.split ? toArray<number>(props.size)[0] || 10 : 0;\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={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 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 onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n >\n <DefaultButton\n {...otherProps}\n onClick={undefined}\n type={type}\n danger\n style={style}\n color={color}\n >\n {text}\n </DefaultButton>\n </Popconfirm>\n );\n }\n return (\n <DefaultButton\n {...otherProps}\n type={type}\n style={style}\n key={index}\n onClick={onClick}\n color={color}\n >\n {text}\n </DefaultButton>\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\nconst DefaultButton = (props) => {\n if (props.color && !props.disabled) {\n let buttonTheme: OverrideToken['Button'] = {};\n if (props.type === 'link') {\n buttonTheme = {\n colorLink: props.color,\n colorLinkActive: props.color,\n colorLinkHover: props.color,\n };\n } else if (props.type === 'primary') {\n buttonTheme = {\n colorPrimary: props.color,\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n };\n } else {\n buttonTheme = {\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n colorText: props.color,\n colorBorder: props.color,\n };\n }\n\n return (\n <ConfigProviderWrapper\n theme={{\n components: {\n Button: buttonTheme,\n },\n }}\n >\n <ButtonWrapper {...props}>{props.children}</ButtonWrapper>\n </ConfigProviderWrapper>\n );\n }\n return <ButtonWrapper {...props}>{props.children}</ButtonWrapper>;\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n split: true,\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 { classNames, 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';\nimport './style.less';\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 onSelectorListChange?: (dataList: TPlainObject[]) => void;\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 * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = 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 onSelectorListChange?.(respAdapterData || []);\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 if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\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 const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\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 void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\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 const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n popupClassName={classNames('cascader-wrapper-popup', otherProps.popupClassName)}\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 onClear={onClear}\n />\n );\n});\n","import { createCtx } from '@wove/react';\nimport { CheckListItemValue } from './types';\n\nexport const [useCheckListCtx, CheckListCtxProvider] = createCtx<{\n checkedValues: CheckListItemValue[];\n onChange: (value: CheckListItemValue, defaultChange?: boolean) => void;\n stopPropagation?: boolean;\n}>();\n","import { toArray } from '@flatbiz/utils';\nimport { CheckListItemValue, CheckListValue } from './types';\n\nexport const getValueList = (value?: CheckListValue, multiple?: boolean) => {\n if (value !== undefined) {\n const valueList = toArray<CheckListItemValue>(value);\n return multiple ? valueList : valueList.splice(0, 1);\n }\n return null;\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { ReactNode, useMemo } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { useArrayChange } from '../hooks/use-array-change';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport { CheckListCtxProvider } from './context';\nimport './style.less';\nimport { CheckListItemValue } from './types';\nimport { getValueList } from './utils';\n\nexport type CheckListSelectedValue<T extends 'multi' | 'radio'> = T extends 'multi'\n ? CheckListItemValue[]\n : CheckListItemValue;\n\nexport type CheckListProps<T extends 'multi' | 'radio'> = {\n multiple?: boolean;\n onChange?: (value: CheckListSelectedValue<T>, operateValue: CheckListItemValue) => void;\n onPreChange?: (value: CheckListItemValue) => Promise<void>;\n value?: CheckListSelectedValue<T>;\n defaultValue?: CheckListSelectedValue<T>;\n beforeExtra?: ReactNode;\n afterExtra?: ReactNode;\n stopPropagation?: boolean;\n required?: boolean;\n} & CommonPropsWithChildren;\n\nexport const CheckList = <T extends 'multi' | 'radio'>(props: CheckListProps<T>) => {\n const [checkedValues, arrayOperate] = useArrayChange<CheckListItemValue>([]);\n\n const valueList = useMemo(() => {\n return getValueList(props.value, props.multiple);\n }, [props.value, props.multiple]);\n\n useEffectCustom(() => {\n const current = valueList || getValueList(props.defaultValue, props.multiple);\n arrayOperate.resetList(current || []);\n }, []);\n\n hooks.useUpdateEffect(() => {\n arrayOperate.resetList(valueList || []);\n }, [valueList]);\n\n const onChange = hooks.useCallbackRef(async (value: CheckListItemValue, defaultChange) => {\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n const targetIndex = checkedValues.findIndex((temp) => temp === value);\n if (props.multiple === true) {\n if (checkedValues.length === 1 && targetIndex >= 0 && props.required) {\n return;\n }\n if (targetIndex >= 0) {\n arrayOperate.delete(targetIndex);\n } else {\n arrayOperate.add(value);\n }\n } else {\n if (targetIndex >= 0 && props.required) {\n return;\n } else {\n arrayOperate.resetList(targetIndex >= 0 ? [] : [value]);\n }\n }\n if (!defaultChange) {\n const newValues = arrayOperate.getList();\n let selectedValue;\n if (props.multiple) {\n selectedValue = newValues.length > 0 ? extend([], newValues) : undefined;\n } else {\n selectedValue = newValues.length > 0 ? newValues[0] : undefined;\n }\n props.onChange?.(selectedValue as CheckListSelectedValue<T>, value);\n }\n });\n\n return (\n <div className={classNames('check-list', props.className)} style={props.style}>\n <CheckListCtxProvider\n value={{\n onChange,\n checkedValues,\n stopPropagation: props.stopPropagation,\n }}\n >\n {props.beforeExtra}\n {props.children}\n {props.afterExtra}\n </CheckListCtxProvider>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement } from 'react';\nimport { useCheckListCtx } from './context';\nimport { CheckListItemValue } from './types';\n\nexport type CheckListItemContentProps = {\n checked?: boolean;\n disabled?: boolean;\n onClick?: (event) => void;\n className?: string;\n readonly?: boolean;\n style?: CSSProperties;\n};\n\nexport type CheckListItemProps = {\n value: CheckListItemValue;\n disabled?: boolean;\n readonly?: boolean;\n children: (data: CheckListItemContentProps) => ReactElement;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const CheckListItem = (props: CheckListItemProps) => {\n const context = useCheckListCtx();\n\n if (context === null) {\n console.error('CheckList.Item can only be used inside CheckList.');\n return null;\n }\n\n const onClick = hooks.useCallbackRef((event) => {\n if (context.stopPropagation) {\n event.stopPropagation();\n }\n if (!props.disabled) {\n context?.onChange(props.value);\n }\n });\n\n const checked = context?.checkedValues.findIndex((temp) => temp === props.value) >= 0;\n const checkedClassPrefix = 'check-list';\n\n const className = classNames(\n `${checkedClassPrefix}-item`,\n {\n [`${checkedClassPrefix}-disabled`]: props.disabled,\n [`${checkedClassPrefix}-readonly`]: props.readonly,\n [`${checkedClassPrefix}-checked`]: checked,\n },\n props.className,\n );\n\n return props.children({\n onClick,\n checked,\n disabled: props.disabled,\n readonly: props.readonly,\n className,\n style: props.style,\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","export type FormItemNamePath = string | number | Array<string | number>;\n\nexport enum DayjsDateTypeEnum {\n YMDHms = 'YYYY-MM-DD HH:mm:ss',\n YMDHm = 'YYYY-MM-DD HH:mm',\n YMDH = 'YYYY-MM-DD HH',\n YMD = 'YYYY-MM-DD',\n}\n\nexport enum DayjsTimeTypeEnum {\n Hms = 'HH:mm:ss',\n Hm = 'HH:mm',\n H = 'HH',\n ms = 'mm:ss',\n m = 'mm',\n s = 'ss',\n}\n","import { Dayjs } from 'dayjs';\nimport { DayjsDateTypeEnum } from '../types';\n\nconst range = (start: number, end: number) => {\n const result: number[] = [];\n for (let i = start; i <= end; i++) {\n result.push(i);\n }\n return result;\n};\nexport const getDisabledHour = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledHourList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeHour = 0;\n let maxTimeHour = 23;\n\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n minTimeHour = options.minDateTime.get('hour');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n maxTimeHour = options.maxDateTime.get('hour');\n }\n let selectableMinute = range(minTimeHour, maxTimeHour);\n if (options.disabledHourList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledHourList?.includes(item));\n }\n return range(0, 23).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledMinute = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledMinuteList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeMinute = 0;\n let maxTimeMinute = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n minTimeMinute = options.minDateTime.get('minute');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n maxTimeMinute = options.maxDateTime.get('minute');\n }\n let selectableMinute = range(minTimeMinute, maxTimeMinute);\n if (options.disabledMinuteList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledMinuteList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledSecond = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledSecondList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeSecond = 0;\n let maxTimeSecond = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n minTimeSecond = options.minDateTime.get('second');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n maxTimeSecond = options.maxDateTime.get('second');\n }\n let selectableMinute = range(minTimeSecond, maxTimeSecond);\n if (options.disabledSecondList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledSecondList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport type { PickerDateProps } from 'antd/es/date-picker/generatePicker';\nimport dayjs from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<dayjs.Dayjs>, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:DayjsDateTypeEnum\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n\n format?: DayjsDateTypeEnum;\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型 DayjsDateTypeEnum.YMDHms;其他格式化类型自定义format\n * 4. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 5. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, 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: dayjs.Dayjs) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return dayjs(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || datePickerValue || dayjs(new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\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 type { Dayjs } from 'dayjs';\nimport dayjs from 'dayjs';\nimport { useMemo, useState } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<Dayjs>,\n 'value' | 'onChange' | 'onCalendarChange' | 'disabledDate' | 'format'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:DayjsDateTypeEnum\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsDateTypeEnum;\n};\n\ntype RangeValue = [Dayjs | null, Dayjs | 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;其他格式化类型自定义format\n * 4. 可设置disabledDateConfig,来控制日期项的disbaled状态\n * 5. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 6. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format, onOpenChange: onAntdOpenChange, ...otherProps } = props;\n const { maxDays, minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\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 [dayjs(newDate1), dayjs(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Dayjs, Dayjs];\n\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime === true) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\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(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), 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 onAntdOpenChange?.(open);\n };\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || dayjs(date1 || new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker.RangePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val as RangeValue)}\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';\nimport { FormItemNamePath } from '../types';\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 const bodyVal = Form.useWatch(bodyName, 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, bodyVal]);\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, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<\n ModalProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'okButtonProps' | 'cancelButtonProps'\n> & {\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?: ConfigProviderWrapperProps;\n okHidden?: boolean;\n cancelHidden?: boolean;\n okButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n cancelButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n cancelButtonProps,\n content,\n configProviderProps,\n className,\n okHidden,\n cancelHidden,\n footer,\n cancelText,\n okText,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(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 return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n const operateGroup = [\n <ButtonWrapper key=\"0\" {...cancelButtonProps} onClick={onCancelHandle} hidden={cancelHidden}>\n {cancelText || '取消'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"1\" type=\"primary\" {...okButtonProps} onClick={onOkHandle} hidden={okHidden}>\n {okText || '提交'}\n </ButtonWrapper>,\n ];\n\n const footerNew = footer || operateGroup;\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n maskClosable={true}\n centered={true}\n onCancel={onClose}\n destroyOnClose\n {...otherProps}\n className={classNames('v-dialog-modal', className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={divElement}\n footer={footerNew}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProviderWrapper>\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 window['__dialog_modal_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_modal_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '关闭',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelHidden: true,\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise, isString } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | '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?: ConfigProviderWrapperProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading' | 'hidden'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'hidden'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n okHidden?: boolean;\n cancelHidden?: boolean;\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 okHidden,\n cancelHidden,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(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 return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n {cancelHidden ? null : (\n <ButtonWrapper {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </ButtonWrapper>\n )}\n {okHidden ? null : (\n <ButtonWrapper type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle}>\n {okText || '提交'}\n </ButtonWrapper>\n )}\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n if (!okHidden || !cancelHidden) {\n return operateGroup;\n }\n return null;\n };\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Drawer\n maskClosable={true}\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 open={open}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProviderWrapper>\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 window['__dialog_drawer_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogDrawer.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_drawer_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal, theme } from 'antd';\nimport { CSSProperties, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useEffectCustom } from '../hooks';\nimport './loading.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogLoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogLoadingProps) => {\n const elementId = props.elementId;\n const { token } = theme.useToken();\n const colorPrimary = token.colorPrimary;\n\n const [open, setOpen] = useState(true);\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n });\n\n return (\n <Modal\n maskClosable={false}\n centered={true}\n destroyOnClose\n className={classNames('v-dialog-loading', props.className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={props.divElement}\n footer={null}\n // width={120}\n closable={false}\n style={{ '--v-loading-color': colorPrimary } as CSSProperties}\n >\n <div className={classNames('v-dialog-loading-content')}>\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">{props.message || '处理中'}</div>\n </div>\n </div>\n </Modal>\n );\n};\n\nexport const dialogLoading = {\n open: (props?: DialogLoadingProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_loading_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_loading_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n open: 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.open = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.open = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: 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 { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useEasyTableCtx, EasyTableCtxProvider] = createCtx<{\n modelKey: string;\n onRequest: (params?: TPlainObject) => void;\n tableList: TPlainObject[];\n tableTotal: number;\n loading?: boolean;\n initialValues?: TPlainObject;\n fieldNames: TPlainObject;\n}>();\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n queryCondition: TPlainObject;\n isInit: boolean;\n};\n\ntype ModelActionParams = {\n updateFilterCondition?: Partial<ModelState['queryCondition']>;\n resetFilterCondition: void;\n updateInitStatus: void;\n};\n\nconst defaultState: ModelState = {\n queryCondition: {},\n isInit: true,\n};\n\nconst _EasyTableModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n updateFilterCondition: (params) => {\n return (state) => {\n state.queryCondition = {\n ...state.queryCondition,\n ...params,\n };\n };\n },\n resetFilterCondition: () => {\n return (state) => {\n state.queryCondition = defaultState.queryCondition;\n };\n },\n updateInitStatus: () => {\n return (state) => {\n state.isInit = false;\n };\n },\n },\n state: defaultState,\n};\n\nconst easyTableModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const easyTableModel = (key: string) => {\n if (!easyTableModels[key]) {\n easyTableModels[key] = Model(_EasyTableModel);\n }\n return easyTableModels[key];\n};\n","import { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\n\ntype EasyTableServiceConfig = {\n onRequest: (params?: TPlainObject) => Promise<TPlainObject>;\n requestParamsAdapter?: (params: TPlainObject) => TPlainObject;\n /**\n * 接口相应数据处理\n * @param params\n * ```\n * 返回数据为对象,包含两个字段\n * 1. 表格列表数据-Array\n * 2. 表格条数总数-Number\n * 其中 字段key 命名会通过 fieldNames 进行转义\n * ```\n */\n requestResultAdapter?: (params: TAny) => TPlainObject;\n};\n\nexport type EasyTableRefApi = {\n onRequest: (params?: TPlainObject) => void;\n queryCondition: TPlainObject;\n clearQueryCondition: (values?: TPlainObject) => void;\n};\n\nexport type EasyTableProps = {\n children: ReactElement | ReactElement[];\n modelKey: string;\n serviceConfig: EasyTableServiceConfig;\n initialValues?: TPlainObject;\n fieldNames?: { list?: string; total?: string; pageNo?: string; pageSize?: string; uid?: string };\n /** 初始化是否请求,默认值:true */\n initRequest?: boolean;\n};\n\n/**\n * 对 查询条件+表格数据 进行深度封装,内置数据交互处理\n * ```\n * 1. 需要获取查询条件、主动发起请求等可通过ref操作\n * 2. 可通过属性 initRequest 设置初始化是否请求数据\n * 3. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize\n * ```\n */\nexport const EasyTable = forwardRef<EasyTableRefApi, EasyTableProps>((props: EasyTableProps, ref) => {\n const [dataSource, setDataSource] = useState<TPlainObject[]>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n const [state, actions] = easyTableModel(props.modelKey).useStore();\n const fieldNames = {\n list: 'list',\n total: 'tatal',\n pageNo: 'pageNo',\n pageSize: 'pageSize',\n ...props.fieldNames,\n };\n\n useEffectCustom(() => {\n if (props.initRequest !== false || !state.isInit) {\n void onRequest(props.initialValues);\n }\n void actions.updateInitStatus();\n }, []);\n\n const onRequest = hooks.useCallbackRef(async (params) => {\n try {\n setLoading(true);\n const allState = await actions.updateFilterCondition(params);\n const queryCondition = cloneState(allState.queryCondition || {});\n const { requestParamsAdapter, onRequest, requestResultAdapter } = props.serviceConfig;\n const paramsNew = requestParamsAdapter ? requestParamsAdapter(queryCondition) : queryCondition;\n const respData = (await onRequest(paramsNew)) || {};\n const respDataNew = requestResultAdapter ? requestResultAdapter(respData) : respData;\n const respList = respDataNew[fieldNames.list];\n setDataSource(isArray(respList) ? respList : []);\n setTotal(respDataNew[fieldNames.total]);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void message.error(error.message);\n }\n });\n\n const clearQueryCondition = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n if (values) {\n void actions.updateFilterCondition(values);\n }\n });\n\n useImperativeHandle(ref, () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n queryCondition: state.queryCondition,\n };\n });\n\n return (\n <EasyTableCtxProvider\n value={{\n modelKey: props.modelKey,\n onRequest,\n tableList: dataSource,\n tableTotal: total,\n loading,\n initialValues: props.initialValues,\n fieldNames,\n }}\n >\n {props.children}\n </EasyTableCtxProvider>\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 // 栅格占位格数,不考虑响应式\n span?: number;\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 * 1. 设置 span 栅格占位格数,不考虑响应式\n * 2. grid 自定义响应式网格布局\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\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) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n const span = temp.props?.span as number;\n return temp.props?.[screenType] || span || defaultGrid[screenType];\n });\n if (operateColIndex < 0) {\n return { gridList: _currentGridList, gridGroupList: [] };\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 { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement | 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 theme = useThemeToken();\n const style = extend({ '--simple-layout-colorPrimary': theme.colorPrimary }, props.style, {\n padding: props.padding,\n 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 && !isArray(props.desc) ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.desc && isArray(props.desc) ? (\n <div className=\"simple-layout-desc\">\n <Space direction=\"vertical\" size={5}>\n {(props.desc as string[]).map((item) => {\n return item;\n })}\n </Space>\n </div>\n ) : 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 { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormOperateCol, FormOperateColProps, FormRow } from '../form-grid';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n // 查询按钮配置\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n // 重置按钮配置\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\n/**\n * 过滤条件\n * @param props\n * @returns\n *\n *```\n *1. 用法1\n * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * <EasyTableFilter>\n * <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * </EasyTableFilter>\n *\n * -- 自定义网格布局 使用 FormCol组件包装 Form.Item\n * <EasyTableFilter>\n * <FormCol span={12}><Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item></FormCol>\n * </EasyTableFilter>\n *\n * -- children 可为 function\n * <EasyTableFilter>\n * {(form) => {\n * return <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * }}\n * </EasyTableFilter>\n *2. 用户2(自定义布局)\n * EasyTableFilter设置 isPure = true,FormItem无布局规则\n *3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例\n *4. 默认布局下,可通过设置 filterOperate 设置操作按钮\n *```\n */\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const [form] = Form.useForm();\n\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children);\n const easyTableCtx = useEasyTableCtx();\n const [state, actions] = easyTableModel(easyTableCtx.modelKey).useStore();\n\n const onQuery = hooks.useCallbackRef(() => {\n easyTableCtx.onRequest({\n [easyTableCtx.fieldNames.pageNo]: 1,\n ...form.getFieldsValue(),\n });\n });\n\n const onReset = hooks.useCallbackRef(async () => {\n await actions.resetFilterCondition();\n form.resetFields();\n easyTableCtx.onRequest({\n [easyTableCtx.fieldNames.pageNo]: 1,\n });\n });\n\n const formOperateColProps = {\n rightList: [\n <ButtonWrapper key=\"1\" type=\"primary\" onClick={onQuery} {...props.queryButtonProps}>\n {props.queryButtonProps?.text || '查询'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"2\" onClick={onReset} {...props.resetButtonProps}>\n {props.resetButtonProps?.text || '重置'}\n </ButtonWrapper>,\n ],\n ...props.filterOperate?.(form),\n };\n\n if (props.isPure) {\n return (\n <SimpleLayout>\n <Form\n form={form}\n initialValues={{\n ...easyTableCtx.initialValues,\n ...state.queryCondition,\n }}\n >\n {children}\n </Form>\n </SimpleLayout>\n );\n }\n\n const formRowChildren = childrens\n .map((item, index) => {\n if ((item as ReactElement).type['domTypeName'] === 'FormCol') {\n return item;\n }\n return <FormCol key={index}>{item}</FormCol>;\n })\n .concat(<FormOperateCol {...formOperateColProps} />);\n\n return (\n <SimpleLayout>\n <Form\n form={form}\n initialValues={{\n ...easyTableCtx.initialValues,\n ...state.queryCondition,\n }}\n >\n <FormRow gutter={[15, 0]}>{formRowChildren}</FormRow>\n </Form>\n </SimpleLayout>\n );\n};\n","import { getUuid, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'rowKey'> & {\n children?: ReactElement;\n /** 表格行 key 的取值 */\n rowKey: string;\n};\n\n/**\n * 表格渲染\n * @param props\n * ```\n * 1. 继承了 TableProps 可设置antd table功能\n * ```\n */\nexport const EasyTableTable = (props: EasyTableTableProps) => {\n const { children, rowKey, ...otherProps } = props;\n\n const easyTableCtx = useEasyTableCtx();\n const [state] = easyTableModel(easyTableCtx.modelKey).useStore();\n const fieldNames = easyTableCtx.fieldNames;\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n easyTableCtx.onRequest({ [fieldNames.pageSize]: data.pageSize, [fieldNames.pageNo]: data.current });\n props.onChange?.(data, ...otherProps);\n };\n\n const dataSource = useMemo(() => {\n if (easyTableCtx.tableList.length === 0) {\n return [];\n }\n if (isUndefinedOrNull(easyTableCtx.tableList[0][rowKey])) {\n return easyTableCtx.tableList.map((item) => {\n item[rowKey] = getUuid();\n return item;\n });\n }\n return easyTableCtx.tableList;\n }, [easyTableCtx.tableList, rowKey]);\n\n return (\n <SimpleLayout>\n {children ? <SimpleLayout>{children}</SimpleLayout> : null}\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n pagination={{\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo],\n pageSize: state.queryCondition[fieldNames.pageSize],\n total: easyTableCtx.tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n }}\n {...otherProps}\n rowKey={rowKey}\n onChange={onChangePage}\n loading={easyTableCtx.loading}\n dataSource={dataSource}\n />\n </SimpleLayout>\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 hideHoverBgColor?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n },\n props.className,\n );\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { createContext } from 'react';\n\nexport type EditableFieldContextContextApi = {\n editable: boolean;\n editableIcon: boolean;\n isCtx: boolean;\n};\n\nexport const EditableFieldContext = createContext<EditableFieldContextContextApi>({\n editable: false,\n editableIcon: false,\n isCtx: false,\n});\n","import { CheckOutlined, CloseOutlined, EditOutlined } from '@ant-design/icons';\nimport { isArray, isNumber, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Space } from 'antd';\nimport { isValidElement, ReactElement, ReactNode, useContext, useEffect, useRef, useState } from 'react';\nimport { useThemeToken } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { IconWrapper } from '../icon-wrapper';\nimport { EditableFieldContext } from './context';\nimport './style.less';\n\nexport interface EditableFieldProps {\n editRender: ReactElement | ((data: { value?: TAny; onChange?: (data?: TAny) => void }) => ReactElement);\n viewRender?: (value?: TAny) => ReactNode;\n value?: TAny;\n onChange?: (data?: TAny) => void;\n placeholderValue?: string;\n\n className?: string;\n /** edit 区域是否铺满,editableIcon=false 无效 */\n isEditFull?: boolean;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否显示编辑操作icon,默认值:true */\n editableIcon?: boolean;\n}\n\n/**\n * 可编辑字段组件\n * @param props\n * @returns\n * ```\n * 字段渲染有两种状态\n * 1. 只读:如果value类型为复杂格式,必须要通过【viewRender】来进行处理操作,转成简单数据类型\n * 2. 编辑:FormItem value的格式要求必须满足编辑组件入参value要求\n * ```\n */\nexport const EditableField = (props: EditableFieldProps) => {\n const { value, onChange, viewRender, placeholderValue = '-', editRender, isEditFull } = props;\n const [isEdit, setIsEdit] = useState<boolean>(false);\n const tempValue = useRef<TAny>(value);\n const forceUpdate = hooks.useForceUpdate();\n const ctx = useContext(EditableFieldContext);\n\n const editableIcon = (function () {\n if (ctx.isCtx) {\n return props.editableIcon === undefined ? ctx.editableIcon : props.editableIcon;\n }\n return props.editableIcon === undefined ? true : props.editableIcon;\n })();\n const editable = (function () {\n if (ctx.isCtx) {\n return props.editable === undefined ? ctx.editable : props.editable;\n }\n return props.editable || false;\n })();\n\n const theme = useThemeToken();\n\n useEffectCustom(() => {\n tempValue.current = value;\n forceUpdate();\n }, [value]);\n\n useEffect(() => {\n setIsEdit(editable);\n }, [editable]);\n\n if (!isEdit) {\n const viewValue = viewRender?.(props.value) || props.value || placeholderValue;\n if (\n isString(viewValue) ||\n isNumber(viewValue) ||\n isUndefinedOrNull(viewValue) ||\n isValidElement(viewValue)\n ) {\n if (!editableIcon) {\n return viewValue;\n }\n return (\n <Space size={8}>\n <span>{viewValue}</span>\n <IconWrapper size=\"small\" icon={<EditOutlined />} onClick={setIsEdit.bind(null, true)} />\n </Space>\n );\n }\n console.warn('对象作为React子对象无效', viewValue);\n }\n\n const onCancel = () => {\n tempValue.current = value;\n setIsEdit(false);\n };\n\n const onEditChange = (value) => {\n let target = value;\n /** 为了处理 Input、TextArea等onChange取值 */\n if (typeof value === 'object' && !isArray(value) && value.target) {\n target = value.target?.value;\n }\n tempValue.current = target;\n if (editableIcon) {\n forceUpdate();\n } else {\n onChange?.(target);\n }\n };\n\n const onOk = () => {\n if (tempValue.current !== value) {\n onChange?.(tempValue.current);\n }\n setIsEdit(false);\n };\n\n const editRenderElement = isValidElement(editRender)\n ? editRender\n : editRender({ value: tempValue.current, onChange: onEditChange });\n\n if (!editableIcon) {\n return (\n <editRenderElement.type\n value={tempValue.current}\n onChange={onEditChange}\n {...editRenderElement.props}\n />\n );\n }\n\n return (\n <Space\n direction=\"horizontal\"\n size={12}\n style={{ display: 'flex', paddingRight: 6 }}\n className={classNames({ 'editable-field-full': isEditFull }, props.className)}\n >\n <editRenderElement.type\n value={tempValue.current}\n onChange={onEditChange}\n {...editRenderElement.props}\n />\n <IconWrapper\n size=\"small\"\n icon={<CheckOutlined style={{ color: theme.colorPrimary }} />}\n onClick={onOk}\n />\n <IconWrapper\n size=\"small\"\n icon={<CloseOutlined style={{ color: theme.colorPrimary }} />}\n onClick={onCancel}\n />\n </Space>\n );\n};\n","import { ReactElement } from 'react';\nimport { EditableFieldContext } from './context';\n\nexport interface EditableFieldProviderProps {\n children: ReactElement;\n editable?: boolean;\n editableIcon?: boolean;\n}\n\n/**\n * EditableField组件\n * @param props\n * @returns\n */\nexport const EditableFieldProvider = (props: EditableFieldProviderProps) => {\n const editable = props.editable === undefined ? true : props.editable;\n const editableIcon = props.editableIcon === undefined ? false : props.editableIcon;\n\n return (\n <EditableFieldContext.Provider value={{ editable, isCtx: true, editableIcon }}>\n {props.children}\n </EditableFieldContext.Provider>\n );\n};\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 inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, setInputKey] = 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 setInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={inputKey}\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 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 (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\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 inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, seInputKey] = 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 seInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={inputKey}\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 | 'mode'\n> & {\n /** 不支持 tags 模式,tags模式请使用antd Select 组件 */\n mode?: 'multiple';\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 /** selectorList发生变更时触发,每次都会调用 */\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/**\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: SelectorWrapperProps) => {\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 = useMemo(() => serviceConfig?.params || {}, [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']);\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 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[optionsItemValueField]) {\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 tableRowIndex: props.tableRowIndex,\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","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties } from 'react';\nimport './style.less';\nimport { 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 { 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 { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport { useThemeToken } from '../../hooks';\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 const theme = useThemeToken();\n\n const style = { '--form-item-group-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={{ ...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 hidden?: boolean;\n required?: boolean;\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 hidden={props.hidden}\n required={props.required}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\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 { composeProps } from '@flatbiz/utils';\nimport { Form, FormItemProps } from 'antd';\nimport { cloneElement, isValidElement, ReactElement, ReactNode } from 'react';\n\nexport interface FormItemWrapperProps extends FormItemProps {\n wrapper?: (children: ReactNode) => ReactElement;\n}\n\ninterface FormItemWrapperChildrenProps {\n wrapper?: FormItemWrapperProps['wrapper'];\n children: React.ReactElement;\n}\n\nconst FormItemWrapperChildren = (props: FormItemWrapperChildrenProps) => {\n const { wrapper, children, ...rest } = props;\n // composeProps 合并执行 Form.Item 传的 onChange 以及组件本身的方法\n const _children = cloneElement(children, composeProps(children.props, rest, true));\n if (wrapper) {\n return wrapper(_children);\n }\n return _children;\n};\n\n/**\n * 对 Form.Item 的 children 增加 before、after\n * @param props\n * @returns\n */\nexport const FormItemWrapper = (props: FormItemWrapperProps) => {\n const { wrapper, children, ...rest } = props;\n\n return (\n <Form.Item {...rest}>\n {isValidElement(children) ? (\n <FormItemWrapperChildren wrapper={wrapper}>{children}</FormItemWrapperChildren>\n ) : (\n children\n )}\n </Form.Item>\n );\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 { 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 { TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Result, Spin } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustomAsync } from '../hooks';\n\nexport type LocalLoadingServiceConfig = {\n onRequest: (params?: TAny) => Promise<TPlainObject>;\n params?: TPlainObject;\n};\n\nexport interface LocalLoadingProps {\n /** 接口数据配置 */\n serviceConfig: LocalLoadingServiceConfig;\n /** children 为函数,参数【respData】为接口返回数据 */\n children?: (respData?: TAny) => ReactElement;\n /**\n * 是否异步,默认:false\n * ```\n * true(异步):onRequest、react dom渲染同步执行\n * false(同步):onRequest有结果了才渲染 react dom\n * ```\n */\n isAsync?: boolean;\n /** 最小高度 */\n minHeight?: number;\n /** 自定义异常渲染处理 */\n errorRender?: (error?: TAny) => ReactElement;\n}\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果\n * 2. error显示效果\n * 3. 正常接口数据渲染\n * ```\n * @param props\n * @returns\n */\nexport const LocalLoading = (props: LocalLoadingProps) => {\n const { serviceConfig, isAsync, children, minHeight, errorRender } = props;\n const minHeightNew = minHeight === undefined ? 200 : minHeight;\n const [result, setResult] = useState<{ status: 'success' | 'error' | 'loading'; respData?: TAny }>({\n status: 'loading',\n });\n\n const onRequest = async () => {\n try {\n if (result.status !== 'loading') {\n setResult({ status: 'loading' });\n }\n const respData = await serviceConfig.onRequest(serviceConfig.params);\n setResult({\n status: 'success',\n respData,\n });\n } catch (error) {\n setResult({\n status: 'error',\n respData: error,\n });\n }\n };\n\n useEffectCustomAsync(onRequest, []);\n\n if (result.status === 'error') {\n if (errorRender) {\n return errorRender(result.respData);\n }\n return (\n <Result\n status=\"error\"\n title={'数据获取异常'}\n subTitle={(result.respData?.message as string) || '数据处理异常'}\n style={{ minHeight: minHeightNew }}\n extra={[\n <Button type=\"primary\" key=\"console\" onClick={onRequest}>\n 重新获取\n </Button>,\n ]}\n />\n );\n }\n\n if (result.status === 'loading' && !isAsync) {\n return (\n <div style={{ minHeight: minHeightNew, display: 'flex', justifyContent: 'center' }}>\n <Spin spinning={true}>\n <Fragment />\n </Spin>\n </div>\n );\n }\n\n return (\n <div style={{ minHeight: minHeightNew }}>\n <div style={{ display: 'flex', justifyContent: 'center', height: '100%' }}>\n <Spin style={{ minHeight: minHeightNew }} spinning={result.status === 'loading'} />\n </div>\n {children?.(result.respData)}\n </div>\n );\n};\n","import { Fragment, isValidElement, ReactElement, useState } from 'react';\n\ntype onClick = (e?: React.MouseEvent<HTMLElement>) => void;\n\nexport interface ModalActionProps {\n children: ReactElement | ((data: { onClose: () => void; open: boolean }) => ReactElement);\n action?:\n | (ReactElement & { onClick?: onClick })\n | ((data: { onClick: onClick; onClose: () => void; open: boolean }) => ReactElement);\n}\n\n/**\n * 弹框 触发器\n * ```\n * <ModalAction action={<Button type=\"primary\">打开</Button>}>\n * {({ onClose }) => (\n * <Modal onOk={onClose}>xxx</Modal>\n * )}\n * </ModalAction>\n * ```\n */\nexport const ModalAction = (props: ModalActionProps) => {\n const { action, children } = props;\n\n const [open, setOpen] = useState<boolean>(false);\n\n const handleOnClick = async (e: unknown) => {\n if (isValidElement(action)) {\n const { onClick } = action.props;\n if (typeof onClick === 'function') {\n await onClick?.(e);\n }\n }\n setOpen(true);\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const childrenReactElement = isValidElement(children) ? children : children({ onClose, open });\n\n return (\n <Fragment>\n {isValidElement(action) ? (\n <action.type {...action.props} onClick={handleOnClick} />\n ) : (\n action?.({ onClick: handleOnClick, onClose, open })\n )}\n <childrenReactElement.type\n open={open}\n onClose={onClose}\n onCancel={onClose}\n {...childrenReactElement.props}\n />\n </Fragment>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n open: 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.open = true;\n };\n },\n closeModal() {\n return (state) => {\n state.open = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: 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","import { Result } from 'antd';\n\nexport type Page404Props = {\n message?: string;\n};\n\nexport const Page404 = (props: Page404Props) => {\n return <Result status=\"404\" title=\"404\" subTitle={props.message} />;\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 label_value_vertical: 'form-label-value-vertical',\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 label_value_vertical: 'form-item-label-value-vertical',\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 { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n const theme = useThemeToken();\n\n const style = { '--rule-describe-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames('v-rule-describe', props.className)} style={style}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-title-index\">{index + 1}. </span>\n <span className=\"v-rule-describe-item-title-content\">{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-title-index\"></span>\n <span className=\"v-rule-describe-item-title-content\">{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label;\n const optionsItemValueField = fieldNames?.value;\n const optionsItemDisabledField = fieldNames?.disabled;\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\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 { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagListSelectValue = string | number | boolean;\nexport type TagListSelectDataItem = { label: string; value: TagListSelectValue; color?: string };\n\nexport type TagListSelectProps = {\n dataList: TagListSelectDataItem[];\n /** 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同 */\n colorMap?: Record<string, string>;\n value?: TagListSelectValue;\n /** 是否强制匹配,默认值false */\n forceMatch?: boolean;\n};\n\n/**\n * 在列表数据中通过value匹配数据,以Tag形式展示\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagListSelect: FC<TagListSelectProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagListSelect.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } 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 { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagListSelect, TagListSelectProps } from '../tag-list-select';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\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, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value || defaultValue;\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: TagListSelectProps['dataList'],\n colorMap?: TagListSelectProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagListSelect dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容,一般为Icon */\n extra: ReactElement;\n extraPosition?: 'before' | 'after';\n onClick?: (e) => void;\n /** 是否显示原单元格数据,默认值:true */\n showData?: boolean;\n /** 溢出显示【...】, 最大长度(默认:20个字节) */\n showMaxNumber?: number;\n /** 未溢出显示【extra】配置,默认值:true */\n notOverflowShowExtra?: boolean;\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const notOverflowShowExtra = isUndefinedOrNull(options.notOverflowShowExtra)\n ? true\n : options.notOverflowShowExtra;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n\n if (options.extra && showData) {\n if (renderValue === value && !notOverflowShowExtra) {\n return value;\n }\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n return <span onClick={options.onClick}>{options.extra}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示原单元格数据,默认值:true\n * 3. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\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 * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content?: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} className={className} defaultActiveKey={defaultActiveKey} onChange={onChange} />\n );\n};\n","import { Space, SpaceProps, Tag } from 'antd';\nimport { FC } from 'react';\nimport { useThemeToken } from '../hooks';\n\ntype TagGroupDataItem = { label: string; value: string | number; color?: string };\n\nexport type TagGroupProps = {\n dataList: TagGroupDataItem[];\n /**\n * 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同\n */\n colorMap?: Record<string, string>;\n spaceProps?: SpaceProps;\n};\n\n/**\n * Tag 列表显示\n */\nexport const TagGroup: FC<TagGroupProps> = (props) => {\n const theme = useThemeToken();\n return (\n <Space wrap size={5} {...props.spaceProps}>\n {props.dataList.map((item, index) => {\n const color = item.color || props.colorMap?.[item.value] || theme.colorPrimary;\n return (\n <Tag color={color} key={index}>\n {item.label}\n </Tag>\n );\n })}\n </Space>\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\ndayjs.extend(isSameOrBefore);\ndayjs.extend(isSameOrAfter);\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * 1. minTime、maxTime设置为 DayjsTimeTypeEnum,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimePickerWrapper = (props: TimePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, format, ...otherProps } = props;\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const customFormat = format || DayjsTimeTypeEnum.Hms;\n\n const onChangeTime = hooks.useCallbackRef((time: dayjs.Dayjs | null, timeString: string) => {\n if (time) {\n onChange?.(timeString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value) {\n return dayjs(value, customFormat);\n }\n return undefined;\n }, [customFormat, props.value]);\n\n const getDisabledTime: TimePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n const showNow = useMemo(() => {\n const now = dayjs();\n return (\n now.isSameOrAfter(dayjs(minTime || '00:00:00', customFormat)) &&\n now.isSameOrBefore(dayjs(maxTime || '23:59:59', customFormat))\n );\n }, [customFormat, maxTime, minTime]);\n\n return (\n <TimePicker\n showNow={showNow}\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={customFormat}\n />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimeRangePickerProps } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type TimeRangePickerWrapperProps = Omit<TimeRangePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minTime、maxTime设置格式,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n// export declare type EventValue<DateType> = DateType | null;\n// export declare type RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 HH:mm:ss,其他格式化类型自定义format\n * 4. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, ...otherProps } = props;\n\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const format = useMemo(() => {\n return props.format || DayjsTimeTypeEnum.Hms;\n }, [props.format]);\n\n const onChangeTime = hooks.useCallbackRef((date, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n onChange?.([timeStart, timeEnd]);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value && value.length > 0) {\n return [\n value[0] ? dayjs(value[0], format) : value[0],\n value[1] ? dayjs(value[1], format) : value[1],\n ] as [Dayjs, Dayjs];\n }\n return undefined;\n }, [props.value, format]);\n\n const getDisabledTime: TimeRangePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n return (\n <TimePicker.RangePicker\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={format}\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 { useEffectCustom } from '../hooks';\nimport { TimeRangePickerWrapper, TimeRangePickerWrapperProps } from '../time-range-picker-wrapper';\nimport { FormItemNamePath } from '../types';\n\nexport type TimeRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 TimeRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n timeRangePickerWrapperProps?: Omit<TimeRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_time_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const TimeRangePickerWrapperFormItem = (props: TimeRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, timeRangePickerWrapperProps, ...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_time_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_time_${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 const bodyVal = Form.useWatch(bodyName, 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, bodyVal]);\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 <TimeRangePickerWrapper {...timeRangePickerWrapperProps} 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","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: TreeSelectorWrapperProps) => {\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 const isMultiple = otherProps.treeCheckable;\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 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 const treeSelectValue = useMemo(() => {\n if (isArray(renderValueList) && renderValueList.length === 0) {\n return undefined;\n }\n return isMultiple ? renderValueList : renderValueList[0];\n }, [isMultiple, renderValueList]);\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 popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeSelectValue}\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, TAny, 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?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => 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: TAny[]) => {\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: TAny[]): TAny[] =>\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","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonWrapper","useState","loading","_useState","setLoading","debounceDuration","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","hidden","jsx","Button","_extends","useArrayChange","dataList","forceUpdate","changeListRef","useRef","update","useForceUpdate","arrayOperate","add","useCallbackRef","dataItem","isUnshift","targetList","current","concat","index","target","delete","deleteItem","splice","resetList","getList","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useSafeState","initialState","setState","isMounted","useIsMounted","value","useThemeToken","theme","useToken","token","dayjs","extend","customParseFormat","advancedFormat","weekday","localeData","weekOfYear","weekYear","dayjsUtc","ConfigProviderWrapper","locale","otherProps","_excluded","ConfigProvider","componentSize","space","size","enUS","zhCN","DropdownMenuWrapper","menuList","dropdownOtherProps","menuItems","open","setOpen","_useState2","onConfirmtTriggerClick","event","stopPropagation","onConfirm","item","forEach","text","color","permission","needConfirm","confirmMessage","type","style","popconfirmProps","_excluded2","newStyle","buttonType","nromal","key","label","_createElement","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","menu","items","onOpenChange","_open","ButtonOperate","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","map","placement","DefaultButton","undefined","createElement","length","foldIcon","_MoreOutlined","buttonTheme","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","components","defaultProps","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","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","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","_extends2","targetOption","$await_3","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","popupClassName","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","_createCtx","_createCtx2","useCheckListCtx","CheckListCtxProvider","getValueList","CheckList","checkedValues","_useArrayChange","defaultValue","useUpdateEffect","defaultChange","targetIndex","newValues","selectedValue","onPreChange","$If_1","call","this","findIndex","temp","required","beforeExtra","afterExtra","CheckListItem","_classNames2","context","checked","checkedClassPrefix","readonly","CssNodeHover","cloneElement","DayjsDateTypeEnum","DayjsTimeTypeEnum","range","start","end","i","getDisabledHour","_options$minDateTime","_options$maxDateTime","minTimeHour","maxTimeHour","minDateTime","format","YMD","get","maxDateTime","selectableMinute","disabledHourList","_options$disabledHour","getDisabledMinute","_options$minDateTime2","_options$maxDateTime2","minTimeMinute","maxTimeMinute","YMDH","disabledMinuteList","_options$disabledMinu","getDisabledSecond","_options$minDateTime3","_options$maxDateTime3","minTimeSecond","maxTimeSecond","YMDHm","disabledSecondList","_options$disabledSeco","DatePickerWrapper","_ref","disabledDateConfig","minDate","maxDate","minDateTimeDayInst","maxDateTimeDayInst","customFormat","showTime","YMDHms","onChangeDate","date","dateString","getDisabledDate","currentDate","flatbizDate","in","gte","datePickerValue","dateNormalize","getDisabledTime","Date","disabledHours","disabledMinutes","disabledSeconds","DatePicker","disabledDate","disabledTime","width","DateRangePickerWrapper","onAntdOpenChange","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref2","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","cancelButtonProps","content","configProviderProps","okHidden","cancelHidden","footer","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","operateGroup","footerNew","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","_window$elementId2","_window2","dialogConfirm","dialogAlert","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","jsxs","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","dialogDrawer","closable","dialogLoading","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWrapperContent","operationProps","DrawerWrapperFooter","DrawerWrapper","keyboard","forceRender","Content","Footer","drawerModels","createDrawerWrapperModel","useEasyTableCtx","EasyTableCtxProvider","queryCondition","isInit","_EasyTableModel","updateFilterCondition","resetFilterCondition","updateInitStatus","easyTableModels","easyTableModel","EasyTable","dataSource","setDataSource","total","setTotal","_useState3","_easyTableModel$useSt","list","pageNo","pageSize","initRequest","initialValues","allState","_props$serviceConfig","requestParamsAdapter","_onRequest","requestResultAdapter","paramsNew","respDataNew","respList","clearQueryCondition","$await_4","tableList","tableTotal","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_objectWithoutPropertiesLoose","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","keys","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","currentValue","hasOperateList","find","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_temp$props2","span","itemProps","newProps","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","direction","contentStyle","EasyTableFilter","_props$queryButtonPro","_props$resetButtonPro","childrens","Children","easyTableCtx","onQuery","getFieldsValue","onReset","_easyTableCtx$onReque","resetFields","formOperateColProps","queryButtonProps","resetButtonProps","filterOperate","isPure","formRowChildren","gutter","EasyTableTable","rowKey","onChangePage","_len","arguments","Array","_key","getUuid","Table","scroll","x","bordered","pagination","showSizeChanger","showTotal","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","EditableFieldContext","createContext","editable","editableIcon","isCtx","EditableField","viewRender","_props$placeholderVal","placeholderValue","editRender","isEditFull","isEdit","setIsEdit","tempValue","ctx","useContext","viewValue","_isNumber","_EditOutlined","warn","onEditChange","_value$target","editRenderElement","display","paddingRight","_CheckOutlined","_CloseOutlined","EditableFieldProvider","Provider","getEditable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","inputValueRef","isFirstUseValueRef","inputKey","setInputKey","nativeEvent","onCompositionEnd","InputSearchWrapper","defaultSearchInputKey","setDefaultSearchInputKey","Search","InputTextAreaWrapper","seInputKey","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","arrayField2LabelValue","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","isNumber","_isBoolean","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","tempUid","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","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","onTableAfterRender","block","_PlusOutlined","EditorWrapper","_","editor","getContent","respValue","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FlexLayout","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","FormItemCard","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","FormItemWrapperChildren","wrapper","rest","_children","composeProps","FormItemWrapper","Gap","inline","LabelValueLayout","labelWidth","Descriptions","column","LocalLoading","isAsync","minHeight","errorRender","minHeightNew","setResult","_result$respData","Result","subTitle","justifyContent","ModalAction","action","handleOnClick","_onClick","$If_2","childrenReactElement","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","modalModels","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","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","isCancel","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","ruleItemDescStyle","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagListSelect","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","handle","showData","notOverflowShowExtra","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","isSticky","_props$isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","cacheKey","activeKey","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","Tabs","TagGroup","spaceProps","isSameOrBefore","isSameOrAfter","TimePickerWrapper","disabledTimeConfig","minTime","maxTime","Hms","onChangeTime","time","timeString","timePickerValue","hour","minute","showNow","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckable","treeCheckStrictly","innerOperateValue","setInnerOperateValue","log","expandedKeys","getTreeExpandedKeys","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","treeSelectValue","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","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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"}