@flatbiz/antd 4.0.4 → 4.0.6
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.css +68 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/index.d.ts +188 -53
- package/package.json +1 -1
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-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/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/css-node-hover/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/dialog-drawer.tsx","@flatbiz/antd/src/dialog/dialog-modal.tsx","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-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/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/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-wrapper/index.tsx","@flatbiz/antd/src/table-column/render.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 './1_root.less';\nimport './2_base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick: (e) => Promise<void> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n\n const debounceDuration = isUndefinedOrNull(props.debounceDuration) ? 500 : props.debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDuration);\n\n if (!hasPermission(props.name)) {\n return null;\n }\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { 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 { 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 void item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <Button\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </Button>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n 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 console.log(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 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\n return [...filterList].map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\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 { extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value: string | number, selectedList: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const { serviceConfig, modelKey, fieldNames, isDynamicLoad, requestMessageConfig, ...otherProps } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n />\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport type { PickerDateProps } from 'antd/es/date-picker/generatePicker';\nimport dayjs from 'dayjs';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<dayjs.Dayjs>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current: dayjs.Dayjs) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return dayjs(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport type { Dayjs } from 'dayjs';\nimport dayjs from 'dayjs';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<Dayjs>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [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\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [dayjs(newDate1), dayjs(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Dayjs, Dayjs];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val 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 } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\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'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n 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 = (e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n };\n const operateGroup = (\n <Space>\n <Button {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </Button>\n <Button type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle} loading={loading}>\n {okText || '提交'}\n </Button>\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n return operateGroup;\n };\n\n return (\n <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 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","import { isPromise } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\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<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open'> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n className,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n 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 setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n centered={true}\n destroyOnClose\n {...otherProps}\n className={classNames('dialog-modal', className)}\n open={open}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </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 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","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 { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n | '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","export const editorTemplates = {\n block: {\n title: '块级卡片',\n description: '块级卡片',\n content: `<div style=\"{$varStyle} background-color:var(--editor-card-bgcolor);padding: 5px 20px;border-radius: 2px;color:#555\">\n <p>#自定义内容</p>\n </div><p></p>`,\n },\n primary_p: {\n title: 'primary_p',\n description: 'primary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-primary)\">#自定义内容</p><p></p>',\n },\n secondary_p: {\n title: 'secondary_p',\n description: 'secondary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-secondary)\">#自定义内容</p><p></p>',\n },\n warning_p: {\n title: 'warning_p',\n description: 'warning色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-warning)\">#自定义内容</p><p></p>',\n },\n danger_p: {\n title: 'danger_p',\n description: 'danger色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-danger)\">#自定义内容</p><p></p>',\n },\n success_p: {\n title: 'success_p',\n description: 'success色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-success)\">#自定义内容</p><p></p>',\n },\n p: {\n title: 'p',\n description: 'p',\n content: '<p></p>',\n },\n};\n","export type varStyles =\n | '--fa-color-primary'\n | '--fa-color-secondary'\n | '--fa-color-warning'\n | '--fa-color-danger'\n | '--fa-color-success'\n | '--editor-card-bgcolor';\n\nexport const defaultVarStyle: Record<varStyles, string> = {\n '--fa-color-primary': '#1677ff',\n '--fa-color-secondary': '#1677ff',\n '--fa-color-warning': '#ff8f1f',\n '--fa-color-danger': '#ff3141',\n '--fa-color-success': '#00b578',\n '--editor-card-bgcolor': '#f5f5f9',\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties, useMemo } from 'react';\nimport './style.less';\nimport { editorTemplates } from './template';\nimport { defaultVarStyle, varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n const varStyleString = useMemo(() => {\n const merge = { ...defaultVarStyle, ...props.varStyle };\n let varStyleString = '';\n Object.keys(merge).map((key) => {\n varStyleString += `${key}:${merge[key]};`;\n });\n return varStyleString;\n }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n templates: [\n editorTemplates.block,\n editorTemplates.primary_p,\n editorTemplates.secondary_p,\n editorTemplates.warning_p,\n editorTemplates.danger_p,\n editorTemplates.success_p,\n editorTemplates.p,\n ],\n template_replace_values: {\n varStyle: varStyleString,\n },\n template_preview_replace_values: {\n varStyle: varStyleString,\n },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={props.style}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n 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 { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n 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 { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n 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 { 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 { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { TPlainObject } from 'packages/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 { ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\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};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n return (\n <div className=\"v-rule-describe\">\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) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout direction=\"horizontal\" className=\"v-rule-describe-item-title\">\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n <FlexLayout direction=\"horizontal\" className=\"v-rule-describe-item-desc\">\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <div className=\"v-rule-describe-item-title\">{item.title}</div>\n <div className=\"v-rule-describe-item-desc\">{item.desc}</div>\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 | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'loading'\n | 'showSearch'\n | 'autoClearSearchValue'\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 /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (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 onSelectorListAllChange,\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 onSelectorListAllChange?.(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 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, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const titleClassName = classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n });\n\n const style = extend({}, props.style, { padding: props.padding, width: props.width });\n\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { 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 { arrayFindByLoosely, isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagWrapperValue = string | number | boolean;\nexport type TagWrapperDataItem = { label: string; value: TagWrapperValue; color?: string };\nexport type TagWrapperColorItem = { label: string; value: TagWrapperValue };\n\nexport type TagWrapperProps = {\n dataList: TagWrapperDataItem[];\n /**\n * 颜色配置list数据,value为code、label为色值,例如:[{ label:'red', value: 1 }]\n */\n colorList?: TagWrapperColorItem[];\n value?: TagWrapperValue;\n // 是否强制匹配,默认值false\n forceMatch?: boolean;\n};\n\n/**\n * 通过配置显示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 * <TagWrapper\n * dataList=[{ label: '启用', value: 1 }]\n * colorList=[{ value: 1, color: 'red' }]\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagWrapper: FC<TagWrapperProps> = (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 if (props.colorList) {\n const colorTarget = arrayFindByLoosely(props.colorList, target.value, 'value') as TagWrapperColorItem;\n if (colorTarget) {\n return { label: target.label, color: colorTarget.label };\n }\n }\n return { label: target.label, color: target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorList, 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\nTagWrapper.defaultProps = {\n forceMatch: false,\n};\n","import { isNumber, isObject, isPlainObject } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Tooltip } from 'antd';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagWrapper, TagWrapperProps } from '../tag-wrapper';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number) => {\n return (value: string | number) => {\n if (isUndefinedOrNull(value)) return;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny) => ButtonOperateProps) => {\n return (_value: string | number, record) => {\n const operateProps = options(record);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType) => {\n return (value: string | number) => {\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagWrapperProps['dataList'],\n colorList?: TagWrapperProps['colorList'],\n) => {\n return (value: string | number) => {\n return <TagWrapper dataList={selectorList} colorList={colorList} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value;\n };\n};\n\nexport const tableCellRender = {\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度20个【字节】\n * ```\n * showMaxNumber: 显示最大【字节】长度\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport dayjs from 'dayjs';\nimport { useMemo, useState } from 'react';\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minTime、maxTime设置格式,默认格式:HH:mm:ss\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n };\n};\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledDateConfig配置将失效\n * ```\n */\nexport const TimePickerWrapper = (props: TimePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, disabledTime, ...otherProps } = props;\n const isExistValue = Object.prototype.hasOwnProperty.call(props, 'value');\n const [timeValue, setTimeValue] = useState(props.value);\n\n const format = useMemo(() => {\n return props.format || 'HH:mm:ss';\n }, [props.format]) as string;\n\n const onChangeTime = hooks.useCallbackRef((time: dayjs.Dayjs | null, timeString: string) => {\n if (time) {\n if (minTimeDayInst && time.isBefore(minTimeDayInst)) timeString = minTimeDayInst.format(format);\n if (maxTimeDayInst && time.isAfter(maxTimeDayInst)) timeString = maxTimeDayInst.format(format);\n !isExistValue && setTimeValue(timeString);\n onChange?.(timeString);\n } else {\n !isExistValue && setTimeValue(undefined);\n onChange?.(undefined);\n }\n });\n\n const { minTimeDayInst, maxTimeDayInst } = useMemo(() => {\n const { minTime, maxTime } = disabledTimeConfig || {};\n let minTimeDayInst: dayjs.Dayjs | undefined;\n let maxTimeDayInst: dayjs.Dayjs | undefined;\n if (minTime) minTimeDayInst = dayjs(minTime, format);\n if (maxTime) maxTimeDayInst = dayjs(maxTime, format);\n return { minTimeDayInst, maxTimeDayInst };\n }, [disabledTimeConfig, format]);\n\n const newDisabledTime = useMemo(() => {\n if (disabledTime) return disabledTime;\n const disabledHours: number[] = [];\n if (minTimeDayInst) {\n const minHour = minTimeDayInst.get('hour');\n for (let i = minHour - 1; i >= 0; i--) {\n disabledHours.push(i);\n }\n }\n if (maxTimeDayInst) {\n const maxMinute = maxTimeDayInst.get('hour');\n for (let i = maxMinute + 1; i <= 23; i++) {\n disabledHours.push(i);\n }\n }\n return () => {\n return {\n disabledHours: () => disabledHours,\n disabledMinutes: (selectedHour: number) => {\n const disabledMinutes: number[] = [];\n if (minTimeDayInst && selectedHour <= minTimeDayInst.get('hour')) {\n const minMinute = minTimeDayInst.get('minute');\n for (let i = minMinute - 1; i >= 0; i--) {\n disabledMinutes.push(i);\n }\n }\n if (maxTimeDayInst && selectedHour >= maxTimeDayInst.get('hour')) {\n const maxMinute = maxTimeDayInst.get('minute');\n for (let i = maxMinute + 1; i <= 59; i++) {\n disabledMinutes.push(i);\n }\n }\n return disabledMinutes;\n },\n disabledSeconds: (selectedHour: number, selectedMinute: number) => {\n const disabledSeconds: number[] = [];\n if (\n minTimeDayInst &&\n selectedHour <= minTimeDayInst.get('hour') &&\n selectedMinute <= minTimeDayInst.get('minute')\n ) {\n const minSecond = minTimeDayInst.get('second');\n for (let i = minSecond - 1; i >= 0; i--) {\n disabledSeconds.push(i);\n }\n }\n if (\n maxTimeDayInst &&\n selectedHour >= maxTimeDayInst.get('hour') &&\n selectedMinute >= maxTimeDayInst.get('minute')\n ) {\n const maxSecond = maxTimeDayInst.get('second');\n for (let i = maxSecond + 1; i <= 59; i++) {\n disabledSeconds.push(i);\n }\n }\n return disabledSeconds;\n },\n };\n };\n }, [minTimeDayInst, maxTimeDayInst, disabledTime]);\n\n const datePickerValue = useMemo(() => {\n const value = isExistValue ? props.value : timeValue;\n if (value) {\n return dayjs(value, format);\n }\n return undefined;\n }, [isExistValue, props.value, timeValue, format]);\n\n return (\n <TimePicker\n {...otherProps}\n disabledTime={newDisabledTime}\n value={datePickerValue}\n onChange={onChangeTime}\n format={format}\n />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimeRangePickerProps } from 'antd';\nimport dayjs from 'dayjs';\nimport { useMemo, useState } from 'react';\n\nexport type TimeRangePickerWrapperProps = Omit<TimeRangePickerProps, 'value' | 'onChange'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * minTime、maxTime设置格式,默认格式:HH:mm:ss\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n };\n};\nexport declare type EventValue<DateType> = DateType | null;\nexport 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, disabledTime, ...otherProps } = props;\n const isExistValue = Object.prototype.hasOwnProperty.call(props, 'value');\n const [timeValue, setTimeValue] = useState(props.value);\n const format = useMemo(() => {\n return props.format || 'HH:mm:ss';\n }, [props.format]) as string;\n\n const { minTimeDayInst, maxTimeDayinst } = useMemo(() => {\n const { minTime, maxTime } = disabledTimeConfig || {};\n let minTimeDayInst: dayjs.Dayjs | undefined;\n let maxTimeDayinst: dayjs.Dayjs | undefined;\n if (minTime) minTimeDayInst = dayjs(minTime, format);\n if (maxTime) maxTimeDayinst = dayjs(maxTime, format);\n return { minTimeDayInst, maxTimeDayinst };\n }, [disabledTimeConfig, format]);\n\n const onChangeTime = hooks.useCallbackRef(\n (date: RangeValue<dayjs.Dayjs>, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n const [dateStart, dateEnd] = date;\n if (minTimeDayInst && dateStart && dateStart.isBefore(minTimeDayInst))\n timeStart = minTimeDayInst.format(format);\n if (maxTimeDayinst && dateEnd && dateEnd.isAfter(maxTimeDayinst))\n timeEnd = maxTimeDayinst.format(format);\n !isExistValue && setTimeValue([timeStart, timeEnd]);\n onChange?.([timeStart, timeEnd]);\n } else {\n !isExistValue && setTimeValue(undefined);\n onChange?.(undefined);\n }\n },\n );\n\n const newDisabledTime = useMemo(() => {\n if (disabledTime) return disabledTime;\n const disabledHours: number[] = [];\n if (minTimeDayInst) {\n const minHour = minTimeDayInst.get('hour');\n for (let i = minHour - 1; i >= 0; i--) {\n disabledHours.push(i);\n }\n }\n if (maxTimeDayinst) {\n const maxMinute = maxTimeDayinst.get('hour');\n for (let i = maxMinute + 1; i <= 23; i++) {\n disabledHours.push(i);\n }\n }\n return () => {\n return {\n disabledHours: () => disabledHours,\n disabledMinutes: (selectedHour: number) => {\n const disabledMinutes: number[] = [];\n if (minTimeDayInst && selectedHour <= minTimeDayInst.get('hour')) {\n const minMinute = minTimeDayInst.get('minute');\n for (let i = minMinute - 1; i >= 0; i--) {\n disabledMinutes.push(i);\n }\n }\n if (maxTimeDayinst && selectedHour >= maxTimeDayinst.get('hour')) {\n const maxMinute = maxTimeDayinst.get('minute');\n for (let i = maxMinute + 1; i <= 59; i++) {\n disabledMinutes.push(i);\n }\n }\n return disabledMinutes;\n },\n disabledSeconds: (selectedHour: number, selectedMinute: number) => {\n const disabledSeconds: number[] = [];\n if (\n minTimeDayInst &&\n selectedHour <= minTimeDayInst.get('hour') &&\n selectedMinute <= minTimeDayInst.get('minute')\n ) {\n const minSecond = minTimeDayInst.get('second');\n for (let i = minSecond - 1; i >= 0; i--) {\n disabledSeconds.push(i);\n }\n }\n if (\n maxTimeDayinst &&\n selectedHour >= maxTimeDayinst.get('hour') &&\n selectedMinute >= maxTimeDayinst.get('minute')\n ) {\n const maxSecond = maxTimeDayinst.get('second');\n for (let i = maxSecond + 1; i <= 59; i++) {\n disabledSeconds.push(i);\n }\n }\n return disabledSeconds;\n },\n };\n };\n }, [minTimeDayInst, maxTimeDayinst, disabledTime]);\n\n const datePickerValue = useMemo(() => {\n const value = isExistValue ? props.value : timeValue;\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, dayjs.Dayjs];\n }\n return undefined;\n }, [isExistValue, props.value, timeValue, format]);\n\n return (\n <TimePicker.RangePicker\n {...otherProps}\n disabledTime={newDisabledTime}\n value={datePickerValue}\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","jsx","Button","_extends","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","useRef","curRef","current","useSafeState","initialState","setState","isMounted","useIsMounted","value","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","useCallbackRef","event","stopPropagation","onConfirm","item","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","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","log","ButtonOperate","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","map","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","placement","DefaultButton","undefined","createElement","length","foldIcon","_MoreOutlined","buttonTheme","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","theme","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","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","targetOption","$await_3","concat","onChange","values","selectList","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","CssNodeHover","cloneElement","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","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","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","content","configProviderProps","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","operateGroup","jsxs","operateRenderHandle","Drawer","maskClosable","destroyOnClose","contentWrapperStyle","maxWidth","extra","footer","getContainer","dialogDrawer","_bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","call","onAfterClose","afterClose","Modal","centered","dialogModal","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWrapperContent","operationProps","DrawerWrapperFooter","DrawerWrapper","keyboard","forceRender","Content","Footer","drawerModels","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","onCompositionStart","onCompositionEnd","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListChange","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","keys","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","targetList","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","useUpdateEffect","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","_ref2","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","isNumber","_isBoolean","warn","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","targetIndex","findIndex","tempUid","splice","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","editorTemplates","primary_p","secondary_p","warning_p","danger_p","success_p","p","defaultVarStyle","EditorWrapper","_","editor","getContent","respValue","varStyleString","merge","varStyle","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","templates","template_replace_values","template_preview_replace_values","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FlexLayout","childrens","Children","direction","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_extends2","itemProps","newProps","FormItemCard","_classNames2","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","required","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","Gap","inline","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","LabelValueLayout","labelWidth","Descriptions","column","bordered","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","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","setDataSource","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","desc","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","contentStyle","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","checked","tipTitle","Switch","TagWrapper","tagItem","colorList","colorTarget","arrayFindByLoosely","forceMatch","tableColumnTooltipRender","showMaxNumber","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","pageNo","pageSize","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableCellRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TimePickerWrapper","disabledTimeConfig","disabledTime","isExistValue","prototype","timeValue","setTimeValue","onChangeTime","time","timeString","minTimeDayInst","isBefore","maxTimeDayInst","isAfter","minTime","maxTime","newDisabledTime","disabledHours","minHour","get","i","maxMinute","disabledMinutes","selectedHour","minMinute","disabledSeconds","selectedMinute","minSecond","maxSecond","TimePicker","TimeRangePickerWrapper","maxTimeDayinst","hooks","timeStart","timeEnd","dateStart","dateEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","list","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckable","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Array","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","allState","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","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","popupClassName","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","$await_4","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/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/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/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-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/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/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-wrapper/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/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 './1_root.less';\nimport './2_base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<void> | 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 { 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 { 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 console.log(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 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\n return [...filterList].map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\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 { extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value: string | number, selectedList: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const { serviceConfig, modelKey, fieldNames, isDynamicLoad, requestMessageConfig, ...otherProps } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n />\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","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 ...props,\n className,\n maskClosable: true,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<DialogModalProps, 'onOk'> & {\n onOk?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n ...props,\n cancelHidden: true,\n maskClosable: false,\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 { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n | '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","export const editorTemplates = {\n block: {\n title: '块级卡片',\n description: '块级卡片',\n content: `<div style=\"{$varStyle} background-color:var(--editor-card-bgcolor);padding: 5px 20px;border-radius: 2px;color:#555\">\n <p>#自定义内容</p>\n </div><p></p>`,\n },\n primary_p: {\n title: 'primary_p',\n description: 'primary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-primary)\">#自定义内容</p><p></p>',\n },\n secondary_p: {\n title: 'secondary_p',\n description: 'secondary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-secondary)\">#自定义内容</p><p></p>',\n },\n warning_p: {\n title: 'warning_p',\n description: 'warning色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-warning)\">#自定义内容</p><p></p>',\n },\n danger_p: {\n title: 'danger_p',\n description: 'danger色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-danger)\">#自定义内容</p><p></p>',\n },\n success_p: {\n title: 'success_p',\n description: 'success色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-success)\">#自定义内容</p><p></p>',\n },\n p: {\n title: 'p',\n description: 'p',\n content: '<p></p>',\n },\n};\n","export type varStyles =\n | '--fa-color-primary'\n | '--fa-color-secondary'\n | '--fa-color-warning'\n | '--fa-color-danger'\n | '--fa-color-success'\n | '--editor-card-bgcolor';\n\nexport const defaultVarStyle: Record<varStyles, string> = {\n '--fa-color-primary': '#1677ff',\n '--fa-color-secondary': '#1677ff',\n '--fa-color-warning': '#ff8f1f',\n '--fa-color-danger': '#ff3141',\n '--fa-color-success': '#00b578',\n '--editor-card-bgcolor': '#f5f5f9',\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties, useMemo } from 'react';\nimport './style.less';\nimport { editorTemplates } from './template';\nimport { defaultVarStyle, varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n const varStyleString = useMemo(() => {\n const merge = { ...defaultVarStyle, ...props.varStyle };\n let varStyleString = '';\n Object.keys(merge).map((key) => {\n varStyleString += `${key}:${merge[key]};`;\n });\n return varStyleString;\n }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n templates: [\n editorTemplates.block,\n editorTemplates.primary_p,\n editorTemplates.secondary_p,\n editorTemplates.warning_p,\n editorTemplates.danger_p,\n editorTemplates.success_p,\n editorTemplates.p,\n ],\n template_replace_values: {\n varStyle: varStyleString,\n },\n template_preview_replace_values: {\n varStyle: varStyleString,\n },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={props.style}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n 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 { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n 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 { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n 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 { 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 { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { TPlainObject } from 'packages/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 { ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\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};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n return (\n <div className=\"v-rule-describe\">\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) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout direction=\"horizontal\" className=\"v-rule-describe-item-title\">\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n <FlexLayout direction=\"horizontal\" className=\"v-rule-describe-item-desc\">\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <div className=\"v-rule-describe-item-title\">{item.title}</div>\n <div className=\"v-rule-describe-item-desc\">{item.desc}</div>\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 | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'loading'\n | 'autoClearSearchValue'\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 /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (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 onSelectorListAllChange,\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 onSelectorListAllChange?.(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 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, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const titleClassName = classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n });\n\n const style = extend({}, props.style, { padding: props.padding, width: props.width });\n\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { 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 TagWrapperValue = string | number | boolean;\nexport type TagWrapperDataItem = { label: string; value: TagWrapperValue; color?: string };\nexport type TagWrapperColorItem = { label: string; value: TagWrapperValue };\n\nexport type TagWrapperProps = {\n dataList: TagWrapperDataItem[];\n /**\n * 颜色配置数据,value为code、label为色值,例如:{ 1:'red', 2: 'blue'}\n */\n colorMap?: Record<string, string>;\n value?: TagWrapperValue;\n // 是否强制匹配,默认值false\n forceMatch?: boolean;\n};\n\n/**\n * 通过配置显示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 * <TagWrapper\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagWrapper: FC<TagWrapperProps> = (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\nTagWrapper.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 { TagWrapper, TagWrapperProps } from '../tag-wrapper';\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: TagWrapperProps['dataList'],\n colorMap?: TagWrapperProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagWrapper dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value;\n };\n};\n\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 = (options: TableColumnIconRenderProps) => {\n return (value?: TAny) => {\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) => item)}\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 { Tabs, TabsProps } from 'antd';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果 */\n isSticky?: boolean;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky, ...otherProps } = props;\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n return <Tabs {...otherProps} className={className} />;\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","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","useRef","curRef","current","useSafeState","initialState","setState","isMounted","useIsMounted","value","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","useCallbackRef","event","stopPropagation","onConfirm","item","forEach","index","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","log","ButtonOperate","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","map","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","placement","DefaultButton","undefined","createElement","length","foldIcon","_MoreOutlined","buttonTheme","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","theme","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","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","targetOption","$await_3","concat","onChange","values","selectList","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","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","call","_window$elementId2","_window2","dialogConfirm","dialogAlert","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","jsxs","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","dialogDrawer","useToken","token","closable","dialogLoading","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWrapperContent","operationProps","DrawerWrapperFooter","DrawerWrapper","keyboard","forceRender","Content","Footer","drawerModels","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","onCompositionStart","onCompositionEnd","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListChange","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","keys","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","targetList","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","useUpdateEffect","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","isNumber","_isBoolean","warn","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","targetIndex","findIndex","tempUid","splice","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","editorTemplates","primary_p","secondary_p","warning_p","danger_p","success_p","p","defaultVarStyle","EditorWrapper","_","editor","getContent","respValue","varStyleString","merge","varStyle","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","templates","template_replace_values","template_preview_replace_values","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FlexLayout","childrens","Children","direction","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_extends2","itemProps","newProps","FormItemCard","_classNames2","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","required","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","Gap","inline","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","LabelValueLayout","labelWidth","Descriptions","column","bordered","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","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","setDataSource","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","desc","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","contentStyle","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","checked","tipTitle","Switch","TagWrapper","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","pageNo","pageSize","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","showData","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","isSticky","Tabs","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","list","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckable","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Array","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","allState","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","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","popupClassName","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","$await_4","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}
|