@flatbiz/antd 3.2.14 → 3.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-array-change.ts","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/check-list/context.ts","@flatbiz/antd/src/check-list/utils.ts","@flatbiz/antd/src/check-list/check-list.tsx","@flatbiz/antd/src/check-list/check-list-item.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/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-modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/dialog-drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/dynamic-node/index.tsx","@flatbiz/antd/src/easy-table/context.ts","@flatbiz/antd/src/easy-table/model.ts","@flatbiz/antd/src/easy-table/easy-table.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/easy-table/filter.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/easy-table/use-easy-table-ref.ts","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/editable-field/context.ts","@flatbiz/antd/src/editable-field/editable-field.tsx","@flatbiz/antd/src/editable-field/editable-field-provider.tsx","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/form-item-wrapper/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/local-loading/index.tsx","@flatbiz/antd/src/modal-action/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-list-select/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/tag-group/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './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' | 'hidden'> & {\n onClick?: (event: 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.permission)) {\n return null;\n }\n\n if (props.hidden) {\n return null;\n }\n\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { useRef } from 'react';\n\nexport const useArrayChange = <T>(dataList: Array<T>, forceUpdate = true) => {\n const changeListRef = useRef<Array<T>>(dataList);\n const update = hooks.useForceUpdate();\n const arrayOperate = {\n add: hooks.useCallbackRef((dataItem: T | Array<T>, isUnshift?: boolean) => {\n if (isUnshift) {\n const targetList = isArray(dataItem) ? dataItem : [dataItem];\n changeListRef.current = [...targetList, ...changeListRef.current];\n } else {\n changeListRef.current = changeListRef.current.concat(dataItem);\n }\n forceUpdate && update();\n }),\n update: hooks.useCallbackRef((index: number, dataItem: T) => {\n const target = changeListRef.current[index];\n if (target) {\n changeListRef.current[index] = { ...target, ...dataItem };\n }\n forceUpdate && update();\n }),\n delete: hooks.useCallbackRef((index: number) => {\n const deleteItem = changeListRef.current.splice(index, 1);\n forceUpdate && update();\n return deleteItem;\n }),\n resetList: hooks.useCallbackRef((dataList: Array<T>) => {\n changeListRef.current = dataList;\n forceUpdate && update();\n }),\n getList: hooks.useCallbackRef(() => {\n return changeListRef.current;\n }),\n };\n return [changeListRef.current, arrayOperate] as const;\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { 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 { useEffectCustom } from '../hooks';\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, setMenuItems] = useState<ItemType[]>([]);\n\n const [statusMap, setStatusMap] = useState<Record<string, { open?: boolean; loading?: boolean }>>({});\n const onConfirmtTriggerClick = hooks.useCallbackRef((index, event) => {\n event.stopPropagation();\n setStatusMap({ [index]: { open: true } });\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, index: number, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n statusMap[index] = { loading: true, open: true };\n setStatusMap({ ...statusMap });\n result.finally(() => {\n statusMap[index] = { loading: false, open: false };\n setStatusMap({ ...statusMap });\n });\n return;\n }\n statusMap[index] = { loading: false, open: false };\n setStatusMap({ ...statusMap });\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n return item.onClick?.(event);\n });\n\n useEffectCustom(() => {\n const menuItemsNew: ItemType[] = [];\n menuList.filter(Boolean).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, index)}\n onCancel={(event) => {\n event?.stopPropagation();\n setStatusMap({});\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n open={statusMap[index]?.open || false}\n okButtonProps={{\n loading: statusMap[index]?.loading,\n }}\n overlayClassName=\"dmw-popconfirm\"\n >\n <Button\n size=\"small\"\n danger\n {...otherProps}\n onClick={onConfirmtTriggerClick.bind(null, index)}\n type={buttonType}\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItemsNew.push(confirm);\n } else {\n menuItemsNew.push(nromal);\n }\n });\n setMenuItems(menuItemsNew);\n }, [menuList, statusMap]);\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n menu={{ items: menuItems }}\n onOpenChange={(_open) => {\n if (!_open) {\n setStatusMap({});\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 {\n Button,\n ButtonProps,\n Divider,\n Popconfirm,\n PopconfirmProps,\n Popover,\n Space,\n SpaceProps,\n Tooltip,\n} from 'antd';\nimport { FC, Fragment, isValidElement, ReactElement, ReactNode, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\n\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n /** hover 提示文字 */\n hoverTips?: string | React.ReactElement;\n /** hover 提示类型 默认:'tooltip' */\n tipsType?: 'popover' | 'tooltip';\n text: string | ReactElement;\n color?: string;\n onClick?: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n // 是否折叠合拢\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\n split?: boolean;\n spaceProps?: SpaceProps;\n}\n\nexport const ButtonOperateItemContent = (\n props: Pick<ButtonOperateItem, 'hoverTips' | 'tipsType'> & { children?: ReactNode },\n) => {\n if (props.hoverTips) {\n if (props.tipsType === 'popover') {\n return (\n <Popover content={props.hoverTips} zIndex={1000}>\n <Fragment>{props.children}</Fragment>\n </Popover>\n );\n }\n return (\n <Tooltip title={props.hoverTips} zIndex={1000}>\n <Fragment>{props.children}</Fragment>\n </Tooltip>\n );\n }\n return <Fragment>{props.children}</Fragment>;\n};\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!hasPermission(item.permission)) {\n return false;\n }\n return !item.hidden;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item.isFold;\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item.isFold;\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const size = !props.split ? toArray<number>(props.size)[0] || 10 : 0;\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n {...props.spaceProps}\n >\n {viewList.map((item, index) => {\n if (item && isValidElement(item))\n return (\n <ButtonOperateItemContent hoverTips={item.hoverTips} tipsType={item.tipsType}>\n {item}\n </ButtonOperateItemContent>\n );\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 <ButtonOperateItemContent hoverTips={item.hoverTips} tipsType={item.tipsType} key={index}>\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 danger\n {...otherProps}\n onClick={null}\n type={type}\n style={style}\n color={color}\n >\n {isValidElement(text) ? <span>{text}</span> : text}\n </DefaultButton>\n </Popconfirm>\n </ButtonOperateItemContent>\n );\n }\n return (\n <ButtonOperateItemContent hoverTips={item.hoverTips} tipsType={item.tipsType} key={index}>\n <DefaultButton {...otherProps} type={type} style={style} onClick={onClick} color={color}>\n {isValidElement(text) ? <span>{text}</span> : text}\n </DefaultButton>\n </ButtonOperateItemContent>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button\n type=\"link\"\n className=\"fold-more-button\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nconst DefaultButton = (props) => {\n const newStyle =\n props.color && !props.disabled\n ? {\n '--ant-primary-color': props.color,\n '--ant-primary-color-hover': props.color,\n '--ant-primary-color-active': props.color,\n }\n : {};\n return (\n <ButtonWrapper\n {...props}\n style={{ ...newStyle, ...props.style }}\n onClick={(event) => {\n event.stopPropagation();\n return props.onClick?.(event);\n }}\n >\n {props.children}\n </ButtonWrapper>\n );\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 onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n","import { createCtx } from '@wove/react';\nimport { CheckListItemValue } from './types';\n\nexport const [useCheckListCtx, CheckListCtxProvider] = createCtx<{\n checkedValues: CheckListItemValue[];\n onChange: (value: CheckListItemValue, defaultChange?: boolean) => void;\n stopPropagation?: boolean;\n}>();\n","import { toArray } from '@flatbiz/utils';\nimport { CheckListItemValue, CheckListValue } from './types';\n\nexport const getValueList = (value?: CheckListValue, multiple?: boolean) => {\n if (value !== undefined) {\n const valueList = toArray<CheckListItemValue>(value);\n return multiple ? valueList : valueList.splice(0, 1);\n }\n return null;\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { ReactNode, useMemo } from 'react';\nimport { useArrayChange, useEffectCustom } from '../hooks';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport { CheckListCtxProvider } from './context';\nimport './style.less';\nimport { CheckListItemValue } from './types';\nimport { getValueList } from './utils';\n\nexport type CheckListSelectedValue<T extends 'multi' | 'radio'> = T extends 'multi'\n ? CheckListItemValue[]\n : CheckListItemValue;\n\nexport type CheckListProps<T extends 'multi' | 'radio'> = {\n multiple?: boolean;\n onChange?: (value: CheckListSelectedValue<T>, operateValue: CheckListItemValue) => void;\n onPreChange?: (value: CheckListItemValue) => Promise<void>;\n value?: CheckListSelectedValue<T>;\n defaultValue?: CheckListSelectedValue<T>;\n beforeExtra?: ReactNode;\n afterExtra?: ReactNode;\n stopPropagation?: boolean;\n required?: boolean;\n} & CommonPropsWithChildren;\n\nexport const CheckList = <T extends 'multi' | 'radio'>(props: CheckListProps<T>) => {\n const [checkedValues, arrayOperate] = useArrayChange<CheckListItemValue>([]);\n\n const valueList = useMemo(() => {\n return getValueList(props.value, props.multiple);\n }, [props.value, props.multiple]);\n\n useEffectCustom(() => {\n const current = valueList || getValueList(props.defaultValue, props.multiple);\n arrayOperate.resetList(current || []);\n }, []);\n\n hooks.useUpdateEffect(() => {\n arrayOperate.resetList(valueList || []);\n }, [valueList]);\n\n const onChange = hooks.useCallbackRef(async (value: CheckListItemValue, defaultChange) => {\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n const targetIndex = checkedValues.findIndex((temp) => temp === value);\n if (props.multiple === true) {\n if (checkedValues.length === 1 && targetIndex >= 0 && props.required) {\n return;\n }\n if (targetIndex >= 0) {\n arrayOperate.delete(targetIndex);\n } else {\n arrayOperate.add(value);\n }\n } else {\n if (targetIndex >= 0 && props.required) {\n return;\n } else {\n arrayOperate.resetList(targetIndex >= 0 ? [] : [value]);\n }\n }\n if (!defaultChange) {\n const newValues = arrayOperate.getList();\n let selectedValue;\n if (props.multiple) {\n selectedValue = newValues.length > 0 ? extend([], newValues) : undefined;\n } else {\n selectedValue = newValues.length > 0 ? newValues[0] : undefined;\n }\n props.onChange?.(selectedValue as CheckListSelectedValue<T>, value);\n }\n });\n\n return (\n <div className={classNames('check-list', props.className)} style={props.style}>\n <CheckListCtxProvider\n value={{\n onChange,\n checkedValues,\n stopPropagation: props.stopPropagation,\n }}\n >\n {props.beforeExtra}\n {props.children}\n {props.afterExtra}\n </CheckListCtxProvider>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement } from 'react';\nimport { useCheckListCtx } from './context';\nimport { CheckListItemValue } from './types';\n\nexport type CheckListItemContentProps = {\n checked?: boolean;\n disabled?: boolean;\n onClick?: (event) => void;\n className?: string;\n readonly?: boolean;\n style?: CSSProperties;\n};\n\nexport type CheckListItemProps = {\n value: CheckListItemValue;\n disabled?: boolean;\n readonly?: boolean;\n children: (data: CheckListItemContentProps) => ReactElement;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const CheckListItem = (props: CheckListItemProps) => {\n const context = useCheckListCtx();\n\n if (context === null) {\n console.error('CheckList.Item can only be used inside CheckList.');\n return null;\n }\n\n const onClick = hooks.useCallbackRef((event) => {\n if (context.stopPropagation) {\n event.stopPropagation();\n }\n if (!props.disabled) {\n context?.onChange(props.value);\n }\n });\n\n const checked = context?.checkedValues.findIndex((temp) => temp === props.value) >= 0;\n const checkedClassPrefix = 'check-list';\n\n const className = classNames(\n `${checkedClassPrefix}-item`,\n {\n [`${checkedClassPrefix}-disabled`]: props.disabled,\n [`${checkedClassPrefix}-readonly`]: props.readonly,\n [`${checkedClassPrefix}-checked`]: checked,\n },\n props.className,\n );\n\n return props.children({\n onClick,\n checked,\n disabled: props.disabled,\n readonly: props.readonly,\n className,\n style: props.style,\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return moment(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment, { Moment } from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<moment.Moment>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [Moment | null, Moment | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom, usePrevious } 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 const preValue1 = usePrevious(startVal);\n const preValue2 = usePrevious(endVal);\n\n useEffectCustom(() => {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n if (startVal && endVal) {\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n if (preValue1 && preValue2 && !startVal && !endVal) {\n form.setFields([{ name, value: undefined }]);\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 { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n className,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n centered={true}\n destroyOnClose\n {...otherProps}\n className={classNames('dialog-modal', className)}\n visible={visible}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './dialog-modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '关闭',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './dialog-modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelButtonProps: {\n hidden: true,\n },\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, ConfigProvider, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = (e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n };\n const operateGroup = (\n <Space>\n <Button {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </Button>\n <Button type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle} loading={loading}>\n {okText || '提交'}\n </Button>\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n return operateGroup;\n };\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Drawer\n maskClosable={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 visible={visible}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal } 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\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': 'var(--ant-primary-color)' } 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 visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationOldProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * @deprecated 请使用【dialogDrawer】组件替换\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper = (props: DrawerFormProps) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport { bodyAppendDivElement } from '../dialog/utils';\nimport './style.less';\n\nexport type TDynamicNodeProps = {\n className?: string;\n getContainer?: HTMLElement | (() => HTMLElement) | string;\n content?: ReactElement;\n fixed?: boolean;\n style?: CSSProperties;\n};\n\n/**\n * 动态添加 element 元素\n * ```\n * 1. 默认添加到 body 下\n * 2. 可通过 getContainer 参数设置添加位置\n * ```\n */\nexport const dynamicNode = {\n append: (props: TDynamicNodeProps = {}) => {\n const container = (() => {\n let tempElement;\n if (typeof props.getContainer === 'string') {\n tempElement = document.querySelector(props.getContainer);\n } else if (typeof props.getContainer === 'function') {\n tempElement = props.getContainer();\n }\n return tempElement as Element | undefined;\n })();\n\n const className = classNames('v-dynamic-node', { 'v-dynamic-node-fixed': props.fixed }, props.className);\n let nodeElementId = `id_${Date.now()}`;\n if (container) {\n ReactDOM.render(\n <div className={className} id={nodeElementId}>\n {props.content}\n </div>,\n container,\n );\n } else {\n const { divElement, elementId } = bodyAppendDivElement();\n nodeElementId = elementId;\n ReactDOM.render(<div className={className}>{props.content}</div>, divElement);\n }\n window['_dynamic_node_element_id'] = nodeElementId;\n console.log('nodeElementId', nodeElementId);\n return {\n elementId: nodeElementId,\n };\n },\n remove: (elementId?: string) => {\n const dynamicElementId = elementId || window['_dynamic_node_element_id'];\n if (dynamicElementId) {\n try {\n document.querySelector(`#${dynamicElementId}`)?.remove();\n } catch (error) {\n //\n }\n }\n },\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\nimport { FormInstance } from 'antd';\nimport { EasyTableRefApi } from './type';\n\nexport const [useEasyTableCtx, EasyTableCtxProvider] = createCtx<{\n modelKey: string;\n onRequest: (params?: TPlainObject) => void;\n tableList: TPlainObject[];\n tableTotal: number;\n loading?: boolean;\n fieldNames: TPlainObject;\n pageSize: number;\n initRequest: boolean;\n initialValues: TPlainObject;\n onSetPaginationStatus: (status: boolean) => void;\n paginationStatus: boolean;\n onFormFinish?: (values?: TPlainObject) => void;\n form: FormInstance;\n getEasyTableRef: () => EasyTableRefApi;\n}>();\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n queryCondition: TPlainObject;\n isInit: boolean;\n};\n\ntype ModelActionParams = {\n updateFilterCondition?: Partial<ModelState['queryCondition']>;\n resetFilterCondition: void;\n updateInitStatus: void;\n};\n\nconst defaultState: ModelState = {\n queryCondition: {},\n isInit: true,\n};\n\nconst _EasyTableModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n updateFilterCondition: (params) => {\n return (state) => {\n state.queryCondition = {\n ...state.queryCondition,\n ...params,\n };\n };\n },\n resetFilterCondition: () => {\n return (state) => {\n state.queryCondition = defaultState.queryCondition;\n };\n },\n updateInitStatus: () => {\n return (state) => {\n state.isInit = false;\n };\n },\n },\n state: defaultState,\n};\n\nconst easyTableModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const easyTableModel = (key: string) => {\n if (!easyTableModels[key]) {\n easyTableModels[key] = Model(_EasyTableModel);\n }\n return easyTableModels[key];\n};\n","import { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\nimport { EasyTableRefApi } from './type';\n\ntype EasyTableServiceConfig = {\n /** 接口配置 */\n onRequest: (params?: TPlainObject) => Promise<TPlainObject | TPlainObject[]>;\n /** 请求参数处理 */\n requestParamsAdapter?: (params: TPlainObject) => TPlainObject;\n /**\n * 接口相应数据处理\n * @param params\n * ```\n * 返回数据为对象,包含两个字段\n * 1. 表格列表数据 - Array\n * 2. 表格条数总数 - Number\n * 其中 字段key 命名会通过 fieldNames 进行转义\n * ```\n */\n requestResultAdapter?: (params: TAny) => TPlainObject;\n};\n\nexport type EasyTableProps = {\n children: ReactElement | ReactElement[];\n modelKey: string;\n /** 接口数据配置 */\n serviceConfig: EasyTableServiceConfig;\n /**\n * 1. 查询条件Form initialValues\n * 2. 接口其他参数,例如常量类型\n */\n initialValues?: TPlainObject;\n /**\n * 分页初始化参数,默认值: pageSiz = 10\n * @deprecated 使用 pageSize 赋值\n */\n initialPaginationParams?: { pageSize?: number };\n /** 分页单页条数,默认值:10 */\n pageSize?: number;\n /** 字段映射 */\n fieldNames?: { list?: string; total?: string; pageNo?: string; pageSize?: string; uid?: string };\n /** 初始化是否请求,默认值:true */\n initRequest?: boolean;\n onDataSourceChange?: (dataSource: TAny) => void;\n /** 如果自定义查询按钮,可设置 Form onFinish */\n onFormFinish?: (values?: TPlainObject) => void;\n};\n\n/**\n * 对 查询条件+表格数据 进行深度封装,内置数据交互处理\n * ```\n * 1. 需要获取查询条件、主动发起请求等可通过ref操作\n * 2. 可通过属性 initRequest 设置初始化是否请求数据\n * 3. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize\n *\n * Demo https://fex.qa.tcshuke.com/docs/admin/main/crud/easy-table\n * ```\n */\nexport const EasyTable = forwardRef<EasyTableRefApi, EasyTableProps>((props: EasyTableProps, ref) => {\n const [dataSource, setDataSource] = useState<TPlainObject[]>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n const [state, actions] = easyTableModel(props.modelKey).useStore();\n const pageSize = props.pageSize || props.initialPaginationParams?.pageSize || 10;\n const initRequest = props.initRequest === undefined ? true : props.initRequest;\n const [paginationStatus, setPaginationStatus] = useState(false);\n\n const fieldNames = {\n list: 'list',\n total: 'tatal',\n pageNo: 'pageNo',\n pageSize: 'pageSize',\n ...props.fieldNames,\n };\n\n const [form] = Form.useForm();\n\n const onRequest = hooks.useCallbackRef(async (params) => {\n try {\n setLoading(true);\n const allState = await actions.updateFilterCondition(params);\n const queryCondition = cloneState(allState.queryCondition || {});\n const { requestParamsAdapter, onRequest, requestResultAdapter } = props.serviceConfig;\n const paramsNew = requestParamsAdapter ? requestParamsAdapter(queryCondition) : queryCondition;\n const respData = (await onRequest(paramsNew)) || {};\n props.onDataSourceChange?.(respData);\n const respDataNew = requestResultAdapter ? requestResultAdapter(respData) : respData;\n const respList = respDataNew[fieldNames.list];\n setDataSource(isArray(respList) ? respList : []);\n setTotal(respDataNew[fieldNames.total]);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void message.error(error.message);\n }\n });\n\n const clearQueryCondition = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (values) {\n void actions.updateFilterCondition(values);\n form.setFieldsValue(values);\n }\n });\n const onResetRequest = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (paginationStatus) {\n void onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: pageSize,\n ...props.initialValues,\n ...values,\n });\n } else {\n void onRequest({\n ...props.initialValues,\n ...values,\n });\n }\n });\n\n const getRequestParams = () => {\n return {\n ...state.queryCondition,\n ...form.getFieldsValue(),\n };\n };\n\n useImperativeHandle(ref, () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n getRequestParams,\n onResetRequest,\n form,\n };\n });\n\n const getEasyTableRef = () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n getRequestParams,\n onResetRequest,\n form,\n };\n };\n\n const onSetPaginationStatus = (status: boolean) => {\n setPaginationStatus(status);\n };\n\n const onFormFinish = () => {\n const values = form.getFieldsValue();\n if (props.onFormFinish) {\n props.onFormFinish(values);\n } else {\n if (paginationStatus) {\n void onRequest({\n ...values,\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: state.queryCondition.pageSize,\n });\n } else {\n void onRequest(values);\n }\n }\n };\n\n return (\n <EasyTableCtxProvider\n value={{\n getEasyTableRef,\n modelKey: props.modelKey,\n onRequest,\n tableList: dataSource,\n tableTotal: total,\n loading,\n fieldNames,\n pageSize,\n initRequest,\n initialValues: props.initialValues || {},\n onSetPaginationStatus,\n paginationStatus,\n onFormFinish,\n form,\n }}\n >\n {props.children}\n </EasyTableCtxProvider>\n );\n});\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n // 栅格占位格数,不考虑响应式\n span?: number;\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * 1. 设置 span 栅格占位格数,不考虑响应式\n * 2. grid 自定义响应式网格布局\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: Array<ReactElement | null>;\n rightList?: Array<ReactElement | null>;\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 || []).filter(Boolean);\n const _rightList = (rightList || []).filter(Boolean);\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>{_leftList.map((item) => item)}</Space>\n <Space>{_rightList?.map((item) => item)}</Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n const span = temp.props?.span as number;\n return temp.props?.[screenType] || span || defaultGrid[screenType];\n });\n if (operateColIndex < 0) {\n return { gridList: _currentGridList, gridGroupList: [] };\n }\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, Fragment, 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 hidden?: boolean;\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 if (props.hidden) return <Fragment />;\n\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormRow } from '../form-grid';\nimport { FormOperateCol, FormOperateColProps } from '../form-grid/form-operate-col';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n // 查询按钮配置\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n // 重置按钮配置\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\n/**\n * 过滤条件\n * @param props\n * @returns\n *\n *```\n *1. 用法1\n * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * <EasyTableFilter>\n * <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * </EasyTableFilter>\n *\n * -- 自定义网格布局 使用 FormCol组件包装 Form.Item\n * <EasyTableFilter>\n * <FormCol span={12}><Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item></FormCol>\n * </EasyTableFilter>\n *\n * -- children 可为 function\n * <EasyTableFilter>\n * {(form) => {\n * return <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * }}\n * </EasyTableFilter>\n *2. 用户2(自定义布局)\n * EasyTableFilter设置 isPure = true,FormItem无布局规则\n *3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例\n *4. 默认布局下,可通过设置 filterOperate 设置操作按钮\n *```\n */\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const { queryButtonProps, resetButtonProps, filterOperate } = props;\n const { modelKey, fieldNames, onRequest, pageSize, paginationStatus, initialValues, form, onFormFinish } =\n useEasyTableCtx();\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children);\n\n const [state, actions] = easyTableModel(modelKey).useStore();\n\n const onReset = hooks.useCallbackRef(async () => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (paginationStatus) {\n onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSiz]: pageSize,\n ...initialValues,\n });\n } else {\n onRequest(initialValues);\n }\n });\n\n const formOperateColProps = {\n rightList: [\n !queryButtonProps?.hidden ? (\n <ButtonWrapper key=\"1\" type=\"primary\" htmlType=\"submit\" {...queryButtonProps}>\n {queryButtonProps?.text || '查询'}\n </ButtonWrapper>\n ) : null,\n !resetButtonProps?.hidden ? (\n <ButtonWrapper key=\"2\" onClick={onReset} {...resetButtonProps}>\n {resetButtonProps?.text || '重置'}\n </ButtonWrapper>\n ) : null,\n ],\n ...filterOperate?.(form),\n };\n\n const formRowChildren = childrens\n .map((item, index) => {\n if ((item as ReactElement).type['domTypeName'] === 'FormCol') {\n return item;\n }\n return <FormCol key={index}>{item}</FormCol>;\n })\n .concat(<FormOperateCol key={99} {...formOperateColProps} />);\n\n return (\n <SimpleLayout>\n <Form\n form={form}\n onFinish={onFormFinish}\n initialValues={{\n ...initialValues,\n ...state.queryCondition,\n }}\n >\n {props.isPure ? children : <FormRow gutter={[15, 0]}>{formRowChildren}</FormRow>}\n </Form>\n </SimpleLayout>\n );\n};\n","import { getUuid, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'rowKey'> & {\n children?: ReactElement;\n /** 表格行 key 的取值 */\n rowKey: string;\n};\n\n/**\n * 表格渲染\n * @param props\n * ```\n * 1. 继承了 TableProps 可设置antd table功能\n * ```\n */\nexport const EasyTableTable = (props: EasyTableTableProps) => {\n const { children, rowKey, pagination, ...otherProps } = props;\n\n const {\n modelKey,\n fieldNames,\n onRequest,\n tableList,\n initRequest,\n pageSize,\n tableTotal,\n loading,\n initialValues,\n onSetPaginationStatus,\n } = useEasyTableCtx();\n const [state, actions] = easyTableModel(modelKey).useStore();\n\n const paginationData =\n pagination == false\n ? false\n : {\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo],\n pageSize: state.queryCondition[fieldNames.pageSize],\n total: tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n ...props.pagination,\n };\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n if (paginationData) {\n onRequest({ [fieldNames.pageSize]: data.pageSize, [fieldNames.pageNo]: data.current });\n }\n props.onChange?.(data, ...otherProps);\n };\n\n const dataSource = useMemo(() => {\n if (tableList.length === 0) {\n return [];\n }\n if (isUndefinedOrNull(tableList[0][rowKey])) {\n return tableList.map((item) => {\n item[rowKey] = getUuid();\n return item;\n });\n }\n return tableList;\n }, [tableList, rowKey]);\n\n useEffectCustom(() => {\n onSetPaginationStatus(paginationData !== false);\n if (initRequest !== false || !state.isInit) {\n if (paginationData) {\n void onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: pageSize,\n ...initialValues,\n });\n } else {\n void onRequest(initialValues);\n }\n } else {\n void actions.updateFilterCondition(initialValues);\n }\n void actions.updateInitStatus();\n }, []);\n\n return (\n <SimpleLayout>\n {children}\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n {...otherProps}\n pagination={paginationData}\n rowKey={rowKey}\n onChange={onChangePage}\n loading={loading}\n dataSource={dataSource}\n />\n </SimpleLayout>\n );\n};\n","import { useRef } from 'react';\nimport { useEasyTableCtx } from './context';\nimport { EasyTableRefApi } from './type';\n\nexport const useEasyTablRef = () => {\n const { getEasyTableRef } = useEasyTableCtx();\n const ref = useRef<EasyTableRefApi>(getEasyTableRef());\n return ref;\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 hidden?: 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 'icon-wrapper-tigger': props.onClick,\n },\n props.className,\n );\n\n if (props.hidden) return null;\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { createContext } from 'react';\n\nexport type EditableFieldContextContextApi = {\n editable: boolean;\n showEditableIcon: boolean;\n isCtx: boolean;\n};\n\nexport const EditableFieldContext = createContext<EditableFieldContextContextApi>({\n editable: false,\n showEditableIcon: false,\n isCtx: false,\n});\n","import { CheckOutlined, CloseOutlined, EditOutlined } from '@ant-design/icons';\nimport { isArray, isNumber, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Space } from 'antd';\nimport { isValidElement, ReactElement, ReactNode, useContext, useEffect, useRef, useState } from 'react';\nimport { IconWrapper } from '../icon-wrapper';\n\nimport { EditableFieldContext } from './context';\nimport './style.less';\n\nexport interface EditableFieldProps {\n className?: string;\n editRender: ReactElement | ((data: { value?: TAny; onChange?: (data?: TAny) => void }) => ReactElement);\n viewRender?: (value?: TAny) => ReactNode;\n value?: TAny;\n onChange?: (data?: TAny) => void;\n placeholderValue?: string;\n /** edit 区域是否铺满,editableIcon=false 无效 */\n isEditFull?: boolean;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否显示编辑、确认、取消操作icon,默认值:true */\n showEditableIcon?: boolean;\n /** 点击编辑按钮,操作前,返回reject不会开启编辑效果 */\n onClickEditIconPre?: (value?: TAny) => Promise<void>;\n onEditCallback?: (value?: TAny) => void;\n /** 点击确定按钮,操作前,返回reject不会执行确定功能 */\n onClickConfirmIconPre?: (value?: TAny, preValue?: TAny) => Promise<void>;\n onConfirmCallback?: (value?: TAny, preValue?: TAny) => void;\n /** 组件操作Icon配置 */\n iconConfig?: {\n editIcon?: (options: { onClick: () => void }) => ReactElement;\n confirmIcon?: (options: { onClick: () => void }) => ReactElement;\n cancelIcon?: (options: { onClick: () => void }) => ReactElement;\n };\n}\n\n/**\n * 可编辑字段组件\n * @param props\n * @returns\n * ```\n * 字段渲染有两种状态\n * 1. 只读:如果value类型为复杂格式,必须要通过【viewRender】来进行处理操作,转成简单数据类型\n * 2. 编辑:参数value的格式要求必须满足编辑组件入参value要求\n * 3. 可自定义编辑Icon、确定Icon、取消Icon\n * 4. 可拦截编辑操作、确定操作\n * ```\n */\nexport const EditableField = (props: EditableFieldProps) => {\n const {\n value,\n onChange,\n viewRender,\n placeholderValue = '-',\n editRender,\n isEditFull,\n onClickEditIconPre,\n onClickConfirmIconPre,\n iconConfig,\n onEditCallback,\n onConfirmCallback,\n } = props;\n const [isEdit, setIsEdit] = useState<boolean>(false);\n const ctx = useContext(EditableFieldContext);\n const originalValue = useRef<TAny>(value);\n\n const showEditableIcon = (function () {\n if (ctx.isCtx) {\n return props.showEditableIcon === undefined ? ctx.showEditableIcon : props.showEditableIcon;\n }\n return props.showEditableIcon === undefined ? true : props.showEditableIcon;\n })();\n\n const editable = (function () {\n if (ctx.isCtx) {\n return props.editable === undefined ? ctx.editable : props.editable;\n }\n return props.editable || false;\n })();\n\n useEffect(() => {\n setIsEdit(editable);\n }, [editable]);\n\n const onClickEditIcon = async () => {\n if (onClickEditIconPre) {\n await onClickEditIconPre(value);\n }\n originalValue.current = value;\n setIsEdit(true);\n onEditCallback?.(value);\n };\n\n const editIcon = iconConfig?.editIcon ? (\n iconConfig.editIcon({ onClick: onClickEditIcon })\n ) : (\n <IconWrapper size=\"small\" icon={<EditOutlined />} onClick={onClickEditIcon} />\n );\n\n if (!isEdit) {\n const viewValue = (viewRender ? viewRender(props.value) : props.value) || placeholderValue;\n if (\n isString(viewValue) ||\n isNumber(viewValue) ||\n isUndefinedOrNull(viewValue) ||\n isValidElement(viewValue)\n ) {\n if (!showEditableIcon) {\n return viewValue;\n }\n return (\n <Space size={8}>\n <span>{viewValue}</span>\n {editIcon}\n </Space>\n );\n }\n console.warn('对象作为React子对象无效', viewValue);\n }\n\n const onCancel = () => {\n if (value !== originalValue.current) {\n props.onChange?.(originalValue.current);\n }\n setIsEdit(false);\n };\n\n const onEditChange = (value) => {\n let target = value;\n /** 为了处理 Input、TextArea等onChange取值 */\n if (typeof value === 'object' && !isArray(value) && value.target) {\n target = value.target?.value;\n }\n onChange?.(target);\n };\n\n const onOk = async () => {\n if (onClickConfirmIconPre) {\n await onClickConfirmIconPre(value, originalValue.current);\n }\n setIsEdit(false);\n onConfirmCallback?.(value, originalValue.current);\n };\n\n const editRenderElement = isValidElement(editRender)\n ? editRender\n : editRender({ value: value, onChange: onEditChange });\n\n if (!showEditableIcon) {\n return <editRenderElement.type value={value} onChange={onEditChange} {...editRenderElement.props} />;\n }\n\n const confirmIcon = iconConfig?.confirmIcon ? (\n iconConfig.confirmIcon({ onClick: onOk })\n ) : (\n <IconWrapper\n size=\"small\"\n icon={<CheckOutlined style={{ color: 'var(--ant-primary-color)' }} />}\n onClick={onOk}\n />\n );\n\n const cancelIcon = iconConfig?.cancelIcon ? (\n iconConfig.cancelIcon({ onClick: onCancel })\n ) : (\n <IconWrapper\n size=\"small\"\n icon={<CloseOutlined style={{ color: 'var(--ant-primary-color)' }} />}\n onClick={onCancel}\n />\n );\n\n return (\n <Space\n direction=\"horizontal\"\n size={12}\n style={{ display: 'flex', paddingRight: 6 }}\n className={classNames({ 'editable-field-full': isEditFull }, props.className)}\n >\n <editRenderElement.type value={value} onChange={onEditChange} {...editRenderElement.props} />\n {confirmIcon}\n {cancelIcon}\n </Space>\n );\n};\n","import { ReactElement } from 'react';\nimport { EditableFieldContext } from './context';\n\nexport interface EditableFieldProviderProps {\n children: ReactElement;\n editable?: boolean;\n showEditableIcon?: boolean;\n}\n\n/**\n * EditableFieldProvider 控制内部使有的 EditableField 状态\n * @param props\n * @returns\n */\nexport const EditableFieldProvider = (props: EditableFieldProviderProps) => {\n const editable = props.editable === undefined ? true : props.editable;\n const showEditableIcon = props.showEditableIcon === undefined ? false : props.showEditableIcon;\n\n return (\n <EditableFieldContext.Provider value={{ editable, isCtx: true, showEditableIcon }}>\n {props.children}\n </EditableFieldContext.Provider>\n );\n};\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n/**\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', 'tags']);\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, labelInValueFieldNamesMerge.value);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, labelInValueFieldNamesMerge, value]);\n\n const stateSelectorList = useMemo(() => {\n if (isSearch) {\n return arrayFind(state.requestRespCacheData, 'search', 'request')?.response;\n }\n return state.requestRespCacheData.find((item) => item.request === serviceRequestParamsStringify)\n ?.response;\n }, [isSearch, serviceRequestParamsStringify, state.requestRespCacheData]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig?.onRequestResultAdapter\n ? serviceConfig?.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = async (inputValue?: string, searchId?: string | number) => {\n try {\n setLoading(true);\n const params = serviceRequestParams || {};\n void actions.changeRequestStatus('request-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await serviceConfig?.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n\n if (isSearch) {\n void actions.onSearchRequestRespHandle(respAdapterData);\n } else {\n void actions.onRequestRespHandle({\n respData: respAdapterData,\n requestStringify: serviceRequestParamsStringify,\n });\n }\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n // void message.error(error.message || '获取数据异常');\n onSelectorRequestError?.(error);\n }\n };\n\n const serviceRequest = {\n hasProcessRequest: () => {\n const process = window[requestPreKey];\n if (serviceRequestParamsStringify) {\n if (isArray(process) && process.includes(serviceRequestParamsStringify)) return true;\n } else {\n return !!process;\n }\n return false;\n },\n setProcessRequestStatus: () => {\n if (serviceRequestParamsStringify) {\n const cacheList = (window[requestPreKey] || []) as string;\n if (!cacheList.includes(serviceRequestParamsStringify)) {\n window[requestPreKey] = cacheList.concat(serviceRequestParamsStringify);\n }\n } else {\n window[requestPreKey] = [];\n }\n },\n };\n\n const prevRequestHandle = () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n\n // 判断相同的 params 是否已经在请求数据中,避免重复请求\n if (serviceRequest.hasProcessRequest()) {\n return;\n }\n serviceRequest.setProcessRequestStatus();\n // 去调用接口\n void startDataSourceRequest();\n };\n\n useEffectCustom(() => {\n if (hasOuterSelectorList || isSearch) return;\n if (hasServiceRequestParams) {\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys;\n if (requiredParamsKeys && requiredParamsKeys.length > 0) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return serviceRequestParams[key] === '' || isUndefinedOrNull(serviceRequestParams[key]);\n });\n if (isEmpty) {\n if (stateSelectorList && stateSelectorList.length > 0) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n window[requestPreKey] = undefined;\n void actions.resetSelectorList({\n selectorList: [],\n requestStatus: 'no-dependencies-params',\n });\n } else {\n void actions.changeRequestStatus('no-dependencies-params');\n }\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n props.onChange?.(undefined);\n }\n return;\n }\n }\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n if (stateSelectorList === undefined) {\n prevRequestHandle();\n }\n }, [serviceRequestParams]);\n\n hooks.useUpdateEffect(() => {\n if (state.setSelectorListCount > 1) {\n // 第一次不调用\n onSelectorListChange?.(stateSelectorList);\n }\n onSelectorListAllChange?.(stateSelectorList);\n }, [state.setSelectorListCount]);\n\n useEffectCustom(() => {\n if (hasOuterSelectorList) {\n void actions.resetSelectorList({\n selectorList: outerSelectorList || [],\n });\n }\n }, [outerSelectorList]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectorList({\n selectorList: [],\n });\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n\n if (labelInValue) {\n const { label, value } = labelInValueFieldNamesMerge;\n const labelInValueList = selectedList.map((item) => {\n return {\n [label]: item[optionsItemLabelField],\n [value]: item[optionsItemValueField],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig[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 { isPlainObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TAny, 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 { flushSync } from 'react-dom';\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: TAny) => 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 const errorList = uploadList?.filter((item) => item['status'] === 'error') || [];\n let newList =\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n status: 'done',\n isOriginal: true,\n };\n }) || [];\n if (errorList.length > 0) {\n const newErrorList = errorList.map((item) => {\n return {\n uid: item.uid,\n name: item.name,\n status: 'error',\n isOriginal: true,\n response: item['response'],\n };\n }) as TAny[];\n newList = newList.concat(newErrorList);\n }\n setUploadList(newList);\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const handleResponse = (fileList: UploadFile<TAny>[]) => {\n const newFileList: TAny[] = [];\n let hasError = false;\n fileList.forEach((item) => {\n if (item['isOriginal']) {\n if (item['status'] !== 'error') {\n newFileList.push({\n [fieldNames.uid]: item.uid,\n [fieldNames.name]: item.name,\n [fieldNames.url]: item.url,\n });\n }\n } else if (isPlainObject(item.response)) {\n if (item.response.code === '0000') {\n const respData = item.response.data;\n const result = (props.onRequestResultAdapter?.(respData) || respData) as TPlainObject;\n newFileList.push({\n [fieldNames.uid]: result[fieldNames.uid] || item.uid,\n [fieldNames.name]: result[fieldNames.name] || item.name,\n [fieldNames.url]: result[fieldNames.url],\n });\n } else {\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n }\n }\n });\n if (hasError) {\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n }\n onChange?.(newFileList);\n };\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const newFileList = [...info.fileList];\n const donwList = newFileList.filter((item) => item.status === 'done' || item['isOriginal']);\n\n const allDone = donwList.length === newFileList.length;\n if (allDone) {\n handleResponse(newFileList);\n }\n flushSync(() => setUploadList(newFileList));\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n index: number;\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, index) => {\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 index,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","export const editorTemplates = {\n block: {\n title: '块级卡片',\n description: '块级卡片',\n content: `<div style=\"{$varStyle} background-color:var(--editor-card-bgcolor);padding: 5px 20px;border-radius: 2px;color:#555\">\n <p>#自定义内容</p>\n </div><p></p>`,\n },\n primary_p: {\n title: 'primary_p',\n description: 'primary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-primary)\">#自定义内容</p><p></p>',\n },\n secondary_p: {\n title: 'secondary_p',\n description: 'secondary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-secondary)\">#自定义内容</p><p></p>',\n },\n warning_p: {\n title: 'warning_p',\n description: 'warning色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-warning)\">#自定义内容</p><p></p>',\n },\n danger_p: {\n title: 'danger_p',\n description: 'danger色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-danger)\">#自定义内容</p><p></p>',\n },\n success_p: {\n title: 'success_p',\n description: 'success色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-success)\">#自定义内容</p><p></p>',\n },\n p: {\n title: 'p',\n description: 'p',\n content: '<p></p>',\n },\n};\n","export type varStyles =\n | '--fa-color-primary'\n | '--fa-color-secondary'\n | '--fa-color-warning'\n | '--fa-color-danger'\n | '--fa-color-success'\n | '--editor-card-bgcolor';\n\nexport const defaultVarStyle: Record<varStyles, string> = {\n '--fa-color-primary': '#1677ff',\n '--fa-color-secondary': '#1677ff',\n '--fa-color-warning': '#ff8f1f',\n '--fa-color-danger': '#ff3141',\n '--fa-color-success': '#00b578',\n '--editor-card-bgcolor': '#f5f5f9',\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties, useMemo } from 'react';\nimport './style.less';\nimport { editorTemplates } from './template';\nimport { defaultVarStyle, varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n const varStyleString = useMemo(() => {\n const merge = { ...defaultVarStyle, ...props.varStyle };\n let varStyleString = '';\n Object.keys(merge).map((key) => {\n varStyleString += `${key}:${merge[key]};`;\n });\n return varStyleString;\n }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n templates: [\n editorTemplates.block,\n editorTemplates.primary_p,\n editorTemplates.secondary_p,\n editorTemplates.warning_p,\n editorTemplates.danger_p,\n editorTemplates.success_p,\n editorTemplates.p,\n ],\n template_replace_values: {\n varStyle: varStyleString,\n },\n template_preview_replace_values: {\n varStyle: varStyleString,\n },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { useEffect, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type FileUploadItem = {\n fileKey: string;\n fileName: string;\n};\n\ntype AntdFileUploadItem = {\n uid: string;\n name: string;\n fileKey: string;\n};\n\nexport type FileUploadProps = {\n onChange?: (value?: FileUploadItem[]) => void;\n onUploadError?: (message?: string) => void;\n value?: FileUploadItem[];\n onPreview?: (item: FileUploadItem) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n fileKey?: string;\n fileName?: string;\n };\n} & Omit<UploadProps, 'onChange' | 'fileList' | 'onPreview'>;\n\n/**\n * 文件上传,结合Form使用最佳\n * @deprecated 请使用【UploadWrapper】组件替换\n * ```\n * 接口返回结构:\n * formData上传接口必须返回fileKey值\n * {\n * code: '0000',\n * data: {\n * fileKey: '预览文件对应的fileKey'\n * }\n * }\n * 可通过fieldNames配置接口返回值属性名称映射\n * ```\n * ```\n * 最佳使用方式:\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <FileUpload action={uploadUrl} onPreview={onPreviewFile}>\n * <Button type=\"primary\">选择文件导入</Button>\n * </FileUpload>\n * </Form.Item>\n * ```\n *\n */\nexport const FileUpload = (props: FileUploadProps) => {\n useEffectCustom(() => {\n console.error('@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换');\n }, []);\n\n const { onChange, onUploadError, onPreview, value, ...otherProps } = props;\n const [uploadValue, setUploadValue] = useState<AntdFileUploadItem[]>([]);\n const fieldNames = extend(\n {\n fileKey: 'fileKey',\n fileName: 'fileName',\n },\n props.fieldNames,\n ) as FileUploadItem;\n\n useEffect(() => {\n if (value && isArray(value)) {\n setUploadValue(\n value.map((item) => {\n return {\n uid: item['uid'] || item[fieldNames.fileKey],\n name: item[fieldNames.fileName],\n fileKey: item[fieldNames.fileKey],\n url: item[fieldNames.fileKey],\n thumbUrl: item[fieldNames.fileKey],\n };\n }),\n );\n }\n }, [fieldNames.fileKey, fieldNames.fileName, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = respData.data || {};\n const uploadItem = {\n uid: info.file.uid,\n fileName: result[fieldNames.fileName] || (info.file.name as string),\n fileKey: result[fieldNames.fileKey],\n } as FileUploadItem;\n const respValue = (value || []).concat(uploadItem);\n onChange?.(respValue as unknown as FileUploadItem[]);\n } else {\n onUploadError?.(respData.message as string);\n }\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item['uid'] || item[fieldNames.fileKey];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n onUploadError?.();\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadValue([...info.fileList]);\n props.onUploadChange?.(info);\n });\n\n const onUploadPreview = hooks.useCallbackRef((file) => {\n onPreview?.({\n fileKey: file[fieldNames.fileKey],\n fileName: file[fieldNames.fileName],\n });\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n onPreview={onUploadPreview}\n fileList={uploadValue}\n className={classNames('v-file-upload', otherProps.className)}\n >\n {props.children}\n </Upload>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { 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 { composeProps } from '@flatbiz/utils';\nimport { Form, FormItemProps } from 'antd';\nimport { cloneElement, isValidElement, ReactElement, ReactNode } from 'react';\n\nexport interface FormItemWrapperProps extends FormItemProps {\n wrapper?: (children: ReactNode) => ReactElement;\n /** 设置wrapper后,before、after失效 */\n before?: ReactNode;\n /** 设置wrapper后,before、after失效 */\n after?: ReactNode;\n}\n\ninterface FormItemWrapperChildrenProps {\n wrapper?: FormItemWrapperProps['wrapper'];\n children: React.ReactElement;\n before?: ReactNode;\n after?: ReactNode;\n}\n\nconst FormItemWrapperChildren = (props: FormItemWrapperChildrenProps) => {\n const { wrapper, children, ...rest } = props;\n // composeProps 合并执行 Form.Item 传的 onChange 以及组件本身的方法\n const _children = cloneElement(children, composeProps(children.props, rest, true));\n if (wrapper) {\n return wrapper(_children);\n }\n if (props.before || props.after) {\n return (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {props.before ? <span style={{ marginRight: 10 }}>{props.before}</span> : null}\n <div style={{ flex: 1 }}>{_children}</div>\n {props.after ? <span style={{ marginLeft: 10 }}>{props.after}</span> : null}\n </div>\n );\n }\n return _children;\n};\n\n/**\n * 对 Form.Item 的 children 增加 before、after\n * @param props\n * @returns\n */\nexport const FormItemWrapper = (props: FormItemWrapperProps) => {\n const { wrapper, children, before, after, ...rest } = props;\n\n return (\n <Form.Item {...rest}>\n {isValidElement(children) ? (\n <FormItemWrapperChildren wrapper={wrapper} before={before} after={after}>\n {children}\n </FormItemWrapperChildren>\n ) : (\n children\n )}\n </Form.Item>\n );\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isNumber } from '@flatbiz/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 /** number or auto */\n labelWidth?: number | string;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const width = props.labelWidth === undefined ? 120 : props.labelWidth;\n const style = {\n '--v-label-value-layout-lWidth': isNumber(width as number) ? `${width}px` : width,\n } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Result, Spin } from 'antd';\nimport { forwardRef, Fragment, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useEffectCustomAsync } from '../hooks';\nimport './style.less';\n\nexport type LocalLoadingServiceConfig = {\n onRequest: (params?: TAny) => Promise<TPlainObject>;\n params?: TPlainObject;\n};\n\nexport interface LocalLoadingProps {\n /** 接口数据配置 */\n serviceConfig: LocalLoadingServiceConfig;\n /** children 为函数,参数【respData】为接口返回数据 */\n children: (respData?: TAny) => ReactElement;\n /**\n * 是否异步,默认:false\n * ```\n * true(异步):onRequest、react dom渲染同步执行\n * false(同步):onRequest有结果了才渲染 react dom\n * ```\n */\n isAsync?: boolean;\n /** 自定义异常渲染处理 */\n errorRender?: (error?: TAny) => ReactElement;\n /** 最小高度,默认值:100;isAsync = true 无效 */\n loadingHeight?: number;\n}\n\nexport type LocalLoadingRefApi = {\n onRefresh: () => void;\n};\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果\n * 2. error显示效果\n * 3. 正常接口数据渲染\n * ```\n * @param props\n * @returns\n */\nexport const LocalLoading = forwardRef<LocalLoadingRefApi, LocalLoadingProps>((props, ref) => {\n const { serviceConfig, isAsync, children, errorRender } = props;\n const [status, setStatus] = useState<'success' | 'error' | 'loading'>('loading');\n const [respData, setRespData] = useState<any>();\n const [refreshLoading, setRefreshLoading] = useState(false);\n\n const onRequest = async () => {\n try {\n setStatus('loading');\n const respData = await serviceConfig.onRequest(serviceConfig.params);\n setStatus('success');\n setRespData(respData);\n } catch (error) {\n setStatus('error');\n }\n };\n\n useEffectCustomAsync(onRequest, []);\n\n const loadingHeight = props.loadingHeight === undefined ? 100 : props.loadingHeight;\n\n useImperativeHandle(ref, () => {\n return {\n onRefresh: async () => {\n try {\n setRefreshLoading(true);\n const respData = await serviceConfig.onRequest(serviceConfig.params);\n setRespData(respData);\n } catch (error) {\n setStatus('error');\n } finally {\n setRefreshLoading(false);\n }\n },\n };\n });\n\n if (status === 'error') {\n if (errorRender) {\n return errorRender(respData);\n }\n return (\n <Result\n status=\"error\"\n className=\"local-loading-error\"\n title={'数据获取异常'}\n subTitle={(respData?.message as string) || '数据处理异常'}\n style={{ minHeight: loadingHeight }}\n extra={[\n <Button type=\"primary\" key=\"console\" onClick={onRequest}>\n 重新获取\n </Button>,\n ]}\n />\n );\n }\n const isLoading = status === 'loading';\n\n if (isLoading && !isAsync) {\n return (\n <div style={{ height: loadingHeight, display: 'flex', justifyContent: 'center' }}>\n <Spin spinning={true}>\n <Fragment />\n </Spin>\n </div>\n );\n }\n\n return <Spin spinning={refreshLoading || isLoading}>{children(respData)}</Spin>;\n});\n","import { Fragment, isValidElement, ReactElement, useState } from 'react';\n\ntype onClick = (e?: React.MouseEvent<HTMLElement>) => void;\n\nexport interface ModalActionProps {\n children: ReactElement | ((data: { onClose: () => void; open: boolean }) => ReactElement);\n action?:\n | (ReactElement & { onClick?: onClick })\n | ((data: { onClick: onClick; onClose: () => void; open: boolean }) => ReactElement);\n}\n\n/**\n * 弹框 触发器\n * ```\n * <ModalAction action={<Button type=\"primary\">打开</Button>}>\n * {({ onClose }) => (\n * <Modal onOk={onClose}>xxx</Modal>\n * )}\n * </ModalAction>\n * ```\n */\nexport const ModalAction = (props: ModalActionProps) => {\n const { action, children } = props;\n\n const [open, setOpen] = useState<boolean>(false);\n\n const handleOnClick = async (e: unknown) => {\n if (isValidElement(action)) {\n const { onClick } = action.props;\n if (typeof onClick === 'function') {\n await onClick?.(e);\n }\n }\n setOpen(true);\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const childrenReactElement = isValidElement(children) ? children : children({ onClose, open });\n\n return (\n <Fragment>\n {isValidElement(action) ? (\n <action.type {...action.props} onClick={handleOnClick} />\n ) : (\n action?.({ onClick: handleOnClick, onClose, open })\n )}\n <childrenReactElement.type\n open={open}\n onClose={onClose}\n onCancel={onClose}\n {...childrenReactElement.props}\n />\n </Fragment>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { ModalOperation, ModalOperationProps } from './modal-operation';\nimport './style.less';\n\nexport type ModalFormProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n // 设置了 ModalProps footer属性后,operationProps配置将失效\n operationProps?: ModalOperationProps;\n footer?: null | React.ReactNode;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * @deprecated 请使用【dialogModal】组件替换\n * ```\n */\nexport const ModalWraper = (props: ModalFormProps) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n return (\n <Modal\n className={classNames('modal-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <div className=\"modal-wraper-content\">\n {children}\n {pageLoading && <PageLoader />}\n </div>\n {footer !== null && (\n <div className=\"modal-wraper-content-footer\">\n {footer ? footer : <ModalOperation {...operationProps} />}\n </div>\n )}\n </Modal>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n/**\n * 组件单词写错,请输入\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWraperModel('key值').useStore();\n * ```\n */\nexport const createModalWraperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","export const Page404 = () => {\n return <div className=\"v-404\">404</div>;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_160: 'form-label-160',\n label_width_170: 'form-label-170',\n label_width_180: 'form-label-180',\n label_width_190: 'form-label-190',\n label_width_200: 'form-label-200',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n label_value_vertical: 'form-label-value-vertical',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_160: 'form-item-label-160',\n label_width_170: 'form-item-label-170',\n label_width_180: 'form-item-label-180',\n label_width_190: 'form-item-label-190',\n label_width_200: 'form-item-label-200',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n label_value_vertical: 'form-item-label-value-vertical',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n return (\n <div className={classNames('v-rule-describe', props.className)}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label;\n const optionsItemValueField = fieldNames?.value;\n const optionsItemDisabledField = fieldNames?.disabled;\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagListSelectValue = string | number | boolean;\nexport type TagListSelectDataItem = { label: string; value: TagListSelectValue; color?: string };\n\nexport type TagListSelectProps = {\n dataList: TagListSelectDataItem[];\n /** 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同 */\n colorMap?: Record<string, string>;\n value?: TagListSelectValue;\n /** 是否强制匹配,默认值false */\n forceMatch?: boolean;\n};\n\n/**\n * 在列表数据中通过value匹配数据,以Tag形式展示\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagListSelect: FC<TagListSelectProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagListSelect.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagListSelect, TagListSelectProps } from '../tag-list-select';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny, index: number) => ButtonOperateProps) => {\n return (_value: string | number, record, index: number) => {\n const operateProps = options(record, index);\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 return (_value, _record, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\nconst tableColumnIndexRender2 = (method?: () => { pageNo?: number; pageSize?: number }) => {\n return (_value, _record, index: number) => {\n const { pageNo, pageSize } = method?.() || {};\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagListSelectProps['dataList'],\n colorMap?: TagListSelectProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagListSelect dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容,一般为Icon */\n extra: ReactElement;\n extraPosition?: 'before' | 'after';\n onClick?: (e) => void;\n /** 是否显示原单元格数据,默认值:true */\n showData?: boolean;\n /** 溢出显示【...】, 最大长度(默认:20个字节) */\n showMaxNumber?: number;\n /** 未溢出显示【extra】配置,默认值:true */\n notOverflowShowExtra?: boolean;\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const notOverflowShowExtra = isUndefinedOrNull(options.notOverflowShowExtra)\n ? true\n : options.notOverflowShowExtra;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n\n if (options.extra && showData) {\n if (renderValue === value && !notOverflowShowExtra) {\n return value;\n }\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n return <span onClick={options.onClick}>{options.extra}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示原单元格数据,默认值:true\n * 3. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @deprecated 已过时,请使用 serialNumberCell\n */\n indexCell: tableColumnIndexRender,\n /**\n * table 序号展示,如果存在pageSize、pageNo参数可分页展示累加序号,否则每页都从1开始\n * ```\n * render: tableCellRender.serialNumberCell(() => {\n * return { pageNo,pageSize };\n * }),\n * ```\n */\n serialNumberCell: tableColumnIndexRender2,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content?: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * 4. 如果自定义了 defaultActiveKey,内部缓存key失效\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} defaultActiveKey={defaultActiveKey} className={className} onChange={onChange} />\n );\n};\n","import { Space, SpaceProps, Tag } from 'antd';\nimport { FC } from 'react';\n\ntype TagGroupDataItem = { label: string; value: string | number; color?: string };\n\nexport type TagGroupProps = {\n dataList: TagGroupDataItem[];\n /**\n * 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同\n */\n colorMap?: Record<string, string>;\n spaceProps?: SpaceProps;\n};\n\n/**\n * Tag 列表显示\n */\nexport const TagGroup: FC<TagGroupProps> = (props) => {\n return (\n <Space wrap size={5} {...props.spaceProps}>\n {props.dataList.map((item, index) => {\n const color = item.color || props.colorMap?.[item.value];\n return (\n <Tag color={color} key={index}>\n {item.label}\n </Tag>\n );\n })}\n </Space>\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport moment from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: 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, disabledDateConfig, 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((date: moment.Moment | null, timeString: string) => {\n if (date) {\n if (minDateMoment && date.isBefore(minDateMoment)) timeString = minDateMoment.format(format);\n if (maxDateMoment && date.isAfter(maxDateMoment)) timeString = maxDateMoment.format(format);\n !isExistValue && setTimeValue(timeString);\n onChange?.(timeString);\n } else {\n !isExistValue && setTimeValue(undefined);\n onChange?.(undefined);\n }\n });\n\n const { minDateMoment, maxDateMoment } = useMemo(() => {\n const { minDate, maxDate } = disabledDateConfig || {};\n let minDateMoment: moment.Moment | undefined;\n let maxDateMoment: moment.Moment | undefined;\n if (minDate) minDateMoment = moment(minDate, format);\n if (maxDate) maxDateMoment = moment(maxDate, format);\n return { minDateMoment, maxDateMoment };\n }, [disabledDateConfig, format]);\n\n const newDisabledTime = useMemo(() => {\n if (disabledTime) return disabledTime;\n const disabledHours: number[] = [];\n if (minDateMoment) {\n const minHour = minDateMoment.get('hour');\n for (let i = minHour - 1; i >= 0; i--) {\n disabledHours.push(i);\n }\n }\n if (maxDateMoment) {\n const maxMinute = maxDateMoment.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 (minDateMoment && selectedHour <= minDateMoment.get('hour')) {\n const minMinute = minDateMoment.get('minute');\n for (let i = minMinute - 1; i >= 0; i--) {\n disabledMinutes.push(i);\n }\n }\n if (maxDateMoment && selectedHour >= maxDateMoment.get('hour')) {\n const maxMinute = maxDateMoment.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 minDateMoment &&\n selectedHour <= minDateMoment.get('hour') &&\n selectedMinute <= minDateMoment.get('minute')\n ) {\n const minSecond = minDateMoment.get('second');\n for (let i = minSecond - 1; i >= 0; i--) {\n disabledSeconds.push(i);\n }\n }\n if (\n maxDateMoment &&\n selectedHour >= maxDateMoment.get('hour') &&\n selectedMinute >= maxDateMoment.get('minute')\n ) {\n const maxSecond = maxDateMoment.get('second');\n for (let i = maxSecond + 1; i <= 59; i++) {\n disabledSeconds.push(i);\n }\n }\n return disabledSeconds;\n },\n };\n };\n }, [minDateMoment, maxDateMoment, disabledTime]);\n\n const datePickerValue = useMemo(() => {\n const value = isExistValue ? props.value : timeValue;\n if (value) {\n return moment(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 moment from 'moment';\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 * minDate、maxDate设置格式\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: 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\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledDateConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledDateConfig, 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 onChangeTime = hooks.useCallbackRef(\n (date: RangeValue<moment.Moment>, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n const [dateStart, dateEnd] = date;\n if (minDateMoment && dateStart && dateStart.isBefore(minDateMoment))\n timeStart = minDateMoment.format(format);\n if (maxDateMoment && dateEnd && dateEnd.isAfter(maxDateMoment))\n timeEnd = maxDateMoment.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 { minDateMoment, maxDateMoment } = useMemo(() => {\n const { minDate, maxDate } = disabledDateConfig || {};\n let minDateMoment: moment.Moment | undefined;\n let maxDateMoment: moment.Moment | undefined;\n if (minDate) minDateMoment = moment(minDate, format);\n if (maxDate) maxDateMoment = moment(maxDate, format);\n return { minDateMoment, maxDateMoment };\n }, [disabledDateConfig, format]);\n\n const newDisabledTime = useMemo(() => {\n if (disabledTime) return disabledTime;\n const disabledHours: number[] = [];\n if (minDateMoment) {\n const minHour = minDateMoment.get('hour');\n for (let i = minHour - 1; i >= 0; i--) {\n disabledHours.push(i);\n }\n }\n if (maxDateMoment) {\n const maxMinute = maxDateMoment.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 (minDateMoment && selectedHour <= minDateMoment.get('hour')) {\n const minMinute = minDateMoment.get('minute');\n for (let i = minMinute - 1; i >= 0; i--) {\n disabledMinutes.push(i);\n }\n }\n if (maxDateMoment && selectedHour >= maxDateMoment.get('hour')) {\n const maxMinute = maxDateMoment.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 minDateMoment &&\n selectedHour <= minDateMoment.get('hour') &&\n selectedMinute <= minDateMoment.get('minute')\n ) {\n const minSecond = minDateMoment.get('second');\n for (let i = minSecond - 1; i >= 0; i--) {\n disabledSeconds.push(i);\n }\n }\n if (\n maxDateMoment &&\n selectedHour >= maxDateMoment.get('hour') &&\n selectedMinute >= maxDateMoment.get('minute')\n ) {\n const maxSecond = maxDateMoment.get('second');\n for (let i = maxSecond + 1; i <= 59; i++) {\n disabledSeconds.push(i);\n }\n }\n return disabledSeconds;\n },\n };\n };\n }, [minDateMoment, maxDateMoment, disabledTime]);\n\n const datePickerValue = useMemo(() => {\n const value = isExistValue ? props.value : timeValue;\n if (value && value.length > 0) {\n return [\n value[0] ? moment(value[0], format) : value[0],\n value[1] ? moment(value[1], format) : value[1],\n ] as [moment.Moment, moment.Moment];\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, usePrevious } 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 const preValue1 = usePrevious(startVal);\n const preValue2 = usePrevious(endVal);\n\n useEffectCustom(() => {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n if (startVal && endVal) {\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n\n if (preValue1 && preValue2 && !startVal && !endVal) {\n form.setFields([{ name, value: undefined }]);\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 /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n const isMultiple = otherProps.treeCheckable;\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n dropdownClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.dropdownClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={renderValueList as any}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\n\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 { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\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 /** 菜单结构类型 tile/平铺 fold/折叠;默认:fold */\n menuLayoutType?: 'tile' | 'fold';\n /** 菜单触发类型,默认:click */\n menuTriggerType?: 'click' | 'hover';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期,请使用 menuOptions\n * @returns\n * ```\n * menuLayoutType = tile 无效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n\n /**\n * 根据 menuLayoutType 类型赋值\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\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 menuLayoutType,\n menuTriggerType,\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 const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\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\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n {menuOptions ? (\n <ButtonOperate\n {...menuOptions}\n size={5}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\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 const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`);\n return (\n <div className={cName}>\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","permission","hidden","jsx","Button","_extends","useArrayChange","dataList","forceUpdate","changeListRef","useRef","update","useForceUpdate","arrayOperate","add","useCallbackRef","dataItem","isUnshift","targetList","current","concat","index","target","delete","deleteItem","splice","resetList","getList","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useSafeState","initialState","setState","isMounted","useIsMounted","value","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","setMenuItems","_useState2","statusMap","setStatusMap","onConfirmtTriggerClick","event","_setStatusMap","stopPropagation","open","onConfirm","item","menuItemsNew","filter","Boolean","forEach","_statusMap$index","_statusMap$index2","text","color","needConfirm","confirmMessage","type","style","popconfirmProps","otherProps","_excluded2","newStyle","buttonType","nromal","key","label","_createElement","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","overlayClassName","danger","disabled","push","Dropdown","arrow","pointAtCenter","menu","items","onOpenChange","_open","ButtonOperateItemContent","hoverTips","tipsType","Popover","content","Tooltip","ButtonOperate","operateList","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","spaceProps","map","placement","DefaultButton","length","foldIcon","_MoreOutlined","defaultProps","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","undefined","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","$await_3","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","_createCtx","_createCtx2","useCheckListCtx","CheckListCtxProvider","getValueList","CheckList","checkedValues","_useArrayChange","defaultValue","useUpdateEffect","defaultChange","targetIndex","newValues","selectedValue","onPreChange","$If_1","call","this","findIndex","temp","required","beforeExtra","afterExtra","CheckListItem","_classNames2","context","checked","checkedClassPrefix","readonly","CssNodeHover","cloneElement","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","preValue1","preValue2","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","createElement","id","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","configProviderProps","visible","setVisible","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","ConfigProvider","locale","zh_CN","componentSize","space","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","ReactDOM","render","close","_window$elementId","_window","dialogConfirm","dialogAlert","cancelButtonProps","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","operateGroup","jsxs","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","footer","dialogDrawer","setOpen","closable","dialogLoading","root","createRoot","_window$elementId2","_window2","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWraper","operationProps","keyboard","forceRender","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","dynamicNode","container","tempElement","fixed","nodeElementId","log","remove","dynamicElementId","_document$querySelect","useEasyTableCtx","EasyTableCtxProvider","queryCondition","isInit","_EasyTableModel","updateFilterCondition","resetFilterCondition","updateInitStatus","easyTableModels","easyTableModel","EasyTable","_props$initialPaginat","dataSource","setDataSource","total","setTotal","_useState3","_easyTableModel$useSt","pageSize","initialPaginationParams","initRequest","paginationStatus","_useState4","setPaginationStatus","list","pageNo","allState","_props$serviceConfig","requestParamsAdapter","_onRequest","requestResultAdapter","paramsNew","respDataNew","respList","onDataSourceChange","clearQueryCondition","$await_4","resetFields","setFieldsValue","onResetRequest","$await_5","initialValues","getRequestParams","getFieldsValue","getEasyTableRef","onSetPaginationStatus","onFormFinish","_extends3","tableList","tableTotal","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_objectWithoutPropertiesLoose","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","keys","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","currentValue","hasOperateList","find","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_temp$props2","span","itemProps","newProps","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","contentStyle","EasyTableFilter","queryButtonProps","resetButtonProps","filterOperate","_useEasyTableCtx","childrens","Children","onReset","pageSiz","formOperateColProps","htmlType","formRowChildren","onFinish","isPure","gutter","EasyTableTable","rowKey","pagination","paginationData","showSizeChanger","showTotal","onChangePage","_len","arguments","Array","_key","getUuid","Table","scroll","x","bordered","useEasyTablRef","IconWrapper","hideHoverBgColor","EditableFieldContext","createContext","editable","showEditableIcon","isCtx","EditableField","viewRender","_props$placeholderVal","placeholderValue","editRender","isEditFull","onClickEditIconPre","onClickConfirmIconPre","iconConfig","onEditCallback","onConfirmCallback","isEdit","setIsEdit","ctx","useContext","originalValue","onClickEditIcon","editIcon","_EditOutlined","viewValue","_isNumber","warn","onEditChange","_value$target","$If_2","editRenderElement","confirmIcon","_CheckOutlined","cancelIcon","_CloseOutlined","direction","display","paddingRight","EditableFieldProvider","Provider","getEditable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","onCompositionStart","onCompositionEnd","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","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","_ref2","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","arrayField2LabelValue","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","isNumber","_isBoolean","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","errorList","newList","isOriginal","newErrorList","handleResponse","fileList","newFileList","hasError","_newFileList$push","isPlainObject","code","_newFileList$push2","onUploadChange","info","file","donwList","allDone","flushSync","tempUid","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","onTableAfterRender","block","_PlusOutlined","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","maxCount","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","FormItemCard","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","FormItemWrapperChildren","wrapper","rest","_children","composeProps","alignItems","marginLeft","FormItemWrapper","Gap","inline","LabelValueLayout","labelWidth","Descriptions","column","LocalLoading","isAsync","errorRender","setStatus","setRespData","refreshLoading","setRefreshLoading","loadingHeight","onRefresh","$Try_2_Finally","$Try_2_Exit","$Try_2_Value","_respData2","Result","subTitle","minHeight","isLoading","justifyContent","ModalAction","action","handleOnClick","_onClick","childrenReactElement","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","modalModels","createModalWraperModel","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","createModalWrapperModel","PageFixedFooter","Page404","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_160","label_width_170","label_width_180","label_width_190","label_width_200","label_width_auto","label_align_left","label_align_right","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","isCancel","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","ruleItemDescStyle","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagListSelect","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","_record","tableColumnIndexRender2","method","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","handle","showData","notOverflowShowExtra","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","serialNumberCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","isSticky","_props$isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","cacheKey","activeKey","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","get","Tabs","TagGroup","TimePickerWrapper","disabledTime","isExistValue","timeValue","setTimeValue","onChangeTime","timeString","minDateMoment","isBefore","maxDateMoment","isAfter","newDisabledTime","disabledHours","minHour","i","maxMinute","disabledMinutes","selectedHour","minMinute","disabledSeconds","selectedMinute","minSecond","maxSecond","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","dateStart","dateEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Set","valueIsEmpty","serviceResponseHandle","onChangeSelectorList","useCustomCompareEffect","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","menuLayoutType","menuTriggerType","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","menuLayoutTypeNew","menuTriggerTypeNew","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_props$menuOptions3","_extends5","stringLabel","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","getMenuOptions","tile","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","cName","placeholder","Tree"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-array-change.ts","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/check-list/context.ts","@flatbiz/antd/src/check-list/utils.ts","@flatbiz/antd/src/check-list/check-list.tsx","@flatbiz/antd/src/check-list/check-list-item.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/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-modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/dialog-drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/dynamic-node/index.tsx","@flatbiz/antd/src/easy-table/context.ts","@flatbiz/antd/src/easy-table/model.ts","@flatbiz/antd/src/easy-table/easy-table.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/easy-table/filter.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/easy-table/use-easy-table-ref.ts","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/editable-field/context.ts","@flatbiz/antd/src/editable-field/editable-field.tsx","@flatbiz/antd/src/editable-field/editable-field-provider.tsx","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/form-item-wrapper/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/local-loading/index.tsx","@flatbiz/antd/src/modal-action/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-list-select/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/tag-group/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './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' | 'hidden'> & {\n onClick?: (event: 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.permission)) {\n return null;\n }\n\n if (props.hidden) {\n return null;\n }\n\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { useRef } from 'react';\n\nexport const useArrayChange = <T>(dataList: Array<T>, forceUpdate = true) => {\n const changeListRef = useRef<Array<T>>(dataList);\n const update = hooks.useForceUpdate();\n const arrayOperate = {\n add: hooks.useCallbackRef((dataItem: T | Array<T>, isUnshift?: boolean) => {\n if (isUnshift) {\n const targetList = isArray(dataItem) ? dataItem : [dataItem];\n changeListRef.current = [...targetList, ...changeListRef.current];\n } else {\n changeListRef.current = changeListRef.current.concat(dataItem);\n }\n forceUpdate && update();\n }),\n update: hooks.useCallbackRef((index: number, dataItem: T) => {\n const target = changeListRef.current[index];\n if (target) {\n changeListRef.current[index] = { ...target, ...dataItem };\n }\n forceUpdate && update();\n }),\n delete: hooks.useCallbackRef((index: number) => {\n const deleteItem = changeListRef.current.splice(index, 1);\n forceUpdate && update();\n return deleteItem;\n }),\n resetList: hooks.useCallbackRef((dataList: Array<T>) => {\n changeListRef.current = dataList;\n forceUpdate && update();\n }),\n getList: hooks.useCallbackRef(() => {\n return changeListRef.current;\n }),\n };\n return [changeListRef.current, arrayOperate] as const;\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { 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 { useEffectCustom } from '../hooks';\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, setMenuItems] = useState<ItemType[]>([]);\n\n const [statusMap, setStatusMap] = useState<Record<string, { open?: boolean; loading?: boolean }>>({});\n const onConfirmtTriggerClick = hooks.useCallbackRef((index, event) => {\n event.stopPropagation();\n setStatusMap({ [index]: { open: true } });\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, index: number, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n statusMap[index] = { loading: true, open: true };\n setStatusMap({ ...statusMap });\n result.finally(() => {\n statusMap[index] = { loading: false, open: false };\n setStatusMap({ ...statusMap });\n });\n return;\n }\n statusMap[index] = { loading: false, open: false };\n setStatusMap({ ...statusMap });\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n return item.onClick?.(event);\n });\n\n useEffectCustom(() => {\n const menuItemsNew: ItemType[] = [];\n menuList.filter(Boolean).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, index)}\n onCancel={(event) => {\n event?.stopPropagation();\n setStatusMap({});\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n open={statusMap[index]?.open || false}\n okButtonProps={{\n loading: statusMap[index]?.loading,\n }}\n overlayClassName=\"dmw-popconfirm\"\n >\n <Button\n size=\"small\"\n danger\n {...otherProps}\n onClick={onConfirmtTriggerClick.bind(null, index)}\n type={buttonType}\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItemsNew.push(confirm);\n } else {\n menuItemsNew.push(nromal);\n }\n });\n setMenuItems(menuItemsNew);\n }, [menuList, statusMap]);\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n menu={{ items: menuItems }}\n onOpenChange={(_open) => {\n if (!_open) {\n setStatusMap({});\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport {\n Button,\n ButtonProps,\n Divider,\n Popconfirm,\n PopconfirmProps,\n Popover,\n Space,\n SpaceProps,\n Tooltip,\n} from 'antd';\nimport {\n CSSProperties,\n FC,\n Fragment,\n isValidElement,\n ReactElement,\n ReactNode,\n useMemo,\n useState,\n} from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\n\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n /** hover 提示文字 */\n hoverTips?: string | React.ReactElement;\n /** hover 提示类型 默认:'tooltip' */\n tipsType?: 'popover' | 'tooltip';\n text: string | ReactElement;\n color?: string;\n onClick?: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n // 是否折叠合拢\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n /** 间距,默认:10 */\n gap?: number;\n foldIcon?: ReactElement;\n className?: string;\n split?: boolean;\n spaceProps?: SpaceProps;\n style?: CSSProperties;\n}\n\nexport const ButtonOperateItemContent = (\n props: Pick<ButtonOperateItem, 'hoverTips' | 'tipsType'> & { children?: ReactNode },\n) => {\n if (props.hoverTips) {\n if (props.tipsType === 'popover') {\n return (\n <Popover content={props.hoverTips} zIndex={1000}>\n <Fragment>{props.children}</Fragment>\n </Popover>\n );\n }\n return (\n <Tooltip title={props.hoverTips} zIndex={1000}>\n <Fragment>{props.children}</Fragment>\n </Tooltip>\n );\n }\n return <Fragment>{props.children}</Fragment>;\n};\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!hasPermission(item.permission)) {\n return false;\n }\n return !item.hidden;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item.isFold;\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item.isFold;\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n const gap = props.gap === undefined ? 10 : props.gap;\n const size = !props.split ? gap : 0;\n\n return (\n <div className={classNames('table-operate', props.className)} style={props.style}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n {...props.spaceProps}\n >\n {viewList.map((item, index) => {\n if (item && isValidElement(item))\n return (\n <ButtonOperateItemContent hoverTips={item.hoverTips} tipsType={item.tipsType}>\n {item}\n </ButtonOperateItemContent>\n );\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 <ButtonOperateItemContent hoverTips={item.hoverTips} tipsType={item.tipsType} key={index}>\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 danger\n {...otherProps}\n onClick={null}\n type={type}\n style={style}\n color={color}\n >\n {isValidElement(text) ? <span>{text}</span> : text}\n </DefaultButton>\n </Popconfirm>\n </ButtonOperateItemContent>\n );\n }\n return (\n <ButtonOperateItemContent hoverTips={item.hoverTips} tipsType={item.tipsType} key={index}>\n <DefaultButton {...otherProps} type={type} style={style} onClick={onClick} color={color}>\n {isValidElement(text) ? <span>{text}</span> : text}\n </DefaultButton>\n </ButtonOperateItemContent>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button\n type=\"link\"\n className=\"fold-more-button\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nconst DefaultButton = (props) => {\n const newStyle =\n props.color && !props.disabled\n ? {\n '--ant-primary-color': props.color,\n '--ant-primary-color-hover': props.color,\n '--ant-primary-color-active': props.color,\n }\n : {};\n return (\n <ButtonWrapper\n {...props}\n style={{ ...newStyle, ...props.style }}\n onClick={(event) => {\n event.stopPropagation();\n return props.onClick?.(event);\n }}\n >\n {props.children}\n </ButtonWrapper>\n );\n};\n\nButtonOperate.defaultProps = {\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 onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n","import { createCtx } from '@wove/react';\nimport { CheckListItemValue } from './types';\n\nexport const [useCheckListCtx, CheckListCtxProvider] = createCtx<{\n checkedValues: CheckListItemValue[];\n onChange: (value: CheckListItemValue, defaultChange?: boolean) => void;\n stopPropagation?: boolean;\n}>();\n","import { toArray } from '@flatbiz/utils';\nimport { CheckListItemValue, CheckListValue } from './types';\n\nexport const getValueList = (value?: CheckListValue, multiple?: boolean) => {\n if (value !== undefined) {\n const valueList = toArray<CheckListItemValue>(value);\n return multiple ? valueList : valueList.splice(0, 1);\n }\n return null;\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { ReactNode, useMemo } from 'react';\nimport { useArrayChange, useEffectCustom } from '../hooks';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport { CheckListCtxProvider } from './context';\nimport './style.less';\nimport { CheckListItemValue } from './types';\nimport { getValueList } from './utils';\n\nexport type CheckListSelectedValue<T extends 'multi' | 'radio'> = T extends 'multi'\n ? CheckListItemValue[]\n : CheckListItemValue;\n\nexport type CheckListProps<T extends 'multi' | 'radio'> = {\n multiple?: boolean;\n onChange?: (value: CheckListSelectedValue<T>, operateValue: CheckListItemValue) => void;\n onPreChange?: (value: CheckListItemValue) => Promise<void>;\n value?: CheckListSelectedValue<T>;\n defaultValue?: CheckListSelectedValue<T>;\n beforeExtra?: ReactNode;\n afterExtra?: ReactNode;\n stopPropagation?: boolean;\n required?: boolean;\n} & CommonPropsWithChildren;\n\nexport const CheckList = <T extends 'multi' | 'radio'>(props: CheckListProps<T>) => {\n const [checkedValues, arrayOperate] = useArrayChange<CheckListItemValue>([]);\n\n const valueList = useMemo(() => {\n return getValueList(props.value, props.multiple);\n }, [props.value, props.multiple]);\n\n useEffectCustom(() => {\n const current = valueList || getValueList(props.defaultValue, props.multiple);\n arrayOperate.resetList(current || []);\n }, []);\n\n hooks.useUpdateEffect(() => {\n arrayOperate.resetList(valueList || []);\n }, [valueList]);\n\n const onChange = hooks.useCallbackRef(async (value: CheckListItemValue, defaultChange) => {\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n const targetIndex = checkedValues.findIndex((temp) => temp === value);\n if (props.multiple === true) {\n if (checkedValues.length === 1 && targetIndex >= 0 && props.required) {\n return;\n }\n if (targetIndex >= 0) {\n arrayOperate.delete(targetIndex);\n } else {\n arrayOperate.add(value);\n }\n } else {\n if (targetIndex >= 0 && props.required) {\n return;\n } else {\n arrayOperate.resetList(targetIndex >= 0 ? [] : [value]);\n }\n }\n if (!defaultChange) {\n const newValues = arrayOperate.getList();\n let selectedValue;\n if (props.multiple) {\n selectedValue = newValues.length > 0 ? extend([], newValues) : undefined;\n } else {\n selectedValue = newValues.length > 0 ? newValues[0] : undefined;\n }\n props.onChange?.(selectedValue as CheckListSelectedValue<T>, value);\n }\n });\n\n return (\n <div className={classNames('check-list', props.className)} style={props.style}>\n <CheckListCtxProvider\n value={{\n onChange,\n checkedValues,\n stopPropagation: props.stopPropagation,\n }}\n >\n {props.beforeExtra}\n {props.children}\n {props.afterExtra}\n </CheckListCtxProvider>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement } from 'react';\nimport { useCheckListCtx } from './context';\nimport { CheckListItemValue } from './types';\n\nexport type CheckListItemContentProps = {\n checked?: boolean;\n disabled?: boolean;\n onClick?: (event) => void;\n className?: string;\n readonly?: boolean;\n style?: CSSProperties;\n};\n\nexport type CheckListItemProps = {\n value: CheckListItemValue;\n disabled?: boolean;\n readonly?: boolean;\n children: (data: CheckListItemContentProps) => ReactElement;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const CheckListItem = (props: CheckListItemProps) => {\n const context = useCheckListCtx();\n\n if (context === null) {\n console.error('CheckList.Item can only be used inside CheckList.');\n return null;\n }\n\n const onClick = hooks.useCallbackRef((event) => {\n if (context.stopPropagation) {\n event.stopPropagation();\n }\n if (!props.disabled) {\n context?.onChange(props.value);\n }\n });\n\n const checked = context?.checkedValues.findIndex((temp) => temp === props.value) >= 0;\n const checkedClassPrefix = 'check-list';\n\n const className = classNames(\n `${checkedClassPrefix}-item`,\n {\n [`${checkedClassPrefix}-disabled`]: props.disabled,\n [`${checkedClassPrefix}-readonly`]: props.readonly,\n [`${checkedClassPrefix}-checked`]: checked,\n },\n props.className,\n );\n\n return props.children({\n onClick,\n checked,\n disabled: props.disabled,\n readonly: props.readonly,\n className,\n style: props.style,\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return moment(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment, { Moment } from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<moment.Moment>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [Moment | null, Moment | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom, usePrevious } 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 const preValue1 = usePrevious(startVal);\n const preValue2 = usePrevious(endVal);\n\n useEffectCustom(() => {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n if (startVal && endVal) {\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n if (preValue1 && preValue2 && !startVal && !endVal) {\n form.setFields([{ name, value: undefined }]);\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 { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n className,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n centered={true}\n destroyOnClose\n {...otherProps}\n className={classNames('dialog-modal', className)}\n visible={visible}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './dialog-modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '关闭',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './dialog-modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelButtonProps: {\n hidden: true,\n },\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, ConfigProvider, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = (e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n };\n const operateGroup = (\n <Space>\n <Button {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </Button>\n <Button type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle} loading={loading}>\n {okText || '提交'}\n </Button>\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n return operateGroup;\n };\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Drawer\n maskClosable={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 visible={visible}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal } 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\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': 'var(--ant-primary-color)' } 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 visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationOldProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * @deprecated 请使用【dialogDrawer】组件替换\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper = (props: DrawerFormProps) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport { bodyAppendDivElement } from '../dialog/utils';\nimport './style.less';\n\nexport type TDynamicNodeProps = {\n className?: string;\n getContainer?: HTMLElement | (() => HTMLElement) | string;\n content?: ReactElement;\n fixed?: boolean;\n style?: CSSProperties;\n};\n\n/**\n * 动态添加 element 元素\n * ```\n * 1. 默认添加到 body 下\n * 2. 可通过 getContainer 参数设置添加位置\n * ```\n */\nexport const dynamicNode = {\n append: (props: TDynamicNodeProps = {}) => {\n const container = (() => {\n let tempElement;\n if (typeof props.getContainer === 'string') {\n tempElement = document.querySelector(props.getContainer);\n } else if (typeof props.getContainer === 'function') {\n tempElement = props.getContainer();\n }\n return tempElement as Element | undefined;\n })();\n\n const className = classNames('v-dynamic-node', { 'v-dynamic-node-fixed': props.fixed }, props.className);\n let nodeElementId = `id_${Date.now()}`;\n if (container) {\n ReactDOM.render(\n <div className={className} id={nodeElementId}>\n {props.content}\n </div>,\n container,\n );\n } else {\n const { divElement, elementId } = bodyAppendDivElement();\n nodeElementId = elementId;\n ReactDOM.render(<div className={className}>{props.content}</div>, divElement);\n }\n window['_dynamic_node_element_id'] = nodeElementId;\n console.log('nodeElementId', nodeElementId);\n return {\n elementId: nodeElementId,\n };\n },\n remove: (elementId?: string) => {\n const dynamicElementId = elementId || window['_dynamic_node_element_id'];\n if (dynamicElementId) {\n try {\n document.querySelector(`#${dynamicElementId}`)?.remove();\n } catch (error) {\n //\n }\n }\n },\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\nimport { FormInstance } from 'antd';\nimport { EasyTableRefApi } from './type';\n\nexport const [useEasyTableCtx, EasyTableCtxProvider] = createCtx<{\n modelKey: string;\n onRequest: (params?: TPlainObject) => void;\n tableList: TPlainObject[];\n tableTotal: number;\n loading?: boolean;\n fieldNames: TPlainObject;\n pageSize: number;\n initRequest: boolean;\n initialValues: TPlainObject;\n onSetPaginationStatus: (status: boolean) => void;\n paginationStatus: boolean;\n onFormFinish?: (values?: TPlainObject) => void;\n form: FormInstance;\n getEasyTableRef: () => EasyTableRefApi;\n}>();\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n queryCondition: TPlainObject;\n isInit: boolean;\n};\n\ntype ModelActionParams = {\n updateFilterCondition?: Partial<ModelState['queryCondition']>;\n resetFilterCondition: void;\n updateInitStatus: void;\n};\n\nconst defaultState: ModelState = {\n queryCondition: {},\n isInit: true,\n};\n\nconst _EasyTableModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n updateFilterCondition: (params) => {\n return (state) => {\n state.queryCondition = {\n ...state.queryCondition,\n ...params,\n };\n };\n },\n resetFilterCondition: () => {\n return (state) => {\n state.queryCondition = defaultState.queryCondition;\n };\n },\n updateInitStatus: () => {\n return (state) => {\n state.isInit = false;\n };\n },\n },\n state: defaultState,\n};\n\nconst easyTableModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const easyTableModel = (key: string) => {\n if (!easyTableModels[key]) {\n easyTableModels[key] = Model(_EasyTableModel);\n }\n return easyTableModels[key];\n};\n","import { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\nimport { EasyTableRefApi } from './type';\n\ntype EasyTableServiceConfig = {\n /** 接口配置 */\n onRequest: (params?: TPlainObject) => Promise<TPlainObject | TPlainObject[]>;\n /** 请求参数处理 */\n requestParamsAdapter?: (params: TPlainObject) => TPlainObject;\n /**\n * 接口相应数据处理\n * @param params\n * ```\n * 返回数据为对象,包含两个字段\n * 1. 表格列表数据 - Array\n * 2. 表格条数总数 - Number\n * 其中 字段key 命名会通过 fieldNames 进行转义\n * ```\n */\n requestResultAdapter?: (params: TAny) => TPlainObject;\n};\n\nexport type EasyTableProps = {\n children: ReactElement | ReactElement[];\n modelKey: string;\n /** 接口数据配置 */\n serviceConfig: EasyTableServiceConfig;\n /**\n * 1. 查询条件Form initialValues\n * 2. 接口其他参数,例如常量类型\n */\n initialValues?: TPlainObject;\n /**\n * 分页初始化参数,默认值: pageSize = 10\n * @deprecated 使用 pageSize 赋值\n */\n initialPaginationParams?: { pageSize?: number };\n /** 分页单页条数,默认值:10 */\n pageSize?: number;\n /** 字段映射 */\n fieldNames?: { list?: string; total?: string; pageNo?: string; pageSize?: string; uid?: string };\n /** 初始化是否请求,默认值:true */\n initRequest?: boolean;\n onDataSourceChange?: (dataSource: TAny) => void;\n /** 如果自定义查询按钮,可设置 Form onFinish */\n onFormFinish?: (values?: TPlainObject) => void;\n};\n\n/**\n * 对 查询条件+表格数据 进行深度封装,内置数据交互处理\n * ```\n * 1. 需要获取查询条件、主动发起请求等可通过ref操作\n * 2. 可通过属性 initRequest 设置初始化是否请求数据\n * 3. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize\n *\n * Demo https://fex.qa.tcshuke.com/docs/admin/main/crud/easy-table\n * ```\n */\nexport const EasyTable = forwardRef<EasyTableRefApi, EasyTableProps>((props: EasyTableProps, ref) => {\n const [dataSource, setDataSource] = useState<TPlainObject[]>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n const [state, actions] = easyTableModel(props.modelKey).useStore();\n const pageSize = props.pageSize || props.initialPaginationParams?.pageSize || 10;\n const initRequest = props.initRequest === undefined ? true : props.initRequest;\n const [paginationStatus, setPaginationStatus] = useState(false);\n\n const fieldNames = {\n list: 'list',\n total: 'tatal',\n pageNo: 'pageNo',\n pageSize: 'pageSize',\n ...props.fieldNames,\n };\n\n const [form] = Form.useForm();\n\n const onRequest = hooks.useCallbackRef(async (params) => {\n try {\n setLoading(true);\n const allState = await actions.updateFilterCondition(params);\n const queryCondition = cloneState(allState.queryCondition || {});\n const { requestParamsAdapter, onRequest, requestResultAdapter } = props.serviceConfig;\n const paramsNew = requestParamsAdapter ? requestParamsAdapter(queryCondition) : queryCondition;\n const respData = (await onRequest(paramsNew)) || {};\n props.onDataSourceChange?.(respData);\n const respDataNew = requestResultAdapter ? requestResultAdapter(respData) : respData;\n const respList = respDataNew[fieldNames.list];\n setDataSource(isArray(respList) ? respList : []);\n setTotal(respDataNew[fieldNames.total]);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void message.error(error.message);\n }\n });\n\n const clearQueryCondition = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (values) {\n void actions.updateFilterCondition(values);\n form.setFieldsValue(values);\n }\n });\n const onResetRequest = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (paginationStatus) {\n void onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: pageSize,\n ...props.initialValues,\n ...values,\n });\n } else {\n void onRequest({\n ...props.initialValues,\n ...values,\n });\n }\n });\n\n const getRequestParams = () => {\n return {\n ...state.queryCondition,\n ...form.getFieldsValue(),\n };\n };\n\n useImperativeHandle(ref, () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n getRequestParams,\n onResetRequest,\n form,\n };\n });\n\n const getEasyTableRef = () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n getRequestParams,\n onResetRequest,\n form,\n };\n };\n\n const onSetPaginationStatus = (status: boolean) => {\n setPaginationStatus(status);\n };\n\n const onFormFinish = () => {\n const values = form.getFieldsValue();\n if (props.onFormFinish) {\n props.onFormFinish(values);\n } else {\n if (paginationStatus) {\n void onRequest({\n ...values,\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: state.queryCondition.pageSize,\n });\n } else {\n void onRequest(values);\n }\n }\n };\n\n return (\n <EasyTableCtxProvider\n value={{\n getEasyTableRef,\n modelKey: props.modelKey,\n onRequest,\n tableList: dataSource,\n tableTotal: total,\n loading,\n fieldNames,\n pageSize,\n initRequest,\n initialValues: props.initialValues || {},\n onSetPaginationStatus,\n paginationStatus,\n onFormFinish,\n form,\n }}\n >\n {props.children}\n </EasyTableCtxProvider>\n );\n});\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n // 栅格占位格数,不考虑响应式\n span?: number;\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * 1. 设置 span 栅格占位格数,不考虑响应式\n * 2. grid 自定义响应式网格布局\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: Array<ReactElement | null>;\n rightList?: Array<ReactElement | null>;\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 || []).filter(Boolean);\n const _rightList = (rightList || []).filter(Boolean);\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>{_leftList.map((item) => item)}</Space>\n <Space>{_rightList?.map((item) => item)}</Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n const span = temp.props?.span as number;\n return temp.props?.[screenType] || span || defaultGrid[screenType];\n });\n if (operateColIndex < 0) {\n return { gridList: _currentGridList, gridGroupList: [] };\n }\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, Fragment, 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 hidden?: boolean;\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 if (props.hidden) return <Fragment />;\n\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormRow } from '../form-grid';\nimport { FormOperateCol, FormOperateColProps } from '../form-grid/form-operate-col';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n // 查询按钮配置\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n // 重置按钮配置\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\n/**\n * 过滤条件\n * @param props\n * @returns\n *\n *```\n *1. 用法1\n * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * <EasyTableFilter>\n * <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * </EasyTableFilter>\n *\n * -- 自定义网格布局 使用 FormCol组件包装 Form.Item\n * <EasyTableFilter>\n * <FormCol span={12}><Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item></FormCol>\n * </EasyTableFilter>\n *\n * -- children 可为 function\n * <EasyTableFilter>\n * {(form) => {\n * return <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * }}\n * </EasyTableFilter>\n *2. 用户2(自定义布局)\n * EasyTableFilter设置 isPure = true,FormItem无布局规则\n *3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例\n *4. 默认布局下,可通过设置 filterOperate 设置操作按钮\n *```\n */\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const { queryButtonProps, resetButtonProps, filterOperate } = props;\n const { modelKey, fieldNames, onRequest, pageSize, paginationStatus, initialValues, form, onFormFinish } =\n useEasyTableCtx();\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children);\n\n const [state, actions] = easyTableModel(modelKey).useStore();\n\n const onReset = hooks.useCallbackRef(async () => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (paginationStatus) {\n onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: pageSize,\n ...initialValues,\n });\n } else {\n onRequest(initialValues);\n }\n });\n\n const formOperateColProps = {\n rightList: [\n !queryButtonProps?.hidden ? (\n <ButtonWrapper key=\"1\" type=\"primary\" htmlType=\"submit\" {...queryButtonProps}>\n {queryButtonProps?.text || '查询'}\n </ButtonWrapper>\n ) : null,\n !resetButtonProps?.hidden ? (\n <ButtonWrapper key=\"2\" onClick={onReset} {...resetButtonProps}>\n {resetButtonProps?.text || '重置'}\n </ButtonWrapper>\n ) : null,\n ],\n ...filterOperate?.(form),\n };\n\n const formRowChildren = childrens\n .map((item, index) => {\n if ((item as ReactElement).type['domTypeName'] === 'FormCol') {\n return item;\n }\n return <FormCol key={index}>{item}</FormCol>;\n })\n .concat(<FormOperateCol key={99} {...formOperateColProps} />);\n\n return (\n <SimpleLayout>\n <Form\n form={form}\n onFinish={onFormFinish}\n initialValues={{\n ...initialValues,\n ...state.queryCondition,\n }}\n >\n {props.isPure ? children : <FormRow gutter={[15, 0]}>{formRowChildren}</FormRow>}\n </Form>\n </SimpleLayout>\n );\n};\n","import { getUuid, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'rowKey'> & {\n children?: ReactElement;\n /** 表格行 key 的取值 */\n rowKey: string;\n};\n\n/**\n * 表格渲染\n * @param props\n * ```\n * 1. 继承了 TableProps 可设置antd table功能\n * ```\n */\nexport const EasyTableTable = (props: EasyTableTableProps) => {\n const { children, rowKey, pagination, ...otherProps } = props;\n\n const {\n modelKey,\n fieldNames,\n onRequest,\n tableList,\n initRequest,\n pageSize,\n tableTotal,\n loading,\n initialValues,\n onSetPaginationStatus,\n } = useEasyTableCtx();\n const [state, actions] = easyTableModel(modelKey).useStore();\n\n const paginationData =\n pagination == false\n ? false\n : {\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo],\n pageSize: state.queryCondition[fieldNames.pageSize],\n total: tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n ...props.pagination,\n };\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n if (paginationData) {\n onRequest({ [fieldNames.pageSize]: data.pageSize, [fieldNames.pageNo]: data.current });\n }\n props.onChange?.(data, ...otherProps);\n };\n\n const dataSource = useMemo(() => {\n if (tableList.length === 0) {\n return [];\n }\n if (isUndefinedOrNull(tableList[0][rowKey])) {\n return tableList.map((item) => {\n item[rowKey] = getUuid();\n return item;\n });\n }\n return tableList;\n }, [tableList, rowKey]);\n\n useEffectCustom(() => {\n onSetPaginationStatus(paginationData !== false);\n if (initRequest !== false || !state.isInit) {\n if (paginationData) {\n void onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: pageSize,\n ...initialValues,\n });\n } else {\n void onRequest(initialValues);\n }\n } else {\n void actions.updateFilterCondition(initialValues);\n }\n void actions.updateInitStatus();\n }, []);\n\n return (\n <SimpleLayout>\n {children}\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n {...otherProps}\n pagination={paginationData}\n rowKey={rowKey}\n onChange={onChangePage}\n loading={loading}\n dataSource={dataSource}\n />\n </SimpleLayout>\n );\n};\n","import { useRef } from 'react';\nimport { useEasyTableCtx } from './context';\nimport { EasyTableRefApi } from './type';\n\nexport const useEasyTablRef = () => {\n const { getEasyTableRef } = useEasyTableCtx();\n const ref = useRef<EasyTableRefApi>(getEasyTableRef());\n return ref;\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 hidden?: 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 'icon-wrapper-tigger': props.onClick,\n },\n props.className,\n );\n\n if (props.hidden) return null;\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { createContext } from 'react';\n\nexport type EditableFieldContextContextApi = {\n editable: boolean;\n showEditableIcon: boolean;\n isCtx: boolean;\n};\n\nexport const EditableFieldContext = createContext<EditableFieldContextContextApi>({\n editable: false,\n showEditableIcon: false,\n isCtx: false,\n});\n","import { CheckOutlined, CloseOutlined, EditOutlined } from '@ant-design/icons';\nimport { isArray, isNumber, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Space } from 'antd';\nimport { isValidElement, ReactElement, ReactNode, useContext, useEffect, useRef, useState } from 'react';\nimport { IconWrapper } from '../icon-wrapper';\n\nimport { EditableFieldContext } from './context';\nimport './style.less';\n\nexport interface EditableFieldProps {\n className?: string;\n editRender: ReactElement | ((data: { value?: TAny; onChange?: (data?: TAny) => void }) => ReactElement);\n viewRender?: (value?: TAny) => ReactNode;\n value?: TAny;\n onChange?: (data?: TAny) => void;\n placeholderValue?: string;\n /** edit 区域是否铺满,editableIcon=false 无效 */\n isEditFull?: boolean;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否显示编辑、确认、取消操作icon,默认值:true */\n showEditableIcon?: boolean;\n /** 点击编辑按钮,操作前,返回reject不会开启编辑效果 */\n onClickEditIconPre?: (value?: TAny) => Promise<void>;\n onEditCallback?: (value?: TAny) => void;\n /** 点击确定按钮,操作前,返回reject不会执行确定功能 */\n onClickConfirmIconPre?: (value?: TAny, preValue?: TAny) => Promise<void>;\n onConfirmCallback?: (value?: TAny, preValue?: TAny) => void;\n /** 组件操作Icon配置 */\n iconConfig?: {\n editIcon?: (options: { onClick: () => void }) => ReactElement;\n confirmIcon?: (options: { onClick: () => void }) => ReactElement;\n cancelIcon?: (options: { onClick: () => void }) => ReactElement;\n };\n}\n\n/**\n * 可编辑字段组件\n * @param props\n * @returns\n * ```\n * 字段渲染有两种状态\n * 1. 只读:如果value类型为复杂格式,必须要通过【viewRender】来进行处理操作,转成简单数据类型\n * 2. 编辑:参数value的格式要求必须满足编辑组件入参value要求\n * 3. 可自定义编辑Icon、确定Icon、取消Icon\n * 4. 可拦截编辑操作、确定操作\n * ```\n */\nexport const EditableField = (props: EditableFieldProps) => {\n const {\n value,\n onChange,\n viewRender,\n placeholderValue = '-',\n editRender,\n isEditFull,\n onClickEditIconPre,\n onClickConfirmIconPre,\n iconConfig,\n onEditCallback,\n onConfirmCallback,\n } = props;\n const [isEdit, setIsEdit] = useState<boolean>(false);\n const ctx = useContext(EditableFieldContext);\n const originalValue = useRef<TAny>(value);\n\n const showEditableIcon = (function () {\n if (ctx.isCtx) {\n return props.showEditableIcon === undefined ? ctx.showEditableIcon : props.showEditableIcon;\n }\n return props.showEditableIcon === undefined ? true : props.showEditableIcon;\n })();\n\n const editable = (function () {\n if (ctx.isCtx) {\n return props.editable === undefined ? ctx.editable : props.editable;\n }\n return props.editable || false;\n })();\n\n useEffect(() => {\n setIsEdit(editable);\n }, [editable]);\n\n const onClickEditIcon = async () => {\n if (onClickEditIconPre) {\n await onClickEditIconPre(value);\n }\n originalValue.current = value;\n setIsEdit(true);\n onEditCallback?.(value);\n };\n\n const editIcon = iconConfig?.editIcon ? (\n iconConfig.editIcon({ onClick: onClickEditIcon })\n ) : (\n <IconWrapper size=\"small\" icon={<EditOutlined />} onClick={onClickEditIcon} />\n );\n\n if (!isEdit) {\n const viewValue = (viewRender ? viewRender(props.value) : props.value) || placeholderValue;\n if (\n isString(viewValue) ||\n isNumber(viewValue) ||\n isUndefinedOrNull(viewValue) ||\n isValidElement(viewValue)\n ) {\n if (!showEditableIcon) {\n return viewValue;\n }\n return (\n <Space size={8}>\n <span>{viewValue}</span>\n {editIcon}\n </Space>\n );\n }\n console.warn('对象作为React子对象无效', viewValue);\n }\n\n const onCancel = () => {\n if (value !== originalValue.current) {\n props.onChange?.(originalValue.current);\n }\n setIsEdit(false);\n };\n\n const onEditChange = (value) => {\n let target = value;\n /** 为了处理 Input、TextArea等onChange取值 */\n if (typeof value === 'object' && !isArray(value) && value.target) {\n target = value.target?.value;\n }\n onChange?.(target);\n };\n\n const onOk = async () => {\n if (onClickConfirmIconPre) {\n await onClickConfirmIconPre(value, originalValue.current);\n }\n setIsEdit(false);\n onConfirmCallback?.(value, originalValue.current);\n };\n\n const editRenderElement = isValidElement(editRender)\n ? editRender\n : editRender({ value: value, onChange: onEditChange });\n\n if (!showEditableIcon) {\n return <editRenderElement.type value={value} onChange={onEditChange} {...editRenderElement.props} />;\n }\n\n const confirmIcon = iconConfig?.confirmIcon ? (\n iconConfig.confirmIcon({ onClick: onOk })\n ) : (\n <IconWrapper\n size=\"small\"\n icon={<CheckOutlined style={{ color: 'var(--ant-primary-color)' }} />}\n onClick={onOk}\n />\n );\n\n const cancelIcon = iconConfig?.cancelIcon ? (\n iconConfig.cancelIcon({ onClick: onCancel })\n ) : (\n <IconWrapper\n size=\"small\"\n icon={<CloseOutlined style={{ color: 'var(--ant-primary-color)' }} />}\n onClick={onCancel}\n />\n );\n\n return (\n <Space\n direction=\"horizontal\"\n size={12}\n style={{ display: 'flex', paddingRight: 6 }}\n className={classNames({ 'editable-field-full': isEditFull }, props.className)}\n >\n <editRenderElement.type value={value} onChange={onEditChange} {...editRenderElement.props} />\n {confirmIcon}\n {cancelIcon}\n </Space>\n );\n};\n","import { ReactElement } from 'react';\nimport { EditableFieldContext } from './context';\n\nexport interface EditableFieldProviderProps {\n children: ReactElement;\n editable?: boolean;\n showEditableIcon?: boolean;\n}\n\n/**\n * EditableFieldProvider 控制内部使有的 EditableField 状态\n * @param props\n * @returns\n */\nexport const EditableFieldProvider = (props: EditableFieldProviderProps) => {\n const editable = props.editable === undefined ? true : props.editable;\n const showEditableIcon = props.showEditableIcon === undefined ? false : props.showEditableIcon;\n\n return (\n <EditableFieldContext.Provider value={{ editable, isCtx: true, showEditableIcon }}>\n {props.children}\n </EditableFieldContext.Provider>\n );\n};\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n/**\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', 'tags']);\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, labelInValueFieldNamesMerge.value);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, labelInValueFieldNamesMerge, value]);\n\n const stateSelectorList = useMemo(() => {\n if (isSearch) {\n return arrayFind(state.requestRespCacheData, 'search', 'request')?.response;\n }\n return state.requestRespCacheData.find((item) => item.request === serviceRequestParamsStringify)\n ?.response;\n }, [isSearch, serviceRequestParamsStringify, state.requestRespCacheData]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig?.onRequestResultAdapter\n ? serviceConfig?.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = async (inputValue?: string, searchId?: string | number) => {\n try {\n setLoading(true);\n const params = serviceRequestParams || {};\n void actions.changeRequestStatus('request-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await serviceConfig?.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n\n if (isSearch) {\n void actions.onSearchRequestRespHandle(respAdapterData);\n } else {\n void actions.onRequestRespHandle({\n respData: respAdapterData,\n requestStringify: serviceRequestParamsStringify,\n });\n }\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n // void message.error(error.message || '获取数据异常');\n onSelectorRequestError?.(error);\n }\n };\n\n const serviceRequest = {\n hasProcessRequest: () => {\n const process = window[requestPreKey];\n if (serviceRequestParamsStringify) {\n if (isArray(process) && process.includes(serviceRequestParamsStringify)) return true;\n } else {\n return !!process;\n }\n return false;\n },\n setProcessRequestStatus: () => {\n if (serviceRequestParamsStringify) {\n const cacheList = (window[requestPreKey] || []) as string;\n if (!cacheList.includes(serviceRequestParamsStringify)) {\n window[requestPreKey] = cacheList.concat(serviceRequestParamsStringify);\n }\n } else {\n window[requestPreKey] = [];\n }\n },\n };\n\n const prevRequestHandle = () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n\n // 判断相同的 params 是否已经在请求数据中,避免重复请求\n if (serviceRequest.hasProcessRequest()) {\n return;\n }\n serviceRequest.setProcessRequestStatus();\n // 去调用接口\n void startDataSourceRequest();\n };\n\n useEffectCustom(() => {\n if (hasOuterSelectorList || isSearch) return;\n if (hasServiceRequestParams) {\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys;\n if (requiredParamsKeys && requiredParamsKeys.length > 0) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return serviceRequestParams[key] === '' || isUndefinedOrNull(serviceRequestParams[key]);\n });\n if (isEmpty) {\n if (stateSelectorList && stateSelectorList.length > 0) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n window[requestPreKey] = undefined;\n void actions.resetSelectorList({\n selectorList: [],\n requestStatus: 'no-dependencies-params',\n });\n } else {\n void actions.changeRequestStatus('no-dependencies-params');\n }\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n props.onChange?.(undefined);\n }\n return;\n }\n }\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n if (stateSelectorList === undefined) {\n prevRequestHandle();\n }\n }, [serviceRequestParams]);\n\n hooks.useUpdateEffect(() => {\n if (state.setSelectorListCount > 1) {\n // 第一次不调用\n onSelectorListChange?.(stateSelectorList);\n }\n onSelectorListAllChange?.(stateSelectorList);\n }, [state.setSelectorListCount]);\n\n useEffectCustom(() => {\n if (hasOuterSelectorList) {\n void actions.resetSelectorList({\n selectorList: outerSelectorList || [],\n });\n }\n }, [outerSelectorList]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectorList({\n selectorList: [],\n });\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n\n if (labelInValue) {\n const { label, value } = labelInValueFieldNamesMerge;\n const labelInValueList = selectedList.map((item) => {\n return {\n [label]: item[optionsItemLabelField],\n [value]: item[optionsItemValueField],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig[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 } 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 <span>{viewText}</span>;\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 { isPlainObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TAny, 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 { flushSync } from 'react-dom';\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: TAny) => 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 const errorList = uploadList?.filter((item) => item['status'] === 'error') || [];\n let newList =\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n status: 'done',\n isOriginal: true,\n };\n }) || [];\n if (errorList.length > 0) {\n const newErrorList = errorList.map((item) => {\n return {\n uid: item.uid,\n name: item.name,\n status: 'error',\n isOriginal: true,\n response: item['response'],\n };\n }) as TAny[];\n newList = newList.concat(newErrorList);\n }\n setUploadList(newList);\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const handleResponse = (fileList: UploadFile<TAny>[]) => {\n const newFileList: TAny[] = [];\n let hasError = false;\n fileList.forEach((item) => {\n if (item['isOriginal']) {\n if (item['status'] !== 'error') {\n newFileList.push({\n [fieldNames.uid]: item.uid,\n [fieldNames.name]: item.name,\n [fieldNames.url]: item.url,\n });\n }\n } else if (isPlainObject(item.response)) {\n if (item.response.code === '0000') {\n const respData = item.response.data;\n const result = (props.onRequestResultAdapter?.(respData) || respData) as TPlainObject;\n newFileList.push({\n [fieldNames.uid]: result[fieldNames.uid] || item.uid,\n [fieldNames.name]: result[fieldNames.name] || item.name,\n [fieldNames.url]: result[fieldNames.url],\n });\n } else {\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n }\n }\n });\n if (hasError) {\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n }\n onChange?.(newFileList);\n };\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const newFileList = [...info.fileList];\n const donwList = newFileList.filter((item) => item.status === 'done' || item['isOriginal']);\n\n const allDone = donwList.length === newFileList.length;\n if (allDone) {\n handleResponse(newFileList);\n }\n flushSync(() => setUploadList(newFileList));\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n index: number;\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, index) => {\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 index,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","export const editorTemplates = {\n block: {\n title: '块级卡片',\n description: '块级卡片',\n content: `<div style=\"{$varStyle} background-color:var(--editor-card-bgcolor);padding: 5px 20px;border-radius: 2px;color:#555\">\n <p>#自定义内容</p>\n </div><p></p>`,\n },\n primary_p: {\n title: 'primary_p',\n description: 'primary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-primary)\">#自定义内容</p><p></p>',\n },\n secondary_p: {\n title: 'secondary_p',\n description: 'secondary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-secondary)\">#自定义内容</p><p></p>',\n },\n warning_p: {\n title: 'warning_p',\n description: 'warning色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-warning)\">#自定义内容</p><p></p>',\n },\n danger_p: {\n title: 'danger_p',\n description: 'danger色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-danger)\">#自定义内容</p><p></p>',\n },\n success_p: {\n title: 'success_p',\n description: 'success色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-success)\">#自定义内容</p><p></p>',\n },\n p: {\n title: 'p',\n description: 'p',\n content: '<p></p>',\n },\n};\n","export type varStyles =\n | '--fa-color-primary'\n | '--fa-color-secondary'\n | '--fa-color-warning'\n | '--fa-color-danger'\n | '--fa-color-success'\n | '--editor-card-bgcolor';\n\nexport const defaultVarStyle: Record<varStyles, string> = {\n '--fa-color-primary': '#1677ff',\n '--fa-color-secondary': '#1677ff',\n '--fa-color-warning': '#ff8f1f',\n '--fa-color-danger': '#ff3141',\n '--fa-color-success': '#00b578',\n '--editor-card-bgcolor': '#f5f5f9',\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties, useMemo } from 'react';\nimport './style.less';\nimport { editorTemplates } from './template';\nimport { defaultVarStyle, varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n const varStyleString = useMemo(() => {\n const merge = { ...defaultVarStyle, ...props.varStyle };\n let varStyleString = '';\n Object.keys(merge).map((key) => {\n varStyleString += `${key}:${merge[key]};`;\n });\n return varStyleString;\n }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n templates: [\n editorTemplates.block,\n editorTemplates.primary_p,\n editorTemplates.secondary_p,\n editorTemplates.warning_p,\n editorTemplates.danger_p,\n editorTemplates.success_p,\n editorTemplates.p,\n ],\n template_replace_values: {\n varStyle: varStyleString,\n },\n template_preview_replace_values: {\n varStyle: varStyleString,\n },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { useEffect, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type FileUploadItem = {\n fileKey: string;\n fileName: string;\n};\n\ntype AntdFileUploadItem = {\n uid: string;\n name: string;\n fileKey: string;\n};\n\nexport type FileUploadProps = {\n onChange?: (value?: FileUploadItem[]) => void;\n onUploadError?: (message?: string) => void;\n value?: FileUploadItem[];\n onPreview?: (item: FileUploadItem) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n fileKey?: string;\n fileName?: string;\n };\n} & Omit<UploadProps, 'onChange' | 'fileList' | 'onPreview'>;\n\n/**\n * 文件上传,结合Form使用最佳\n * @deprecated 请使用【UploadWrapper】组件替换\n * ```\n * 接口返回结构:\n * formData上传接口必须返回fileKey值\n * {\n * code: '0000',\n * data: {\n * fileKey: '预览文件对应的fileKey'\n * }\n * }\n * 可通过fieldNames配置接口返回值属性名称映射\n * ```\n * ```\n * 最佳使用方式:\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <FileUpload action={uploadUrl} onPreview={onPreviewFile}>\n * <Button type=\"primary\">选择文件导入</Button>\n * </FileUpload>\n * </Form.Item>\n * ```\n *\n */\nexport const FileUpload = (props: FileUploadProps) => {\n useEffectCustom(() => {\n console.error('@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换');\n }, []);\n\n const { onChange, onUploadError, onPreview, value, ...otherProps } = props;\n const [uploadValue, setUploadValue] = useState<AntdFileUploadItem[]>([]);\n const fieldNames = extend(\n {\n fileKey: 'fileKey',\n fileName: 'fileName',\n },\n props.fieldNames,\n ) as FileUploadItem;\n\n useEffect(() => {\n if (value && isArray(value)) {\n setUploadValue(\n value.map((item) => {\n return {\n uid: item['uid'] || item[fieldNames.fileKey],\n name: item[fieldNames.fileName],\n fileKey: item[fieldNames.fileKey],\n url: item[fieldNames.fileKey],\n thumbUrl: item[fieldNames.fileKey],\n };\n }),\n );\n }\n }, [fieldNames.fileKey, fieldNames.fileName, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = respData.data || {};\n const uploadItem = {\n uid: info.file.uid,\n fileName: result[fieldNames.fileName] || (info.file.name as string),\n fileKey: result[fieldNames.fileKey],\n } as FileUploadItem;\n const respValue = (value || []).concat(uploadItem);\n onChange?.(respValue as unknown as FileUploadItem[]);\n } else {\n onUploadError?.(respData.message as string);\n }\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item['uid'] || item[fieldNames.fileKey];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n onUploadError?.();\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadValue([...info.fileList]);\n props.onUploadChange?.(info);\n });\n\n const onUploadPreview = hooks.useCallbackRef((file) => {\n onPreview?.({\n fileKey: file[fieldNames.fileKey],\n fileName: file[fieldNames.fileName],\n });\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n onPreview={onUploadPreview}\n fileList={uploadValue}\n className={classNames('v-file-upload', otherProps.className)}\n >\n {props.children}\n </Upload>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { 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 { composeProps } from '@flatbiz/utils';\nimport { Form, FormItemProps } from 'antd';\nimport { cloneElement, isValidElement, ReactElement, ReactNode } from 'react';\n\nexport interface FormItemWrapperProps extends FormItemProps {\n wrapper?: (children: ReactNode) => ReactElement;\n /** 设置wrapper后,before、after失效 */\n before?: ReactNode;\n /** 设置wrapper后,before、after失效 */\n after?: ReactNode;\n}\n\ninterface FormItemWrapperChildrenProps {\n wrapper?: FormItemWrapperProps['wrapper'];\n children: React.ReactElement;\n before?: ReactNode;\n after?: ReactNode;\n}\n\nconst FormItemWrapperChildren = (props: FormItemWrapperChildrenProps) => {\n const { wrapper, children, ...rest } = props;\n // composeProps 合并执行 Form.Item 传的 onChange 以及组件本身的方法\n const _children = cloneElement(children, composeProps(children.props, rest, true));\n if (wrapper) {\n return wrapper(_children);\n }\n if (props.before || props.after) {\n return (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {props.before ? <span style={{ marginRight: 10 }}>{props.before}</span> : null}\n <div style={{ flex: 1 }}>{_children}</div>\n {props.after ? <span style={{ marginLeft: 10 }}>{props.after}</span> : null}\n </div>\n );\n }\n return _children;\n};\n\n/**\n * 对 Form.Item 的 children 增加 before、after\n * @param props\n * @returns\n */\nexport const FormItemWrapper = (props: FormItemWrapperProps) => {\n const { wrapper, children, before, after, ...rest } = props;\n\n return (\n <Form.Item {...rest}>\n {isValidElement(children) ? (\n <FormItemWrapperChildren wrapper={wrapper} before={before} after={after}>\n {children}\n </FormItemWrapperChildren>\n ) : (\n children\n )}\n </Form.Item>\n );\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isNumber } from '@flatbiz/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 /** number or auto */\n labelWidth?: number | string;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const width = props.labelWidth === undefined ? 120 : props.labelWidth;\n const style = {\n '--v-label-value-layout-lWidth': isNumber(width as number) ? `${width}px` : width,\n } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Result, Spin } from 'antd';\nimport { forwardRef, Fragment, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useEffectCustomAsync } from '../hooks';\nimport './style.less';\n\nexport type LocalLoadingServiceConfig = {\n onRequest: (params?: TAny) => Promise<TPlainObject>;\n params?: TPlainObject;\n};\n\nexport interface LocalLoadingProps {\n /** 接口数据配置 */\n serviceConfig: LocalLoadingServiceConfig;\n /** children 为函数,参数【respData】为接口返回数据 */\n children: (respData?: TAny) => ReactElement;\n /**\n * 是否异步,默认:false\n * ```\n * true(异步):onRequest、react dom渲染同步执行\n * false(同步):onRequest有结果了才渲染 react dom\n * ```\n */\n isAsync?: boolean;\n /** 自定义异常渲染处理 */\n errorRender?: (error?: TAny) => ReactElement;\n /** 最小高度,默认值:100;isAsync = true 无效 */\n loadingHeight?: number;\n}\n\nexport type LocalLoadingRefApi = {\n onRefresh: () => void;\n};\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果\n * 2. error显示效果\n * 3. 正常接口数据渲染\n * ```\n * @param props\n * @returns\n */\nexport const LocalLoading = forwardRef<LocalLoadingRefApi, LocalLoadingProps>((props, ref) => {\n const { serviceConfig, isAsync, children, errorRender } = props;\n const [status, setStatus] = useState<'success' | 'error' | 'loading'>('loading');\n const [respData, setRespData] = useState<any>();\n const [refreshLoading, setRefreshLoading] = useState(false);\n\n const onRequest = async () => {\n try {\n setStatus('loading');\n const respData = await serviceConfig.onRequest(serviceConfig.params);\n setStatus('success');\n setRespData(respData);\n } catch (error) {\n setStatus('error');\n }\n };\n\n useEffectCustomAsync(onRequest, []);\n\n const loadingHeight = props.loadingHeight === undefined ? 100 : props.loadingHeight;\n\n useImperativeHandle(ref, () => {\n return {\n onRefresh: async () => {\n try {\n setRefreshLoading(true);\n const respData = await serviceConfig.onRequest(serviceConfig.params);\n setRespData(respData);\n } catch (error) {\n setStatus('error');\n } finally {\n setRefreshLoading(false);\n }\n },\n };\n });\n\n if (status === 'error') {\n if (errorRender) {\n return errorRender(respData);\n }\n return (\n <Result\n status=\"error\"\n className=\"local-loading-error\"\n title={'数据获取异常'}\n subTitle={(respData?.message as string) || '数据处理异常'}\n style={{ minHeight: loadingHeight }}\n extra={[\n <Button type=\"primary\" key=\"console\" onClick={onRequest}>\n 重新获取\n </Button>,\n ]}\n />\n );\n }\n const isLoading = status === 'loading';\n\n if (isLoading && !isAsync) {\n return (\n <div style={{ height: loadingHeight, display: 'flex', justifyContent: 'center' }}>\n <Spin spinning={true}>\n <Fragment />\n </Spin>\n </div>\n );\n }\n\n return <Spin spinning={refreshLoading || isLoading}>{children(respData)}</Spin>;\n});\n","import { Fragment, isValidElement, ReactElement, useState } from 'react';\n\ntype onClick = (e?: React.MouseEvent<HTMLElement>) => void;\n\nexport interface ModalActionProps {\n children: ReactElement | ((data: { onClose: () => void; open: boolean }) => ReactElement);\n action?:\n | (ReactElement & { onClick?: onClick })\n | ((data: { onClick: onClick; onClose: () => void; open: boolean }) => ReactElement);\n}\n\n/**\n * 弹框 触发器\n * ```\n * <ModalAction action={<Button type=\"primary\">打开</Button>}>\n * {({ onClose }) => (\n * <Modal onOk={onClose}>xxx</Modal>\n * )}\n * </ModalAction>\n * ```\n */\nexport const ModalAction = (props: ModalActionProps) => {\n const { action, children } = props;\n\n const [open, setOpen] = useState<boolean>(false);\n\n const handleOnClick = async (e: unknown) => {\n if (isValidElement(action)) {\n const { onClick } = action.props;\n if (typeof onClick === 'function') {\n await onClick?.(e);\n }\n }\n setOpen(true);\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const childrenReactElement = isValidElement(children) ? children : children({ onClose, open });\n\n return (\n <Fragment>\n {isValidElement(action) ? (\n <action.type {...action.props} onClick={handleOnClick} />\n ) : (\n action?.({ onClick: handleOnClick, onClose, open })\n )}\n <childrenReactElement.type\n open={open}\n onClose={onClose}\n onCancel={onClose}\n {...childrenReactElement.props}\n />\n </Fragment>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { ModalOperation, ModalOperationProps } from './modal-operation';\nimport './style.less';\n\nexport type ModalFormProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n // 设置了 ModalProps footer属性后,operationProps配置将失效\n operationProps?: ModalOperationProps;\n footer?: null | React.ReactNode;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * @deprecated 请使用【dialogModal】组件替换\n * ```\n */\nexport const ModalWraper = (props: ModalFormProps) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n return (\n <Modal\n className={classNames('modal-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <div className=\"modal-wraper-content\">\n {children}\n {pageLoading && <PageLoader />}\n </div>\n {footer !== null && (\n <div className=\"modal-wraper-content-footer\">\n {footer ? footer : <ModalOperation {...operationProps} />}\n </div>\n )}\n </Modal>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n/**\n * 组件单词写错,请输入\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWraperModel('key值').useStore();\n * ```\n */\nexport const createModalWraperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","export const Page404 = () => {\n return <div className=\"v-404\">404</div>;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_160: 'form-label-160',\n label_width_170: 'form-label-170',\n label_width_180: 'form-label-180',\n label_width_190: 'form-label-190',\n label_width_200: 'form-label-200',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n label_value_vertical: 'form-label-value-vertical',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_160: 'form-item-label-160',\n label_width_170: 'form-item-label-170',\n label_width_180: 'form-item-label-180',\n label_width_190: 'form-item-label-190',\n label_width_200: 'form-item-label-200',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n label_value_vertical: 'form-item-label-value-vertical',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n return (\n <div className={classNames('v-rule-describe', props.className)}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label;\n const optionsItemValueField = fieldNames?.value;\n const optionsItemDisabledField = fieldNames?.disabled;\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagListSelectValue = string | number | boolean;\nexport type TagListSelectDataItem = { label: string; value: TagListSelectValue; color?: string };\n\nexport type TagListSelectProps = {\n dataList: TagListSelectDataItem[];\n /** 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同 */\n colorMap?: Record<string, string>;\n value?: TagListSelectValue;\n /** 是否强制匹配,默认值false */\n forceMatch?: boolean;\n};\n\n/**\n * 在列表数据中通过value匹配数据,以Tag形式展示\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagListSelect: FC<TagListSelectProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagListSelect.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagListSelect, TagListSelectProps } from '../tag-list-select';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny, index: number) => ButtonOperateProps) => {\n return (_value: string | number, record, index: number) => {\n const operateProps = options(record, index);\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 return (_value, _record, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\nconst tableColumnIndexRender2 = (method?: () => { pageNo?: number; pageSize?: number }) => {\n return (_value, _record, index: number) => {\n const { pageNo, pageSize } = method?.() || {};\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagListSelectProps['dataList'],\n colorMap?: TagListSelectProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagListSelect dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容,一般为Icon */\n extra: ReactElement;\n extraPosition?: 'before' | 'after';\n onClick?: (e) => void;\n /** 是否显示原单元格数据,默认值:true */\n showData?: boolean;\n /** 溢出显示【...】, 最大长度(默认:20个字节) */\n showMaxNumber?: number;\n /** 未溢出显示【extra】配置,默认值:true */\n notOverflowShowExtra?: boolean;\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const notOverflowShowExtra = isUndefinedOrNull(options.notOverflowShowExtra)\n ? true\n : options.notOverflowShowExtra;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n\n if (options.extra && showData) {\n if (renderValue === value && !notOverflowShowExtra) {\n return value;\n }\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n return <span onClick={options.onClick}>{options.extra}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示原单元格数据,默认值:true\n * 3. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @deprecated 已过时,请使用 serialNumberCell\n */\n indexCell: tableColumnIndexRender,\n /**\n * table 序号展示,如果存在pageSize、pageNo参数可分页展示累加序号,否则每页都从1开始\n * ```\n * render: tableCellRender.serialNumberCell(() => {\n * return { pageNo,pageSize };\n * }),\n * ```\n */\n serialNumberCell: tableColumnIndexRender2,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content?: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * 4. 如果自定义了 defaultActiveKey,内部缓存key失效\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} defaultActiveKey={defaultActiveKey} className={className} onChange={onChange} />\n );\n};\n","import { Space, SpaceProps, Tag } from 'antd';\nimport { FC } from 'react';\n\ntype TagGroupDataItem = { label: string; value: string | number; color?: string };\n\nexport type TagGroupProps = {\n dataList: TagGroupDataItem[];\n /**\n * 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同\n */\n colorMap?: Record<string, string>;\n spaceProps?: SpaceProps;\n};\n\n/**\n * Tag 列表显示\n */\nexport const TagGroup: FC<TagGroupProps> = (props) => {\n return (\n <Space wrap size={5} {...props.spaceProps}>\n {props.dataList.map((item, index) => {\n const color = item.color || props.colorMap?.[item.value];\n return (\n <Tag color={color} key={index}>\n {item.label}\n </Tag>\n );\n })}\n </Space>\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport moment from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: 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, disabledDateConfig, 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((date: moment.Moment | null, timeString: string) => {\n if (date) {\n if (minDateMoment && date.isBefore(minDateMoment)) timeString = minDateMoment.format(format);\n if (maxDateMoment && date.isAfter(maxDateMoment)) timeString = maxDateMoment.format(format);\n !isExistValue && setTimeValue(timeString);\n onChange?.(timeString);\n } else {\n !isExistValue && setTimeValue(undefined);\n onChange?.(undefined);\n }\n });\n\n const { minDateMoment, maxDateMoment } = useMemo(() => {\n const { minDate, maxDate } = disabledDateConfig || {};\n let minDateMoment: moment.Moment | undefined;\n let maxDateMoment: moment.Moment | undefined;\n if (minDate) minDateMoment = moment(minDate, format);\n if (maxDate) maxDateMoment = moment(maxDate, format);\n return { minDateMoment, maxDateMoment };\n }, [disabledDateConfig, format]);\n\n const newDisabledTime = useMemo(() => {\n if (disabledTime) return disabledTime;\n const disabledHours: number[] = [];\n if (minDateMoment) {\n const minHour = minDateMoment.get('hour');\n for (let i = minHour - 1; i >= 0; i--) {\n disabledHours.push(i);\n }\n }\n if (maxDateMoment) {\n const maxMinute = maxDateMoment.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 (minDateMoment && selectedHour <= minDateMoment.get('hour')) {\n const minMinute = minDateMoment.get('minute');\n for (let i = minMinute - 1; i >= 0; i--) {\n disabledMinutes.push(i);\n }\n }\n if (maxDateMoment && selectedHour >= maxDateMoment.get('hour')) {\n const maxMinute = maxDateMoment.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 minDateMoment &&\n selectedHour <= minDateMoment.get('hour') &&\n selectedMinute <= minDateMoment.get('minute')\n ) {\n const minSecond = minDateMoment.get('second');\n for (let i = minSecond - 1; i >= 0; i--) {\n disabledSeconds.push(i);\n }\n }\n if (\n maxDateMoment &&\n selectedHour >= maxDateMoment.get('hour') &&\n selectedMinute >= maxDateMoment.get('minute')\n ) {\n const maxSecond = maxDateMoment.get('second');\n for (let i = maxSecond + 1; i <= 59; i++) {\n disabledSeconds.push(i);\n }\n }\n return disabledSeconds;\n },\n };\n };\n }, [minDateMoment, maxDateMoment, disabledTime]);\n\n const datePickerValue = useMemo(() => {\n const value = isExistValue ? props.value : timeValue;\n if (value) {\n return moment(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 moment from 'moment';\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 * minDate、maxDate设置格式\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: 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\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledDateConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledDateConfig, 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 onChangeTime = hooks.useCallbackRef(\n (date: RangeValue<moment.Moment>, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n const [dateStart, dateEnd] = date;\n if (minDateMoment && dateStart && dateStart.isBefore(minDateMoment))\n timeStart = minDateMoment.format(format);\n if (maxDateMoment && dateEnd && dateEnd.isAfter(maxDateMoment))\n timeEnd = maxDateMoment.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 { minDateMoment, maxDateMoment } = useMemo(() => {\n const { minDate, maxDate } = disabledDateConfig || {};\n let minDateMoment: moment.Moment | undefined;\n let maxDateMoment: moment.Moment | undefined;\n if (minDate) minDateMoment = moment(minDate, format);\n if (maxDate) maxDateMoment = moment(maxDate, format);\n return { minDateMoment, maxDateMoment };\n }, [disabledDateConfig, format]);\n\n const newDisabledTime = useMemo(() => {\n if (disabledTime) return disabledTime;\n const disabledHours: number[] = [];\n if (minDateMoment) {\n const minHour = minDateMoment.get('hour');\n for (let i = minHour - 1; i >= 0; i--) {\n disabledHours.push(i);\n }\n }\n if (maxDateMoment) {\n const maxMinute = maxDateMoment.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 (minDateMoment && selectedHour <= minDateMoment.get('hour')) {\n const minMinute = minDateMoment.get('minute');\n for (let i = minMinute - 1; i >= 0; i--) {\n disabledMinutes.push(i);\n }\n }\n if (maxDateMoment && selectedHour >= maxDateMoment.get('hour')) {\n const maxMinute = maxDateMoment.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 minDateMoment &&\n selectedHour <= minDateMoment.get('hour') &&\n selectedMinute <= minDateMoment.get('minute')\n ) {\n const minSecond = minDateMoment.get('second');\n for (let i = minSecond - 1; i >= 0; i--) {\n disabledSeconds.push(i);\n }\n }\n if (\n maxDateMoment &&\n selectedHour >= maxDateMoment.get('hour') &&\n selectedMinute >= maxDateMoment.get('minute')\n ) {\n const maxSecond = maxDateMoment.get('second');\n for (let i = maxSecond + 1; i <= 59; i++) {\n disabledSeconds.push(i);\n }\n }\n return disabledSeconds;\n },\n };\n };\n }, [minDateMoment, maxDateMoment, disabledTime]);\n\n const datePickerValue = useMemo(() => {\n const value = isExistValue ? props.value : timeValue;\n if (value && value.length > 0) {\n return [\n value[0] ? moment(value[0], format) : value[0],\n value[1] ? moment(value[1], format) : value[1],\n ] as [moment.Moment, moment.Moment];\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, usePrevious } 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 const preValue1 = usePrevious(startVal);\n const preValue2 = usePrevious(endVal);\n\n useEffectCustom(() => {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n if (startVal && endVal) {\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n\n if (preValue1 && preValue2 && !startVal && !endVal) {\n form.setFields([{ name, value: undefined }]);\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 /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n const isMultiple = otherProps.treeCheckable;\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n dropdownClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.dropdownClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={renderValueList as any}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\n\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 { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\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 /** 菜单结构类型 tile/平铺 fold/折叠;默认:fold */\n menuLayoutType?: 'tile' | 'fold';\n /** 菜单触发类型,默认:click */\n menuTriggerType?: 'click' | 'hover';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期,请使用 menuOptions\n * @returns\n * ```\n * menuLayoutType = tile 无效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n\n /**\n * 根据 menuLayoutType 类型赋值\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\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 menuLayoutType,\n menuTriggerType,\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 const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\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\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n {menuOptions ? (\n <ButtonOperate\n {...menuOptions}\n gap={5}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\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 const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`);\n return (\n <div className={cName}>\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonWrapper","_useState","useState","loading","setLoading","debounceDuration","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","permission","hidden","jsx","Button","_extends","useArrayChange","dataList","forceUpdate","changeListRef","useRef","update","useForceUpdate","arrayOperate","add","useCallbackRef","dataItem","isUnshift","targetList","current","concat","index","target","delete","hooks","deleteItem","splice","resetList","getList","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","resolve","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useSafeState","initialState","setState","isMounted","useIsMounted","value","DropdownMenuWrapper","menuList","dropdownOtherProps","_objectWithoutPropertiesLoose","_excluded","menuItems","setMenuItems","_useState2","statusMap","setStatusMap","onConfirmtTriggerClick","event","_setStatusMap","stopPropagation","open","onConfirm","item","menuItemsNew","filter","Boolean","forEach","_statusMap$index","_statusMap$index2","text","color","needConfirm","confirmMessage","type","style","popconfirmProps","otherProps","_excluded2","newStyle","buttonType","nromal","key","label","_createElement","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","overlayClassName","danger","disabled","push","Dropdown","arrow","pointAtCenter","menu","items","onOpenChange","_open","ButtonOperateItemContent","hoverTips","tipsType","Popover","content","Tooltip","ButtonOperate","operateList","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","gap","undefined","split","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","isUndefined","spaceProps","map","placement","DefaultButton","length","foldIcon","_MoreOutlined","defaultProps","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","$await_3","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","_createCtx","_createCtx2","useCheckListCtx","CheckListCtxProvider","getValueList","toArray","CheckList","_useArrayChange","checkedValues","defaultValue","useUpdateEffect","defaultChange","targetIndex","newValues","selectedValue","onPreChange","$If_1","call","this","findIndex","temp","required","jsxs","beforeExtra","afterExtra","CheckListItem","_classNames2","context","checked","checkedClassPrefix","readonly","CssNodeHover","cloneElement","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","_props$disabledDateCo","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_format","maxDays","dates","setDates","hackValue","setHackValue","_ref","date1","date2","rangePickerValue","newDate1","newDate2","dateStrings","_props$disabledDateCo2","tooLate","diff","tooEarly","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","preValue1","preValue2","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","createElement","id","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","configProviderProps","visible","setVisible","_Form$useForm","useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","ConfigProvider","locale","zh_CN","componentSize","space","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","ReactDOM","render","close","_window$elementId","_window","dialogConfirm","dialogAlert","cancelButtonProps","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","operateGroup","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","footer","dialogDrawer","setOpen","closable","dialogLoading","root","createRoot","_window$elementId2","_window2","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWraper","operationProps","keyboard","forceRender","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","dynamicNode","container","tempElement","fixed","nodeElementId","log","remove","dynamicElementId","_document$querySelect","useEasyTableCtx","EasyTableCtxProvider","queryCondition","isInit","_EasyTableModel","updateFilterCondition","resetFilterCondition","updateInitStatus","easyTableModels","easyTableModel","EasyTable","_props$initialPaginat","dataSource","setDataSource","total","setTotal","_useState3","_easyTableModel$useSt","pageSize","initialPaginationParams","initRequest","_useState4","paginationStatus","setPaginationStatus","list","pageNo","allState","_props$serviceConfig","requestParamsAdapter","_onRequest","requestResultAdapter","paramsNew","respDataNew","respList","onDataSourceChange","clearQueryCondition","$await_4","resetFields","setFieldsValue","onResetRequest","$await_5","initialValues","getRequestParams","getFieldsValue","getEasyTableRef","onSetPaginationStatus","onFormFinish","_extends3","tableList","tableTotal","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","keys","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","currentValue","hasOperateList","find","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_useMemo","_currentGridList","_temp$props","_temp$props2","span","itemProps","newProps","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","contentStyle","EasyTableFilter","queryButtonProps","resetButtonProps","filterOperate","_useEasyTableCtx","childrens","Children","onReset","formOperateColProps","htmlType","formRowChildren","onFinish","isPure","gutter","EasyTableTable","rowKey","pagination","paginationData","showSizeChanger","showTotal","onChangePage","_len","arguments","Array","_key","apply","getUuid","Table","scroll","x","bordered","useEasyTablRef","IconWrapper","hideHoverBgColor","EditableFieldContext","createContext","editable","showEditableIcon","isCtx","EditableField","viewRender","_props$placeholderVal","placeholderValue","editRender","isEditFull","onClickEditIconPre","onClickConfirmIconPre","iconConfig","onEditCallback","onConfirmCallback","isEdit","setIsEdit","ctx","useContext","originalValue","onClickEditIcon","editIcon","_EditOutlined","viewValue","_isNumber","warn","onEditChange","_value$target","$If_2","editRenderElement","confirmIcon","_CheckOutlined","cancelIcon","_CloseOutlined","direction","display","paddingRight","EditableFieldProvider","Provider","getEditable","tableRowIndex","CheckboxGroupFormItemContent","_props$fieldConfig","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","onCompositionStart","onCompositionEnd","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","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","_ref2","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","String","arrayField2LabelValue","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","isBaseData","isNumber","_isBoolean","viewText","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","errorList","newList","isOriginal","newErrorList","handleResponse","fileList","newFileList","hasError","_newFileList$push","isPlainObject","code","_newFileList$push2","onUploadChange","info","file","donwList","allDone","flushSync","tempUid","Upload","UploadTrigger","listType","_PlusOutlined","marginTop","ghost","UploadWrapperFormItemContent","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","_props$formListConfig","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","onTableAfterRender","block","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","maxCount","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","FormItemCard","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","FormItemWrapperChildren","wrapper","rest","_children","composeProps","alignItems","marginLeft","FormItemWrapper","Gap","inline","LabelValueLayout","labelWidth","Descriptions","column","LocalLoading","isAsync","errorRender","setStatus","setRespData","refreshLoading","setRefreshLoading","loadingHeight","onRefresh","$Try_2_Finally","$Try_2_Exit","$Try_2_Value","_respData2","Result","subTitle","minHeight","isLoading","justifyContent","ModalAction","action","handleOnClick","_onClick","childrenReactElement","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","modalModels","createModalWraperModel","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","createModalWrapperModel","PageFixedFooter","Page404","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_160","label_width_170","label_width_180","label_width_190","label_width_200","label_width_auto","label_align_left","label_align_right","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","isCancel","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","ruleItemDescStyle","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagListSelect","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","_record","tableColumnIndexRender2","method","tableColumnSelectorRender","tableColumnObjectRender","_get","get","tableColumnExtraContentRender","handle","showData","notOverflowShowExtra","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","serialNumberCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","tooltip","opacity","_QuestionCircleOutlined","TabsWrapper","_props$isSticky","isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","cacheKey","activeKey","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","Tabs","TagGroup","TimePickerWrapper","disabledTime","isExistValue","timeValue","setTimeValue","onChangeTime","timeString","minDateMoment","isBefore","maxDateMoment","isAfter","newDisabledTime","disabledHours","minHour","i","maxMinute","disabledMinutes","selectedHour","minMinute","disabledSeconds","selectedMinute","minSecond","maxSecond","TimePicker","TimeRangePickerWrapper","timeStart","timeEnd","dateStart","dateEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Set","valueIsEmpty","serviceResponseHandle","onChangeSelectorList","useCustomCompareEffect","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","menuLayoutType","menuTriggerType","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","menuLayoutTypeNew","menuTriggerTypeNew","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_props$menuOptions3","_extends5","stringLabel","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","getMenuOptions","tile","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","cName","placeholder","Tree"],"mappings":"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"}