@flatbiz/antd 3.1.3 → 3.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/dialog-drawer.tsx","@flatbiz/antd/src/dialog/dialog-modal.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/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/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-wrapper/index.tsx","@flatbiz/antd/src/table-column/render.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './1_root.less';\nimport './2_base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Menu, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'overlay'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [visible, setVisible] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setVisible(true);\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n result.finally(() => {\n setVisible(false);\n setLoading(false);\n });\n return;\n }\n setVisible(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n void item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <Button\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </Button>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n setVisible(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n visible={visible}\n okButtonProps={{\n loading,\n }}\n >\n <Button\n size=\"small\"\n {...otherProps}\n onClick={onConfirmtTriggerClick}\n type={buttonType}\n danger\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItems.push(confirm);\n } else {\n menuItems.push(nromal);\n }\n });\n\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n overlay={<Menu items={menuItems} />}\n onVisibleChange={(_visible) => {\n console.log(visible);\n if (!_visible) {\n setVisible(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中使用ReactElement类型\n * 1. 一般为antd Button组件,可设置type=link,会有设置的hover效果\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\n split?: boolean;\n}\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!hasPermission(item.permission)) {\n return false;\n }\n return !item.hidden;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item.isFold;\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item.isFold;\n }) as ButtonOperateItem[];\n\n return [...filterList].map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\n }, [operateList]);\n\n const size = !props.split ? toArray<number>(props.size)[0] || 10 : 0;\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n if (isValidElement(item)) return item;\n const { text, color, onClick, needConfirm, confirmMessage, style, popconfirmProps, ...otherProps } =\n item;\n const newStyle =\n color && !otherProps.disabled\n ? {\n '--ant-primary-color': item.color,\n '--ant-primary-color-hover': item.color,\n '--ant-primary-color-active': item.color,\n ...style,\n }\n : style;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onVisibleChange={(_visible) => {\n if (!_visible) {\n setLoading(false);\n }\n }}\n >\n <Button {...otherProps} onClick={undefined} type={type} danger style={newStyle}>\n {text}\n </Button>\n </Popconfirm>\n );\n }\n return (\n <Button {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </Button>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n split: true,\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick: (e) => Promise<void> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n\n const debounceDuration = isUndefinedOrNull(props.debounceDuration) ? 500 : props.debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDuration);\n\n if (!hasPermission(props.name)) {\n return null;\n }\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value: string | number, selectedList: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const { serviceConfig, modelKey, fieldNames, isDynamicLoad, requestMessageConfig, ...otherProps } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n />\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return moment(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment, { Moment } from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<moment.Moment>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [Moment | null, Moment | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { FormItemNamePath } from '../types';\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: Omit<DateRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_date_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const DateRangePickerWrapperFormItem = (props: DateRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","export const bodyAppendDivElement = () => {\n const div = document.createElement('div');\n const id = `id_${Date.now()}`;\n div.setAttribute('id', id);\n document.body.append(div);\n return {\n divElement: div,\n elementId: id,\n };\n};\n\nexport const removeBodyChild = (element: string) => {\n try {\n document.body.removeChild(document.querySelector(element) as Node);\n } catch (error) {\n //\n }\n};\n\nexport interface BodyAppendDivElementProps {\n divElement: HTMLDivElement;\n elementId: string;\n}\n","import { isPromise } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, 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 { isPromise } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n className,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n centered={true}\n destroyOnClose\n {...otherProps}\n className={classNames('dialog-modal', className)}\n visible={visible}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationOldProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * @deprecated 请使用【dialogDrawer】组件替换\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper = (props: DrawerFormProps) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n/**\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['value']) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n if (state.requestStatus === 'request-error' || state.requestStatus === 'request-progress') {\n return [];\n }\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList || []);\n }, [allOptionConfig, state.requestStatus, stateSelectorList]);\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {(selectorAllList || []).map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid?: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n setUploadList(\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n };\n }),\n );\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = (\n props.onRequestResultAdapter ? props.onRequestResultAdapter(respData.data) : respData.data\n ) as TPlainObject;\n result[fieldNames.uid] = result[fieldNames.uid] || info.file.uid;\n result[fieldNames.name] = result[fieldNames.name] || info.file.name;\n if (props.maxCount === 1) {\n onChange?.([result]);\n } else {\n onChange?.((value || []).concat(result));\n }\n } else {\n if (onUploadError) {\n onUploadError(respData.message as string);\n } else {\n void message.error((respData.message as string) || '上传操作失败...');\n }\n fileList[fileList.length - 1] = {\n ...fileList[fileList.length - 1],\n status: 'error',\n };\n }\n props.onUploadChange?.(info);\n // 此处不执行 setUploadList([...fileList]);\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n }) => ReactElement | null;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, renderMiddleware, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n const tableRowName = [props.name, record.name];\n const completeName = columnItem.dataIndex ? [...tableRowName, columnItem.dataIndex] : tableRowName;\n const customRender = renderMiddleware?.({\n name: completeName,\n tableRowIndex: record.name,\n operation: record.operation,\n tableRowName,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","export const editorTemplates = {\n block: {\n title: '块级卡片',\n description: '块级卡片',\n content: `<div style=\"{$varStyle} background-color:var(--editor-card-bgcolor);padding: 5px 20px;border-radius: 2px;color:#555\">\n <p>#自定义内容</p>\n </div><p></p>`,\n },\n primary_p: {\n title: 'primary_p',\n description: 'primary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-primary)\">#自定义内容</p><p></p>',\n },\n secondary_p: {\n title: 'secondary_p',\n description: 'secondary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-secondary)\">#自定义内容</p><p></p>',\n },\n warning_p: {\n title: 'warning_p',\n description: 'warning色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-warning)\">#自定义内容</p><p></p>',\n },\n danger_p: {\n title: 'danger_p',\n description: 'danger色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-danger)\">#自定义内容</p><p></p>',\n },\n success_p: {\n title: 'success_p',\n description: 'success色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-success)\">#自定义内容</p><p></p>',\n },\n p: {\n title: 'p',\n description: 'p',\n content: '<p></p>',\n },\n};\n","export type varStyles =\n | '--fa-color-primary'\n | '--fa-color-secondary'\n | '--fa-color-warning'\n | '--fa-color-danger'\n | '--fa-color-success'\n | '--editor-card-bgcolor';\n\nexport const defaultVarStyle: Record<varStyles, string> = {\n '--fa-color-primary': '#1677ff',\n '--fa-color-secondary': '#1677ff',\n '--fa-color-warning': '#ff8f1f',\n '--fa-color-danger': '#ff3141',\n '--fa-color-success': '#00b578',\n '--editor-card-bgcolor': '#f5f5f9',\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties, useMemo } from 'react';\nimport './style.less';\nimport { editorTemplates } from './template';\nimport { defaultVarStyle, varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n const varStyleString = useMemo(() => {\n const merge = { ...defaultVarStyle, ...props.varStyle };\n let varStyleString = '';\n Object.keys(merge).map((key) => {\n varStyleString += `${key}:${merge[key]};`;\n });\n return varStyleString;\n }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n templates: [\n editorTemplates.block,\n editorTemplates.primary_p,\n editorTemplates.secondary_p,\n editorTemplates.warning_p,\n editorTemplates.danger_p,\n editorTemplates.success_p,\n editorTemplates.p,\n ],\n template_replace_values: {\n varStyle: varStyleString,\n },\n template_preview_replace_values: {\n varStyle: varStyleString,\n },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { useEffect, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type FileUploadItem = {\n fileKey: string;\n fileName: string;\n};\n\ntype AntdFileUploadItem = {\n uid: string;\n name: string;\n fileKey: string;\n};\n\nexport type FileUploadProps = {\n onChange?: (value?: FileUploadItem[]) => void;\n onUploadError?: (message?: string) => void;\n value?: FileUploadItem[];\n onPreview?: (item: FileUploadItem) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n fileKey?: string;\n fileName?: string;\n };\n} & Omit<UploadProps, 'onChange' | 'fileList' | 'onPreview'>;\n\n/**\n * 文件上传,结合Form使用最佳\n * @deprecated 请使用【UploadWrapper】组件替换\n * ```\n * 接口返回结构:\n * formData上传接口必须返回fileKey值\n * {\n * code: '0000',\n * data: {\n * fileKey: '预览文件对应的fileKey'\n * }\n * }\n * 可通过fieldNames配置接口返回值属性名称映射\n * ```\n * ```\n * 最佳使用方式:\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <FileUpload action={uploadUrl} onPreview={onPreviewFile}>\n * <Button type=\"primary\">选择文件导入</Button>\n * </FileUpload>\n * </Form.Item>\n * ```\n *\n */\nexport const FileUpload = (props: FileUploadProps) => {\n useEffectCustom(() => {\n console.error('@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换');\n }, []);\n\n const { onChange, onUploadError, onPreview, value, ...otherProps } = props;\n const [uploadValue, setUploadValue] = useState<AntdFileUploadItem[]>([]);\n const fieldNames = extend(\n {\n fileKey: 'fileKey',\n fileName: 'fileName',\n },\n props.fieldNames,\n ) as FileUploadItem;\n\n useEffect(() => {\n if (value && isArray(value)) {\n setUploadValue(\n value.map((item) => {\n return {\n uid: item['uid'] || item[fieldNames.fileKey],\n name: item[fieldNames.fileName],\n fileKey: item[fieldNames.fileKey],\n url: item[fieldNames.fileKey],\n thumbUrl: item[fieldNames.fileKey],\n };\n }),\n );\n }\n }, [fieldNames.fileKey, fieldNames.fileName, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = respData.data || {};\n const uploadItem = {\n uid: info.file.uid,\n fileName: result[fieldNames.fileName] || (info.file.name as string),\n fileKey: result[fieldNames.fileKey],\n } as FileUploadItem;\n const respValue = (value || []).concat(uploadItem);\n onChange?.(respValue as unknown as FileUploadItem[]);\n } else {\n onUploadError?.(respData.message as string);\n }\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item['uid'] || item[fieldNames.fileKey];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n onUploadError?.();\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadValue([...info.fileList]);\n props.onUploadChange?.(info);\n });\n\n const onUploadPreview = hooks.useCallbackRef((file) => {\n onPreview?.({\n fileKey: file[fieldNames.fileKey],\n fileName: file[fieldNames.fileName],\n });\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n onPreview={onUploadPreview}\n fileList={uploadValue}\n className={classNames('v-file-upload', otherProps.className)}\n >\n {props.children}\n </Upload>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={props.style}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n hidden?: boolean;\n required?: boolean;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n hidden={props.hidden}\n required={props.required}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n },\n props.className,\n );\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n 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 { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { TPlainObject } from 'packages/antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const titleClassName = classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n });\n\n const style = extend({}, props.style, { padding: props.padding, width: props.width });\n\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { arrayFindByLoosely, isUndefinedOrNull, LabelValueItem, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TTagItem = { label: string; value: string | number | boolean; color?: string };\n\nexport type TagWrapperProps = {\n labelValueList: LabelValueItem<string | number | boolean>[];\n colorList?: { value: string | number | boolean; color: string }[];\n value?: TTagItem['value'];\n // 是否强制匹配\n forceMatch?: boolean;\n};\n\n/**\n * 通过配置显示Tag效果\n * @param props\n * @returns\n * ```\n * forceMatch: 是否强制匹配(默认值true)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n *\n * 例如1:(与value匹配)\n * <TagWrapper labelValueList=[{ label: '启用', value: 1 }] colorList=[{ value: 1, color: 'red' }] value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 例如2:(与label匹配)\n * <TagWrapper labelValueList=[{ label: '启用', value: 1 }] value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 例如3:(未匹配到,显示value值)\n * <TagWrapper labelValueList=[{ label: '启用', value: 1 }] value=\"审核中\" />\n * =>\n * 审核中\n * ```\n */\nexport const TagWrapper: FC<TagWrapperProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value) || !props.labelValueList) {\n return undefined;\n }\n\n const target = props.labelValueList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n if (props.colorList) {\n const colorTarget = arrayFindByLoosely(props.colorList, target.value, 'value');\n if (colorTarget) {\n return { color: colorTarget.color, label: target.label };\n }\n }\n return { label: target.label };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: props.value };\n }, [props.colorList, props.forceMatch, props.labelValueList, props.value]);\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagWrapper.defaultProps = {\n forceMatch: true,\n};\n","import { isNumber, isObject, isPlainObject } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Tooltip } from 'antd';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagWrapper, TagWrapperProps } from '../tag-wrapper';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number) => {\n return (value: string | number) => {\n if (isUndefinedOrNull(value)) return;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny) => ButtonOperateProps) => {\n return (_value: string | number, record) => {\n const operateProps = options(record);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType) => {\n return (value: string | number) => {\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagWrapperProps['labelValueList'],\n colorList?: TagWrapperProps['colorList'],\n) => {\n return (value: string | number) => {\n return (\n <TagWrapper labelValueList={selectorList} colorList={colorList} value={value} forceMatch={false} />\n );\n };\n};\n\nconst tableColumnObjectRender = (key: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value;\n };\n};\n\nexport const tableCellRender = {\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度20个【字节】\n * ```\n * showMaxNumber: 显示最大【字节】长度\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { 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 } from '../hooks';\nimport { TimeRangePickerWrapper, TimeRangePickerWrapperProps } from '../time-range-picker-wrapper';\nimport { FormItemNamePath } from '../types';\n\nexport type TimeRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 TimeRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n timeRangePickerWrapperProps?: Omit<TimeRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_time_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const TimeRangePickerWrapperFormItem = (props: TimeRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, timeRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_time_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_time_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <TimeRangePickerWrapper {...timeRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n const isMultiple = otherProps.treeCheckable;\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n dropdownClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.dropdownClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={renderValueList as any}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: any[]): any[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","useState","visible","_useState","setVisible","loading","_useState2","setLoading","onConfirmtTriggerClick","_hooks","useCallbackRef","event","stopPropagation","onConfirm","item","result","onClick","_isPromise","finally","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","_extends","buttonType","nromal","key","label","_createElement","Button","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","console","log","ButtonOperate","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","map","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","placement","undefined","createElement","length","foldIcon","jsx","_MoreOutlined","defaultProps","ButtonWrapper","debounceDuration","isUndefinedOrNull","useDebounceClick","e","catch","error","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","useRef","curRef","current","useSafeState","initialState","setState","isMounted","useIsMounted","value","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","targetOption","$await_3","concat","onChange","values","selectList","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","CssNodeHover","cloneElement","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","onOpenChange","open","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","content","configProviderProps","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","operateGroup","jsxs","operateRenderHandle","ConfigProvider","locale","zh_CN","componentSize","space","Drawer","maskClosable","destroyOnClose","contentWrapperStyle","maxWidth","extra","footer","getContainer","dialogDrawer","_bodyAppendDivElement","ReactDOM","render","close","_window$elementId","_window","call","onAfterClose","afterClose","Modal","centered","dialogModal","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWraper","operationProps","keyboard","forceRender","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","onCompositionStart","onCompositionEnd","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListChange","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","keys","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","targetList","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","useUpdateEffect","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","_ref2","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","isNumber","_isBoolean","warn","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","targetIndex","findIndex","tempUid","splice","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","editorTemplates","primary_p","secondary_p","warning_p","danger_p","success_p","p","defaultVarStyle","EditorWrapper","_","editor","getContent","respValue","varStyleString","merge","varStyle","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","templates","template_replace_values","template_preview_replace_values","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","childrens","Children","direction","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_extends2","itemProps","newProps","FormItemCard","_classNames2","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","required","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","Gap","inline","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","LabelValueLayout","labelWidth","Descriptions","column","bordered","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","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","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","setDataSource","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","contentStyle","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","checked","tipTitle","Switch","TagWrapper","tagItem","labelValueList","colorList","colorTarget","arrayFindByLoosely","forceMatch","tableColumnTooltipRender","showMaxNumber","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","pageNo","pageSize","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableCellRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TimePickerWrapper","disabledTime","isExistValue","prototype","timeValue","setTimeValue","onChangeTime","timeString","minDateMoment","isBefore","maxDateMoment","isAfter","newDisabledTime","disabledHours","minHour","get","i","maxMinute","disabledMinutes","selectedHour","minMinute","disabledSeconds","selectedMinute","minSecond","maxSecond","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","dateStart","dateEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","list","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","Array","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","allState","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","$await_4","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/dialog-drawer.tsx","@flatbiz/antd/src/dialog/dialog-modal.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-wrapper/index.tsx","@flatbiz/antd/src/table-column/render.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './1_root.less';\nimport './2_base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Menu, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'overlay'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [visible, setVisible] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setVisible(true);\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n result.finally(() => {\n setVisible(false);\n setLoading(false);\n });\n return;\n }\n setVisible(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n void item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <Button\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </Button>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n setVisible(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n visible={visible}\n okButtonProps={{\n loading,\n }}\n >\n <Button\n size=\"small\"\n {...otherProps}\n onClick={onConfirmtTriggerClick}\n type={buttonType}\n danger\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItems.push(confirm);\n } else {\n menuItems.push(nromal);\n }\n });\n\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n overlay={<Menu items={menuItems} />}\n onVisibleChange={(_visible) => {\n console.log(visible);\n if (!_visible) {\n setVisible(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中使用ReactElement类型\n * 1. 一般为antd Button组件,可设置type=link,会有设置的hover效果\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\n split?: boolean;\n}\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!hasPermission(item.permission)) {\n return false;\n }\n return !item.hidden;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item.isFold;\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item.isFold;\n }) as ButtonOperateItem[];\n\n return [...filterList].map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\n }, [operateList]);\n\n const size = !props.split ? toArray<number>(props.size)[0] || 10 : 0;\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n if (isValidElement(item)) return item;\n const { text, color, onClick, needConfirm, confirmMessage, style, popconfirmProps, ...otherProps } =\n item;\n const newStyle =\n color && !otherProps.disabled\n ? {\n '--ant-primary-color': item.color,\n '--ant-primary-color-hover': item.color,\n '--ant-primary-color-active': item.color,\n ...style,\n }\n : style;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onVisibleChange={(_visible) => {\n if (!_visible) {\n setLoading(false);\n }\n }}\n >\n <Button {...otherProps} onClick={undefined} type={type} danger style={newStyle}>\n {text}\n </Button>\n </Popconfirm>\n );\n }\n return (\n <Button {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </Button>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n split: true,\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick: (e) => Promise<void> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n\n const debounceDuration = isUndefinedOrNull(props.debounceDuration) ? 500 : props.debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDuration);\n\n if (!hasPermission(props.name)) {\n return null;\n }\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value: string | number, selectedList: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const { serviceConfig, modelKey, fieldNames, isDynamicLoad, requestMessageConfig, ...otherProps } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n />\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return moment(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment, { Moment } from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<moment.Moment>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [Moment | null, Moment | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { FormItemNamePath } from '../types';\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: Omit<DateRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_date_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const DateRangePickerWrapperFormItem = (props: DateRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","export const bodyAppendDivElement = () => {\n const div = document.createElement('div');\n const id = `id_${Date.now()}`;\n div.setAttribute('id', id);\n document.body.append(div);\n return {\n divElement: div,\n elementId: id,\n };\n};\n\nexport const removeBodyChild = (element: string) => {\n try {\n document.body.removeChild(document.querySelector(element) as Node);\n } catch (error) {\n //\n }\n};\n\nexport interface BodyAppendDivElementProps {\n divElement: HTMLDivElement;\n elementId: string;\n}\n","import { isPromise } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, 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 { isPromise } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n className,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n centered={true}\n destroyOnClose\n {...otherProps}\n className={classNames('dialog-modal', className)}\n visible={visible}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationOldProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * @deprecated 请使用【dialogDrawer】组件替换\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper = (props: DrawerFormProps) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n/**\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['value']) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n if (state.requestStatus === 'request-error' || state.requestStatus === 'request-progress') {\n return [];\n }\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList || []);\n }, [allOptionConfig, state.requestStatus, stateSelectorList]);\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {(selectorAllList || []).map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid?: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n setUploadList(\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n };\n }),\n );\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = (\n props.onRequestResultAdapter ? props.onRequestResultAdapter(respData.data) : respData.data\n ) as TPlainObject;\n result[fieldNames.uid] = result[fieldNames.uid] || info.file.uid;\n result[fieldNames.name] = result[fieldNames.name] || info.file.name;\n if (props.maxCount === 1) {\n onChange?.([result]);\n } else {\n onChange?.((value || []).concat(result));\n }\n } else {\n if (onUploadError) {\n onUploadError(respData.message as string);\n } else {\n void message.error((respData.message as string) || '上传操作失败...');\n }\n fileList[fileList.length - 1] = {\n ...fileList[fileList.length - 1],\n status: 'error',\n };\n }\n props.onUploadChange?.(info);\n // 此处不执行 setUploadList([...fileList]);\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n }) => ReactElement | null;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, renderMiddleware, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n const tableRowName = [props.name, record.name];\n const completeName = columnItem.dataIndex ? [...tableRowName, columnItem.dataIndex] : tableRowName;\n const customRender = renderMiddleware?.({\n name: completeName,\n tableRowIndex: record.name,\n operation: record.operation,\n tableRowName,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","export const editorTemplates = {\n block: {\n title: '块级卡片',\n description: '块级卡片',\n content: `<div style=\"{$varStyle} background-color:var(--editor-card-bgcolor);padding: 5px 20px;border-radius: 2px;color:#555\">\n <p>#自定义内容</p>\n </div><p></p>`,\n },\n primary_p: {\n title: 'primary_p',\n description: 'primary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-primary)\">#自定义内容</p><p></p>',\n },\n secondary_p: {\n title: 'secondary_p',\n description: 'secondary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-secondary)\">#自定义内容</p><p></p>',\n },\n warning_p: {\n title: 'warning_p',\n description: 'warning色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-warning)\">#自定义内容</p><p></p>',\n },\n danger_p: {\n title: 'danger_p',\n description: 'danger色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-danger)\">#自定义内容</p><p></p>',\n },\n success_p: {\n title: 'success_p',\n description: 'success色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-success)\">#自定义内容</p><p></p>',\n },\n p: {\n title: 'p',\n description: 'p',\n content: '<p></p>',\n },\n};\n","export type varStyles =\n | '--fa-color-primary'\n | '--fa-color-secondary'\n | '--fa-color-warning'\n | '--fa-color-danger'\n | '--fa-color-success'\n | '--editor-card-bgcolor';\n\nexport const defaultVarStyle: Record<varStyles, string> = {\n '--fa-color-primary': '#1677ff',\n '--fa-color-secondary': '#1677ff',\n '--fa-color-warning': '#ff8f1f',\n '--fa-color-danger': '#ff3141',\n '--fa-color-success': '#00b578',\n '--editor-card-bgcolor': '#f5f5f9',\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties, useMemo } from 'react';\nimport './style.less';\nimport { editorTemplates } from './template';\nimport { defaultVarStyle, varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n const varStyleString = useMemo(() => {\n const merge = { ...defaultVarStyle, ...props.varStyle };\n let varStyleString = '';\n Object.keys(merge).map((key) => {\n varStyleString += `${key}:${merge[key]};`;\n });\n return varStyleString;\n }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n templates: [\n editorTemplates.block,\n editorTemplates.primary_p,\n editorTemplates.secondary_p,\n editorTemplates.warning_p,\n editorTemplates.danger_p,\n editorTemplates.success_p,\n editorTemplates.p,\n ],\n template_replace_values: {\n varStyle: varStyleString,\n },\n template_preview_replace_values: {\n varStyle: varStyleString,\n },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { useEffect, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type FileUploadItem = {\n fileKey: string;\n fileName: string;\n};\n\ntype AntdFileUploadItem = {\n uid: string;\n name: string;\n fileKey: string;\n};\n\nexport type FileUploadProps = {\n onChange?: (value?: FileUploadItem[]) => void;\n onUploadError?: (message?: string) => void;\n value?: FileUploadItem[];\n onPreview?: (item: FileUploadItem) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n fileKey?: string;\n fileName?: string;\n };\n} & Omit<UploadProps, 'onChange' | 'fileList' | 'onPreview'>;\n\n/**\n * 文件上传,结合Form使用最佳\n * @deprecated 请使用【UploadWrapper】组件替换\n * ```\n * 接口返回结构:\n * formData上传接口必须返回fileKey值\n * {\n * code: '0000',\n * data: {\n * fileKey: '预览文件对应的fileKey'\n * }\n * }\n * 可通过fieldNames配置接口返回值属性名称映射\n * ```\n * ```\n * 最佳使用方式:\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <FileUpload action={uploadUrl} onPreview={onPreviewFile}>\n * <Button type=\"primary\">选择文件导入</Button>\n * </FileUpload>\n * </Form.Item>\n * ```\n *\n */\nexport const FileUpload = (props: FileUploadProps) => {\n useEffectCustom(() => {\n console.error('@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换');\n }, []);\n\n const { onChange, onUploadError, onPreview, value, ...otherProps } = props;\n const [uploadValue, setUploadValue] = useState<AntdFileUploadItem[]>([]);\n const fieldNames = extend(\n {\n fileKey: 'fileKey',\n fileName: 'fileName',\n },\n props.fieldNames,\n ) as FileUploadItem;\n\n useEffect(() => {\n if (value && isArray(value)) {\n setUploadValue(\n value.map((item) => {\n return {\n uid: item['uid'] || item[fieldNames.fileKey],\n name: item[fieldNames.fileName],\n fileKey: item[fieldNames.fileKey],\n url: item[fieldNames.fileKey],\n thumbUrl: item[fieldNames.fileKey],\n };\n }),\n );\n }\n }, [fieldNames.fileKey, fieldNames.fileName, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = respData.data || {};\n const uploadItem = {\n uid: info.file.uid,\n fileName: result[fieldNames.fileName] || (info.file.name as string),\n fileKey: result[fieldNames.fileKey],\n } as FileUploadItem;\n const respValue = (value || []).concat(uploadItem);\n onChange?.(respValue as unknown as FileUploadItem[]);\n } else {\n onUploadError?.(respData.message as string);\n }\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item['uid'] || item[fieldNames.fileKey];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n onUploadError?.();\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadValue([...info.fileList]);\n props.onUploadChange?.(info);\n });\n\n const onUploadPreview = hooks.useCallbackRef((file) => {\n onPreview?.({\n fileKey: file[fieldNames.fileKey],\n fileName: file[fieldNames.fileName],\n });\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n onPreview={onUploadPreview}\n fileList={uploadValue}\n className={classNames('v-file-upload', otherProps.className)}\n >\n {props.children}\n </Upload>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={props.style}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n hidden?: boolean;\n required?: boolean;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n hidden={props.hidden}\n required={props.required}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n },\n props.className,\n );\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n 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 { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { TPlainObject } from 'packages/antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport './style.less';\n\nexport type RuleDataItem = {\n title: string | ReactElement;\n desc: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n return (\n <div className=\"v-rule-describe\">\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout direction=\"horizontal\" className=\"v-rule-describe-item-title\">\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n <FlexLayout direction=\"horizontal\" className=\"v-rule-describe-item-desc\">\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <div className=\"v-rule-describe-item-title\">{item.title}</div>\n <div className=\"v-rule-describe-item-desc\">{item.desc}</div>\n </div>\n );\n })}\n </div>\n );\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const titleClassName = classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n });\n\n const style = extend({}, props.style, { padding: props.padding, width: props.width });\n\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { arrayFindByLoosely, isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagWrapperValue = string | number | boolean;\nexport type TagWrapperDataItem = { label: string; value: TagWrapperValue; color?: string };\nexport type TagWrapperColorItem = { label: string; value: TagWrapperValue };\n\nexport type TagWrapperProps = {\n dataList: TagWrapperDataItem[];\n /**\n * 颜色配置list数据,value为code、label为色值,例如:[{ label:'red', value: 1 }]\n */\n colorList?: TagWrapperColorItem[];\n value?: TagWrapperValue;\n // 是否强制匹配,默认值false\n forceMatch?: boolean;\n};\n\n/**\n * 通过配置显示Tag效果\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1 }]\n * colorList=[{ value: 1, color: 'red' }]\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagWrapper: FC<TagWrapperProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n if (props.colorList) {\n const colorTarget = arrayFindByLoosely(props.colorList, target.value, 'value') as TagWrapperColorItem;\n if (colorTarget) {\n return { label: target.label, color: colorTarget.label };\n }\n }\n return { label: target.label, color: target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorList, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagWrapper.defaultProps = {\n forceMatch: false,\n};\n","import { isNumber, isObject, isPlainObject } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Tooltip } from 'antd';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagWrapper, TagWrapperProps } from '../tag-wrapper';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number) => {\n return (value: string | number) => {\n if (isUndefinedOrNull(value)) return;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny) => ButtonOperateProps) => {\n return (_value: string | number, record) => {\n const operateProps = options(record);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType) => {\n return (value: string | number) => {\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagWrapperProps['dataList'],\n colorList?: TagWrapperProps['colorList'],\n) => {\n return (value: string | number) => {\n return <TagWrapper dataList={selectorList} colorList={colorList} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value;\n };\n};\n\nexport const tableCellRender = {\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度20个【字节】\n * ```\n * showMaxNumber: 显示最大【字节】长度\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport 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 } from '../hooks';\nimport { TimeRangePickerWrapper, TimeRangePickerWrapperProps } from '../time-range-picker-wrapper';\nimport { FormItemNamePath } from '../types';\n\nexport type TimeRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 TimeRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n timeRangePickerWrapperProps?: Omit<TimeRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_time_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const TimeRangePickerWrapperFormItem = (props: TimeRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, timeRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_time_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_time_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <TimeRangePickerWrapper {...timeRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n const isMultiple = otherProps.treeCheckable;\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n dropdownClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.dropdownClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={renderValueList as any}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: any[]): any[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","useState","visible","_useState","setVisible","loading","_useState2","setLoading","onConfirmtTriggerClick","_hooks","useCallbackRef","event","stopPropagation","onConfirm","item","result","onClick","_isPromise","finally","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","_extends","buttonType","nromal","key","label","_createElement","Button","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","console","log","ButtonOperate","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","map","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","placement","undefined","createElement","length","foldIcon","jsx","_MoreOutlined","defaultProps","ButtonWrapper","debounceDuration","isUndefinedOrNull","useDebounceClick","e","catch","error","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","useRef","curRef","current","useSafeState","initialState","setState","isMounted","useIsMounted","value","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","targetOption","$await_3","concat","onChange","values","selectList","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","CssNodeHover","cloneElement","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","onOpenChange","open","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","content","configProviderProps","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","operateGroup","jsxs","operateRenderHandle","ConfigProvider","locale","zh_CN","componentSize","space","Drawer","maskClosable","destroyOnClose","contentWrapperStyle","maxWidth","extra","footer","getContainer","dialogDrawer","_bodyAppendDivElement","ReactDOM","render","close","_window$elementId","_window","call","onAfterClose","afterClose","Modal","centered","dialogModal","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWraper","operationProps","keyboard","forceRender","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","onCompositionStart","onCompositionEnd","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListChange","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","keys","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","targetList","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","useUpdateEffect","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","_ref2","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","isNumber","_isBoolean","warn","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","targetIndex","findIndex","tempUid","splice","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","editorTemplates","primary_p","secondary_p","warning_p","danger_p","success_p","p","defaultVarStyle","EditorWrapper","_","editor","getContent","respValue","varStyleString","merge","varStyle","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","templates","template_replace_values","template_preview_replace_values","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","childrens","Children","direction","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_extends2","itemProps","newProps","FormItemCard","_classNames2","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","required","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","Gap","inline","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","LabelValueLayout","labelWidth","Descriptions","column","bordered","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","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","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","setDataSource","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","desc","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","contentStyle","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","checked","tipTitle","Switch","TagWrapper","tagItem","colorList","colorTarget","arrayFindByLoosely","forceMatch","tableColumnTooltipRender","showMaxNumber","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","pageNo","pageSize","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableCellRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TimePickerWrapper","disabledTime","isExistValue","prototype","timeValue","setTimeValue","onChangeTime","timeString","minDateMoment","isBefore","maxDateMoment","isAfter","newDisabledTime","disabledHours","minHour","get","i","maxMinute","disabledMinutes","selectedHour","minMinute","disabledSeconds","selectedMinute","minSecond","maxSecond","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","dateStart","dateEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","list","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","Array","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","allState","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","$await_4","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}