@flatbiz/antd 3.2.2 → 3.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/hooks/use-array-change.ts","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/check-list/context.ts","@flatbiz/antd/src/check-list/utils.ts","@flatbiz/antd/src/check-list/check-list.tsx","@flatbiz/antd/src/check-list/check-list-item.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/dialog-modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/dialog-drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/easy-table/context.ts","@flatbiz/antd/src/easy-table/model.ts","@flatbiz/antd/src/easy-table/easy-table.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/easy-table/filter.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/editable-field/context.ts","@flatbiz/antd/src/editable-field/editable-field.tsx","@flatbiz/antd/src/editable-field/editable-field-provider.tsx","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/form-item-wrapper/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-action/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-list-select/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/tag-group/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './1_root.less';\nimport './2_base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick: (event: React.MouseEvent<HTMLElement>) => 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.permission)) {\n return null;\n }\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\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 { ButtonWrapper } from '../button-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中使用ReactElement类型\n * 1. 一般为antd Button组件,可设置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 <ButtonWrapper {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </ButtonWrapper>\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 { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { useRef } from 'react';\n\nexport const useArrayChange = <T>(dataList: Array<T>, forceUpdate = true) => {\n const changeListRef = useRef<Array<T>>(dataList);\n const update = hooks.useForceUpdate();\n const arrayOperate = {\n add: hooks.useCallbackRef((dataItem: T | Array<T>, isUnshift?: boolean) => {\n if (isUnshift) {\n const targetList = isArray(dataItem) ? dataItem : [dataItem];\n changeListRef.current = [...targetList, ...changeListRef.current];\n } else {\n changeListRef.current = changeListRef.current.concat(dataItem);\n }\n forceUpdate && update();\n }),\n update: hooks.useCallbackRef((index: number, dataItem: T) => {\n const target = changeListRef.current[index];\n if (target) {\n changeListRef.current[index] = { ...target, ...dataItem };\n }\n forceUpdate && update();\n }),\n delete: hooks.useCallbackRef((index: number) => {\n const deleteItem = changeListRef.current.splice(index, 1);\n forceUpdate && update();\n return deleteItem;\n }),\n resetList: hooks.useCallbackRef((dataList: Array<T>) => {\n changeListRef.current = dataList;\n forceUpdate && update();\n }),\n getList: hooks.useCallbackRef(() => {\n return changeListRef.current;\n }),\n };\n return [changeListRef.current, arrayOperate] as const;\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n","import { createCtx } from '@wove/react';\nimport { CheckListItemValue } from './types';\n\nexport const [useCheckListCtx, CheckListCtxProvider] = createCtx<{\n checkedValues: CheckListItemValue[];\n onChange: (value: CheckListItemValue, defaultChange?: boolean) => void;\n stopPropagation?: boolean;\n}>();\n","import { toArray } from '@flatbiz/utils';\nimport { CheckListItemValue, CheckListValue } from './types';\n\nexport const getValueList = (value?: CheckListValue, multiple?: boolean) => {\n if (value !== undefined) {\n const valueList = toArray<CheckListItemValue>(value);\n return multiple ? valueList : valueList.splice(0, 1);\n }\n return null;\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { ReactNode, useMemo } from 'react';\nimport { useArrayChange, useEffectCustom } from '../hooks';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport { CheckListCtxProvider } from './context';\nimport './style.less';\nimport { CheckListItemValue } from './types';\nimport { getValueList } from './utils';\n\nexport type CheckListSelectedValue<T extends 'multi' | 'radio'> = T extends 'multi'\n ? CheckListItemValue[]\n : CheckListItemValue;\n\nexport type CheckListProps<T extends 'multi' | 'radio'> = {\n multiple?: boolean;\n onChange?: (value: CheckListSelectedValue<T>, operateValue: CheckListItemValue) => void;\n onPreChange?: (value: CheckListItemValue) => Promise<void>;\n value?: CheckListSelectedValue<T>;\n defaultValue?: CheckListSelectedValue<T>;\n beforeExtra?: ReactNode;\n afterExtra?: ReactNode;\n stopPropagation?: boolean;\n required?: boolean;\n} & CommonPropsWithChildren;\n\nexport const CheckList = <T extends 'multi' | 'radio'>(props: CheckListProps<T>) => {\n const [checkedValues, arrayOperate] = useArrayChange<CheckListItemValue>([]);\n\n const valueList = useMemo(() => {\n return getValueList(props.value, props.multiple);\n }, [props.value, props.multiple]);\n\n useEffectCustom(() => {\n const current = valueList || getValueList(props.defaultValue, props.multiple);\n arrayOperate.resetList(current || []);\n }, []);\n\n hooks.useUpdateEffect(() => {\n arrayOperate.resetList(valueList || []);\n }, [valueList]);\n\n const onChange = hooks.useCallbackRef(async (value: CheckListItemValue, defaultChange) => {\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n const targetIndex = checkedValues.findIndex((temp) => temp === value);\n if (props.multiple === true) {\n if (checkedValues.length === 1 && targetIndex >= 0 && props.required) {\n return;\n }\n if (targetIndex >= 0) {\n arrayOperate.delete(targetIndex);\n } else {\n arrayOperate.add(value);\n }\n } else {\n if (targetIndex >= 0 && props.required) {\n return;\n } else {\n arrayOperate.resetList(targetIndex >= 0 ? [] : [value]);\n }\n }\n if (!defaultChange) {\n const newValues = arrayOperate.getList();\n let selectedValue;\n if (props.multiple) {\n selectedValue = newValues.length > 0 ? extend([], newValues) : undefined;\n } else {\n selectedValue = newValues.length > 0 ? newValues[0] : undefined;\n }\n props.onChange?.(selectedValue as CheckListSelectedValue<T>, value);\n }\n });\n\n return (\n <div className={classNames('check-list', props.className)} style={props.style}>\n <CheckListCtxProvider\n value={{\n onChange,\n checkedValues,\n stopPropagation: props.stopPropagation,\n }}\n >\n {props.beforeExtra}\n {props.children}\n {props.afterExtra}\n </CheckListCtxProvider>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement } from 'react';\nimport { useCheckListCtx } from './context';\nimport { CheckListItemValue } from './types';\n\nexport type CheckListItemContentProps = {\n checked?: boolean;\n disabled?: boolean;\n onClick?: (event) => void;\n className?: string;\n readonly?: boolean;\n style?: CSSProperties;\n};\n\nexport type CheckListItemProps = {\n value: CheckListItemValue;\n disabled?: boolean;\n readonly?: boolean;\n children: (data: CheckListItemContentProps) => ReactElement;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const CheckListItem = (props: CheckListItemProps) => {\n const context = useCheckListCtx();\n\n if (context === null) {\n console.error('CheckList.Item can only be used inside CheckList.');\n return null;\n }\n\n const onClick = hooks.useCallbackRef((event) => {\n if (context.stopPropagation) {\n event.stopPropagation();\n }\n if (!props.disabled) {\n context?.onChange(props.value);\n }\n });\n\n const checked = context?.checkedValues.findIndex((temp) => temp === props.value) >= 0;\n const checkedClassPrefix = 'check-list';\n\n const className = classNames(\n `${checkedClassPrefix}-item`,\n {\n [`${checkedClassPrefix}-disabled`]: props.disabled,\n [`${checkedClassPrefix}-readonly`]: props.readonly,\n [`${checkedClassPrefix}-checked`]: checked,\n },\n props.className,\n );\n\n return props.children({\n onClick,\n checked,\n disabled: props.disabled,\n readonly: props.readonly,\n className,\n style: props.style,\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return moment(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment, { Moment } from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<moment.Moment>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [Moment | null, Moment | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } 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 { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n className,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n centered={true}\n destroyOnClose\n {...otherProps}\n className={classNames('dialog-modal', className)}\n visible={visible}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './dialog-modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '关闭',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './dialog-modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelHidden: true,\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, ConfigProvider, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = (e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n };\n const operateGroup = (\n <Space>\n <Button {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </Button>\n <Button type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle} loading={loading}>\n {okText || '提交'}\n </Button>\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n return operateGroup;\n };\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Drawer\n maskClosable={true}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n extra={operatePosition === 'header' ? operateRenderHandle() : null}\n footer={operatePosition === 'footer' ? operateRenderHandle() : null}\n {...otherProps}\n visible={visible}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal } from 'antd';\nimport { CSSProperties, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useEffectCustom } from '../hooks';\nimport './loading.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogLoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogLoadingProps) => {\n const elementId = props.elementId;\n\n const [open, setOpen] = useState(true);\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n });\n\n return (\n <Modal\n maskClosable={false}\n centered={true}\n destroyOnClose\n className={classNames('v-dialog-loading', props.className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={props.divElement}\n footer={null}\n // width={120}\n closable={false}\n style={{ '--v-loading-color': 'var(--ant-primary-color)' } as CSSProperties}\n >\n <div className={classNames('v-dialog-loading-content')}>\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">{props.message || '处理中'}</div>\n </div>\n </div>\n </Modal>\n );\n};\n\nexport const dialogLoading = {\n open: (props?: DialogLoadingProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_loading_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_loading_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationOldProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * @deprecated 请使用【dialogDrawer】组件替换\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper = (props: DrawerFormProps) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useEasyTableCtx, EasyTableCtxProvider] = createCtx<{\n modelKey: string;\n onRequest: (params?: TPlainObject) => void;\n tableList: TPlainObject[];\n tableTotal: number;\n loading?: boolean;\n initialValues?: TPlainObject;\n fieldNames: TPlainObject;\n}>();\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n queryCondition: TPlainObject;\n isInit: boolean;\n};\n\ntype ModelActionParams = {\n updateFilterCondition?: Partial<ModelState['queryCondition']>;\n resetFilterCondition: void;\n updateInitStatus: void;\n};\n\nconst defaultState: ModelState = {\n queryCondition: {},\n isInit: true,\n};\n\nconst _EasyTableModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n updateFilterCondition: (params) => {\n return (state) => {\n state.queryCondition = {\n ...state.queryCondition,\n ...params,\n };\n };\n },\n resetFilterCondition: () => {\n return (state) => {\n state.queryCondition = defaultState.queryCondition;\n };\n },\n updateInitStatus: () => {\n return (state) => {\n state.isInit = false;\n };\n },\n },\n state: defaultState,\n};\n\nconst easyTableModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const easyTableModel = (key: string) => {\n if (!easyTableModels[key]) {\n easyTableModels[key] = Model(_EasyTableModel);\n }\n return easyTableModels[key];\n};\n","import { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\n\ntype EasyTableServiceConfig = {\n onRequest: (params?: TPlainObject) => Promise<TPlainObject>;\n requestParamsAdapter?: (params: TPlainObject) => TPlainObject;\n /**\n * 接口相应数据处理\n * @param params\n * ```\n * 返回数据为对象,包含两个字段\n * 1. 表格列表数据-Array\n * 2. 表格条数总数-Number\n * 其中 字段key 命名会通过 fieldNames 进行转义\n * ```\n */\n requestResultAdapter?: (params: TAny) => TPlainObject;\n};\n\nexport type EasyTableRefApi = {\n onRequest: (params?: TPlainObject) => void;\n queryCondition: TPlainObject;\n clearQueryCondition: (values?: TPlainObject) => void;\n};\n\nexport type EasyTableProps = {\n children: ReactElement | ReactElement[];\n modelKey: string;\n serviceConfig: EasyTableServiceConfig;\n initialValues?: TPlainObject;\n fieldNames?: { list?: string; total?: string; pageNo?: string; pageSize?: string };\n /** 初始化是否请求,默认值:true */\n initRequest?: boolean;\n};\n\n/**\n * 对 查询条件+表格数据 进行深度封装,内置数据交互处理\n * ```\n * 1. 需要获取查询条件、主动发起请求等可通过ref操作\n * 2. 可通过属性 initRequest 设置初始化是否请求数据\n * 3. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize\n * ```\n */\nexport const EasyTable = forwardRef<EasyTableRefApi, EasyTableProps>((props: EasyTableProps, ref) => {\n const [dataSource, setDataSource] = useState<TPlainObject[]>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n const [state, actions] = easyTableModel(props.modelKey).useStore();\n const fieldNames = {\n list: 'list',\n total: 'tatal',\n pageNo: 'pageNo',\n pageSize: 'pageSize',\n ...props.fieldNames,\n };\n\n useEffectCustom(() => {\n if (props.initRequest !== false || !state.isInit) {\n void onRequest(props.initialValues);\n }\n void actions.updateInitStatus();\n }, []);\n\n const onRequest = hooks.useCallbackRef(async (params) => {\n try {\n setLoading(true);\n const allState = await actions.updateFilterCondition(params);\n const queryCondition = cloneState(allState.queryCondition || {});\n const { requestParamsAdapter, onRequest, requestResultAdapter } = props.serviceConfig;\n const paramsNew = requestParamsAdapter ? requestParamsAdapter(queryCondition) : queryCondition;\n const respData = (await onRequest(paramsNew)) || {};\n const respDataNew = requestResultAdapter ? requestResultAdapter(respData) : respData;\n const respList = respDataNew[fieldNames.list];\n setDataSource(isArray(respList) ? respList : []);\n setTotal(respDataNew[fieldNames.total]);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void message.error(error.message);\n }\n });\n\n const clearQueryCondition = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n if (values) {\n void actions.updateFilterCondition(values);\n }\n });\n\n useImperativeHandle(ref, () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n queryCondition: state.queryCondition,\n };\n });\n\n return (\n <EasyTableCtxProvider\n value={{\n modelKey: props.modelKey,\n onRequest,\n tableList: dataSource,\n tableTotal: total,\n loading,\n initialValues: props.initialValues,\n fieldNames,\n }}\n >\n {props.children}\n </EasyTableCtxProvider>\n );\n});\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n // 栅格占位格数,不考虑响应式\n span?: number;\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * 1. 设置 span 栅格占位格数,不考虑响应式\n * 2. grid 自定义响应式网格布局\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n const span = temp.props?.span as number;\n return temp.props?.[screenType] || span || defaultGrid[screenType];\n });\n if (operateColIndex < 0) {\n return { gridList: _currentGridList, gridGroupList: [] };\n }\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { 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 { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormOperateCol, FormOperateColProps, FormRow } from '../form-grid';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n // 查询按钮配置\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n // 重置按钮配置\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\n/**\n * 过滤条件\n * @param props\n * @returns\n *\n *```\n *1. 用法1\n * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * <EasyTableFilter>\n * <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * </EasyTableFilter>\n *\n * -- 自定义网格布局 使用 FormCol组件包装 Form.Item\n * <EasyTableFilter>\n * <FormCol span={12}><Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item></FormCol>\n * </EasyTableFilter>\n *\n * -- children 可为 function\n * <EasyTableFilter>\n * {(form) => {\n * return <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * }}\n * </EasyTableFilter>\n *2. 用户2(自定义布局)\n * EasyTableFilter设置 isPure = true,FormItem无布局规则\n *3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例\n *4. 默认布局下,可通过设置 filterOperate 设置操作按钮\n *```\n */\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const [form] = Form.useForm();\n\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children);\n const easyTableCtx = useEasyTableCtx();\n const [state, actions] = easyTableModel(easyTableCtx.modelKey).useStore();\n\n const onQuery = hooks.useCallbackRef(() => {\n easyTableCtx.onRequest({\n [easyTableCtx.fieldNames.pageNo]: 1,\n ...form.getFieldsValue(),\n });\n });\n\n const onReset = hooks.useCallbackRef(async () => {\n await actions.resetFilterCondition();\n form.resetFields();\n easyTableCtx.onRequest({\n [easyTableCtx.fieldNames.pageNo]: 1,\n });\n });\n\n const formOperateColProps = {\n rightList: [\n <ButtonWrapper key=\"1\" type=\"primary\" onClick={onQuery} {...props.queryButtonProps}>\n {props.queryButtonProps?.text || '查询'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"2\" onClick={onReset} {...props.resetButtonProps}>\n {props.resetButtonProps?.text || '重置'}\n </ButtonWrapper>,\n ],\n ...props.filterOperate?.(form),\n };\n\n if (props.isPure) {\n return (\n <SimpleLayout>\n <Form\n form={form}\n initialValues={{\n ...easyTableCtx.initialValues,\n ...state.queryCondition,\n }}\n >\n {children}\n </Form>\n </SimpleLayout>\n );\n }\n\n const formRowChildren = childrens\n .map((item, index) => {\n if ((item as ReactElement).type['domTypeName'] === 'FormCol') {\n return item;\n }\n return <FormCol key={index}>{item}</FormCol>;\n })\n .concat(<FormOperateCol {...formOperateColProps} />);\n\n return (\n <SimpleLayout>\n <Form\n form={form}\n initialValues={{\n ...easyTableCtx.initialValues,\n ...state.queryCondition,\n }}\n >\n <FormRow gutter={[15, 0]}>{formRowChildren}</FormRow>\n </Form>\n </SimpleLayout>\n );\n};\n","import { getUuid, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'rowKey'> & {\n children?: ReactElement;\n /** 表格行 key 的取值 */\n rowKey: string;\n};\n\n/**\n * 表格渲染\n * @param props\n * ```\n * 1. 继承了 TableProps 可设置antd table功能\n * ```\n */\nexport const EasyTableTable = (props: EasyTableTableProps) => {\n const { children, rowKey, ...otherProps } = props;\n\n const easyTableCtx = useEasyTableCtx();\n const [state] = easyTableModel(easyTableCtx.modelKey).useStore();\n const fieldNames = easyTableCtx.fieldNames;\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n easyTableCtx.onRequest({ [fieldNames.pageSize]: data.pageSize, [fieldNames.pageNo]: data.current });\n props.onChange?.(data, ...otherProps);\n };\n\n const dataSource = useMemo(() => {\n if (easyTableCtx.tableList.length === 0) {\n return [];\n }\n if (isUndefinedOrNull(easyTableCtx.tableList[0][rowKey])) {\n return easyTableCtx.tableList.map((item) => {\n item[rowKey] = getUuid();\n return item;\n });\n }\n return easyTableCtx.tableList;\n }, [easyTableCtx.tableList, rowKey]);\n\n return (\n <SimpleLayout>\n {children ? <SimpleLayout>{children}</SimpleLayout> : null}\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n pagination={{\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo],\n pageSize: state.queryCondition[fieldNames.pageSize],\n total: easyTableCtx.tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n }}\n {...otherProps}\n rowKey={rowKey}\n onChange={onChangePage}\n loading={easyTableCtx.loading}\n dataSource={dataSource}\n />\n </SimpleLayout>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n },\n props.className,\n );\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { createContext } from 'react';\n\nexport type EditableFieldContextContextApi = {\n editable: boolean;\n showEditableIcon: boolean;\n isCtx: boolean;\n};\n\nexport const EditableFieldContext = createContext<EditableFieldContextContextApi>({\n editable: false,\n showEditableIcon: false,\n isCtx: false,\n});\n","import { CheckOutlined, CloseOutlined, EditOutlined } from '@ant-design/icons';\nimport { isArray, isNumber, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Space } from 'antd';\nimport { isValidElement, ReactElement, ReactNode, useContext, useEffect, useRef, useState } from 'react';\nimport { IconWrapper } from '../icon-wrapper';\n\nimport { EditableFieldContext } from './context';\nimport './style.less';\n\nexport interface EditableFieldProps {\n className?: string;\n editRender: ReactElement | ((data: { value?: TAny; onChange?: (data?: TAny) => void }) => ReactElement);\n viewRender?: (value?: TAny) => ReactNode;\n value?: TAny;\n onChange?: (data?: TAny) => void;\n placeholderValue?: string;\n /** edit 区域是否铺满,editableIcon=false 无效 */\n isEditFull?: boolean;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否显示编辑、确认、取消操作icon,默认值:true */\n showEditableIcon?: boolean;\n /** 点击编辑按钮,操作前,返回reject不会开启编辑效果 */\n onClickEditIconPre?: (value?: TAny) => Promise<void>;\n onEditCallback?: (value?: TAny) => void;\n /** 点击确定按钮,操作前,返回reject不会执行确定功能 */\n onClickConfirmIconPre?: (value?: TAny, preValue?: TAny) => Promise<void>;\n onConfirmCallback?: (value?: TAny, preValue?: TAny) => void;\n /** 组件操作Icon配置 */\n iconConfig?: {\n editIcon?: (options: { onClick: () => void }) => ReactElement;\n confirmIcon?: (options: { onClick: () => void }) => ReactElement;\n cancelIcon?: (options: { onClick: () => void }) => ReactElement;\n };\n}\n\n/**\n * 可编辑字段组件\n * @param props\n * @returns\n * ```\n * 字段渲染有两种状态\n * 1. 只读:如果value类型为复杂格式,必须要通过【viewRender】来进行处理操作,转成简单数据类型\n * 2. 编辑:参数value的格式要求必须满足编辑组件入参value要求\n * 3. 可自定义编辑Icon、确定Icon、取消Icon\n * 4. 可拦截编辑操作、确定操作\n * ```\n */\nexport const EditableField = (props: EditableFieldProps) => {\n const {\n value,\n onChange,\n viewRender,\n placeholderValue = '-',\n editRender,\n isEditFull,\n onClickEditIconPre,\n onClickConfirmIconPre,\n iconConfig,\n onEditCallback,\n onConfirmCallback,\n } = props;\n const [isEdit, setIsEdit] = useState<boolean>(false);\n const ctx = useContext(EditableFieldContext);\n const originalValue = useRef<TAny>(value);\n\n const showEditableIcon = (function () {\n if (ctx.isCtx) {\n return props.showEditableIcon === undefined ? ctx.showEditableIcon : props.showEditableIcon;\n }\n return props.showEditableIcon === undefined ? true : props.showEditableIcon;\n })();\n\n const editable = (function () {\n if (ctx.isCtx) {\n return props.editable === undefined ? ctx.editable : props.editable;\n }\n return props.editable || false;\n })();\n\n useEffect(() => {\n setIsEdit(editable);\n }, [editable]);\n\n const onClickEditIcon = async () => {\n if (onClickEditIconPre) {\n await onClickEditIconPre(value);\n }\n originalValue.current = value;\n setIsEdit(true);\n onEditCallback?.(value);\n };\n\n const editIcon = iconConfig?.editIcon ? (\n iconConfig.editIcon({ onClick: onClickEditIcon })\n ) : (\n <IconWrapper size=\"small\" icon={<EditOutlined />} onClick={onClickEditIcon} />\n );\n\n if (!isEdit) {\n const viewValue = (viewRender ? viewRender(props.value) : props.value) || placeholderValue;\n if (\n isString(viewValue) ||\n isNumber(viewValue) ||\n isUndefinedOrNull(viewValue) ||\n isValidElement(viewValue)\n ) {\n if (!showEditableIcon) {\n return viewValue;\n }\n return (\n <Space size={8}>\n <span>{viewValue}</span>\n {editIcon}\n </Space>\n );\n }\n console.warn('对象作为React子对象无效', viewValue);\n }\n\n const onCancel = () => {\n if (value !== originalValue.current) {\n props.onChange?.(originalValue.current);\n }\n setIsEdit(false);\n };\n\n const onEditChange = (value) => {\n let target = value;\n /** 为了处理 Input、TextArea等onChange取值 */\n if (typeof value === 'object' && !isArray(value) && value.target) {\n target = value.target?.value;\n }\n onChange?.(target);\n };\n\n const onOk = async () => {\n if (onClickConfirmIconPre) {\n await onClickConfirmIconPre(value, originalValue.current);\n }\n setIsEdit(false);\n onConfirmCallback?.(value, originalValue.current);\n };\n\n const editRenderElement = isValidElement(editRender)\n ? editRender\n : editRender({ value: value, onChange: onEditChange });\n\n if (!showEditableIcon) {\n return <editRenderElement.type value={value} onChange={onEditChange} {...editRenderElement.props} />;\n }\n\n const confirmIcon = iconConfig?.confirmIcon ? (\n iconConfig.confirmIcon({ onClick: onOk })\n ) : (\n <IconWrapper\n size=\"small\"\n icon={<CheckOutlined style={{ color: 'var(--ant-primary-color)' }} />}\n onClick={onOk}\n />\n );\n\n const cancelIcon = iconConfig?.cancelIcon ? (\n iconConfig.cancelIcon({ onClick: onCancel })\n ) : (\n <IconWrapper\n size=\"small\"\n icon={<CloseOutlined style={{ color: 'var(--ant-primary-color)' }} />}\n onClick={onCancel}\n />\n );\n\n return (\n <Space\n direction=\"horizontal\"\n size={12}\n style={{ display: 'flex', paddingRight: 6 }}\n className={classNames({ 'editable-field-full': isEditFull }, props.className)}\n >\n <editRenderElement.type value={value} onChange={onEditChange} {...editRenderElement.props} />\n {confirmIcon}\n {cancelIcon}\n </Space>\n );\n};\n","import { ReactElement } from 'react';\nimport { EditableFieldContext } from './context';\n\nexport interface EditableFieldProviderProps {\n children: ReactElement;\n editable?: boolean;\n showEditableIcon?: boolean;\n}\n\n/**\n * EditableFieldProvider 控制内部使有的 EditableField 状态\n * @param props\n * @returns\n */\nexport const EditableFieldProvider = (props: EditableFieldProviderProps) => {\n const editable = props.editable === undefined ? true : props.editable;\n const showEditableIcon = props.showEditableIcon === undefined ? false : props.showEditableIcon;\n\n return (\n <EditableFieldContext.Provider value={{ editable, isCtx: true, showEditableIcon }}>\n {props.children}\n </EditableFieldContext.Provider>\n );\n};\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 2. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\n * 2. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = (props: SelectorWrapperProps) => {\n const {\n serviceConfig,\n showAllOption,\n onSelectorListChange,\n onSelectorListAllChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList: outerSelectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const serviceRequestParams = useMemo(() => serviceConfig?.params || {}, [serviceConfig?.params]);\n const hasServiceRequestParams = useMemo(() => {\n return serviceRequestParams && Object.keys(serviceRequestParams).length > 0;\n }, [serviceRequestParams]);\n\n const [loading, setLoading] = useState(false);\n // 将params排序后转成字符串\n const serviceRequestParamsStringify = useMemo(() => {\n try {\n if (hasServiceRequestParams) {\n const sortDataStringify = JSON.stringify(json.sort(serviceRequestParams));\n if (sortDataStringify === '{}') {\n return undefined;\n }\n return sortDataStringify;\n }\n } catch (error) {}\n return undefined;\n }, [hasServiceRequestParams, serviceRequestParams]);\n\n const prevServiceRequestParamsStringify = usePrevious(serviceRequestParamsStringify);\n\n const isSearch = operateType === 'search';\n\n const hasOuterSelectorList = props.hasOwnProperty('selectorList');\n\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n\n const requestPreKey = `__selector_wraapper_request_progress_${modelKey}`;\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = useMemo(() => {\n return { label: 'label', value: 'value', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames } as LabelValueItem<string>;\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n [optionsItemLabelField]: isTrue ? '全部' : showAllOption.label,\n [optionsItemValueField]: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [optionsItemLabelField, optionsItemValueField, showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple', 'tags']);\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, labelInValueFieldNamesMerge.value);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, labelInValueFieldNamesMerge, value]);\n\n const stateSelectorList = useMemo(() => {\n if (isSearch) {\n return arrayFind(state.requestRespCacheData, 'search', 'request')?.response;\n }\n return state.requestRespCacheData.find((item) => item.request === serviceRequestParamsStringify)\n ?.response;\n }, [isSearch, serviceRequestParamsStringify, state.requestRespCacheData]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig?.onRequestResultAdapter\n ? serviceConfig?.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = async (inputValue?: string, searchId?: string | number) => {\n try {\n setLoading(true);\n const params = serviceRequestParams || {};\n void actions.changeRequestStatus('request-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await serviceConfig?.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n\n if (isSearch) {\n void actions.onSearchRequestRespHandle(respAdapterData);\n } else {\n void actions.onRequestRespHandle({\n respData: respAdapterData,\n requestStringify: serviceRequestParamsStringify,\n });\n }\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n // void message.error(error.message || '获取数据异常');\n onSelectorRequestError?.(error);\n }\n };\n\n const serviceRequest = {\n hasProcessRequest: () => {\n const process = window[requestPreKey];\n if (serviceRequestParamsStringify) {\n if (isArray(process) && process.includes(serviceRequestParamsStringify)) return true;\n } else {\n return !!process;\n }\n return false;\n },\n setProcessRequestStatus: () => {\n if (serviceRequestParamsStringify) {\n const cacheList = (window[requestPreKey] || []) as string;\n if (!cacheList.includes(serviceRequestParamsStringify)) {\n window[requestPreKey] = cacheList.concat(serviceRequestParamsStringify);\n }\n } else {\n window[requestPreKey] = [];\n }\n },\n };\n\n const prevRequestHandle = () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n\n // 判断相同的 params 是否已经在请求数据中,避免重复请求\n if (serviceRequest.hasProcessRequest()) {\n return;\n }\n serviceRequest.setProcessRequestStatus();\n // 去调用接口\n void startDataSourceRequest();\n };\n\n useEffectCustom(() => {\n if (hasOuterSelectorList || isSearch) return;\n if (hasServiceRequestParams) {\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys;\n if (requiredParamsKeys && requiredParamsKeys.length > 0) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return serviceRequestParams[key] === '' || isUndefinedOrNull(serviceRequestParams[key]);\n });\n if (isEmpty) {\n if (stateSelectorList && stateSelectorList.length > 0) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n window[requestPreKey] = undefined;\n void actions.resetSelectorList({\n selectorList: [],\n requestStatus: 'no-dependencies-params',\n });\n } else {\n void actions.changeRequestStatus('no-dependencies-params');\n }\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n props.onChange?.(undefined);\n }\n return;\n }\n }\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n if (stateSelectorList === undefined) {\n prevRequestHandle();\n }\n }, [serviceRequestParams]);\n\n hooks.useUpdateEffect(() => {\n if (state.setSelectorListCount > 1) {\n // 第一次不调用\n onSelectorListChange?.(stateSelectorList);\n }\n onSelectorListAllChange?.(stateSelectorList);\n }, [state.setSelectorListCount]);\n\n useEffectCustom(() => {\n if (hasOuterSelectorList) {\n void actions.resetSelectorList({\n selectorList: outerSelectorList || [],\n });\n }\n }, [outerSelectorList]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectorList({\n selectorList: [],\n });\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n\n if (labelInValue) {\n const { label, value } = labelInValueFieldNamesMerge;\n const labelInValueList = selectedList.map((item) => {\n return {\n [label]: item[optionsItemLabelField],\n [value]: item[optionsItemValueField],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig[optionsItemValueField]) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n if (state.requestStatus === 'request-error' || state.requestStatus === 'request-progress') {\n return [];\n }\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList || []);\n }, [allOptionConfig, state.requestStatus, stateSelectorList]);\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {(selectorAllList || []).map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { 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 { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={props.style}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n hidden?: boolean;\n required?: boolean;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n hidden={props.hidden}\n required={props.required}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { composeProps } from '@flatbiz/utils';\nimport { Form, FormItemProps } from 'antd';\nimport { cloneElement, isValidElement, ReactElement, ReactNode } from 'react';\n\nexport interface FormItemWrapperProps extends FormItemProps {\n wrapper?: (children: ReactNode) => ReactElement;\n /** 设置wrapper后,before、after失效 */\n before?: ReactNode;\n /** 设置wrapper后,before、after失效 */\n after?: ReactNode;\n}\n\ninterface FormItemWrapperChildrenProps {\n wrapper?: FormItemWrapperProps['wrapper'];\n children: React.ReactElement;\n before?: ReactNode;\n after?: ReactNode;\n}\n\nconst FormItemWrapperChildren = (props: FormItemWrapperChildrenProps) => {\n const { wrapper, children, ...rest } = props;\n // composeProps 合并执行 Form.Item 传的 onChange 以及组件本身的方法\n const _children = cloneElement(children, composeProps(children.props, rest, true));\n if (wrapper) {\n return wrapper(_children);\n }\n if (props.before || props.after) {\n return (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {props.before ? <span style={{ marginRight: 10 }}>{props.before}</span> : null}\n <div style={{ flex: 1 }}>{children}</div>\n {props.after ? <span style={{ marginLeft: 10 }}>{props.after}</span> : null}\n </div>\n );\n }\n return _children;\n};\n\n/**\n * 对 Form.Item 的 children 增加 before、after\n * @param props\n * @returns\n */\nexport const FormItemWrapper = (props: FormItemWrapperProps) => {\n const { wrapper, children, before, after, ...rest } = props;\n\n return (\n <Form.Item {...rest}>\n {isValidElement(children) ? (\n <FormItemWrapperChildren wrapper={wrapper} before={before} after={after}>\n {children}\n </FormItemWrapperChildren>\n ) : (\n children\n )}\n </Form.Item>\n );\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { Fragment, isValidElement, ReactElement, useState } from 'react';\n\ntype onClick = (e?: React.MouseEvent<HTMLElement>) => void;\n\nexport interface ModalActionProps {\n children: ReactElement | ((data: { onClose: () => void; open: boolean }) => ReactElement);\n action?:\n | (ReactElement & { onClick?: onClick })\n | ((data: { onClick: onClick; onClose: () => void; open: boolean }) => ReactElement);\n}\n\n/**\n * 弹框 触发器\n * ```\n * <ModalAction action={<Button type=\"primary\">打开</Button>}>\n * {({ onClose }) => (\n * <Modal onOk={onClose}>xxx</Modal>\n * )}\n * </ModalAction>\n * ```\n */\nexport const ModalAction = (props: ModalActionProps) => {\n const { action, children } = props;\n\n const [open, setOpen] = useState<boolean>(false);\n\n const handleOnClick = async (e: unknown) => {\n if (isValidElement(action)) {\n const { onClick } = action.props;\n if (typeof onClick === 'function') {\n await onClick?.(e);\n }\n }\n setOpen(true);\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const childrenReactElement = isValidElement(children) ? children : children({ onClose, open });\n\n return (\n <Fragment>\n {isValidElement(action) ? (\n <action.type {...action.props} onClick={handleOnClick} />\n ) : (\n action?.({ onClick: handleOnClick, onClose, open })\n )}\n <childrenReactElement.type\n open={open}\n onClose={onClose}\n onCancel={onClose}\n {...childrenReactElement.props}\n />\n </Fragment>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { ModalOperation, ModalOperationProps } from './modal-operation';\nimport './style.less';\n\nexport type ModalFormProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n // 设置了 ModalProps footer属性后,operationProps配置将失效\n operationProps?: ModalOperationProps;\n footer?: null | React.ReactNode;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * @deprecated 请使用【dialogModal】组件替换\n * ```\n */\nexport const ModalWraper = (props: ModalFormProps) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n return (\n <Modal\n className={classNames('modal-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <div className=\"modal-wraper-content\">\n {children}\n {pageLoading && <PageLoader />}\n </div>\n {footer !== null && (\n <div className=\"modal-wraper-content-footer\">\n {footer ? footer : <ModalOperation {...operationProps} />}\n </div>\n )}\n </Modal>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n/**\n * 组件单词写错,请输入\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWraperModel('key值').useStore();\n * ```\n */\nexport const createModalWraperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","export const Page404 = () => {\n return <div className=\"v-404\">404</div>;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_160: 'form-label-160',\n label_width_170: 'form-label-170',\n label_width_180: 'form-label-180',\n label_width_190: 'form-label-190',\n label_width_200: 'form-label-200',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n label_value_vertical: 'form-label-value-vertical',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_160: 'form-item-label-160',\n label_width_170: 'form-item-label-170',\n label_width_180: 'form-item-label-180',\n label_width_190: 'form-item-label-190',\n label_width_200: 'form-item-label-200',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n label_value_vertical: 'form-item-label-value-vertical',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n return (\n <div className={classNames('v-rule-describe', props.className)}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label;\n const optionsItemValueField = fieldNames?.value;\n const optionsItemDisabledField = fieldNames?.disabled;\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagListSelectValue = string | number | boolean;\nexport type TagListSelectDataItem = { label: string; value: TagListSelectValue; color?: string };\n\nexport type TagListSelectProps = {\n dataList: TagListSelectDataItem[];\n /** 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同 */\n colorMap?: Record<string, string>;\n value?: TagListSelectValue;\n /** 是否强制匹配,默认值false */\n forceMatch?: boolean;\n};\n\n/**\n * 在列表数据中通过value匹配数据,以Tag形式展示\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagListSelect: FC<TagListSelectProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagListSelect.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagListSelect, TagListSelectProps } from '../tag-list-select';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny, index: number) => ButtonOperateProps) => {\n return (_value: string | number, record, index: number) => {\n const operateProps = options(record, index);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value || defaultValue;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagListSelectProps['dataList'],\n colorMap?: TagListSelectProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagListSelect dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容,一般为Icon */\n extra: ReactElement;\n extraPosition?: 'before' | 'after';\n onClick?: (e) => void;\n /** 是否显示原单元格数据,默认值:true */\n showData?: boolean;\n /** 溢出显示【...】, 最大长度(默认:20个字节) */\n showMaxNumber?: number;\n /** 未溢出显示【extra】配置,默认值:true */\n notOverflowShowExtra?: boolean;\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const notOverflowShowExtra = isUndefinedOrNull(options.notOverflowShowExtra)\n ? true\n : options.notOverflowShowExtra;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n\n if (options.extra && showData) {\n if (renderValue === value && !notOverflowShowExtra) {\n return value;\n }\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n return <span onClick={options.onClick}>{options.extra}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示原单元格数据,默认值:true\n * 3. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content?: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} className={className} defaultActiveKey={defaultActiveKey} onChange={onChange} />\n );\n};\n","import { Space, SpaceProps, Tag } from 'antd';\nimport { FC } from 'react';\n\ntype TagGroupDataItem = { label: string; value: string | number; color?: string };\n\nexport type TagGroupProps = {\n dataList: TagGroupDataItem[];\n /**\n * 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同\n */\n colorMap?: Record<string, string>;\n spaceProps?: SpaceProps;\n};\n\n/**\n * Tag 列表显示\n */\nexport const TagGroup: FC<TagGroupProps> = (props) => {\n return (\n <Space wrap size={5} {...props.spaceProps}>\n {props.dataList.map((item, index) => {\n const color = item.color || props.colorMap?.[item.value];\n return (\n <Tag color={color} key={index}>\n {item.label}\n </Tag>\n );\n })}\n </Space>\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport moment from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledDateConfig配置将失效\n * ```\n */\nexport const TimePickerWrapper = (props: TimePickerWrapperProps) => {\n const { onChange, disabledDateConfig, disabledTime, ...otherProps } = props;\n const isExistValue = Object.prototype.hasOwnProperty.call(props, 'value');\n const [timeValue, setTimeValue] = useState(props.value);\n\n const format = useMemo(() => {\n return props.format || 'HH:mm:ss';\n }, [props.format]) as string;\n\n const onChangeTime = hooks.useCallbackRef((date: moment.Moment | null, timeString: string) => {\n if (date) {\n if (minDateMoment && date.isBefore(minDateMoment)) timeString = minDateMoment.format(format);\n if (maxDateMoment && date.isAfter(maxDateMoment)) timeString = maxDateMoment.format(format);\n !isExistValue && setTimeValue(timeString);\n onChange?.(timeString);\n } else {\n !isExistValue && setTimeValue(undefined);\n onChange?.(undefined);\n }\n });\n\n const { minDateMoment, maxDateMoment } = useMemo(() => {\n const { minDate, maxDate } = disabledDateConfig || {};\n let minDateMoment: moment.Moment | undefined;\n let maxDateMoment: moment.Moment | undefined;\n if (minDate) minDateMoment = moment(minDate, format);\n if (maxDate) maxDateMoment = moment(maxDate, format);\n return { minDateMoment, maxDateMoment };\n }, [disabledDateConfig, format]);\n\n const newDisabledTime = useMemo(() => {\n if (disabledTime) return disabledTime;\n const disabledHours: number[] = [];\n if (minDateMoment) {\n const minHour = minDateMoment.get('hour');\n for (let i = minHour - 1; i >= 0; i--) {\n disabledHours.push(i);\n }\n }\n if (maxDateMoment) {\n const maxMinute = maxDateMoment.get('hour');\n for (let i = maxMinute + 1; i <= 23; i++) {\n disabledHours.push(i);\n }\n }\n return () => {\n return {\n disabledHours: () => disabledHours,\n disabledMinutes: (selectedHour: number) => {\n const disabledMinutes: number[] = [];\n if (minDateMoment && selectedHour <= minDateMoment.get('hour')) {\n const minMinute = minDateMoment.get('minute');\n for (let i = minMinute - 1; i >= 0; i--) {\n disabledMinutes.push(i);\n }\n }\n if (maxDateMoment && selectedHour >= maxDateMoment.get('hour')) {\n const maxMinute = maxDateMoment.get('minute');\n for (let i = maxMinute + 1; i <= 59; i++) {\n disabledMinutes.push(i);\n }\n }\n return disabledMinutes;\n },\n disabledSeconds: (selectedHour: number, selectedMinute: number) => {\n const disabledSeconds: number[] = [];\n if (\n minDateMoment &&\n selectedHour <= minDateMoment.get('hour') &&\n selectedMinute <= minDateMoment.get('minute')\n ) {\n const minSecond = minDateMoment.get('second');\n for (let i = minSecond - 1; i >= 0; i--) {\n disabledSeconds.push(i);\n }\n }\n if (\n maxDateMoment &&\n selectedHour >= maxDateMoment.get('hour') &&\n selectedMinute >= maxDateMoment.get('minute')\n ) {\n const maxSecond = maxDateMoment.get('second');\n for (let i = maxSecond + 1; i <= 59; i++) {\n disabledSeconds.push(i);\n }\n }\n return disabledSeconds;\n },\n };\n };\n }, [minDateMoment, maxDateMoment, disabledTime]);\n\n const datePickerValue = useMemo(() => {\n const value = isExistValue ? props.value : timeValue;\n if (value) {\n return moment(value, format);\n }\n return undefined;\n }, [isExistValue, props.value, timeValue, format]);\n\n return (\n <TimePicker\n {...otherProps}\n disabledTime={newDisabledTime}\n value={datePickerValue}\n onChange={onChangeTime}\n format={format}\n />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimeRangePickerProps } from 'antd';\nimport moment from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type TimeRangePickerWrapperProps = Omit<TimeRangePickerProps, 'value' | 'onChange'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * minDate、maxDate设置格式\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\nexport declare type EventValue<DateType> = DateType | null;\nexport declare type RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledDateConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledDateConfig, disabledTime, ...otherProps } = props;\n const isExistValue = Object.prototype.hasOwnProperty.call(props, 'value');\n const [timeValue, setTimeValue] = useState(props.value);\n const format = useMemo(() => {\n return props.format || 'HH:mm:ss';\n }, [props.format]) as string;\n\n const onChangeTime = hooks.useCallbackRef(\n (date: RangeValue<moment.Moment>, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n const [dateStart, dateEnd] = date;\n if (minDateMoment && dateStart && dateStart.isBefore(minDateMoment))\n timeStart = minDateMoment.format(format);\n if (maxDateMoment && dateEnd && dateEnd.isAfter(maxDateMoment))\n timeEnd = maxDateMoment.format(format);\n !isExistValue && setTimeValue([timeStart, timeEnd]);\n onChange?.([timeStart, timeEnd]);\n } else {\n !isExistValue && setTimeValue(undefined);\n onChange?.(undefined);\n }\n },\n );\n\n const { minDateMoment, maxDateMoment } = useMemo(() => {\n const { minDate, maxDate } = disabledDateConfig || {};\n let minDateMoment: moment.Moment | undefined;\n let maxDateMoment: moment.Moment | undefined;\n if (minDate) minDateMoment = moment(minDate, format);\n if (maxDate) maxDateMoment = moment(maxDate, format);\n return { minDateMoment, maxDateMoment };\n }, [disabledDateConfig, format]);\n\n const newDisabledTime = useMemo(() => {\n if (disabledTime) return disabledTime;\n const disabledHours: number[] = [];\n if (minDateMoment) {\n const minHour = minDateMoment.get('hour');\n for (let i = minHour - 1; i >= 0; i--) {\n disabledHours.push(i);\n }\n }\n if (maxDateMoment) {\n const maxMinute = maxDateMoment.get('hour');\n for (let i = maxMinute + 1; i <= 23; i++) {\n disabledHours.push(i);\n }\n }\n return () => {\n return {\n disabledHours: () => disabledHours,\n disabledMinutes: (selectedHour: number) => {\n const disabledMinutes: number[] = [];\n if (minDateMoment && selectedHour <= minDateMoment.get('hour')) {\n const minMinute = minDateMoment.get('minute');\n for (let i = minMinute - 1; i >= 0; i--) {\n disabledMinutes.push(i);\n }\n }\n if (maxDateMoment && selectedHour >= maxDateMoment.get('hour')) {\n const maxMinute = maxDateMoment.get('minute');\n for (let i = maxMinute + 1; i <= 59; i++) {\n disabledMinutes.push(i);\n }\n }\n return disabledMinutes;\n },\n disabledSeconds: (selectedHour: number, selectedMinute: number) => {\n const disabledSeconds: number[] = [];\n if (\n minDateMoment &&\n selectedHour <= minDateMoment.get('hour') &&\n selectedMinute <= minDateMoment.get('minute')\n ) {\n const minSecond = minDateMoment.get('second');\n for (let i = minSecond - 1; i >= 0; i--) {\n disabledSeconds.push(i);\n }\n }\n if (\n maxDateMoment &&\n selectedHour >= maxDateMoment.get('hour') &&\n selectedMinute >= maxDateMoment.get('minute')\n ) {\n const maxSecond = maxDateMoment.get('second');\n for (let i = maxSecond + 1; i <= 59; i++) {\n disabledSeconds.push(i);\n }\n }\n return disabledSeconds;\n },\n };\n };\n }, [minDateMoment, maxDateMoment, disabledTime]);\n\n const datePickerValue = useMemo(() => {\n const value = isExistValue ? props.value : timeValue;\n if (value && value.length > 0) {\n return [\n value[0] ? moment(value[0], format) : value[0],\n value[1] ? moment(value[1], format) : value[1],\n ] as [moment.Moment, moment.Moment];\n }\n return undefined;\n }, [isExistValue, props.value, timeValue, format]);\n\n return (\n <TimePicker.RangePicker\n {...otherProps}\n disabledTime={newDisabledTime}\n value={datePickerValue}\n onChange={onChangeTime}\n format={format}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { useEffectCustom } 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","ButtonWrapper","useState","loading","_useState","setLoading","debounceDuration","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","permission","jsx","Button","_extends","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","visible","setVisible","_useState2","onConfirmtTriggerClick","useCallbackRef","event","stopPropagation","onConfirm","item","forEach","index","text","color","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","buttonType","nromal","key","label","_createElement","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","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","_MoreOutlined","defaultProps","useArrayChange","dataList","forceUpdate","changeListRef","useRef","update","useForceUpdate","arrayOperate","add","dataItem","isUnshift","targetList","current","concat","target","delete","deleteItem","splice","resetList","getList","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useSafeState","initialState","setState","isMounted","useIsMounted","value","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","$await_3","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","_createCtx","_createCtx2","useCheckListCtx","CheckListCtxProvider","getValueList","CheckList","checkedValues","_useArrayChange","defaultValue","useUpdateEffect","defaultChange","targetIndex","newValues","selectedValue","onPreChange","$If_1","call","this","findIndex","temp","required","beforeExtra","afterExtra","CheckListItem","_classNames2","context","checked","checkedClassPrefix","readonly","CssNodeHover","cloneElement","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","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","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","ConfigProvider","locale","zh_CN","componentSize","space","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","ReactDOM","render","close","_window$elementId","_window","dialogConfirm","dialogAlert","cancelHidden","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","operateGroup","jsxs","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","footer","dialogDrawer","setOpen","closable","dialogLoading","root","createRoot","_window$elementId2","_window2","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWraper","operationProps","keyboard","forceRender","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","useEasyTableCtx","EasyTableCtxProvider","queryCondition","isInit","_EasyTableModel","updateFilterCondition","resetFilterCondition","updateInitStatus","easyTableModels","easyTableModel","EasyTable","dataSource","setDataSource","total","setTotal","_useState3","_easyTableModel$useSt","list","pageNo","pageSize","initRequest","initialValues","allState","_props$serviceConfig","requestParamsAdapter","_onRequest","requestResultAdapter","paramsNew","respDataNew","respList","clearQueryCondition","$await_4","tableList","tableTotal","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_objectWithoutPropertiesLoose","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","keys","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","currentValue","hasOperateList","find","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_temp$props2","span","itemProps","newProps","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","contentStyle","EasyTableFilter","_props$queryButtonPro","_props$resetButtonPro","childrens","Children","easyTableCtx","onQuery","getFieldsValue","onReset","_easyTableCtx$onReque","resetFields","formOperateColProps","queryButtonProps","resetButtonProps","filterOperate","isPure","formRowChildren","gutter","EasyTableTable","rowKey","onChangePage","_len","arguments","Array","_key","getUuid","Table","scroll","x","bordered","pagination","showSizeChanger","showTotal","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","EditableFieldContext","createContext","editable","showEditableIcon","isCtx","EditableField","viewRender","_props$placeholderVal","placeholderValue","editRender","isEditFull","onClickEditIconPre","onClickConfirmIconPre","iconConfig","onEditCallback","onConfirmCallback","isEdit","setIsEdit","ctx","useContext","originalValue","onClickEditIcon","editIcon","_EditOutlined","viewValue","_isNumber","warn","onEditChange","_value$target","$If_2","editRenderElement","confirmIcon","_CheckOutlined","cancelIcon","_CloseOutlined","direction","display","paddingRight","EditableFieldProvider","Provider","getEditable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","onCompositionStart","onCompositionEnd","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","_ref2","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","arrayField2LabelValue","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","isNumber","_isBoolean","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","tempUid","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","onTableAfterRender","block","_PlusOutlined","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","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","FormItemCard","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","FormItemWrapperChildren","wrapper","rest","_children","composeProps","alignItems","marginLeft","FormItemWrapper","Gap","inline","LabelValueLayout","labelWidth","Descriptions","column","ModalAction","action","handleOnClick","_onClick","childrenReactElement","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","modalModels","createModalWraperModel","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","createModalWrapperModel","PageFixedFooter","Page404","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_160","label_width_170","label_width_180","label_width_190","label_width_200","label_width_auto","label_align_left","label_align_right","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","isCancel","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","ruleItemDescStyle","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagListSelect","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","handle","showData","notOverflowShowExtra","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","isSticky","_props$isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","cacheKey","activeKey","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","get","Tabs","TagGroup","spaceProps","TimePickerWrapper","disabledTime","isExistValue","timeValue","setTimeValue","onChangeTime","timeString","minDateMoment","isBefore","maxDateMoment","isAfter","newDisabledTime","disabledHours","minHour","i","maxMinute","disabledMinutes","selectedHour","minMinute","disabledSeconds","selectedMinute","minSecond","maxSecond","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","dateStart","dateEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","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","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/hooks/use-array-change.ts","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/check-list/context.ts","@flatbiz/antd/src/check-list/utils.ts","@flatbiz/antd/src/check-list/check-list.tsx","@flatbiz/antd/src/check-list/check-list-item.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/dialog-modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/dialog-drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/easy-table/context.ts","@flatbiz/antd/src/easy-table/model.ts","@flatbiz/antd/src/easy-table/easy-table.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/easy-table/filter.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/editable-field/context.ts","@flatbiz/antd/src/editable-field/editable-field.tsx","@flatbiz/antd/src/editable-field/editable-field-provider.tsx","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/form-item-wrapper/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-action/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-list-select/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/tag-group/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './1_root.less';\nimport './2_base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick: (event: React.MouseEvent<HTMLElement>) => 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.permission)) {\n return null;\n }\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\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 { ButtonWrapper } from '../button-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中使用ReactElement类型\n * 1. 一般为antd Button组件,可设置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 <ButtonWrapper {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </ButtonWrapper>\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 { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { useRef } from 'react';\n\nexport const useArrayChange = <T>(dataList: Array<T>, forceUpdate = true) => {\n const changeListRef = useRef<Array<T>>(dataList);\n const update = hooks.useForceUpdate();\n const arrayOperate = {\n add: hooks.useCallbackRef((dataItem: T | Array<T>, isUnshift?: boolean) => {\n if (isUnshift) {\n const targetList = isArray(dataItem) ? dataItem : [dataItem];\n changeListRef.current = [...targetList, ...changeListRef.current];\n } else {\n changeListRef.current = changeListRef.current.concat(dataItem);\n }\n forceUpdate && update();\n }),\n update: hooks.useCallbackRef((index: number, dataItem: T) => {\n const target = changeListRef.current[index];\n if (target) {\n changeListRef.current[index] = { ...target, ...dataItem };\n }\n forceUpdate && update();\n }),\n delete: hooks.useCallbackRef((index: number) => {\n const deleteItem = changeListRef.current.splice(index, 1);\n forceUpdate && update();\n return deleteItem;\n }),\n resetList: hooks.useCallbackRef((dataList: Array<T>) => {\n changeListRef.current = dataList;\n forceUpdate && update();\n }),\n getList: hooks.useCallbackRef(() => {\n return changeListRef.current;\n }),\n };\n return [changeListRef.current, arrayOperate] as const;\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n","import { createCtx } from '@wove/react';\nimport { CheckListItemValue } from './types';\n\nexport const [useCheckListCtx, CheckListCtxProvider] = createCtx<{\n checkedValues: CheckListItemValue[];\n onChange: (value: CheckListItemValue, defaultChange?: boolean) => void;\n stopPropagation?: boolean;\n}>();\n","import { toArray } from '@flatbiz/utils';\nimport { CheckListItemValue, CheckListValue } from './types';\n\nexport const getValueList = (value?: CheckListValue, multiple?: boolean) => {\n if (value !== undefined) {\n const valueList = toArray<CheckListItemValue>(value);\n return multiple ? valueList : valueList.splice(0, 1);\n }\n return null;\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { ReactNode, useMemo } from 'react';\nimport { useArrayChange, useEffectCustom } from '../hooks';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport { CheckListCtxProvider } from './context';\nimport './style.less';\nimport { CheckListItemValue } from './types';\nimport { getValueList } from './utils';\n\nexport type CheckListSelectedValue<T extends 'multi' | 'radio'> = T extends 'multi'\n ? CheckListItemValue[]\n : CheckListItemValue;\n\nexport type CheckListProps<T extends 'multi' | 'radio'> = {\n multiple?: boolean;\n onChange?: (value: CheckListSelectedValue<T>, operateValue: CheckListItemValue) => void;\n onPreChange?: (value: CheckListItemValue) => Promise<void>;\n value?: CheckListSelectedValue<T>;\n defaultValue?: CheckListSelectedValue<T>;\n beforeExtra?: ReactNode;\n afterExtra?: ReactNode;\n stopPropagation?: boolean;\n required?: boolean;\n} & CommonPropsWithChildren;\n\nexport const CheckList = <T extends 'multi' | 'radio'>(props: CheckListProps<T>) => {\n const [checkedValues, arrayOperate] = useArrayChange<CheckListItemValue>([]);\n\n const valueList = useMemo(() => {\n return getValueList(props.value, props.multiple);\n }, [props.value, props.multiple]);\n\n useEffectCustom(() => {\n const current = valueList || getValueList(props.defaultValue, props.multiple);\n arrayOperate.resetList(current || []);\n }, []);\n\n hooks.useUpdateEffect(() => {\n arrayOperate.resetList(valueList || []);\n }, [valueList]);\n\n const onChange = hooks.useCallbackRef(async (value: CheckListItemValue, defaultChange) => {\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n const targetIndex = checkedValues.findIndex((temp) => temp === value);\n if (props.multiple === true) {\n if (checkedValues.length === 1 && targetIndex >= 0 && props.required) {\n return;\n }\n if (targetIndex >= 0) {\n arrayOperate.delete(targetIndex);\n } else {\n arrayOperate.add(value);\n }\n } else {\n if (targetIndex >= 0 && props.required) {\n return;\n } else {\n arrayOperate.resetList(targetIndex >= 0 ? [] : [value]);\n }\n }\n if (!defaultChange) {\n const newValues = arrayOperate.getList();\n let selectedValue;\n if (props.multiple) {\n selectedValue = newValues.length > 0 ? extend([], newValues) : undefined;\n } else {\n selectedValue = newValues.length > 0 ? newValues[0] : undefined;\n }\n props.onChange?.(selectedValue as CheckListSelectedValue<T>, value);\n }\n });\n\n return (\n <div className={classNames('check-list', props.className)} style={props.style}>\n <CheckListCtxProvider\n value={{\n onChange,\n checkedValues,\n stopPropagation: props.stopPropagation,\n }}\n >\n {props.beforeExtra}\n {props.children}\n {props.afterExtra}\n </CheckListCtxProvider>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement } from 'react';\nimport { useCheckListCtx } from './context';\nimport { CheckListItemValue } from './types';\n\nexport type CheckListItemContentProps = {\n checked?: boolean;\n disabled?: boolean;\n onClick?: (event) => void;\n className?: string;\n readonly?: boolean;\n style?: CSSProperties;\n};\n\nexport type CheckListItemProps = {\n value: CheckListItemValue;\n disabled?: boolean;\n readonly?: boolean;\n children: (data: CheckListItemContentProps) => ReactElement;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const CheckListItem = (props: CheckListItemProps) => {\n const context = useCheckListCtx();\n\n if (context === null) {\n console.error('CheckList.Item can only be used inside CheckList.');\n return null;\n }\n\n const onClick = hooks.useCallbackRef((event) => {\n if (context.stopPropagation) {\n event.stopPropagation();\n }\n if (!props.disabled) {\n context?.onChange(props.value);\n }\n });\n\n const checked = context?.checkedValues.findIndex((temp) => temp === props.value) >= 0;\n const checkedClassPrefix = 'check-list';\n\n const className = classNames(\n `${checkedClassPrefix}-item`,\n {\n [`${checkedClassPrefix}-disabled`]: props.disabled,\n [`${checkedClassPrefix}-readonly`]: props.readonly,\n [`${checkedClassPrefix}-checked`]: checked,\n },\n props.className,\n );\n\n return props.children({\n onClick,\n checked,\n disabled: props.disabled,\n readonly: props.readonly,\n className,\n style: props.style,\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return moment(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment, { Moment } from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<moment.Moment>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [Moment | null, Moment | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } 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 { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n className,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n centered={true}\n destroyOnClose\n {...otherProps}\n className={classNames('dialog-modal', className)}\n visible={visible}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './dialog-modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '关闭',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './dialog-modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelHidden: true,\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, ConfigProvider, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = (e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n setLoading(true);\n return response\n .then(() => {\n setLoading(false);\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n };\n const operateGroup = (\n <Space>\n <Button {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </Button>\n <Button type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle} loading={loading}>\n {okText || '提交'}\n </Button>\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n return operateGroup;\n };\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Drawer\n maskClosable={true}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n extra={operatePosition === 'header' ? operateRenderHandle() : null}\n footer={operatePosition === 'footer' ? operateRenderHandle() : null}\n {...otherProps}\n visible={visible}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProvider>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal } from 'antd';\nimport { CSSProperties, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useEffectCustom } from '../hooks';\nimport './loading.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogLoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogLoadingProps) => {\n const elementId = props.elementId;\n\n const [open, setOpen] = useState(true);\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n });\n\n return (\n <Modal\n maskClosable={false}\n centered={true}\n destroyOnClose\n className={classNames('v-dialog-loading', props.className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={props.divElement}\n footer={null}\n // width={120}\n closable={false}\n style={{ '--v-loading-color': 'var(--ant-primary-color)' } as CSSProperties}\n >\n <div className={classNames('v-dialog-loading-content')}>\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">{props.message || '处理中'}</div>\n </div>\n </div>\n </Modal>\n );\n};\n\nexport const dialogLoading = {\n open: (props?: DialogLoadingProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_loading_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_loading_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationOldProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * @deprecated 请使用【dialogDrawer】组件替换\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper = (props: DrawerFormProps) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useEasyTableCtx, EasyTableCtxProvider] = createCtx<{\n modelKey: string;\n onRequest: (params?: TPlainObject) => void;\n tableList: TPlainObject[];\n tableTotal: number;\n loading?: boolean;\n fieldNames: TPlainObject;\n pageSize: number;\n initRequest: boolean;\n initialValues: TPlainObject;\n onSetPaginationStatus: (status: boolean) => void;\n paginationStatus: boolean;\n}>();\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n queryCondition: TPlainObject;\n isInit: boolean;\n};\n\ntype ModelActionParams = {\n updateFilterCondition?: Partial<ModelState['queryCondition']>;\n resetFilterCondition: void;\n updateInitStatus: void;\n};\n\nconst defaultState: ModelState = {\n queryCondition: {},\n isInit: true,\n};\n\nconst _EasyTableModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n updateFilterCondition: (params) => {\n return (state) => {\n state.queryCondition = {\n ...state.queryCondition,\n ...params,\n };\n };\n },\n resetFilterCondition: () => {\n return (state) => {\n state.queryCondition = defaultState.queryCondition;\n };\n },\n updateInitStatus: () => {\n return (state) => {\n state.isInit = false;\n };\n },\n },\n state: defaultState,\n};\n\nconst easyTableModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const easyTableModel = (key: string) => {\n if (!easyTableModels[key]) {\n easyTableModels[key] = Model(_EasyTableModel);\n }\n return easyTableModels[key];\n};\n","import { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, FormInstance, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\n\ntype EasyTableServiceConfig = {\n onRequest: (params?: TPlainObject) => Promise<TPlainObject | TPlainObject[]>;\n requestParamsAdapter?: (params: TPlainObject) => TPlainObject;\n /**\n * 接口相应数据处理\n * @param params\n * ```\n * 返回数据为对象,包含两个字段\n * 1. 表格列表数据-Array\n * 2. 表格条数总数-Number\n * 其中 字段key 命名会通过 fieldNames 进行转义\n * ```\n */\n requestResultAdapter?: (params: TAny) => TPlainObject;\n};\n\nexport type EasyTableRefApi = {\n onRequest: (params?: TPlainObject) => void;\n getRequestParams: () => TPlainObject;\n clearQueryCondition: (values?: TPlainObject) => Promise<void>;\n form: FormInstance;\n onResetRequest: (params?: TPlainObject) => void;\n};\n\nexport type EasyTableProps = {\n children: ReactElement | ReactElement[];\n modelKey: string;\n serviceConfig: EasyTableServiceConfig;\n /** Form initialValues、其他接口参数 */\n initialValues?: TPlainObject;\n /** 分页初始化参数,默认值: pageSiz = 10 */\n initialPaginationParams?: { pageSize?: number };\n /** 字段映射 */\n fieldNames?: { list?: string; total?: string; pageNo?: string; pageSize?: string; uid?: string };\n /** 初始化是否请求,默认值:true */\n initRequest?: boolean;\n onDataSourceChange?: (dataSource: TAny) => void;\n};\n\n/**\n * 对 查询条件+表格数据 进行深度封装,内置数据交互处理\n * ```\n * 1. 需要获取查询条件、主动发起请求等可通过ref操作\n * 2. 可通过属性 initRequest 设置初始化是否请求数据\n * 3. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize\n * ```\n */\nexport const EasyTable = forwardRef<EasyTableRefApi, EasyTableProps>((props: EasyTableProps, ref) => {\n const [dataSource, setDataSource] = useState<TPlainObject[]>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n const [state, actions] = easyTableModel(props.modelKey).useStore();\n const pageSize = props.initialPaginationParams?.pageSize || 10;\n const initRequest = props.initRequest === undefined ? true : props.initRequest;\n const [paginationStatus, setPaginationStatus] = useState(false);\n\n const fieldNames = {\n list: 'list',\n total: 'tatal',\n pageNo: 'pageNo',\n pageSize: 'pageSize',\n ...props.fieldNames,\n };\n\n const [form] = Form.useForm();\n\n const onRequest = hooks.useCallbackRef(async (params) => {\n try {\n setLoading(true);\n const allState = await actions.updateFilterCondition(params);\n const queryCondition = cloneState(allState.queryCondition || {});\n const { requestParamsAdapter, onRequest, requestResultAdapter } = props.serviceConfig;\n const paramsNew = requestParamsAdapter ? requestParamsAdapter(queryCondition) : queryCondition;\n const respData = (await onRequest(paramsNew)) || {};\n props.onDataSourceChange?.(respData);\n const respDataNew = requestResultAdapter ? requestResultAdapter(respData) : respData;\n const respList = respDataNew[fieldNames.list];\n setDataSource(isArray(respList) ? respList : []);\n setTotal(respDataNew[fieldNames.total]);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void message.error(error.message);\n }\n });\n\n const clearQueryCondition = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (values) {\n void actions.updateFilterCondition(values);\n form.setFieldsValue(values);\n }\n });\n const onResetRequest = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (paginationStatus) {\n void onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: pageSize,\n ...props.initialValues,\n ...values,\n });\n } else {\n void onRequest({\n ...props.initialValues,\n ...values,\n });\n }\n });\n\n const getRequestParams = () => {\n return {\n ...state.queryCondition,\n ...form.getFieldsValue(),\n };\n };\n\n useImperativeHandle(ref, () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n getRequestParams,\n onResetRequest,\n form,\n };\n });\n\n const onSetPaginationStatus = (status: boolean) => {\n setPaginationStatus(status);\n };\n\n return (\n <EasyTableCtxProvider\n value={{\n modelKey: props.modelKey,\n onRequest,\n tableList: dataSource,\n tableTotal: total,\n loading,\n fieldNames,\n pageSize,\n initRequest,\n initialValues: props.initialValues || {},\n onSetPaginationStatus,\n paginationStatus,\n }}\n >\n <Form\n form={form}\n initialValues={{\n ...props.initialValues,\n ...state.queryCondition,\n }}\n >\n {props.children}\n </Form>\n </EasyTableCtxProvider>\n );\n});\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n // 栅格占位格数,不考虑响应式\n span?: number;\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * 1. 设置 span 栅格占位格数,不考虑响应式\n * 2. grid 自定义响应式网格布局\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: Array<ReactElement | null>;\n rightList?: Array<ReactElement | null>;\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = (leftList || []).filter(Boolean);\n const _rightList = (rightList || []).filter(Boolean);\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>{_leftList.map((item) => item)}</Space>\n <Space>{_rightList?.map((item) => item)}</Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n const span = temp.props?.span as number;\n return temp.props?.[screenType] || span || defaultGrid[screenType];\n });\n if (operateColIndex < 0) {\n return { gridList: _currentGridList, gridGroupList: [] };\n }\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, 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 { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormOperateCol, FormOperateColProps, FormRow } from '../form-grid';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n // 查询按钮配置\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n // 重置按钮配置\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\n/**\n * 过滤条件\n * @param props\n * @returns\n *\n *```\n *1. 用法1\n * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * <EasyTableFilter>\n * <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * </EasyTableFilter>\n *\n * -- 自定义网格布局 使用 FormCol组件包装 Form.Item\n * <EasyTableFilter>\n * <FormCol span={12}><Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item></FormCol>\n * </EasyTableFilter>\n *\n * -- children 可为 function\n * <EasyTableFilter>\n * {(form) => {\n * return <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * }}\n * </EasyTableFilter>\n *2. 用户2(自定义布局)\n * EasyTableFilter设置 isPure = true,FormItem无布局规则\n *3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例\n *4. 默认布局下,可通过设置 filterOperate 设置操作按钮\n *```\n */\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const form = Form.useFormInstance();\n const { queryButtonProps, resetButtonProps, filterOperate } = props;\n\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children);\n const { modelKey, fieldNames, onRequest, pageSize, paginationStatus, initialValues } = useEasyTableCtx();\n const [state, actions] = easyTableModel(modelKey).useStore();\n\n const onQuery = hooks.useCallbackRef(() => {\n if (paginationStatus) {\n onRequest({\n ...form.getFieldsValue(),\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSiz]: state.queryCondition.pageSize,\n });\n } else {\n onRequest(form.getFieldsValue());\n }\n });\n\n const onReset = hooks.useCallbackRef(async () => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (paginationStatus) {\n onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSiz]: pageSize,\n ...initialValues,\n });\n } else {\n onRequest(initialValues);\n }\n });\n\n const formOperateColProps = {\n rightList: [\n !queryButtonProps?.hidden ? (\n <ButtonWrapper key=\"1\" type=\"primary\" onClick={onQuery} {...queryButtonProps}>\n {queryButtonProps?.text || '查询'}\n </ButtonWrapper>\n ) : null,\n !resetButtonProps?.hidden ? (\n <ButtonWrapper key=\"2\" onClick={onReset} {...resetButtonProps}>\n {resetButtonProps?.text || '重置'}\n </ButtonWrapper>\n ) : null,\n ],\n ...filterOperate?.(form),\n };\n\n if (props.isPure) {\n return <SimpleLayout>{children}</SimpleLayout>;\n }\n\n const formRowChildren = childrens\n .map((item, index) => {\n if ((item as ReactElement).type['domTypeName'] === 'FormCol') {\n return item;\n }\n return <FormCol key={index}>{item}</FormCol>;\n })\n .concat(<FormOperateCol key={99} {...formOperateColProps} />);\n\n return (\n <SimpleLayout>\n <FormRow gutter={[15, 0]}>{formRowChildren}</FormRow>\n </SimpleLayout>\n );\n};\n","import { getUuid, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'rowKey'> & {\n children?: ReactElement;\n /** 表格行 key 的取值 */\n rowKey: string;\n};\n\n/**\n * 表格渲染\n * @param props\n * ```\n * 1. 继承了 TableProps 可设置antd table功能\n * ```\n */\nexport const EasyTableTable = (props: EasyTableTableProps) => {\n const { children, rowKey, pagination, ...otherProps } = props;\n\n const {\n modelKey,\n fieldNames,\n onRequest,\n tableList,\n initRequest,\n pageSize,\n tableTotal,\n loading,\n initialValues,\n onSetPaginationStatus,\n } = useEasyTableCtx();\n const [state, actions] = easyTableModel(modelKey).useStore();\n\n const paginationData =\n pagination == false\n ? false\n : {\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo],\n pageSize: state.queryCondition[fieldNames.pageSize],\n total: tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n ...props.pagination,\n };\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n if (paginationData) {\n onRequest({ [fieldNames.pageSize]: data.pageSize, [fieldNames.pageNo]: data.current });\n }\n props.onChange?.(data, ...otherProps);\n };\n\n const dataSource = useMemo(() => {\n if (tableList.length === 0) {\n return [];\n }\n if (isUndefinedOrNull(tableList[0][rowKey])) {\n return tableList.map((item) => {\n item[rowKey] = getUuid();\n return item;\n });\n }\n return tableList;\n }, [tableList, rowKey]);\n\n useEffectCustom(() => {\n onSetPaginationStatus(paginationData !== false);\n if (initRequest !== false || !state.isInit) {\n if (paginationData) {\n void onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: pageSize,\n ...initialValues,\n });\n } else {\n void onRequest(initialValues);\n }\n } else {\n void actions.updateFilterCondition(initialValues);\n }\n void actions.updateInitStatus();\n }, []);\n\n return (\n <SimpleLayout>\n {children ? <SimpleLayout>{children}</SimpleLayout> : null}\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n {...otherProps}\n pagination={paginationData}\n rowKey={rowKey}\n onChange={onChangePage}\n loading={loading}\n dataSource={dataSource}\n />\n </SimpleLayout>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n },\n props.className,\n );\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { createContext } from 'react';\n\nexport type EditableFieldContextContextApi = {\n editable: boolean;\n showEditableIcon: boolean;\n isCtx: boolean;\n};\n\nexport const EditableFieldContext = createContext<EditableFieldContextContextApi>({\n editable: false,\n showEditableIcon: false,\n isCtx: false,\n});\n","import { CheckOutlined, CloseOutlined, EditOutlined } from '@ant-design/icons';\nimport { isArray, isNumber, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Space } from 'antd';\nimport { isValidElement, ReactElement, ReactNode, useContext, useEffect, useRef, useState } from 'react';\nimport { IconWrapper } from '../icon-wrapper';\n\nimport { EditableFieldContext } from './context';\nimport './style.less';\n\nexport interface EditableFieldProps {\n className?: string;\n editRender: ReactElement | ((data: { value?: TAny; onChange?: (data?: TAny) => void }) => ReactElement);\n viewRender?: (value?: TAny) => ReactNode;\n value?: TAny;\n onChange?: (data?: TAny) => void;\n placeholderValue?: string;\n /** edit 区域是否铺满,editableIcon=false 无效 */\n isEditFull?: boolean;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否显示编辑、确认、取消操作icon,默认值:true */\n showEditableIcon?: boolean;\n /** 点击编辑按钮,操作前,返回reject不会开启编辑效果 */\n onClickEditIconPre?: (value?: TAny) => Promise<void>;\n onEditCallback?: (value?: TAny) => void;\n /** 点击确定按钮,操作前,返回reject不会执行确定功能 */\n onClickConfirmIconPre?: (value?: TAny, preValue?: TAny) => Promise<void>;\n onConfirmCallback?: (value?: TAny, preValue?: TAny) => void;\n /** 组件操作Icon配置 */\n iconConfig?: {\n editIcon?: (options: { onClick: () => void }) => ReactElement;\n confirmIcon?: (options: { onClick: () => void }) => ReactElement;\n cancelIcon?: (options: { onClick: () => void }) => ReactElement;\n };\n}\n\n/**\n * 可编辑字段组件\n * @param props\n * @returns\n * ```\n * 字段渲染有两种状态\n * 1. 只读:如果value类型为复杂格式,必须要通过【viewRender】来进行处理操作,转成简单数据类型\n * 2. 编辑:参数value的格式要求必须满足编辑组件入参value要求\n * 3. 可自定义编辑Icon、确定Icon、取消Icon\n * 4. 可拦截编辑操作、确定操作\n * ```\n */\nexport const EditableField = (props: EditableFieldProps) => {\n const {\n value,\n onChange,\n viewRender,\n placeholderValue = '-',\n editRender,\n isEditFull,\n onClickEditIconPre,\n onClickConfirmIconPre,\n iconConfig,\n onEditCallback,\n onConfirmCallback,\n } = props;\n const [isEdit, setIsEdit] = useState<boolean>(false);\n const ctx = useContext(EditableFieldContext);\n const originalValue = useRef<TAny>(value);\n\n const showEditableIcon = (function () {\n if (ctx.isCtx) {\n return props.showEditableIcon === undefined ? ctx.showEditableIcon : props.showEditableIcon;\n }\n return props.showEditableIcon === undefined ? true : props.showEditableIcon;\n })();\n\n const editable = (function () {\n if (ctx.isCtx) {\n return props.editable === undefined ? ctx.editable : props.editable;\n }\n return props.editable || false;\n })();\n\n useEffect(() => {\n setIsEdit(editable);\n }, [editable]);\n\n const onClickEditIcon = async () => {\n if (onClickEditIconPre) {\n await onClickEditIconPre(value);\n }\n originalValue.current = value;\n setIsEdit(true);\n onEditCallback?.(value);\n };\n\n const editIcon = iconConfig?.editIcon ? (\n iconConfig.editIcon({ onClick: onClickEditIcon })\n ) : (\n <IconWrapper size=\"small\" icon={<EditOutlined />} onClick={onClickEditIcon} />\n );\n\n if (!isEdit) {\n const viewValue = (viewRender ? viewRender(props.value) : props.value) || placeholderValue;\n if (\n isString(viewValue) ||\n isNumber(viewValue) ||\n isUndefinedOrNull(viewValue) ||\n isValidElement(viewValue)\n ) {\n if (!showEditableIcon) {\n return viewValue;\n }\n return (\n <Space size={8}>\n <span>{viewValue}</span>\n {editIcon}\n </Space>\n );\n }\n console.warn('对象作为React子对象无效', viewValue);\n }\n\n const onCancel = () => {\n if (value !== originalValue.current) {\n props.onChange?.(originalValue.current);\n }\n setIsEdit(false);\n };\n\n const onEditChange = (value) => {\n let target = value;\n /** 为了处理 Input、TextArea等onChange取值 */\n if (typeof value === 'object' && !isArray(value) && value.target) {\n target = value.target?.value;\n }\n onChange?.(target);\n };\n\n const onOk = async () => {\n if (onClickConfirmIconPre) {\n await onClickConfirmIconPre(value, originalValue.current);\n }\n setIsEdit(false);\n onConfirmCallback?.(value, originalValue.current);\n };\n\n const editRenderElement = isValidElement(editRender)\n ? editRender\n : editRender({ value: value, onChange: onEditChange });\n\n if (!showEditableIcon) {\n return <editRenderElement.type value={value} onChange={onEditChange} {...editRenderElement.props} />;\n }\n\n const confirmIcon = iconConfig?.confirmIcon ? (\n iconConfig.confirmIcon({ onClick: onOk })\n ) : (\n <IconWrapper\n size=\"small\"\n icon={<CheckOutlined style={{ color: 'var(--ant-primary-color)' }} />}\n onClick={onOk}\n />\n );\n\n const cancelIcon = iconConfig?.cancelIcon ? (\n iconConfig.cancelIcon({ onClick: onCancel })\n ) : (\n <IconWrapper\n size=\"small\"\n icon={<CloseOutlined style={{ color: 'var(--ant-primary-color)' }} />}\n onClick={onCancel}\n />\n );\n\n return (\n <Space\n direction=\"horizontal\"\n size={12}\n style={{ display: 'flex', paddingRight: 6 }}\n className={classNames({ 'editable-field-full': isEditFull }, props.className)}\n >\n <editRenderElement.type value={value} onChange={onEditChange} {...editRenderElement.props} />\n {confirmIcon}\n {cancelIcon}\n </Space>\n );\n};\n","import { ReactElement } from 'react';\nimport { EditableFieldContext } from './context';\n\nexport interface EditableFieldProviderProps {\n children: ReactElement;\n editable?: boolean;\n showEditableIcon?: boolean;\n}\n\n/**\n * EditableFieldProvider 控制内部使有的 EditableField 状态\n * @param props\n * @returns\n */\nexport const EditableFieldProvider = (props: EditableFieldProviderProps) => {\n const editable = props.editable === undefined ? true : props.editable;\n const showEditableIcon = props.showEditableIcon === undefined ? false : props.showEditableIcon;\n\n return (\n <EditableFieldContext.Provider value={{ editable, isCtx: true, showEditableIcon }}>\n {props.children}\n </EditableFieldContext.Provider>\n );\n};\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const cpLockRef = useRef(false);\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 2. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\n * 2. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = (props: SelectorWrapperProps) => {\n const {\n serviceConfig,\n showAllOption,\n onSelectorListChange,\n onSelectorListAllChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList: outerSelectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const serviceRequestParams = useMemo(() => serviceConfig?.params || {}, [serviceConfig?.params]);\n const hasServiceRequestParams = useMemo(() => {\n return serviceRequestParams && Object.keys(serviceRequestParams).length > 0;\n }, [serviceRequestParams]);\n\n const [loading, setLoading] = useState(false);\n // 将params排序后转成字符串\n const serviceRequestParamsStringify = useMemo(() => {\n try {\n if (hasServiceRequestParams) {\n const sortDataStringify = JSON.stringify(json.sort(serviceRequestParams));\n if (sortDataStringify === '{}') {\n return undefined;\n }\n return sortDataStringify;\n }\n } catch (error) {}\n return undefined;\n }, [hasServiceRequestParams, serviceRequestParams]);\n\n const prevServiceRequestParamsStringify = usePrevious(serviceRequestParamsStringify);\n\n const isSearch = operateType === 'search';\n\n const hasOuterSelectorList = props.hasOwnProperty('selectorList');\n\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n\n const requestPreKey = `__selector_wraapper_request_progress_${modelKey}`;\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = useMemo(() => {\n return { label: 'label', value: 'value', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames } as LabelValueItem<string>;\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n [optionsItemLabelField]: isTrue ? '全部' : showAllOption.label,\n [optionsItemValueField]: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [optionsItemLabelField, optionsItemValueField, showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple', 'tags']);\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, labelInValueFieldNamesMerge.value);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, labelInValueFieldNamesMerge, value]);\n\n const stateSelectorList = useMemo(() => {\n if (isSearch) {\n return arrayFind(state.requestRespCacheData, 'search', 'request')?.response;\n }\n return state.requestRespCacheData.find((item) => item.request === serviceRequestParamsStringify)\n ?.response;\n }, [isSearch, serviceRequestParamsStringify, state.requestRespCacheData]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig?.onRequestResultAdapter\n ? serviceConfig?.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = async (inputValue?: string, searchId?: string | number) => {\n try {\n setLoading(true);\n const params = serviceRequestParams || {};\n void actions.changeRequestStatus('request-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await serviceConfig?.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n\n if (isSearch) {\n void actions.onSearchRequestRespHandle(respAdapterData);\n } else {\n void actions.onRequestRespHandle({\n respData: respAdapterData,\n requestStringify: serviceRequestParamsStringify,\n });\n }\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n // void message.error(error.message || '获取数据异常');\n onSelectorRequestError?.(error);\n }\n };\n\n const serviceRequest = {\n hasProcessRequest: () => {\n const process = window[requestPreKey];\n if (serviceRequestParamsStringify) {\n if (isArray(process) && process.includes(serviceRequestParamsStringify)) return true;\n } else {\n return !!process;\n }\n return false;\n },\n setProcessRequestStatus: () => {\n if (serviceRequestParamsStringify) {\n const cacheList = (window[requestPreKey] || []) as string;\n if (!cacheList.includes(serviceRequestParamsStringify)) {\n window[requestPreKey] = cacheList.concat(serviceRequestParamsStringify);\n }\n } else {\n window[requestPreKey] = [];\n }\n },\n };\n\n const prevRequestHandle = () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n\n // 判断相同的 params 是否已经在请求数据中,避免重复请求\n if (serviceRequest.hasProcessRequest()) {\n return;\n }\n serviceRequest.setProcessRequestStatus();\n // 去调用接口\n void startDataSourceRequest();\n };\n\n useEffectCustom(() => {\n if (hasOuterSelectorList || isSearch) return;\n if (hasServiceRequestParams) {\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys;\n if (requiredParamsKeys && requiredParamsKeys.length > 0) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return serviceRequestParams[key] === '' || isUndefinedOrNull(serviceRequestParams[key]);\n });\n if (isEmpty) {\n if (stateSelectorList && stateSelectorList.length > 0) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n window[requestPreKey] = undefined;\n void actions.resetSelectorList({\n selectorList: [],\n requestStatus: 'no-dependencies-params',\n });\n } else {\n void actions.changeRequestStatus('no-dependencies-params');\n }\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n props.onChange?.(undefined);\n }\n return;\n }\n }\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n if (stateSelectorList === undefined) {\n prevRequestHandle();\n }\n }, [serviceRequestParams]);\n\n hooks.useUpdateEffect(() => {\n if (state.setSelectorListCount > 1) {\n // 第一次不调用\n onSelectorListChange?.(stateSelectorList);\n }\n onSelectorListAllChange?.(stateSelectorList);\n }, [state.setSelectorListCount]);\n\n useEffectCustom(() => {\n if (hasOuterSelectorList) {\n void actions.resetSelectorList({\n selectorList: outerSelectorList || [],\n });\n }\n }, [outerSelectorList]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectorList({\n selectorList: [],\n });\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n\n if (labelInValue) {\n const { label, value } = labelInValueFieldNamesMerge;\n const labelInValueList = selectedList.map((item) => {\n return {\n [label]: item[optionsItemLabelField],\n [value]: item[optionsItemValueField],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig[optionsItemValueField]) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n if (state.requestStatus === 'request-error' || state.requestStatus === 'request-progress') {\n return [];\n }\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList || []);\n }, [allOptionConfig, state.requestStatus, stateSelectorList]);\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {(selectorAllList || []).map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { 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 { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={props.style}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n hidden?: boolean;\n required?: boolean;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n hidden={props.hidden}\n required={props.required}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { composeProps } from '@flatbiz/utils';\nimport { Form, FormItemProps } from 'antd';\nimport { cloneElement, isValidElement, ReactElement, ReactNode } from 'react';\n\nexport interface FormItemWrapperProps extends FormItemProps {\n wrapper?: (children: ReactNode) => ReactElement;\n /** 设置wrapper后,before、after失效 */\n before?: ReactNode;\n /** 设置wrapper后,before、after失效 */\n after?: ReactNode;\n}\n\ninterface FormItemWrapperChildrenProps {\n wrapper?: FormItemWrapperProps['wrapper'];\n children: React.ReactElement;\n before?: ReactNode;\n after?: ReactNode;\n}\n\nconst FormItemWrapperChildren = (props: FormItemWrapperChildrenProps) => {\n const { wrapper, children, ...rest } = props;\n // composeProps 合并执行 Form.Item 传的 onChange 以及组件本身的方法\n const _children = cloneElement(children, composeProps(children.props, rest, true));\n if (wrapper) {\n return wrapper(_children);\n }\n if (props.before || props.after) {\n return (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {props.before ? <span style={{ marginRight: 10 }}>{props.before}</span> : null}\n <div style={{ flex: 1 }}>{children}</div>\n {props.after ? <span style={{ marginLeft: 10 }}>{props.after}</span> : null}\n </div>\n );\n }\n return _children;\n};\n\n/**\n * 对 Form.Item 的 children 增加 before、after\n * @param props\n * @returns\n */\nexport const FormItemWrapper = (props: FormItemWrapperProps) => {\n const { wrapper, children, before, after, ...rest } = props;\n\n return (\n <Form.Item {...rest}>\n {isValidElement(children) ? (\n <FormItemWrapperChildren wrapper={wrapper} before={before} after={after}>\n {children}\n </FormItemWrapperChildren>\n ) : (\n children\n )}\n </Form.Item>\n );\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { Fragment, isValidElement, ReactElement, useState } from 'react';\n\ntype onClick = (e?: React.MouseEvent<HTMLElement>) => void;\n\nexport interface ModalActionProps {\n children: ReactElement | ((data: { onClose: () => void; open: boolean }) => ReactElement);\n action?:\n | (ReactElement & { onClick?: onClick })\n | ((data: { onClick: onClick; onClose: () => void; open: boolean }) => ReactElement);\n}\n\n/**\n * 弹框 触发器\n * ```\n * <ModalAction action={<Button type=\"primary\">打开</Button>}>\n * {({ onClose }) => (\n * <Modal onOk={onClose}>xxx</Modal>\n * )}\n * </ModalAction>\n * ```\n */\nexport const ModalAction = (props: ModalActionProps) => {\n const { action, children } = props;\n\n const [open, setOpen] = useState<boolean>(false);\n\n const handleOnClick = async (e: unknown) => {\n if (isValidElement(action)) {\n const { onClick } = action.props;\n if (typeof onClick === 'function') {\n await onClick?.(e);\n }\n }\n setOpen(true);\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const childrenReactElement = isValidElement(children) ? children : children({ onClose, open });\n\n return (\n <Fragment>\n {isValidElement(action) ? (\n <action.type {...action.props} onClick={handleOnClick} />\n ) : (\n action?.({ onClick: handleOnClick, onClose, open })\n )}\n <childrenReactElement.type\n open={open}\n onClose={onClose}\n onCancel={onClose}\n {...childrenReactElement.props}\n />\n </Fragment>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { ModalOperation, ModalOperationProps } from './modal-operation';\nimport './style.less';\n\nexport type ModalFormProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n // 设置了 ModalProps footer属性后,operationProps配置将失效\n operationProps?: ModalOperationProps;\n footer?: null | React.ReactNode;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * @deprecated 请使用【dialogModal】组件替换\n * ```\n */\nexport const ModalWraper = (props: ModalFormProps) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n return (\n <Modal\n className={classNames('modal-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <div className=\"modal-wraper-content\">\n {children}\n {pageLoading && <PageLoader />}\n </div>\n {footer !== null && (\n <div className=\"modal-wraper-content-footer\">\n {footer ? footer : <ModalOperation {...operationProps} />}\n </div>\n )}\n </Modal>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n/**\n * 组件单词写错,请输入\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWraperModel('key值').useStore();\n * ```\n */\nexport const createModalWraperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","export const Page404 = () => {\n return <div className=\"v-404\">404</div>;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_160: 'form-label-160',\n label_width_170: 'form-label-170',\n label_width_180: 'form-label-180',\n label_width_190: 'form-label-190',\n label_width_200: 'form-label-200',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n label_value_vertical: 'form-label-value-vertical',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_160: 'form-item-label-160',\n label_width_170: 'form-item-label-170',\n label_width_180: 'form-item-label-180',\n label_width_190: 'form-item-label-190',\n label_width_200: 'form-item-label-200',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n label_value_vertical: 'form-item-label-value-vertical',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n return (\n <div className={classNames('v-rule-describe', props.className)}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label;\n const optionsItemValueField = fieldNames?.value;\n const optionsItemDisabledField = fieldNames?.disabled;\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagListSelectValue = string | number | boolean;\nexport type TagListSelectDataItem = { label: string; value: TagListSelectValue; color?: string };\n\nexport type TagListSelectProps = {\n dataList: TagListSelectDataItem[];\n /** 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同 */\n colorMap?: Record<string, string>;\n value?: TagListSelectValue;\n /** 是否强制匹配,默认值false */\n forceMatch?: boolean;\n};\n\n/**\n * 在列表数据中通过value匹配数据,以Tag形式展示\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagListSelect: FC<TagListSelectProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagListSelect.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagListSelect, TagListSelectProps } from '../tag-list-select';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny, index: number) => ButtonOperateProps) => {\n return (_value: string | number, record, index: number) => {\n const operateProps = options(record, index);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value || defaultValue;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagListSelectProps['dataList'],\n colorMap?: TagListSelectProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagListSelect dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容,一般为Icon */\n extra: ReactElement;\n extraPosition?: 'before' | 'after';\n onClick?: (e) => void;\n /** 是否显示原单元格数据,默认值:true */\n showData?: boolean;\n /** 溢出显示【...】, 最大长度(默认:20个字节) */\n showMaxNumber?: number;\n /** 未溢出显示【extra】配置,默认值:true */\n notOverflowShowExtra?: boolean;\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const notOverflowShowExtra = isUndefinedOrNull(options.notOverflowShowExtra)\n ? true\n : options.notOverflowShowExtra;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n\n if (options.extra && showData) {\n if (renderValue === value && !notOverflowShowExtra) {\n return value;\n }\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n return <span onClick={options.onClick}>{options.extra}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示原单元格数据,默认值:true\n * 3. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content?: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} className={className} defaultActiveKey={defaultActiveKey} onChange={onChange} />\n );\n};\n","import { Space, SpaceProps, Tag } from 'antd';\nimport { FC } from 'react';\n\ntype TagGroupDataItem = { label: string; value: string | number; color?: string };\n\nexport type TagGroupProps = {\n dataList: TagGroupDataItem[];\n /**\n * 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同\n */\n colorMap?: Record<string, string>;\n spaceProps?: SpaceProps;\n};\n\n/**\n * Tag 列表显示\n */\nexport const TagGroup: FC<TagGroupProps> = (props) => {\n return (\n <Space wrap size={5} {...props.spaceProps}>\n {props.dataList.map((item, index) => {\n const color = item.color || props.colorMap?.[item.value];\n return (\n <Tag color={color} key={index}>\n {item.label}\n </Tag>\n );\n })}\n </Space>\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport moment from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledDateConfig配置将失效\n * ```\n */\nexport const TimePickerWrapper = (props: TimePickerWrapperProps) => {\n const { onChange, disabledDateConfig, disabledTime, ...otherProps } = props;\n const isExistValue = Object.prototype.hasOwnProperty.call(props, 'value');\n const [timeValue, setTimeValue] = useState(props.value);\n\n const format = useMemo(() => {\n return props.format || 'HH:mm:ss';\n }, [props.format]) as string;\n\n const onChangeTime = hooks.useCallbackRef((date: moment.Moment | null, timeString: string) => {\n if (date) {\n if (minDateMoment && date.isBefore(minDateMoment)) timeString = minDateMoment.format(format);\n if (maxDateMoment && date.isAfter(maxDateMoment)) timeString = maxDateMoment.format(format);\n !isExistValue && setTimeValue(timeString);\n onChange?.(timeString);\n } else {\n !isExistValue && setTimeValue(undefined);\n onChange?.(undefined);\n }\n });\n\n const { minDateMoment, maxDateMoment } = useMemo(() => {\n const { minDate, maxDate } = disabledDateConfig || {};\n let minDateMoment: moment.Moment | undefined;\n let maxDateMoment: moment.Moment | undefined;\n if (minDate) minDateMoment = moment(minDate, format);\n if (maxDate) maxDateMoment = moment(maxDate, format);\n return { minDateMoment, maxDateMoment };\n }, [disabledDateConfig, format]);\n\n const newDisabledTime = useMemo(() => {\n if (disabledTime) return disabledTime;\n const disabledHours: number[] = [];\n if (minDateMoment) {\n const minHour = minDateMoment.get('hour');\n for (let i = minHour - 1; i >= 0; i--) {\n disabledHours.push(i);\n }\n }\n if (maxDateMoment) {\n const maxMinute = maxDateMoment.get('hour');\n for (let i = maxMinute + 1; i <= 23; i++) {\n disabledHours.push(i);\n }\n }\n return () => {\n return {\n disabledHours: () => disabledHours,\n disabledMinutes: (selectedHour: number) => {\n const disabledMinutes: number[] = [];\n if (minDateMoment && selectedHour <= minDateMoment.get('hour')) {\n const minMinute = minDateMoment.get('minute');\n for (let i = minMinute - 1; i >= 0; i--) {\n disabledMinutes.push(i);\n }\n }\n if (maxDateMoment && selectedHour >= maxDateMoment.get('hour')) {\n const maxMinute = maxDateMoment.get('minute');\n for (let i = maxMinute + 1; i <= 59; i++) {\n disabledMinutes.push(i);\n }\n }\n return disabledMinutes;\n },\n disabledSeconds: (selectedHour: number, selectedMinute: number) => {\n const disabledSeconds: number[] = [];\n if (\n minDateMoment &&\n selectedHour <= minDateMoment.get('hour') &&\n selectedMinute <= minDateMoment.get('minute')\n ) {\n const minSecond = minDateMoment.get('second');\n for (let i = minSecond - 1; i >= 0; i--) {\n disabledSeconds.push(i);\n }\n }\n if (\n maxDateMoment &&\n selectedHour >= maxDateMoment.get('hour') &&\n selectedMinute >= maxDateMoment.get('minute')\n ) {\n const maxSecond = maxDateMoment.get('second');\n for (let i = maxSecond + 1; i <= 59; i++) {\n disabledSeconds.push(i);\n }\n }\n return disabledSeconds;\n },\n };\n };\n }, [minDateMoment, maxDateMoment, disabledTime]);\n\n const datePickerValue = useMemo(() => {\n const value = isExistValue ? props.value : timeValue;\n if (value) {\n return moment(value, format);\n }\n return undefined;\n }, [isExistValue, props.value, timeValue, format]);\n\n return (\n <TimePicker\n {...otherProps}\n disabledTime={newDisabledTime}\n value={datePickerValue}\n onChange={onChangeTime}\n format={format}\n />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimeRangePickerProps } from 'antd';\nimport moment from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type TimeRangePickerWrapperProps = Omit<TimeRangePickerProps, 'value' | 'onChange'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * minDate、maxDate设置格式\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\nexport declare type EventValue<DateType> = DateType | null;\nexport declare type RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledDateConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledDateConfig, disabledTime, ...otherProps } = props;\n const isExistValue = Object.prototype.hasOwnProperty.call(props, 'value');\n const [timeValue, setTimeValue] = useState(props.value);\n const format = useMemo(() => {\n return props.format || 'HH:mm:ss';\n }, [props.format]) as string;\n\n const onChangeTime = hooks.useCallbackRef(\n (date: RangeValue<moment.Moment>, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n const [dateStart, dateEnd] = date;\n if (minDateMoment && dateStart && dateStart.isBefore(minDateMoment))\n timeStart = minDateMoment.format(format);\n if (maxDateMoment && dateEnd && dateEnd.isAfter(maxDateMoment))\n timeEnd = maxDateMoment.format(format);\n !isExistValue && setTimeValue([timeStart, timeEnd]);\n onChange?.([timeStart, timeEnd]);\n } else {\n !isExistValue && setTimeValue(undefined);\n onChange?.(undefined);\n }\n },\n );\n\n const { minDateMoment, maxDateMoment } = useMemo(() => {\n const { minDate, maxDate } = disabledDateConfig || {};\n let minDateMoment: moment.Moment | undefined;\n let maxDateMoment: moment.Moment | undefined;\n if (minDate) minDateMoment = moment(minDate, format);\n if (maxDate) maxDateMoment = moment(maxDate, format);\n return { minDateMoment, maxDateMoment };\n }, [disabledDateConfig, format]);\n\n const newDisabledTime = useMemo(() => {\n if (disabledTime) return disabledTime;\n const disabledHours: number[] = [];\n if (minDateMoment) {\n const minHour = minDateMoment.get('hour');\n for (let i = minHour - 1; i >= 0; i--) {\n disabledHours.push(i);\n }\n }\n if (maxDateMoment) {\n const maxMinute = maxDateMoment.get('hour');\n for (let i = maxMinute + 1; i <= 23; i++) {\n disabledHours.push(i);\n }\n }\n return () => {\n return {\n disabledHours: () => disabledHours,\n disabledMinutes: (selectedHour: number) => {\n const disabledMinutes: number[] = [];\n if (minDateMoment && selectedHour <= minDateMoment.get('hour')) {\n const minMinute = minDateMoment.get('minute');\n for (let i = minMinute - 1; i >= 0; i--) {\n disabledMinutes.push(i);\n }\n }\n if (maxDateMoment && selectedHour >= maxDateMoment.get('hour')) {\n const maxMinute = maxDateMoment.get('minute');\n for (let i = maxMinute + 1; i <= 59; i++) {\n disabledMinutes.push(i);\n }\n }\n return disabledMinutes;\n },\n disabledSeconds: (selectedHour: number, selectedMinute: number) => {\n const disabledSeconds: number[] = [];\n if (\n minDateMoment &&\n selectedHour <= minDateMoment.get('hour') &&\n selectedMinute <= minDateMoment.get('minute')\n ) {\n const minSecond = minDateMoment.get('second');\n for (let i = minSecond - 1; i >= 0; i--) {\n disabledSeconds.push(i);\n }\n }\n if (\n maxDateMoment &&\n selectedHour >= maxDateMoment.get('hour') &&\n selectedMinute >= maxDateMoment.get('minute')\n ) {\n const maxSecond = maxDateMoment.get('second');\n for (let i = maxSecond + 1; i <= 59; i++) {\n disabledSeconds.push(i);\n }\n }\n return disabledSeconds;\n },\n };\n };\n }, [minDateMoment, maxDateMoment, disabledTime]);\n\n const datePickerValue = useMemo(() => {\n const value = isExistValue ? props.value : timeValue;\n if (value && value.length > 0) {\n return [\n value[0] ? moment(value[0], format) : value[0],\n value[1] ? moment(value[1], format) : value[1],\n ] as [moment.Moment, moment.Moment];\n }\n return undefined;\n }, [isExistValue, props.value, timeValue, format]);\n\n return (\n <TimePicker.RangePicker\n {...otherProps}\n disabledTime={newDisabledTime}\n value={datePickerValue}\n onChange={onChangeTime}\n format={format}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { useEffectCustom } 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","ButtonWrapper","useState","loading","_useState","setLoading","debounceDuration","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","permission","jsx","Button","_extends","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","visible","setVisible","_useState2","onConfirmtTriggerClick","useCallbackRef","event","stopPropagation","onConfirm","item","forEach","index","text","color","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","buttonType","nromal","key","label","_createElement","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","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","_MoreOutlined","defaultProps","useArrayChange","dataList","forceUpdate","changeListRef","useRef","update","useForceUpdate","arrayOperate","add","dataItem","isUnshift","targetList","current","concat","target","delete","deleteItem","splice","resetList","getList","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useSafeState","initialState","setState","isMounted","useIsMounted","value","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","$await_3","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","_createCtx","_createCtx2","useCheckListCtx","CheckListCtxProvider","getValueList","CheckList","checkedValues","_useArrayChange","defaultValue","useUpdateEffect","defaultChange","targetIndex","newValues","selectedValue","onPreChange","$If_1","call","this","findIndex","temp","required","beforeExtra","afterExtra","CheckListItem","_classNames2","context","checked","checkedClassPrefix","readonly","CssNodeHover","cloneElement","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","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","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","ConfigProvider","locale","zh_CN","componentSize","space","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","ReactDOM","render","close","_window$elementId","_window","dialogConfirm","dialogAlert","cancelHidden","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","operateGroup","jsxs","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","footer","dialogDrawer","setOpen","closable","dialogLoading","root","createRoot","_window$elementId2","_window2","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWraper","operationProps","keyboard","forceRender","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","useEasyTableCtx","EasyTableCtxProvider","queryCondition","isInit","_EasyTableModel","updateFilterCondition","resetFilterCondition","updateInitStatus","easyTableModels","easyTableModel","EasyTable","_props$initialPaginat","dataSource","setDataSource","total","setTotal","_useState3","_easyTableModel$useSt","pageSize","initialPaginationParams","initRequest","paginationStatus","_useState4","setPaginationStatus","list","pageNo","allState","_props$serviceConfig","requestParamsAdapter","_onRequest","requestResultAdapter","paramsNew","respDataNew","respList","onDataSourceChange","clearQueryCondition","$await_4","resetFields","setFieldsValue","onResetRequest","$await_5","initialValues","getRequestParams","getFieldsValue","onSetPaginationStatus","tableList","tableTotal","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_objectWithoutPropertiesLoose","_leftList","Boolean","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","keys","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","currentValue","hasOperateList","find","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_temp$props2","span","itemProps","newProps","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","contentStyle","EasyTableFilter","queryButtonProps","resetButtonProps","filterOperate","childrens","Children","_useEasyTableCtx","onQuery","pageSiz","onReset","_extends3","formOperateColProps","isPure","formRowChildren","gutter","EasyTableTable","rowKey","pagination","paginationData","showSizeChanger","showTotal","onChangePage","_len","arguments","Array","_key","getUuid","Table","scroll","x","bordered","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","EditableFieldContext","createContext","editable","showEditableIcon","isCtx","EditableField","viewRender","_props$placeholderVal","placeholderValue","editRender","isEditFull","onClickEditIconPre","onClickConfirmIconPre","iconConfig","onEditCallback","onConfirmCallback","isEdit","setIsEdit","ctx","useContext","originalValue","onClickEditIcon","editIcon","_EditOutlined","viewValue","_isNumber","warn","onEditChange","_value$target","$If_2","editRenderElement","confirmIcon","_CheckOutlined","cancelIcon","_CloseOutlined","direction","display","paddingRight","EditableFieldProvider","Provider","getEditable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","onCompositionStart","onCompositionEnd","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","_ref2","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","arrayField2LabelValue","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","isNumber","_isBoolean","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","tempUid","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","onTableAfterRender","block","_PlusOutlined","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","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","FormItemCard","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","FormItemWrapperChildren","wrapper","rest","_children","composeProps","alignItems","marginLeft","FormItemWrapper","Gap","inline","LabelValueLayout","labelWidth","Descriptions","column","ModalAction","action","handleOnClick","_onClick","childrenReactElement","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","modalModels","createModalWraperModel","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","createModalWrapperModel","PageFixedFooter","Page404","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_160","label_width_170","label_width_180","label_width_190","label_width_200","label_width_auto","label_align_left","label_align_right","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","isCancel","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","ruleItemDescStyle","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagListSelect","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","handle","showData","notOverflowShowExtra","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","isSticky","_props$isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","cacheKey","activeKey","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","get","Tabs","TagGroup","spaceProps","TimePickerWrapper","disabledTime","isExistValue","timeValue","setTimeValue","onChangeTime","timeString","minDateMoment","isBefore","maxDateMoment","isAfter","newDisabledTime","disabledHours","minHour","i","maxMinute","disabledMinutes","selectedHour","minMinute","disabledSeconds","selectedMinute","minSecond","maxSecond","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","dateStart","dateEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","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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"}