@flatbiz/antd 3.2.19 → 3.2.21

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/esm/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/hooks.ts","@flatbiz/antd/src/table-scrollbar/table-scrollbar.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/editable-field/context.ts","@flatbiz/antd/src/editable-field/editable-field.tsx","@flatbiz/antd/src/editable-field/editable-field-provider.tsx","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/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/rich-text-editor/preview/preview.tsx","@flatbiz/antd/src/rich-text-editor/rich-text-editor.tsx","@flatbiz/antd/src/rich-text-viewer/rich-text-viewer.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 { LoadingOutlined } from '@ant-design/icons';\nimport { 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';\nimport './style.less';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading' | 'hidden' | 'color'> & {\n onClick?: (event: React.MouseEvent<HTMLElement>) => Promise<void> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n hidden?: boolean;\n /** loading 显示位置,默认值:left */\n loadingPosition?: 'left' | 'center';\n color?: string;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n const { debounceDuration, loadingPosition, hidden, ...otherProps } = props;\n\n const debounceDurationNew = isUndefinedOrNull(debounceDuration) ? 500 : debounceDuration;\n const loadingPositionNew = loadingPosition === undefined ? 'left' : loadingPosition;\n const isLoadingLeft = loadingPositionNew === 'left';\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 }, debounceDurationNew);\n\n if (!hasPermission(props.permission)) {\n return null;\n }\n\n if (hidden) {\n return null;\n }\n\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\n if (isLoadingLeft) {\n return (\n <Button {...otherProps} onClick={onClick} loading={loading} style={{ ...newStyle, ...props.style }}>\n {props.children}\n </Button>\n );\n }\n\n return (\n <Button {...otherProps} onClick={onClick} style={{ ...newStyle, ...props.style }}>\n {!!loading && (\n <div className=\"bw-center-loading\">\n <LoadingOutlined />\n </div>\n )}\n {loading ? <div style={{ opacity: 0.5 }}>{props.children}</div> : 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 { 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 const clsName = hooks.useId(undefined, 'DropdownMenuWrapper');\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 loadingPosition=\"center\"\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 <ButtonWrapper\n size=\"small\"\n danger={color ? false : otherProps.danger}\n {...otherProps}\n onClick={onConfirmtTriggerClick.bind(null, index)}\n type={buttonType}\n style={newStyle}\n >\n {text}\n </ButtonWrapper>\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 <div className={clsName} style={{ position: 'relative' }}>\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n getPopupContainer={() => document.querySelector(`.${clsName}`) as HTMLElement}\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 </div>\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 { Divider, Popconfirm, PopconfirmProps, Popover, Space, SpaceProps, Tooltip } from 'antd';\nimport {\n CSSProperties,\n FC,\n Fragment,\n isValidElement,\n ReactElement,\n ReactNode,\n useMemo,\n useState,\n} from 'react';\nimport { ButtonWrapper, ButtonWrapperProps } from '../button-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\n\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonWrapperProps {\n /** hover 提示文字 */\n hoverTips?: string | React.ReactElement;\n /** hover 提示类型 默认:'tooltip' */\n tipsType?: 'popover' | 'tooltip';\n text: string | ReactElement;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\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, onClick, needConfirm, confirmMessage, popconfirmProps, ...otherProps } = 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={otherProps.color ? false : otherProps.danger}\n {...otherProps}\n onClick={null}\n type={type}\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} onClick={onClick}>\n {isValidElement(text) ? <span>{text}</span> : text}\n </DefaultButton>\n </ButtonOperateItemContent>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <ButtonWrapper\n type=\"link\"\n className=\"fold-more-button\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </ButtonWrapper>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nconst DefaultButton = (props) => {\n return (\n <ButtonWrapper\n loadingPosition=\"center\"\n {...props}\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 paginationFixed: boolean;\n foldKeys: string[];\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, isUndefined } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames } from '@dimjs/utils';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, message, Pagination, PaginationProps } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useMemo, useState } from 'react';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\nimport './style.less';\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 /** EasyTable唯一值,可用于缓存查询条件 */\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 /** 在父节点高度下,上下铺满;默认值:true */\n isFull?: boolean;\n /** 查询条件固定,不随滚动条滚动 */\n filterFixed?: boolean;\n /** 分页区域固定,不随滚动条滚动 */\n paginationFixed?: boolean;\n /**\n * 1. 配合paginationFixed=true一起使用有效果\n * 2. 当使用Table内的pagination时,在EasyTable.Table中配置分页属性\n */\n pagination?: PaginationProps;\n /**\n * 查询条件展开、收起,被收起key数组;数组内容为EasyTable.Filter 子节点key值\n */\n foldKeys?: string[];\n};\n/**\n * 对 查询条件+表格数据 进行深度封装,内置数据交互处理\n * ```\n * 1. 需要获取查询条件、主动发起请求等可通过ref、useEasyTable操作\n * 2. 可通过属性 initRequest 设置初始化是否请求数据\n * 3. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize\n * 4. isFull=true,设置【在父节点高度下,上下铺满】(默认值:true)\n * 5. filterFixed=true,设置查询条件固定,不随滚动条滚动\n * 6. paginationFixed=true,可设置分页条件在底部固定,不随滚动条滚动\n * 7. foldKeys=string[],查询条件展开、收起,被收起数组内容为EasyTable.Filter 子节点key值\n * 8. windows环境下,会在EasyTable.Table外部包装一下 TableScrollbar,提示高windows下table左右滚动体验\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 onInnerRequest = 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\n const getPaginationData = (pageNo: number, _pageSize: number) => {\n if (paginationStatus) {\n return {\n [fieldNames.pageNo]: pageNo,\n [fieldNames.pageSize]: _pageSize || pageSize,\n };\n } else {\n return {};\n }\n };\n\n const onResetRequest = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n form.resetFields();\n void onInnerRequest({\n ...getPaginationData(1, pageSize),\n ...props.initialValues,\n ...values,\n });\n });\n\n const getRequestParams = hooks.useCallbackRef(() => {\n return {\n ...state.queryCondition,\n ...form.getFieldsValue(),\n };\n });\n\n const getEasyTableRef = () => {\n return {\n onRequest: onInnerRequest,\n clearQueryCondition,\n getRequestParams,\n onResetRequest,\n form,\n };\n };\n\n useImperativeHandle(ref, () => {\n return getEasyTableRef();\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, ...getPaginationData(1, state.queryCondition.pageSize) });\n } else {\n void onInnerRequest({\n ...values,\n ...getPaginationData(1, state.queryCondition.pageSize),\n });\n }\n };\n const isFull = isUndefined(props.isFull) ? true : props.isFull;\n const className = classNames('fba-easy-table', {\n 'fba-easy-table-full': isFull,\n 'fba-easy-table-filter-fixed': props.filterFixed,\n 'fba-easy-table-pagination-fixed': props.paginationFixed,\n });\n\n const paginationData = useMemo(() => {\n return {\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo] || 1,\n pageSize: state.queryCondition[fieldNames.pageSize] || pageSize,\n total: total,\n showTotal: (total) => `共 ${total} 条记录`,\n ...props.pagination,\n };\n }, [fieldNames.pageNo, fieldNames.pageSize, pageSize, props.pagination, state.queryCondition, total]);\n\n const onChange = hooks.useCallbackRef((page: number, pageSize: number) => {\n void onInnerRequest({ [fieldNames.pageSize]: pageSize, [fieldNames.pageNo]: page });\n props.pagination?.onChange?.(page, pageSize);\n });\n\n return (\n <EasyTableCtxProvider\n value={{\n getEasyTableRef,\n modelKey: props.modelKey,\n onRequest: onInnerRequest,\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 paginationFixed: props.paginationFixed || false,\n foldKeys: props.foldKeys || [],\n }}\n >\n {props.paginationFixed ? (\n <div className=\"fba-easy-table-wrapper\">\n <div className={className}>{props.children}</div>\n {total > 0 && (\n <div className=\"fba-easy-table-pagination\">\n <Pagination size=\"small\" {...paginationData} onChange={onChange} />\n </div>\n )}\n </div>\n ) : (\n <div className={className}>{props.children}</div>\n )}\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 { DownOutlined, UpOutlined } from '@ant-design/icons';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormOperateCol, FormOperateColProps, FormRow } from '../form-grid';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n // 查询按钮配置\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n // 重置按钮配置\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\n/**\n * 过滤条件\n * @param props\n * @returns\n *\n *```\n *1. 用法1\n * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * <EasyTableFilter>\n * <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * </EasyTableFilter>\n *\n * -- 自定义网格布局 使用 FormCol组件包装 Form.Item\n * <EasyTableFilter>\n * <FormCol span={12}><Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item></FormCol>\n * </EasyTableFilter>\n *\n * -- children 可为 function\n * <EasyTableFilter>\n * {(form) => {\n * return <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * }}\n * </EasyTableFilter>\n *2. 用户2(自定义布局)\n * EasyTableFilter设置 isPure = true,FormItem无布局规则\n *3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例\n *4. 默认布局下,可通过设置 filterOperate 设置操作按钮\n *```\n */\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const { queryButtonProps, resetButtonProps, filterOperate } = props;\n const {\n modelKey,\n foldKeys,\n fieldNames,\n onRequest,\n pageSize,\n paginationStatus,\n initialValues,\n form,\n onFormFinish,\n } = useEasyTableCtx();\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children) as ReactElement[];\n\n const [openFold, setOpenFold] = useState(false);\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 formRowChildren = useMemo(() => {\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 leftList: [],\n ...filterOperate?.(form),\n };\n\n if (foldKeys.length > 0) {\n const changeFolditem = (\n <ButtonWrapper\n type=\"link\"\n style={{ padding: '0' }}\n onClick={() => {\n setOpenFold(!openFold);\n }}\n >\n {openFold ? (\n <span>\n 收起\n <UpOutlined style={{ marginLeft: 3, fontSize: 12 }} />\n </span>\n ) : (\n <span>\n 展开\n <DownOutlined style={{ marginLeft: 3, fontSize: 12 }} />\n </span>\n )}\n </ButtonWrapper>\n );\n const { rightList, leftList } = formOperateColProps;\n if (rightList.length > 0 || leftList.length === 0) {\n rightList.push(changeFolditem);\n } else if (leftList?.length > 0) {\n leftList.push(changeFolditem);\n }\n }\n\n return childrens\n .map((item, index) => {\n if (!openFold && foldKeys.find((keyItem) => `.$${keyItem}` === item.key)) return null;\n if (item.type['domTypeName'] === 'FormCol') {\n return item;\n }\n return <FormCol key={index}>{item}</FormCol>;\n })\n .filter(Boolean)\n .concat(<FormOperateCol key={999} {...formOperateColProps} />);\n }, [childrens, filterOperate, foldKeys, form, onReset, openFold, queryButtonProps, resetButtonProps]);\n\n return (\n <SimpleLayout className=\"easy-table-filter\">\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 { useRef } from 'react';\nimport { useEasyTableCtx } from './context';\nimport { EasyTableRefApi } from './type';\n\n/**\n * 在 EasyTable子组件内才可使用\n * @returns\n */\nexport const useEasyTable = () => {\n const ctx = useEasyTableCtx();\n const resp = useRef(ctx.getEasyTableRef());\n return resp.current;\n};\n\n/**\n *\n * @deprecated 已过去,请使用 useEasyTable\n * @returns\n */\nexport const useEasyTablRef = () => {\n const { getEasyTableRef } = useEasyTableCtx();\n const ref = useRef<EasyTableRefApi>(getEasyTableRef());\n return ref;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { get } from '@dimjs/utils';\nimport { useCreation, useEventListener, useInViewport, useSize } from 'ahooks';\nimport { Affix } from 'antd';\nimport { cloneElement, useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nimport './style.less';\n\ntype TableScrollProps = {\n children: React.ReactNode;\n /**\n * y轴的滚动条\n */\n target?: HTMLElement;\n};\n\nconst getParentNodeScroll = (parentNode: HTMLElement | null | undefined): HTMLElement | undefined => {\n if (!parentNode) return undefined;\n const computedStyle = getComputedStyle(parentNode);\n if (computedStyle.overflowY === 'scroll' || computedStyle.overflowY === 'auto') {\n return parentNode;\n }\n return getParentNodeScroll(parentNode.parentNode as HTMLElement);\n};\n/**\n * 表格x轴浮动滚动条\n * ```\n * 使用方法\n * <TableScrollbar>\n * <Table/>\n * </TableScrollbar>\n * ```\n */\nexport const TableScrollbar = ({ children, target, ...props }: TableScrollProps) => {\n const summary: any = get(children as any, 'props.summary');\n return cloneElement(children as any, {\n ...props,\n summary: (...args) => (\n <>\n {summary?.(...args)}\n <ScrollbarSummary target={target} />\n </>\n ),\n });\n};\ntype ScrollbarSummaryProps = {\n target?: HTMLElement;\n};\nconst ScrollbarSummary = ({ target }: ScrollbarSummaryProps) => {\n const refScrollBox = useRef<HTMLDivElement>();\n const refScroll = useRef<HTMLDivElement>();\n // 控制滚动条的显示\n const [show, setShow] = useState<boolean>(false);\n // 获取表格和表格包裹框\n const { table, tableBox } = useCreation(() => {\n const getParentTable = (parentNode: HTMLElement | null | undefined): HTMLElement | undefined => {\n if (!parentNode) return undefined;\n if (parentNode.nodeName === 'TABLE') {\n return parentNode;\n }\n return getParentTable(parentNode.parentNode as HTMLElement);\n };\n const table = getParentTable(refScrollBox?.current?.parentElement);\n return {\n table,\n tableBox: table?.parentElement,\n };\n }, [refScrollBox.current]);\n // 表格是否显示\n const [inViewport] = useInViewport(table?.querySelector('tbody'));\n\n // 监听左右滚动框的大小变化\n const size = useSize(tableBox);\n // 获取上下滚动事件的滚动条\n const _target = useCreation(() => {\n if (target) return target;\n return getParentNodeScroll(table) || document.body;\n }, [target, table, size]);\n\n useEffectCustom(() => {\n if (show && refScrollBox.current && refScroll.current) {\n if (refScrollBox.current.clientWidth != tableBox?.clientWidth) {\n refScrollBox.current.style.width = `${tableBox?.clientWidth || 0}px`;\n }\n if (refScroll.current.clientWidth != table?.clientWidth) {\n refScroll.current.style.width = `${table?.clientWidth || 0}px`;\n }\n }\n }, [size, show]);\n // 注册原始滚动条事件\n useEventListener(\n 'scroll',\n ({ target }) => {\n if (refScrollBox.current) {\n refScrollBox.current.scrollLeft = target.scrollLeft;\n }\n },\n { target: () => tableBox },\n );\n // 注册原始自定义滚动条时间\n useEventListener(\n 'scroll',\n ({ target }) => {\n if (tableBox) tableBox.scrollLeft = target.scrollLeft;\n },\n { target: refScrollBox },\n );\n return (\n <div className=\"scrollbar-main\">\n <Affix\n offsetBottom={inViewport ? 13 : 0}\n style={{ opacity: show ? 1 : 0 }}\n onChange={(value) => {\n setShow(!!value);\n }}\n target={() => _target}\n >\n <div ref={refScrollBox as any} className=\"scrollbar-box\">\n <div ref={refScroll as any} style={{ height: 1 }}></div>\n </div>\n </Affix>\n </div>\n );\n};\n","import { getUuid, isMacEnv, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { SimpleLayout } from '../simple-layout';\nimport { TableScrollbar } from '../table-scrollbar';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'rowKey'> & {\n children?: ReactElement | 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 paginationFixed,\n onSetPaginationStatus,\n } = useEasyTableCtx();\n const [state, actions] = easyTableModel(modelKey).useStore();\n\n const tablePaginationData = useMemo(() => {\n if (paginationFixed || pagination === false) return false;\n return {\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo] || 1,\n pageSize: state.queryCondition[fieldNames.pageSize] || pageSize,\n total: tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n ...props.pagination,\n };\n }, [\n fieldNames.pageNo,\n fieldNames.pageSize,\n pageSize,\n pagination,\n paginationFixed,\n props.pagination,\n state.queryCondition,\n tableTotal,\n ]);\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n if (tablePaginationData) {\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 const hasPagination = paginationFixed || tablePaginationData !== false;\n onSetPaginationStatus(hasPagination);\n if (initRequest !== false || !state.isInit) {\n if (hasPagination) {\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 className=\"easy-table-table\">\n {children}\n {isMacEnv() ? (\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n {...otherProps}\n pagination={tablePaginationData}\n rowKey={rowKey}\n onChange={onChangePage}\n loading={loading}\n dataSource={dataSource}\n />\n ) : (\n <TableScrollbar>\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n {...otherProps}\n pagination={tablePaginationData}\n rowKey={rowKey}\n onChange={onChangePage}\n loading={loading}\n dataSource={dataSource}\n />\n </TableScrollbar>\n )}\n </SimpleLayout>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n 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","import { classNames } from '@dimjs/utils';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { useRef } from 'react';\nimport './style.less';\n\nexport type EditorWrapperProps = {\n onChange?: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: {\n disabled?: boolean;\n onKeyDown?: (event) => void;\n };\n // varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n /** 上传图片服务 */\n onUploadImage?: (file: File) => Promise<string>;\n className?: string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @deprecated 已过时,请使用 RichTextEditor 组件\n * @param props\n * @returns\n * ```\n * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口\n * 2. 如果不需要粘贴上传图片,可配置 editorInitParams.paste_data_images = false\n * 3. 获取富文本实例,通过editorInitParams.setup(editor)函数获取\n * 4. 可在 editorInitParams 中自定义 plugins、toolbar\n * 5. 预览富文本数据,使用 EditorViewer 组件\n *\n * ```\n */\nexport const EditorWrapper = (props: EditorWrapperProps) => {\n const editorRef = useRef<TAny>(null);\n\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 const images_upload_handler = hooks.useCallbackRef(async (blobInfo, success, failure) => {\n try {\n const respData = await props.onUploadImage?.(blobInfo.blob());\n success(respData);\n } catch (error) {\n failure(error.message);\n }\n });\n\n useKeyPress(\n () => true,\n (event) => {\n try {\n if (event.type === 'keyup' && event.key === 'Escape') {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n },\n {\n events: ['keydown', 'keyup'],\n },\n );\n\n const onKeyDown = hooks.useCallbackRef((event) => {\n try {\n if (event.keyCode == 27) {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n props.editorProps?.onKeyDown?.(event);\n });\n\n return (\n <div className={classNames('v-editor-wrapper', props.className)}>\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n paste_data_images: !!props.onUploadImage,\n images_upload_handler,\n height: props.height || 500,\n menubar: true,\n resize: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins: 'paste lists link image advlist charmap preview fullscreen code table help',\n toolbar:\n 'undo redo fullscreen preview | bold italic underline strikethrough |' +\n 'fontsizeselect formatselect |' +\n 'alignleft aligncenter alignright alignjustify |' +\n 'outdent indent | numlist bullist advlist |' +\n 'forecolor backcolor removeformat |' +\n 'code image link',\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 setup: (editor) => {\n editorRef.current = editor;\n props.editorInitParams?.setup?.(editor);\n },\n }}\n {...props.editorProps}\n onKeyDown={onKeyDown}\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 { PlusCircleOutlined } from '@ant-design/icons';\nimport { Image } from 'antd';\nimport { Fragment } from 'react';\nimport { dynamicNode } from '../../dynamic-node';\nimport { useEffectCustom } from '../../hooks';\nimport './preview.less';\n\nexport const Preview = (props) => {\n const { visible, url } = props;\n\n useEffectCustom(() => {\n if (visible) {\n dynamicNode.append({\n content: (\n <PlusCircleOutlined\n onClick={props.close}\n className=\"preview-image-popup-close\"\n twoToneColor=\"#1890ff\"\n />\n ),\n });\n } else {\n dynamicNode.remove();\n }\n }, [visible]);\n\n if (!url) return <></>;\n\n return (\n <Fragment>\n <Image\n key={url}\n style={{ left: '100px' }}\n preview={{\n className: 'preview-image-popup',\n maskStyle: { backgroundColor: 'rgba(0,0,0,0.85)' },\n visible,\n src: url,\n onVisibleChange: () => {\n props.close();\n },\n }}\n />\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { TAny } from '@flatbiz/utils';\nimport { Editor, IAllProps } from '@tinymce/tinymce-react';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { useRef, useState } from 'react';\nimport { Editor as TinyMCEEditor } from 'tinymce';\nimport { Preview } from './preview';\nimport './style.less';\n\nexport interface RichTextEditorProps extends Omit<IAllProps, 'onChange'> {\n onChange?: (data?: string) => void;\n // value?: string;\n /** 上传图片服务 */\n onUploadImage?: (file: File) => Promise<string>;\n className?: string;\n /** 图片点击预览 */\n imgPreview?: boolean;\n}\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n * ```\n * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口\n * 2. 如果不需要粘贴上传图片,可配置 editorInitParams.paste_data_images = false\n * 3. 获取富文本实例,通过editorInitParams.setup(editor)函数获取\n * 4. 可在 editorInitParams 中自定义 plugins、toolbar\n * 5. 预览富文本数据,使用 EditorViewer 组件\n *\n * ```\n */\nexport const RichTextEditor = (props: RichTextEditorProps) => {\n const { onUploadImage, onChange, className, ...otherProps } = props;\n\n const editorRef = useRef<TAny>(null);\n const [previewUrl, setPreviewUrl] = useState('');\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 // const images_upload_handler = hooks.useCallbackRef(async (blobInfo: BlobInfo, progress: ProgressFn) => {\n // try {\n // const respData = await props.onUploadImage?.(blobInfo.blob());\n // success(respData);\n // } catch (error) {\n // failure(error.message);\n // }\n // });\n\n useKeyPress(\n () => true,\n (event) => {\n try {\n if (event.type === 'keyup' && event.key === 'Escape') {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n },\n {\n events: ['keydown', 'keyup'],\n },\n );\n\n const onKeyDown = hooks.useCallbackRef((event, editor: TinyMCEEditor) => {\n try {\n if (event.keyCode == 27) {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n props.onKeyDown?.(event, editor);\n });\n\n const onInit = hooks.useCallbackRef((_, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n try {\n editor.iframeElement?.contentDocument?.addEventListener(\n 'click',\n (event) => {\n if (props.imgPreview && event.target?.['tagName'] === 'IMG') {\n setPreviewUrl(event.target['src']);\n }\n },\n true,\n );\n } catch (error) {\n //\n }\n otherProps.onInit?.(_, editor);\n });\n\n const onEditorChange = hooks.useCallbackRef((a: string, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n otherProps.onEditorChange?.(a, editor);\n onChange?.(a);\n });\n\n const tinymceBaseUrl = 'https://file.40017.cn/tcsk/tinymce@6.4.1';\n\n return (\n <div className={classNames('v-editor-wrapper', className)}>\n <Editor\n // apiKey=\"ds6j8so4g3d2cycidbhgkds36q0phy1uqd9jd8bot91sfe5l\"\n tinymceScriptSrc={`${tinymceBaseUrl}/tinymce.min.js`}\n {...otherProps}\n onInit={onInit}\n onKeyDown={onKeyDown}\n onEditorChange={onEditorChange}\n init={{\n promotion: false,\n language: 'zh-Hans',\n height: 500,\n paste_data_images: onUploadImage ? true : false,\n autosave_ask_before_unload: false,\n base_url: tinymceBaseUrl,\n images_upload_handler: async (blobInfo) => {\n try {\n const blob = blobInfo.blob();\n const file = new File([blob], blob.name, { type: blob.type });\n const respData = await onUploadImage?.(file);\n return Promise.resolve(respData as string);\n } catch (error) {\n return Promise.reject(error?.message || '图片上传异常');\n }\n },\n content_style: 'img {max-width:100%;} table{width:100%}',\n plugins: 'lists link image advlist charmap preview fullscreen code table help',\n toolbar:\n 'undo redo fullscreen preview | bold italic underline strikethrough |' +\n 'fontsizeselect formatselect |' +\n 'alignleft aligncenter alignright alignjustify |' +\n 'outdent indent | numlist bullist advlist |' +\n 'forecolor backcolor removeformat |' +\n 'preview code | image link',\n ...props.init,\n }}\n />\n <Preview\n visible={!!previewUrl}\n url={previewUrl}\n close={() => {\n setPreviewUrl('');\n }}\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 { FullscreenOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { IconWrapper } from '@flatbiz/antd';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { CSSProperties, ReactElement, useState } from 'react';\nimport { Editor as TinyMCEEditor } from 'tinymce';\nimport { RichTextEditor } from '../rich-text-editor';\n\nimport './style.less';\n\ntype RichTextViewerProps = {\n data: string;\n className?: string;\n fullscreen?: boolean;\n onInit?: (editor: TinyMCEEditor) => void;\n children?: ReactElement;\n style?: CSSProperties;\n fullscreenIconTips?: string;\n};\n\n/**\n * 预览 RichTextEditor 生成的富文本数据\n * @param props\n * @returns\n */\nexport const RichTextViewer = (props: RichTextViewerProps) => {\n const [isFixed, setIsFixed] = useState(false);\n\n useKeyPress(\n () => true,\n (event) => {\n if (event.type === 'keyup' && event.key === 'Escape' && isFixed) {\n setIsFixed(false);\n }\n },\n { events: ['keydown', 'keyup'] },\n );\n\n const onChangeFixed = hooks.useCallbackRef(() => {\n setIsFixed(!isFixed);\n });\n const onInit = hooks.useCallbackRef((_, editor) => {\n props.onInit?.(editor);\n });\n\n return (\n <div\n className={classNames('fba-editor-viewer', { 'fba-editor-viewer-fixed': isFixed }, props.className)}\n style={props.style}\n >\n {props.children}\n {props.fullscreen && props.data && (\n <div className=\"fba-editor-viewer-icon\">\n <IconWrapper\n hoverTips={props.fullscreenIconTips}\n icon={<FullscreenOutlined />}\n onClick={onChangeFixed}\n />\n </div>\n )}\n <RichTextEditor\n value={props.data}\n onInit={onInit}\n imgPreview={true}\n init={{\n readonly: true,\n plugins: 'autoresize',\n menubar: false,\n toolbar: '',\n statusbar: false,\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","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonWrapper","_useState","useState","loading","setLoading","debounceDuration","loadingPosition","hidden","otherProps","_objectWithoutPropertiesLoose","_excluded","debounceDurationNew","isUndefinedOrNull","loadingPositionNew","undefined","isLoadingLeft","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","permission","newStyle","color","disabled","Button","_extends","style","_jsxs","className","_LoadingOutlined","opacity","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","resolve","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useSafeState","initialState","setState","isMounted","useIsMounted","value","DropdownMenuWrapper","menuList","dropdownOtherProps","menuItems","setMenuItems","clsName","useId","_useState2","statusMap","setStatusMap","onConfirmtTriggerClick","event","_setStatusMap","stopPropagation","open","onConfirm","item","menuItemsNew","filter","Boolean","forEach","_statusMap$index","_statusMap$index2","text","needConfirm","confirmMessage","type","popconfirmProps","_excluded2","buttonType","nromal","key","label","_createElement","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","overlayClassName","danger","push","position","Dropdown","getPopupContainer","document","querySelector","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","split","_classNames","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","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","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","createElement","id","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","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","onInnerRequest","allState","_props$serviceConfig","requestParamsAdapter","requestResultAdapter","paramsNew","respDataNew","respList","onDataSourceChange","clearQueryCondition","$await_4","resetFields","setFieldsValue","getPaginationData","_pageSize","onResetRequest","$await_5","initialValues","getRequestParams","getFieldsValue","getEasyTableRef","onSetPaginationStatus","onFormFinish","isFull","filterFixed","paginationFixed","paginationData","showSizeChanger","showTotal","pagination","page","_onInnerRequest","_props$pagination","tableList","tableTotal","foldKeys","Pagination","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","openFold","setOpenFold","onReset","formRowChildren","formOperateColProps","htmlType","changeFolditem","_UpOutlined","marginLeft","fontSize","_DownOutlined","keyItem","onFinish","isPure","gutter","useEasyTable","ctx","resp","useEasyTablRef","getParentNodeScroll","parentNode","computedStyle","getComputedStyle","overflowY","TableScrollbar","summary","_get","_len","arguments","args","Array","_key","apply","ScrollbarSummary","_ref2","refScrollBox","refScroll","show","setShow","_useCreation","useCreation","_refScrollBox$current","getParentTable","nodeName","table","parentElement","tableBox","_useInViewport","useInViewport","inViewport","useSize","_target","clientWidth","useEventListener","_ref3","scrollLeft","_ref4","Affix","offsetBottom","height","EasyTableTable","rowKey","tablePaginationData","onChangePage","_onRequest","getUuid","hasPagination","isMacEnv","Table","scroll","x","bordered","IconWrapper","hideHoverBgColor","EditableFieldContext","createContext","editable","showEditableIcon","isCtx","EditableField","viewRender","_props$placeholderVal","placeholderValue","editRender","isEditFull","onClickEditIconPre","onClickConfirmIconPre","iconConfig","onEditCallback","onConfirmCallback","isEdit","setIsEdit","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","SelectorWrapper","showAllOption","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","String","arrayField2LabelValue","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","isBaseData","_isBoolean","viewText","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","errorList","newList","isOriginal","newErrorList","handleResponse","fileList","newFileList","hasError","_newFileList$push","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","EditorWrapper","editorRef","_","editor","getContent","respValue","images_upload_handler","blobInfo","success","failure","onUploadImage","blob","useKeyPress","_editorRef$current","editorContainer","classList","contains","_editorRef$current2","editorCommands","execCommand","events","onKeyDown","_props$editorProps","keyCode","_editorRef$current3","_editorRef$current4","editorProps","_Editor","cdnTinyMce","init","paste_data_images","menubar","resize","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","editorInitParams","setup","_props$editorInitPara","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","FormItemWrapper","Gap","inline","LabelValueLayout","labelWidth","isNumber","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","Preview","_PlusCircleOutlined","twoToneColor","Image","left","preview","maskStyle","backgroundColor","src","onVisibleChange","RichTextEditor","previewUrl","setPreviewUrl","onInit","_editor$iframeElement","_editor$iframeElement2","iframeElement","contentDocument","addEventListener","_event$target","imgPreview","tinymceBaseUrl","Editor","tinymceScriptSrc","promotion","autosave_ask_before_unload","base_url","_file","$Try_4_Catch","reject","File","content_style","RichTextViewer","isFixed","setIsFixed","onChangeFixed","fullscreen","fullscreenIconTips","_FullscreenOutlined","statusbar","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","tableColumnExtraContentRender","handle","showData","notOverflowShowExtra","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","serialNumberCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","tooltip","_QuestionCircleOutlined","TabsWrapper","_props$isSticky","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","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","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","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","_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","_extends3","_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/hooks.ts","@flatbiz/antd/src/table-scrollbar/table-scrollbar.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/editable-field/context.ts","@flatbiz/antd/src/editable-field/editable-field.tsx","@flatbiz/antd/src/editable-field/editable-field-provider.tsx","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/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/rich-text-editor/preview/preview.tsx","@flatbiz/antd/src/rich-text-editor/rich-text-editor.tsx","@flatbiz/antd/src/rich-text-viewer/rich-text-viewer.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 { LoadingOutlined } from '@ant-design/icons';\nimport { 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';\nimport './style.less';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading' | 'hidden' | 'color'> & {\n onClick?: (event: React.MouseEvent<HTMLElement>) => Promise<void> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n hidden?: boolean;\n /** loading 显示位置,默认值:left */\n loadingPosition?: 'left' | 'center';\n color?: string;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n const { debounceDuration, loadingPosition, hidden, ...otherProps } = props;\n\n const debounceDurationNew = isUndefinedOrNull(debounceDuration) ? 500 : debounceDuration;\n const loadingPositionNew = loadingPosition === undefined ? 'left' : loadingPosition;\n const isLoadingLeft = loadingPositionNew === 'left';\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 }, debounceDurationNew);\n\n if (!hasPermission(props.permission)) {\n return null;\n }\n\n if (hidden) {\n return null;\n }\n\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\n if (isLoadingLeft) {\n return (\n <Button {...otherProps} onClick={onClick} loading={loading} style={{ ...newStyle, ...props.style }}>\n {props.children}\n </Button>\n );\n }\n\n return (\n <Button {...otherProps} onClick={onClick} style={{ ...newStyle, ...props.style }}>\n {!!loading && (\n <div className=\"bw-center-loading\">\n <LoadingOutlined />\n </div>\n )}\n {loading ? <div style={{ opacity: 0.5 }}>{props.children}</div> : 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 { 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 const clsName = hooks.useId(undefined, 'DropdownMenuWrapper');\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 loadingPosition=\"center\"\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 <ButtonWrapper\n size=\"small\"\n danger={color ? false : otherProps.danger}\n {...otherProps}\n onClick={onConfirmtTriggerClick.bind(null, index)}\n type={buttonType}\n style={newStyle}\n >\n {text}\n </ButtonWrapper>\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 <div className={clsName} style={{ position: 'relative' }}>\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n getPopupContainer={() => document.querySelector(`.${clsName}`) as HTMLElement}\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 </div>\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 { Divider, Popconfirm, PopconfirmProps, Popover, Space, SpaceProps, Tooltip } from 'antd';\nimport {\n CSSProperties,\n FC,\n Fragment,\n isValidElement,\n ReactElement,\n ReactNode,\n useMemo,\n useState,\n} from 'react';\nimport { ButtonWrapper, ButtonWrapperProps } from '../button-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\n\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonWrapperProps {\n /** hover 提示文字 */\n hoverTips?: string | React.ReactElement;\n /** hover 提示类型 默认:'tooltip' */\n tipsType?: 'popover' | 'tooltip';\n text: string | ReactElement;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\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, onClick, needConfirm, confirmMessage, popconfirmProps, ...otherProps } = 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={otherProps.color ? false : otherProps.danger}\n {...otherProps}\n onClick={null}\n type={type}\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} onClick={onClick}>\n {isValidElement(text) ? <span>{text}</span> : text}\n </DefaultButton>\n </ButtonOperateItemContent>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <ButtonWrapper\n type=\"link\"\n className=\"fold-more-button\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </ButtonWrapper>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nconst DefaultButton = (props) => {\n return (\n <ButtonWrapper\n loadingPosition=\"center\"\n {...props}\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 paginationFixed: boolean;\n foldKeys: string[];\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, isUndefined } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames } from '@dimjs/utils';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, message, Pagination, PaginationProps } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useMemo, useState } from 'react';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\nimport './style.less';\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 /** EasyTable唯一值,可用于缓存查询条件 */\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 /** 在父节点高度下,上下铺满;默认值:true */\n isFull?: boolean;\n /** 查询条件固定,不随滚动条滚动 */\n filterFixed?: boolean;\n /** 分页区域固定,不随滚动条滚动 */\n paginationFixed?: boolean;\n /**\n * 1. 配合paginationFixed=true一起使用有效果\n * 2. 当使用Table内的pagination时,在EasyTable.Table中配置分页属性\n */\n pagination?: PaginationProps;\n /**\n * 查询条件展开、收起,被收起key数组;数组内容为EasyTable.Filter 子节点key值\n */\n foldKeys?: string[];\n};\n/**\n * 对 查询条件+表格数据 进行深度封装,内置数据交互处理\n * ```\n * 1. 需要获取查询条件、主动发起请求等可通过ref、useEasyTable操作\n * 2. 可通过属性 initRequest 设置初始化是否请求数据\n * 3. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize\n * 4. isFull=true,设置【在父节点高度下,上下铺满】(默认值:true)\n * 5. filterFixed=true,设置查询条件固定,不随滚动条滚动\n * 6. paginationFixed=true,可设置分页条件在底部固定,不随滚动条滚动\n * 7. foldKeys=string[],查询条件展开、收起,被收起数组内容为EasyTable.Filter 子节点key值\n * 8. windows环境下,会在EasyTable.Table外部包装一下 TableScrollbar,提示高windows下table左右滚动体验\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 onInnerRequest = 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\n const getPaginationData = (pageNo: number, _pageSize: number) => {\n if (paginationStatus) {\n return {\n [fieldNames.pageNo]: pageNo,\n [fieldNames.pageSize]: _pageSize || pageSize,\n };\n } else {\n return {};\n }\n };\n\n const onResetRequest = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n form.resetFields();\n void onInnerRequest({\n ...getPaginationData(1, pageSize),\n ...props.initialValues,\n ...values,\n });\n });\n\n const getRequestParams = hooks.useCallbackRef(() => {\n return {\n ...state.queryCondition,\n ...form.getFieldsValue(),\n };\n });\n\n const getEasyTableRef = () => {\n return {\n onRequest: onInnerRequest,\n clearQueryCondition,\n getRequestParams,\n onResetRequest,\n form,\n };\n };\n\n useImperativeHandle(ref, () => {\n return getEasyTableRef();\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, ...getPaginationData(1, state.queryCondition.pageSize) });\n } else {\n void onInnerRequest({\n ...values,\n ...getPaginationData(1, state.queryCondition.pageSize),\n });\n }\n };\n const isFull = isUndefined(props.isFull) ? true : props.isFull;\n const className = classNames('fba-easy-table', {\n 'fba-easy-table-full': isFull,\n 'fba-easy-table-filter-fixed': props.filterFixed,\n 'fba-easy-table-pagination-fixed': props.paginationFixed,\n });\n\n const paginationData = useMemo(() => {\n return {\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo] || 1,\n pageSize: state.queryCondition[fieldNames.pageSize] || pageSize,\n total: total,\n showTotal: (total) => `共 ${total} 条记录`,\n ...props.pagination,\n };\n }, [fieldNames.pageNo, fieldNames.pageSize, pageSize, props.pagination, state.queryCondition, total]);\n\n const onChange = hooks.useCallbackRef((page: number, pageSize: number) => {\n void onInnerRequest({ [fieldNames.pageSize]: pageSize, [fieldNames.pageNo]: page });\n props.pagination?.onChange?.(page, pageSize);\n });\n\n return (\n <EasyTableCtxProvider\n value={{\n getEasyTableRef,\n modelKey: props.modelKey,\n onRequest: onInnerRequest,\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 paginationFixed: props.paginationFixed || false,\n foldKeys: props.foldKeys || [],\n }}\n >\n {props.paginationFixed ? (\n <div className=\"fba-easy-table-wrapper\">\n <div className={className}>{props.children}</div>\n {total > 0 && (\n <div className=\"fba-easy-table-pagination\">\n <Pagination size=\"small\" {...paginationData} onChange={onChange} />\n </div>\n )}\n </div>\n ) : (\n <div className={className}>{props.children}</div>\n )}\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 hidden?: boolean;\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, hidden, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n if (hidden) return null;\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 hidden?: 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, hidden, ...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 if (hidden) return null;\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, 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() || 'md';\n const childrenList = toArray<ReactElement>(props.children)\n .filter(Boolean)\n .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 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 { DownOutlined, UpOutlined } from '@ant-design/icons';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormOperateCol, FormOperateColProps, FormRow } from '../form-grid';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n // 查询按钮配置\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n // 重置按钮配置\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\n/**\n * 过滤条件\n * @param props\n * @returns\n *\n *```\n *1. 用法1\n * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * <EasyTableFilter>\n * <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * </EasyTableFilter>\n *\n * -- 自定义网格布局 使用 FormCol组件包装 Form.Item\n * <EasyTableFilter>\n * <FormCol span={12}><Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item></FormCol>\n * </EasyTableFilter>\n *\n * -- children 可为 function\n * <EasyTableFilter>\n * {(form) => {\n * return <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * }}\n * </EasyTableFilter>\n *2. 用户2(自定义布局)\n * EasyTableFilter设置 isPure = true,FormItem无布局规则\n *3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例\n *4. 默认布局下,可通过设置 filterOperate 设置操作按钮\n *```\n */\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const { queryButtonProps, resetButtonProps, filterOperate } = props;\n const {\n modelKey,\n foldKeys,\n fieldNames,\n onRequest,\n pageSize,\n paginationStatus,\n initialValues,\n form,\n onFormFinish,\n } = useEasyTableCtx();\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children) as ReactElement[];\n\n const [openFold, setOpenFold] = useState(false);\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 formRowChildren = useMemo(() => {\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 leftList: [],\n ...filterOperate?.(form),\n };\n\n if (foldKeys.length > 0) {\n const changeFolditem = (\n <ButtonWrapper\n type=\"link\"\n style={{ padding: '0' }}\n onClick={() => {\n setOpenFold(!openFold);\n }}\n >\n {openFold ? (\n <span>\n 收起\n <UpOutlined style={{ marginLeft: 3, fontSize: 12 }} />\n </span>\n ) : (\n <span>\n 展开\n <DownOutlined style={{ marginLeft: 3, fontSize: 12 }} />\n </span>\n )}\n </ButtonWrapper>\n );\n const { rightList, leftList } = formOperateColProps;\n if (rightList.length > 0 || leftList.length === 0) {\n rightList.push(changeFolditem);\n } else if (leftList?.length > 0) {\n leftList.push(changeFolditem);\n }\n }\n\n return childrens\n .map((item, index) => {\n if (!openFold && foldKeys.find((keyItem) => `.$${keyItem}` === item.key)) return null;\n if (item.type['domTypeName'] === 'FormCol') {\n return item;\n }\n return <FormCol key={index}>{item}</FormCol>;\n })\n .filter(Boolean)\n .concat(<FormOperateCol key={999} {...formOperateColProps} />);\n }, [childrens, filterOperate, foldKeys, form, onReset, openFold, queryButtonProps, resetButtonProps]);\n\n return (\n <SimpleLayout className=\"easy-table-filter\">\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 { useRef } from 'react';\nimport { useEasyTableCtx } from './context';\nimport { EasyTableRefApi } from './type';\n\n/**\n * 在 EasyTable子组件内才可使用\n * @returns\n */\nexport const useEasyTable = () => {\n const ctx = useEasyTableCtx();\n const resp = useRef(ctx.getEasyTableRef());\n return resp.current;\n};\n\n/**\n *\n * @deprecated 已过去,请使用 useEasyTable\n * @returns\n */\nexport const useEasyTablRef = () => {\n const { getEasyTableRef } = useEasyTableCtx();\n const ref = useRef<EasyTableRefApi>(getEasyTableRef());\n return ref;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { get } from '@dimjs/utils';\nimport { useCreation, useEventListener, useInViewport, useSize } from 'ahooks';\nimport { Affix } from 'antd';\nimport { cloneElement, useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nimport './style.less';\n\ntype TableScrollProps = {\n children: React.ReactNode;\n /**\n * y轴的滚动条\n */\n target?: HTMLElement;\n};\n\nconst getParentNodeScroll = (parentNode: HTMLElement | null | undefined): HTMLElement | undefined => {\n if (!parentNode) return undefined;\n const computedStyle = getComputedStyle(parentNode);\n if (computedStyle.overflowY === 'scroll' || computedStyle.overflowY === 'auto') {\n return parentNode;\n }\n return getParentNodeScroll(parentNode.parentNode as HTMLElement);\n};\n/**\n * 表格x轴浮动滚动条\n * ```\n * 使用方法\n * <TableScrollbar>\n * <Table/>\n * </TableScrollbar>\n * ```\n */\nexport const TableScrollbar = ({ children, target, ...props }: TableScrollProps) => {\n const summary: any = get(children as any, 'props.summary');\n return cloneElement(children as any, {\n ...props,\n summary: (...args) => (\n <>\n {summary?.(...args)}\n <ScrollbarSummary target={target} />\n </>\n ),\n });\n};\ntype ScrollbarSummaryProps = {\n target?: HTMLElement;\n};\nconst ScrollbarSummary = ({ target }: ScrollbarSummaryProps) => {\n const refScrollBox = useRef<HTMLDivElement>();\n const refScroll = useRef<HTMLDivElement>();\n // 控制滚动条的显示\n const [show, setShow] = useState<boolean>(false);\n // 获取表格和表格包裹框\n const { table, tableBox } = useCreation(() => {\n const getParentTable = (parentNode: HTMLElement | null | undefined): HTMLElement | undefined => {\n if (!parentNode) return undefined;\n if (parentNode.nodeName === 'TABLE') {\n return parentNode;\n }\n return getParentTable(parentNode.parentNode as HTMLElement);\n };\n const table = getParentTable(refScrollBox?.current?.parentElement);\n return {\n table,\n tableBox: table?.parentElement,\n };\n }, [refScrollBox.current]);\n // 表格是否显示\n const [inViewport] = useInViewport(table?.querySelector('tbody'));\n\n // 监听左右滚动框的大小变化\n const size = useSize(tableBox);\n // 获取上下滚动事件的滚动条\n const _target = useCreation(() => {\n if (target) return target;\n return getParentNodeScroll(table) || document.body;\n }, [target, table, size]);\n\n useEffectCustom(() => {\n if (show && refScrollBox.current && refScroll.current) {\n if (refScrollBox.current.clientWidth != tableBox?.clientWidth) {\n refScrollBox.current.style.width = `${tableBox?.clientWidth || 0}px`;\n }\n if (refScroll.current.clientWidth != table?.clientWidth) {\n refScroll.current.style.width = `${table?.clientWidth || 0}px`;\n }\n }\n }, [size, show]);\n // 注册原始滚动条事件\n useEventListener(\n 'scroll',\n ({ target }) => {\n if (refScrollBox.current) {\n refScrollBox.current.scrollLeft = target.scrollLeft;\n }\n },\n { target: () => tableBox },\n );\n // 注册原始自定义滚动条时间\n useEventListener(\n 'scroll',\n ({ target }) => {\n if (tableBox) tableBox.scrollLeft = target.scrollLeft;\n },\n { target: refScrollBox },\n );\n return (\n <div className=\"scrollbar-main\">\n <Affix\n offsetBottom={inViewport ? 13 : 0}\n style={{ opacity: show ? 1 : 0 }}\n onChange={(value) => {\n setShow(!!value);\n }}\n target={() => _target}\n >\n <div ref={refScrollBox as any} className=\"scrollbar-box\">\n <div ref={refScroll as any} style={{ height: 1 }}></div>\n </div>\n </Affix>\n </div>\n );\n};\n","import { getUuid, isMacEnv, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { SimpleLayout } from '../simple-layout';\nimport { TableScrollbar } from '../table-scrollbar';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'rowKey'> & {\n children?: ReactElement | 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 paginationFixed,\n onSetPaginationStatus,\n } = useEasyTableCtx();\n const [state, actions] = easyTableModel(modelKey).useStore();\n\n const tablePaginationData = useMemo(() => {\n if (paginationFixed || pagination === false) return false;\n return {\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo] || 1,\n pageSize: state.queryCondition[fieldNames.pageSize] || pageSize,\n total: tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n ...props.pagination,\n };\n }, [\n fieldNames.pageNo,\n fieldNames.pageSize,\n pageSize,\n pagination,\n paginationFixed,\n props.pagination,\n state.queryCondition,\n tableTotal,\n ]);\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n if (tablePaginationData) {\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 const hasPagination = paginationFixed || tablePaginationData !== false;\n onSetPaginationStatus(hasPagination);\n if (initRequest !== false || !state.isInit) {\n if (hasPagination) {\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 className=\"easy-table-table\">\n {children}\n {isMacEnv() ? (\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n {...otherProps}\n pagination={tablePaginationData}\n rowKey={rowKey}\n onChange={onChangePage}\n loading={loading}\n dataSource={dataSource}\n />\n ) : (\n <TableScrollbar>\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n {...otherProps}\n pagination={tablePaginationData}\n rowKey={rowKey}\n onChange={onChangePage}\n loading={loading}\n dataSource={dataSource}\n />\n </TableScrollbar>\n )}\n </SimpleLayout>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n 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","import { classNames } from '@dimjs/utils';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { useRef } from 'react';\nimport './style.less';\n\nexport type EditorWrapperProps = {\n onChange?: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: {\n disabled?: boolean;\n onKeyDown?: (event) => void;\n };\n // varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n /** 上传图片服务 */\n onUploadImage?: (file: File) => Promise<string>;\n className?: string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @deprecated 已过时,请使用 RichTextEditor 组件\n * @param props\n * @returns\n * ```\n * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口\n * 2. 如果不需要粘贴上传图片,可配置 editorInitParams.paste_data_images = false\n * 3. 获取富文本实例,通过editorInitParams.setup(editor)函数获取\n * 4. 可在 editorInitParams 中自定义 plugins、toolbar\n * 5. 预览富文本数据,使用 EditorViewer 组件\n *\n * ```\n */\nexport const EditorWrapper = (props: EditorWrapperProps) => {\n const editorRef = useRef<TAny>(null);\n\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 const images_upload_handler = hooks.useCallbackRef(async (blobInfo, success, failure) => {\n try {\n const respData = await props.onUploadImage?.(blobInfo.blob());\n success(respData);\n } catch (error) {\n failure(error.message);\n }\n });\n\n useKeyPress(\n () => true,\n (event) => {\n try {\n if (event.type === 'keyup' && event.key === 'Escape') {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n },\n {\n events: ['keydown', 'keyup'],\n },\n );\n\n const onKeyDown = hooks.useCallbackRef((event) => {\n try {\n if (event.keyCode == 27) {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n props.editorProps?.onKeyDown?.(event);\n });\n\n return (\n <div className={classNames('v-editor-wrapper', props.className)}>\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n paste_data_images: !!props.onUploadImage,\n images_upload_handler,\n height: props.height || 500,\n menubar: true,\n resize: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins: 'paste lists link image advlist charmap preview fullscreen code table help',\n toolbar:\n 'undo redo fullscreen preview | bold italic underline strikethrough |' +\n 'fontsizeselect formatselect |' +\n 'alignleft aligncenter alignright alignjustify |' +\n 'outdent indent | numlist bullist advlist |' +\n 'forecolor backcolor removeformat |' +\n 'code image link',\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 setup: (editor) => {\n editorRef.current = editor;\n props.editorInitParams?.setup?.(editor);\n },\n }}\n {...props.editorProps}\n onKeyDown={onKeyDown}\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 { PlusCircleOutlined } from '@ant-design/icons';\nimport { Image } from 'antd';\nimport { Fragment } from 'react';\nimport { dynamicNode } from '../../dynamic-node';\nimport { useEffectCustom } from '../../hooks/use-effect-custom';\nimport './preview.less';\n\nexport const Preview = (props) => {\n const { visible, url } = props;\n\n useEffectCustom(() => {\n if (visible) {\n dynamicNode.append({\n content: (\n <PlusCircleOutlined\n onClick={props.close}\n className=\"preview-image-popup-close\"\n twoToneColor=\"#1890ff\"\n />\n ),\n });\n } else {\n dynamicNode.remove();\n }\n }, [visible]);\n\n if (!url) return <></>;\n\n return (\n <Fragment>\n <Image\n key={url}\n style={{ left: '100px' }}\n preview={{\n className: 'preview-image-popup',\n maskStyle: { backgroundColor: 'rgba(0,0,0,0.85)' },\n visible,\n src: url,\n onVisibleChange: () => {\n props.close();\n },\n }}\n />\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { TAny } from '@flatbiz/utils';\nimport { Editor, IAllProps } from '@tinymce/tinymce-react';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { useRef, useState } from 'react';\nimport { Editor as TinyMCEEditor } from 'tinymce';\nimport { Preview } from './preview';\nimport './style.less';\n\nexport interface RichTextEditorProps extends Omit<IAllProps, 'onChange' | 'init'> {\n onChange?: (data?: string) => void;\n // value?: string;\n /** 上传图片服务 */\n onUploadImage?: (file: File) => Promise<string>;\n className?: string;\n /** 图片点击预览 */\n imgPreview?: boolean;\n init?: IAllProps['init'] & {\n /** 插件添加;自定义plugins后失效 */\n plugins_append?: string;\n /** 工具栏添加;自定义toolbar后失效 */\n toolbar_append?: string;\n };\n}\n\n/**\n * 富文本编辑器,配置参考tinymce https://www.tiny.cloud/docs/tinymce/6\n * @param props\n * @returns\n * ```\n * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口\n * 2. 获取富文本实例,通过onInit(_, editor)函数获取\n * 3. 预览富文本数据,使用 RichTextViewer 组件\n * 4. 添加其他插件使用方式,配置 init.plugins_append、init.toolbar_append\n * <RichTextEditor init={{ plugins_append: 'codesample', toolbar_append: 'codesample' }} />\n * 5. 可通过设置 init.plugins、init.toolbar 完全自定义插件、工具栏\n * 6. 其他插件\n * emoticons 表情插件\n * ```\n */\nexport const RichTextEditor = (props: RichTextEditorProps) => {\n const { onUploadImage, onChange, className, ...otherProps } = props;\n\n const editorRef = useRef<TAny>(null);\n const [previewUrl, setPreviewUrl] = useState('');\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 // const images_upload_handler = hooks.useCallbackRef(async (blobInfo: BlobInfo, progress: ProgressFn) => {\n // try {\n // const respData = await props.onUploadImage?.(blobInfo.blob());\n // success(respData);\n // } catch (error) {\n // failure(error.message);\n // }\n // });\n\n useKeyPress(\n () => true,\n (event) => {\n try {\n if (event.type === 'keyup' && event.key === 'Escape') {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n },\n {\n events: ['keydown', 'keyup'],\n },\n );\n\n const onKeyDown = hooks.useCallbackRef((event, editor: TinyMCEEditor) => {\n try {\n if (event.keyCode == 27) {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n props.onKeyDown?.(event, editor);\n });\n\n const onInit = hooks.useCallbackRef((_, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n try {\n editor.iframeElement?.contentDocument?.addEventListener(\n 'click',\n (event) => {\n if (props.imgPreview && event.target?.['tagName'] === 'IMG') {\n setPreviewUrl(event.target['src']);\n }\n },\n true,\n );\n } catch (error) {\n //\n }\n otherProps.onInit?.(_, editor);\n });\n\n const onEditorChange = hooks.useCallbackRef((a: string, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n otherProps.onEditorChange?.(a, editor);\n onChange?.(a);\n });\n\n const tinymceBaseUrl = 'https://file.40017.cn/tcsk/tinymce@6.4.1';\n\n return (\n <div className={classNames('v-editor-wrapper', className)}>\n <Editor\n // apiKey=\"ds6j8so4g3d2cycidbhgkds36q0phy1uqd9jd8bot91sfe5l\"\n tinymceScriptSrc={`${tinymceBaseUrl}/tinymce.min.js`}\n {...otherProps}\n onInit={onInit}\n onKeyDown={onKeyDown}\n onEditorChange={onEditorChange}\n init={{\n promotion: false,\n language: 'zh-Hans',\n height: 500,\n paste_data_images: onUploadImage ? true : false,\n autosave_ask_before_unload: false,\n base_url: tinymceBaseUrl,\n autoresize_bottom_margin: 0,\n images_upload_handler: async (blobInfo) => {\n try {\n const blob = blobInfo.blob();\n const file = new File([blob], blob.name, { type: blob.type });\n const respData = await onUploadImage?.(file);\n return Promise.resolve(respData as string);\n } catch (error) {\n return Promise.reject(error?.message || '图片上传异常');\n }\n },\n\n plugins:\n 'lists link image advlist charmap preview fullscreen code table help codesample ' +\n (props.init?.plugins_append || ''),\n toolbar:\n 'undo redo fullscreen preview | bold italic underline strikethrough |' +\n 'fontsize blocks |' +\n 'forecolor backcolor removeformat |' +\n 'numlist bullist advlist |' +\n 'alignleft aligncenter alignright alignjustify |' +\n 'outdent indent |' +\n 'hr image link code codesample |' +\n (props.init?.toolbar_append || ''),\n font_size_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n ...props.init,\n content_style: `img {max-width:100%;} table{width:100%} ${props.init?.content_style}`,\n }}\n />\n <Preview\n visible={!!previewUrl}\n url={previewUrl}\n close={() => {\n setPreviewUrl('');\n }}\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 { FullscreenOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { CSSProperties, ReactElement, useRef, useState } from 'react';\nimport { Editor as TinyMCEEditor } from 'tinymce';\nimport { RichTextEditor } from '../rich-text-editor';\n\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { IconWrapper } from '../icon-wrapper';\nimport './style.less';\n\ntype RichTextViewerProps = {\n value: string;\n className?: string;\n style?: CSSProperties;\n fullscreen?: boolean;\n onInit?: (editor: TinyMCEEditor) => void;\n children?: ReactElement;\n fullscreenIconTips?: string;\n};\n\n/**\n * 预览 RichTextEditor 生成的富文本数据\n * ```\n * 1. 通过 onInit 属性可获取实例:editor\n * 2. 如果高度发生变更,可执行 editor.execCommand('mceAutoResize');\n *\n * ```\n * @param props\n * @returns\n */\nexport const RichTextViewer = (props: RichTextViewerProps) => {\n const [isFixed, setIsFixed] = useState(false);\n const editorRef = useRef<TinyMCEEditor>();\n\n useKeyPress(\n () => true,\n (event) => {\n if (event.type === 'keyup' && event.key === 'Escape' && isFixed) {\n setIsFixed(false);\n }\n },\n { events: ['keydown', 'keyup'] },\n );\n\n const onChangeFixed = hooks.useCallbackRef(() => {\n setIsFixed(!isFixed);\n });\n const onInit = hooks.useCallbackRef((_, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n props.onInit?.(editor);\n });\n\n useEffectCustom(() => {\n editorRef.current?.editorCommands.execCommand('mceAutoResize');\n }, [props.value]);\n\n return (\n <div\n className={classNames('fba-editor-viewer', { 'fba-editor-viewer-fixed': isFixed }, props.className)}\n style={props.style}\n >\n {props.children}\n {props.fullscreen && props.value && (\n <div className=\"fba-editor-viewer-icon\">\n <IconWrapper\n hoverTips={props.fullscreenIconTips}\n icon={<FullscreenOutlined />}\n onClick={onChangeFixed}\n />\n </div>\n )}\n <RichTextEditor\n value={`<div style=\"overflow: hidden\">${props.value}</div>`}\n onInit={onInit}\n imgPreview\n disabled\n init={{\n plugins: 'autoresize',\n menubar: false,\n toolbar: '',\n statusbar: false,\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","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonWrapper","_useState","useState","loading","setLoading","debounceDuration","loadingPosition","hidden","otherProps","_objectWithoutPropertiesLoose","_excluded","debounceDurationNew","isUndefinedOrNull","loadingPositionNew","undefined","isLoadingLeft","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","permission","newStyle","color","disabled","Button","_extends","style","_jsxs","className","_LoadingOutlined","opacity","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","resolve","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useSafeState","initialState","setState","isMounted","useIsMounted","value","DropdownMenuWrapper","menuList","dropdownOtherProps","menuItems","setMenuItems","clsName","useId","_useState2","statusMap","setStatusMap","onConfirmtTriggerClick","event","_setStatusMap","stopPropagation","open","onConfirm","item","menuItemsNew","filter","Boolean","forEach","_statusMap$index","_statusMap$index2","text","needConfirm","confirmMessage","type","popconfirmProps","_excluded2","buttonType","nromal","key","label","_createElement","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","overlayClassName","danger","push","position","Dropdown","getPopupContainer","document","querySelector","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","split","_classNames","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","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","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","createElement","id","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","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","onInnerRequest","allState","_props$serviceConfig","requestParamsAdapter","requestResultAdapter","paramsNew","respDataNew","respList","onDataSourceChange","clearQueryCondition","$await_4","resetFields","setFieldsValue","getPaginationData","_pageSize","onResetRequest","$await_5","initialValues","getRequestParams","getFieldsValue","getEasyTableRef","onSetPaginationStatus","onFormFinish","isFull","filterFixed","paginationFixed","paginationData","showSizeChanger","showTotal","pagination","page","_onInnerRequest","_props$pagination","tableList","tableTotal","foldKeys","Pagination","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","openFold","setOpenFold","onReset","formRowChildren","formOperateColProps","htmlType","changeFolditem","_UpOutlined","marginLeft","fontSize","_DownOutlined","keyItem","onFinish","isPure","gutter","useEasyTable","ctx","resp","useEasyTablRef","getParentNodeScroll","parentNode","computedStyle","getComputedStyle","overflowY","TableScrollbar","summary","_get","_len","arguments","args","Array","_key","apply","ScrollbarSummary","_ref2","refScrollBox","refScroll","show","setShow","_useCreation","useCreation","_refScrollBox$current","getParentTable","nodeName","table","parentElement","tableBox","_useInViewport","useInViewport","inViewport","useSize","_target","clientWidth","useEventListener","_ref3","scrollLeft","_ref4","Affix","offsetBottom","height","EasyTableTable","rowKey","tablePaginationData","onChangePage","_onRequest","getUuid","hasPagination","isMacEnv","Table","scroll","x","bordered","IconWrapper","hideHoverBgColor","EditableFieldContext","createContext","editable","showEditableIcon","isCtx","EditableField","viewRender","_props$placeholderVal","placeholderValue","editRender","isEditFull","onClickEditIconPre","onClickConfirmIconPre","iconConfig","onEditCallback","onConfirmCallback","isEdit","setIsEdit","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","SelectorWrapper","showAllOption","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","String","arrayField2LabelValue","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","isBaseData","_isBoolean","viewText","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","errorList","newList","isOriginal","newErrorList","handleResponse","fileList","newFileList","hasError","_newFileList$push","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","EditorWrapper","editorRef","_","editor","getContent","respValue","images_upload_handler","blobInfo","success","failure","onUploadImage","blob","useKeyPress","_editorRef$current","editorContainer","classList","contains","_editorRef$current2","editorCommands","execCommand","events","onKeyDown","_props$editorProps","keyCode","_editorRef$current3","_editorRef$current4","editorProps","_Editor","cdnTinyMce","init","paste_data_images","menubar","resize","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","editorInitParams","setup","_props$editorInitPara","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","FormItemWrapper","Gap","inline","LabelValueLayout","labelWidth","isNumber","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","Preview","_PlusCircleOutlined","twoToneColor","Image","left","preview","maskStyle","backgroundColor","src","onVisibleChange","RichTextEditor","_props$init","_props$init2","_props$init3","previewUrl","setPreviewUrl","onInit","_editor$iframeElement","_editor$iframeElement2","iframeElement","contentDocument","addEventListener","_event$target","imgPreview","tinymceBaseUrl","Editor","tinymceScriptSrc","promotion","autosave_ask_before_unload","base_url","_file","$Try_4_Catch","reject","File","plugins_append","toolbar_append","font_size_formats","content_style","RichTextViewer","isFixed","setIsFixed","onChangeFixed","fullscreen","fullscreenIconTips","_FullscreenOutlined","statusbar","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","tableColumnExtraContentRender","handle","showData","notOverflowShowExtra","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","serialNumberCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","tooltip","_QuestionCircleOutlined","TabsWrapper","_props$isSticky","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","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","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","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","_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","_extends3","_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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"}