@flatbiz/antd 2.5.0 → 2.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.css +4 -0
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/index.d.ts +28 -6
- package/package.json +3 -3
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/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/index.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/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/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/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/table-filter-layout/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 { FC, Fragment } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name: string) => {\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}\nexport const Permission: FC<PermissionProps> = (props) => {\n const permissionList = getPermissionList();\n if (permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Menu, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { FC, useState } from 'react';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string;\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: FC<DropdownMenuWrapperProps> = (props) => {\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 menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n onClick,\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 size=\"small\" {...otherProps} type={buttonType} style={newStyle} key={index} onClick={onClick}>\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={() => {\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 { isPromise, isUndefined } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { ReactElement, useMemo, useState, VFC } from 'react';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string;\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 operateList: Array<ButtonOperateItem | null>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n}\n\nexport const ButtonOperate: VFC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\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 foldList = useMemo(() => {\n return props.operateList.filter((item) => {\n const has = item && !item.hidden && item.isFold;\n if (item && item.permission) {\n return hasPermission(item.permission) && has;\n }\n return has;\n }) as ButtonOperateItem[];\n }, [props.operateList]);\n\n const viewList = useMemo(() => {\n return props.operateList.filter((item) => {\n const has = item && !item.hidden && !item.isFold;\n if (item && item.permission) {\n return hasPermission(item.permission) && has;\n }\n return has;\n }) as ButtonOperateItem[];\n }, [props.operateList]);\n\n return (\n <div className=\"table-operate\">\n <Space\n split={<Divider type=\"vertical\" />}\n size={props.size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n const {\n text,\n color,\n onClick,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return null;\n if (permission && !hasPermission(permission)) return null;\n const newStyle = color ? { color, ...style } : style;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onVisibleChange={(_visible) => {\n if (!_visible) {\n setLoading(false);\n }\n }}\n >\n <Button {...otherProps} onClick={undefined} type={type} danger style={newStyle}>\n {text}\n </Button>\n </Popconfirm>\n );\n }\n return (\n <Button {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </Button>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n};\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 { 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 { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: 'init' | 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: '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, Empty, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useMemo, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { cascaderWrapperModel, ModelState } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value: string | number, selectedList: TPlainObject[]) => void;\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持多选\n * 2. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 3. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const { serviceConfig, modelKey, fieldNames, isDynamicLoad, ...otherProps } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-pre-${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-pre');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <NotFoundContent requestStatus={state.requestStatus} onAgainRequest={onAgainRequest} />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n />\n );\n});\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description={description}\n className={'tree-selector-wrapper-empty'}\n >\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\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, VFC } 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: VFC<DatePickerWrapperProps> = (props) => {\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, VFC } 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: VFC<DateRangePickerWrapperProps> = (props) => {\n const { value, onChange, style, ...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 (props.format) return props.format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.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 format={format}\n {...otherProps}\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 { 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 { FC, useEffect } from 'react';\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 * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper: FC<DrawerFormProps> = (props) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【DrawerWraper】组件已经过期,请使用DrawerWrapper替换包括DrawerWraper=>DrawerWrapper、createDrawerWraperModel=>createDrawerWrapperModel,如果使用DrawerWrapper组件原用法需要调整',\n );\n }, []);\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 } 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: FC<{ operationProps?: DrawerOperationProps }> = (props) => {\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 * ```\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 forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps} />\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 <DateRangePickerWrapper {...editableComptProps} value={props.value} onChange={onChange} />;\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, VFC } 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: VFC<InputWrapperProps> = (props) => {\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, VFC } 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: VFC<InputSearchWrapperProps> = (props) => {\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';\nimport { VFC } from 'react';\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: VFC<InputTextAreaWrapperProps> = (props) => {\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 {...(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';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n // originalSelectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: 'init' | 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n resetSelectBoxList: void;\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n // originalSelectorList: [],\n queryIsEmpty: false,\n requestStatus: 'init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n // state.originalSelectorList = params.originalSelectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.selectorList = [];\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 { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isNumber, isString } from '@dimjs/lang';\nimport { extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, message, Select, SelectProps } from 'antd';\nimport { DependencyList, forwardRef, ReactElement, useImperativeHandle, useMemo, useRef } from 'react';\nimport { useSafeState } from '../hooks';\nimport { ModelState, selectorWrapperModel } from './model';\n\nimport { dequal } from 'dequal';\n\nconst deepEqual = (foo: any, bar: any) => {\n return dequal(foo, bar);\n};\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n 'filterOption' | 'onSearch' | 'loading' | 'notFoundContent' | 'options' | 'fieldNames' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string };\n /**\n * useEffect依赖性数组\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 当设置selectorList后,serviceConfig、operateType=search将失效\n * 2. 不支持异步数据,异步使用serviceConfig方式\n * 3. 如果配置fieldNames,会转换后使用\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项\n * ```\n */\n showAllOption?: true | JSX.Element;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * 3. 在设置`selectorList`后,operateType=search将失效\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口字段名称,默认值:keyword\n searchFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (\n value?: string | number | string[] | number[],\n selectedList?: TPlainObject[] | TPlainObject,\n ) => void;\n};\n\nexport type SelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getSelectorList: () => TPlainObject[];\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 1.1: 当有effectDependencyList依赖项时,依赖项的发生变化后,每次都会去调用接口获取数据\n * 1.2: 当无effectDependencyList依赖项时,第一次调用接口成功后会有标记,下次访问存在标记,就不在调用接口,使用缓存数据;如果想强制刷新数据,可通过随便配置依赖项完成\n * 2. selectorList属性\n * 2.1 当设置selectorList属性后,serviceConfig、operateType=search将失效\n * 2.2 不支持异步数据,异步使用serviceConfig方式\n * 3. operateType=search状态下,回填数据查询接口时,会在接口中默认添加id字段(id的值为回填的值)\n * ```\n */\nexport const SelectorWrapper = forwardRef<SelectorWrapperRefApi, SelectorWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n showAllOption,\n effectDependencyList,\n onSelectorListChange,\n onSelectorRequestError,\n operateType,\n searchFieldName,\n selectorList,\n modelKey,\n fieldNames,\n ...otherProps\n } = props;\n\n const isSearch = operateType === 'search' && selectorList === undefined;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const changeOperateValueRef = useRef<any>();\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-pre-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value' }, fieldNames);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\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(\n async (inputValue?: string, searchId?: string | number) => {\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(`SelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-pre');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params['id'] = searchId;\n }\n const respData = await newServiceConfig.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n setLoading(false);\n onSelectorListChange?.(respAdapterData);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n console.error(error);\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n onSelectorRequestError?.(error);\n }\n },\n );\n\n hooks.useCustomCompareEffect(\n () => {\n if (selectorList) {\n void actions.setSelectBoxList({\n selectorList: selectorList || [],\n });\n return;\n }\n if (isSearch) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const realTimeState = selectorWrapperModel(modelKey).getState();\n if (\n newEffectDependencyList.length > 0 ||\n (!window[requestPreKey] && realTimeState.requestStatus !== 'request-success')\n ) {\n void startDataSourceRequest();\n }\n },\n newEffectDependencyList,\n deepEqual,\n );\n\n hooks.useCustomCompareEffect(\n () => {\n if (isSearch) {\n if (valueIsEmpty(props.value as string | number)) {\n onSelectorListChange?.([]);\n void actions.resetSelectBoxList();\n } else {\n // 判断是否由外部回填value数据(但changeOperateValueRef.current为复杂类型?)\n if (\n props.value !== changeOperateValueRef.current &&\n (isNumber(props.value) || isString(props.value))\n ) {\n void startDataSourceRequest(undefined, props.value as string | number);\n }\n }\n }\n },\n newEffectDependencyList.concat([props.value]),\n deepEqual,\n );\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetSelectBoxList();\n },\n getSelectorList: () => {\n return state.selectorList;\n },\n };\n });\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n return (option?.children as unknown as string)?.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.resetSelectBoxList();\n }\n }, 300);\n\n const onChange = hooks.useCallbackRef((value: string | number | string[] | number[], otherParams) => {\n changeOperateValueRef.current = value;\n const selectedList = isArray(otherParams) ? otherParams : otherParams ? [otherParams] : [];\n const targetList = state.selectorList.filter((item) => {\n const value = item[fieldNamesMerge.value];\n return selectedList.filter((temp) => temp.value === value).length > 0;\n });\n if (valueIsEqual(props.mode, ['multiple', 'tags'])) {\n props.onChange?.(value, targetList);\n } else {\n props.onChange?.(value, targetList?.[0]);\n }\n });\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectOptionsAll = <Select.Option value=\"\">全部</Select.Option>;\n return (\n <Select\n showSearch={true}\n allowClear={true}\n {...otherProps}\n value={isUndefinedOrNull(props.value) ? undefined : props.value}\n notFoundContent={\n <NotFoundContent\n requestStatus={state.requestStatus}\n onAgainRequest={onAgainRequest}\n isSearch={isSearch}\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {showAllOption === true ? selectOptionsAll : showAllOption}\n {state.selectorList.map((item) => {\n const value = item[fieldNamesMerge.value];\n const label = item[fieldNamesMerge.label];\n return (\n <Select.Option value={value} label={label} key={value}>\n {props.onLabelRenderAdapter ? props.onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n});\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n isSearch?: boolean;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'init') {\n // ??\n return '暂无数据';\n } else if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n } else if (props.isSearch) {\n return '请输入搜索条件';\n }\n return '数据查询中';\n }, [props.isSearch, props.requestStatus]);\n return (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description={description}\n className={'tree-selector-wrapper-empty'}\n >\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\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 { FC, Fragment, 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: FC<UploadWrapperProps> = (props) => {\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: FC<{ listType?: UploadListType }> = (props) => {\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 ? 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 : null}\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 ) : null}\n </Space>\n {onFormListItemAfterRender\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 : null}\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 { 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};\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 <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\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 * 渲染中间件,如果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 />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorProps?: TPlainObject;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const [key, setKey] = useState(0);\n const [inputValue, setInputValue] = useState();\n\n const onChange = hooks.useCallbackRef((e) => {\n const content = e.target.$()?.html();\n const respValue = content ? content : undefined;\n setInputValue(respValue);\n props.onChange?.(respValue);\n });\n\n useEffectCustom(() => {\n if (props.value !== inputValue) {\n setKey(Date.now());\n }\n }, [props.value]);\n\n return (\n <div key={key} className=\"v-editor-wrapper\">\n <Editor\n initialValue={props.value}\n init={{\n menubar: true,\n language: 'zh_CN',\n height: '500px',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n ' advlist lists image charmap preview' +\n ' visualblocks code fullscreen' +\n ' media table paste help wordcount',\n toolbar:\n ' undo redo | formatselect | ' +\n ' bold italic backcolor bullist numlist | outdent indent alignleft aligncenter alignright alignjustify | textmark untextmark code preview |' +\n ' removeformat | help',\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n }}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n {...props.editorProps}\n onChange={onChange}\n />\n </div>\n );\n};\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { FC, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\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: FC<FileImportProps> = (props) => {\n const { onImportFinish, ...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 {props.children ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n 选择文件\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 { FC, 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 * ```\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: FC<FileUploadProps> = (props) => {\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 { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, FC } 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};\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: FC<FlexLayoutProps> = (props) => {\n const childrens = (isArray(props.children) ? props.children : [props.children]) as JSX.Element[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = !isUndefinedOrNull(props.fullIndex)\n ? isArray(props.fullIndex)\n ? props.fullIndex\n : [props.fullIndex as number]\n : [];\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 { CSSProperties, VFC } 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: VFC<GapProps> = (props) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties, VFC } 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};\nexport const IconWrapper: VFC<IconWrapperProps> = (props) => {\n return (\n <Tooltip title={props.hoverTips}>\n <div\n className={classNames('icon-wrapper', `icon-wrapper-${props.size || 'middle'}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </div>\n </Tooltip>\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 { FC, useEffect } from 'react';\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 * ```\n */\nexport const ModalWraper: FC<ModalFormProps> = (props) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【ModalWraper】组件已经过期,请使用ModalWrapper替换包括ModalWraper=>ModalWrapper、createModalWraperModel=>createModalWrapperModel,如果使用ModalWrapper组件原用法需要调整',\n );\n }, []);\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 } 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: FC<{ operationProps?: ModalOperationOldProps }> = (props) => {\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 * ```\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 forceRender={true}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n {children}\n {pageLoading && <PageLoader />}\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, FC } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n};\n\nexport const PageFixedFooter: FC<PageFixedFooterProps> = (props) => {\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_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\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_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } 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};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout: FC<SimpleLayoutProps> = (props) => {\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 return (\n <div className={className} style={props.style}>\n {props.title ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { classNames } from '@dimjs/utils';\nimport { Children, cloneElement, FC } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\ntype StaticMethods = {\n Condition: typeof Condition;\n Operate: typeof Operate;\n Table: typeof Table;\n Footer: typeof Footer;\n};\n\nconst overdueConsole = () => {\n console.error('@flatbiz/antd库【TableFilterLayout】组件已经过期,请使用【SimpleLayout】组件替代');\n};\n\nexport type TableFilterLayoutProps = {\n className?: string;\n isFixed?: boolean;\n fullIndex?: number;\n};\n\nexport const TableFilterLayout: FC<TableFilterLayoutProps> & StaticMethods = (props) => {\n useEffectCustom(() => {\n overdueConsole();\n }, []);\n\n return (\n <div\n className={classNames(\n 'table-filter-layout',\n { 'table-filter-layout-flex': props.isFixed },\n props.className,\n )}\n >\n {Children.map(props.children, (item, index) => {\n if (props.isFixed && index === props.fullIndex) {\n return cloneElement(item as JSX.Element, { className: 'table-filter-layout-flex-full' });\n }\n return item;\n })}\n </div>\n );\n};\n\nconst Condition: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-condition', props.className)}>{props.children}</div>;\n};\n\nconst Operate: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-operate', props.className)}>{props.children}</div>;\n};\n\nconst Table: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-table', props.className)}>{props.children}</div>;\n};\nconst Footer: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-footer', props.className)}>{props.children}</div>;\n};\n\nTableFilterLayout.Condition = Condition;\nTableFilterLayout.Operate = Operate;\nTableFilterLayout.Table = Table;\nTableFilterLayout.Footer = Footer;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: ModelState['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 } from '@dimjs/lang';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\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","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, treeToArray, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { ModelState, treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { dequal } from 'dequal';\nimport { getExpandedKeys } from './utils';\n\nconst deepEqual = (foo: any, bar: any) => {\n return dequal(foo, bar);\n};\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'\n> & {\n value?: string | number;\n modelKey: string;\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig、onTreeSelectorListChange将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\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 // onPreRequest:\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 */\n onChange?: (\n selectedValue?: Array<string | number> | string | number,\n selectedData?: TPlainObject[] | TPlainObject,\n selectAllDataList?: TPlainObject[],\n ) => void;\n};\n\nexport type TreeSelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeSelectorList: () => TreeSelectProps['treeData'];\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = forwardRef<TreeSelectorWrapperRefApi, TreeSelectorWrapperProps>(\n (props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n treeSelectorList,\n modelKey,\n value,\n ...otherProps\n } = props;\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-pre-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === innerOperateValueRef.current && !isUndefinedOrNull(value)) return;\n // 重新计算 expandedKeys\n const valueList = (isArray(value) ? value : [value]) as Array<string | number>;\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n setRefreshKey(Date.now());\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-pre');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n treeSelectorList: respData || [],\n treeSelectorTiledArray: treeToArray(respData || [], fieldNames.children),\n });\n onTreeSelectorListChange?.(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 (treeSelectorList) {\n void actions.setSelectBoxList({\n treeSelectorList: treeSelectorList,\n treeSelectorTiledArray: treeToArray(treeSelectorList || [], fieldNames.children),\n });\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const { requestStatus } = treeSelectorWrapperModel(modelKey).getState();\n if (\n newEffectDependencyList.length > 0 ||\n (!window[requestPreKey] && requestStatus !== 'request-success')\n ) {\n void startDataSourceRequest();\n }\n },\n newEffectDependencyList,\n deepEqual,\n );\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n },\n getTreeSelectorList: () => {\n return state.treeSelectorList;\n },\n };\n });\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 treeData = useMemo(() => {\n if (state.treeSelectorList.length === 0) return undefined;\n let allOption = props.showAllOption;\n if (allOption === true) {\n allOption = { [fieldNames.label]: '全部', [fieldNames.value]: '' };\n }\n if (allOption) {\n return [allOption, ...state.treeSelectorList];\n }\n return state.treeSelectorList;\n }, [fieldNames, props.showAllOption, state.treeSelectorList]);\n\n const getTreeExpandedKeys = hooks.useCallbackRef(\n (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, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n },\n );\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n */\n const onChange = hooks.useCallbackRef((changeValue: Array<string | number> | string | number) => {\n // treeCheckStrictly=true拿到的是对象数组数据\n const valueObjectList = isArray(changeValue) ? changeValue : changeValue ? [changeValue] : [];\n const valueList = valueObjectList.map((item) => {\n return isObject(item) ? item['value'] : item;\n }) as Array<string | number>;\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(valueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n\n const selectedAllList = [] as TPlainObject[];\n const selectedLeafList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n const selectedLeafValueList = [] as Array<string | number>;\n valueList.forEach((item) => {\n const target = state.treeSelectorTiledArray.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 if (props.treeCheckable) {\n if (\n props.treeCheckStrictly === true ||\n valueIsEqual(props.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n innerOperateValueRef.current = selectedAllValueList;\n props.onChange?.(selectedAllValueList, selectedAllList, selectedAllList);\n } else {\n innerOperateValueRef.current = selectedLeafValueList;\n props.onChange?.(selectedLeafValueList, selectedLeafList, selectedAllList);\n }\n } else {\n if (props.multiple) {\n innerOperateValueRef.current = selectedAllValueList;\n props.onChange?.(selectedAllValueList, selectedAllList, selectedAllList);\n } else {\n innerOperateValueRef.current = selectedAllValueList[0];\n props.onChange?.(selectedAllValueList[0], selectedAllList[0], selectedAllList);\n }\n }\n });\n\n return (\n <TreeSelect\n key={refreshKey}\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp={fieldNames.label}\n switcherIcon={<CaretDownFilled />}\n {...otherProps}\n className={classNames('v-tree-select-wrapper', props.className)}\n dropdownClassName={classNames('v-tree-select-wrapper-dropdown', props.dropdownClassName)}\n onChange={onChange}\n defaultValue={props.value}\n treeExpandedKeys={treeExpandedKeys}\n treeData={treeData}\n loading={loading}\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 <NotFoundContent requestStatus={state.requestStatus} onAgainRequest={onAgainRequest} />\n }\n />\n );\n },\n);\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description={description}\n className={'tree-selector-wrapper-empty'}\n >\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\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';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: ModelState['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, false, { value: 'value', parentValue: 'parentValue' });\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, message, Spin, Tree, TreeProps } from 'antd';\nimport { AntdTreeNodeAttribute } from 'antd/lib/tree';\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 { ModelState, treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys } from './utils';\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 effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TreeProps['treeData'];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n value?: string | number | Array<string | number>;\n onChange?: (\n selectedKey?: string | number | Array<string | number>,\n selectedList?: TPlainObject[] | TPlainObject,\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值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?: (\n data: AntdTreeNodeAttribute & { isParent: boolean; isLeaf: boolean },\n ) => ReactElement | ReactElement;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * 树包装组件\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 searchValue,\n showSearch,\n searchPlaceholder,\n ...otherProps\n } = props;\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-pre-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n const isControl = useRef(props.hasOwnProperty('value'));\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const valueList = useMemo(() => {\n if (isUndefinedOrNull(value)) return undefined;\n return (isArray(value) ? value : [value]) as Array<string | number>;\n }, [value]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\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 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-pre');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n void actions.setTreeList({\n treeList: respData || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(respData as TPlainObject[]);\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 (selectorTreeList) {\n void actions.setTreeList({\n treeList: selectorTreeList || [],\n childrenName: fieldNames.children,\n });\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const realTimeState = treeWrapperModel(modelKey).getState();\n\n if (\n newEffectDependencyList.length > 0 ||\n (!window[requestPreKey] && realTimeState.requestStatus !== 'request-success')\n ) {\n void startDataSourceRequest();\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (valueList && valueList.length > 0 && state.treeList.length > 0 && !treeExpandedKeys) {\n let expandedKeys = [] as Array<string | number>;\n valueList.forEach((tempValue) => {\n const targetList = getExpandedKeys(tempValue, state.treeList, fieldNames);\n expandedKeys = expandedKeys.concat(targetList.map((item) => item.value));\n });\n setTreeExpandedKeys((prev) => {\n const mergeList = expandedKeys.concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n }, [state.treeList, fieldNames]);\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 let expandedKeys = [] as Array<string | number>;\n targetList.map((tempItem) => {\n const targetValues = getExpandedKeys(tempItem.value as string, state.treeList || [], fieldNames);\n const valueList = targetValues.map((item) => item.value);\n expandedKeys = expandedKeys.concat(valueList);\n });\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\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 onChangeHandle = hooks.useCallbackRef((checkedKeys) => {\n const checkedValueList = isArray(checkedKeys) ? checkedKeys : checkedKeys ? [checkedKeys] : [];\n const selectedList: TPlainObject[] = [];\n checkedValueList.map((item) => {\n const target = state.treeTiledArray.find((temp) => {\n return item === temp[fieldNames.value];\n });\n if (target) {\n selectedList.push(cloneState(target));\n }\n });\n\n if (checkable) {\n if (!checkableResponseParentNode) {\n // checkedKeys中含有父节点 是否返回\n const checkedList = selectedList?.filter(\n (item) => !(isArray(item[fieldNames.children]) && item[fieldNames.children].length > 0),\n );\n onChange?.(\n checkedList.map((item) => item[fieldNames.value]),\n checkedList,\n );\n } else {\n onChange?.(checkedKeys, selectedList);\n }\n } else {\n const currentNode = selectedList[selectedList.length - 1];\n if (currentNode) {\n onChange?.(currentNode[fieldNames.value], currentNode);\n } else {\n onChange?.(undefined);\n }\n }\n });\n\n const onCheck = hooks.useCallbackRef((checkedKeys) => {\n onChangeHandle?.(checkedKeys);\n });\n\n const onSelect = hooks.useCallbackRef((checkedKeys) => {\n onChangeHandle?.(checkedKeys);\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n const treeData = useMemo(() => {\n if (treeSearchValue === '' || isUndefinedOrNull(treeSearchValue)) return state.treeList;\n const loop = (data: any[]): any[] =>\n data.map((item) => {\n const strTitle = item[fieldNames.label] as string;\n const index = strTitle.indexOf(treeSearchValue!);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue!.length);\n const title =\n index > -1 ? (\n <span>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : (\n <span>{strTitle}</span>\n );\n if (item[fieldNames.children]) {\n return {\n ...item,\n [fieldNames.label]: title,\n _treeItemName: strTitle,\n [fieldNames.children]: loop(item[fieldNames.children]),\n };\n }\n\n return {\n ...item,\n [fieldNames.label]: title,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [fieldNames.children, fieldNames.label, treeSearchValue, state.treeList]);\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 onSelectorTreeListChange?.(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 isLeafFlag = isLeafNode(nodeData);\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: nodeData._treeItemName || nodeData[fieldNames.label],\n });\n // const className = classNames({\n // 'v-tree-parent-icon': !isLeafFlag,\n // 'v-tree-leaf-icon': isLeafFlag,\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 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,\n checkable,\n };\n\n const selectedProps = {\n onSelect,\n multiple: false,\n };\n if (isControl.current) {\n checkedProps['checkedKeys'] = valueList;\n selectedProps['selectedKeys'] = valueList;\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 {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <NotFoundContent\n requestStatus={state.requestStatus}\n loading={loading}\n onAgainRequest={startDataSourceRequest}\n />\n );\n});\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n loading: boolean;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <div className=\"tree-wrapper-empty\">\n <Spin spinning={props.loading}></Spin>\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description}>\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\n </div>\n );\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","useState","visible","_useState","setVisible","loading","_useState2","setLoading","onConfirmtTriggerClick","_hooks","useCallbackRef","event","stopPropagation","onConfirm","item","result","onClick","_isPromise","finally","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","_extends","buttonType","nromal","key","label","_createElement","Button","size","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","bind","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","console","log","ButtonOperate","foldList","useMemo","operateList","filter","has","isFold","viewList","className","_jsxs","Space","split","Divider","wrap","_isUndefined","map","placement","undefined","createElement","length","foldIcon","jsx","_MoreOutlined","defaultProps","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","useSafeState","initialState","state","setState","isMounted","useIsMounted","value","current","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","_extend","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","error","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","filterList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","targetOption","$await_3","concat","onChange","values","selectList","Cascader","showSearch","allowClear","notFoundContent","NotFoundContent","suffixIcon","_RedoOutlined","spin","multiple","description","Empty","image","PRESENTED_IMAGE_SIMPLE","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","onOpenChange","open","RangePicker","onCalendarChange","val","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","onOk","PageLoader","jsxs","DrawerWraper","_props$width","footer","operationProps","Drawer","_classNames","keyboard","forceRender","destroyOnClose","contentWrapperStyle","maxWidth","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","render","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","Form","Item","DatePickerWrapperFormItem","FormItemContent","data","viewLabel","join","DateRangePickerWrapperFormItem","InputWrapper","cpLockRef","useRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","isUndefinedOrNull","Date","now","onCompositionStart","onCompositionEnd","Input","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","e","Radio","RadioGroupFormItem","resetSelectBoxList","selectorWrapperModels","selectorWrapperModel","deepEqual","foo","bar","dequal","SelectorWrapper","showAllOption","effectDependencyList","onSelectorListChange","onSelectorRequestError","searchFieldName","isSearch","newEffectDependencyList","changeOperateValueRef","_selectorWrapperModel","valueIsEmpty","inputValue","searchId","requiredParamsKeys","isEmpty","keyword","warn","useCustomCompareEffect","realTimeState","getState","_isNumber","isNumber","_isString","onClearSelectorList","getSelectorList","filterOption","input","option","_option$children","toLowerCase","indexOf","onSearch","useDebounceCallback","otherParams","selectedList","targetList","valueIsEqual","mode","selectOptionsAll","Select","Option","onLabelRenderAdapter","setSelectorList","setviewLabelList","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isBoolean","JSON","stringify","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","status","response","code","maxCount","targetIndex","findIndex","tempUid","splice","Upload","classNames","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","useFormInstance","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","_Fragment","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","_value","record","tableRowName","dataIndex","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","EditorWrapper","setKey","setInputValue","_e$target$$","content","$","html","respValue","_Editor","Editor","initialValue","init","menubar","language","height","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","cdnTinyMce","editorProps","FileImport","onImportFinish","showUploadList","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","childrens","direction","gap","fullIndexList","fullIndex","childrenStyle","flex","marginRight","marginBottom","cloneElement","Gap","inline","IconWrapper","Tooltip","hoverTips","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","Modal","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_auto","label_align_left","label_align_right","formItemClassName","preDefinedClassName","form","formItem","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","desc","contentStyle","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","catch","overdueConsole","TableFilterLayout","isFixed","Children","Condition","Operate","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","TreeSelectorWrapper","onTreeSelectorListChange","onTreeSelectorRequestError","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","innerOperateValueRef","refreshKey","setRefreshKey","expandedKeys","getTreeExpandedKeys","Array","Set","serviceResponseHandle","_respData2","treeToArray","_treeSelectorWrapperM2","getTreeSelectorList","onTreeExpand","treeData","allOption","_allOption","refresh","newTreeExpandedKeys","changeValue","valueObjectList","_isObject","prev","mergeList","selectedAllList","selectedLeafList","selectedAllValueList","selectedLeafValueList","treeCheckable","treeCheckStrictly","showCheckedStrategy","TreeSelect","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","TreeWrapper","selectorTreeList","checkableResponseParentNode","_props$checkableRespo","checkable","onSelectorTreeListChange","searchValue","searchPlaceholder","_treeWrapperModel$use","isControl","hasOwnProperty","treeSearchValue","setTreeSearchValue","_params","$Try_2_Post","$Try_2_Catch","$await_4","tempValue","useUpdateEffect","_item$label","tempItem","targetValues","getTreeDataList","onExpand","onChangeHandle","checkedKeys","checkedValueList","checkedList","currentNode","onCheck","onSelect","treeFieldNames","loop","_extends3","strTitle","beforeStr","substring","afterStr","slice","_extends2","_treeItemName","list","dataItem","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","allState","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends4","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isValidElement","isLeafFlag","isParent","commonProps","showLine","blockNode","checkedProps","selectedProps","sceneProps","Spin","spinning","placeholder","Tree"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/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/index.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/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/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/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/table-filter-layout/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 { FC, Fragment } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name: string) => {\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}\nexport const Permission: FC<PermissionProps> = (props) => {\n const permissionList = getPermissionList();\n if (permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Menu, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { FC, useState } from 'react';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string;\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: FC<DropdownMenuWrapperProps> = (props) => {\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 menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n onClick,\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 size=\"small\" {...otherProps} type={buttonType} style={newStyle} key={index} onClick={onClick}>\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={() => {\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 { isPromise, isUndefined } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { ReactElement, useMemo, useState, VFC } from 'react';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string;\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 operateList: Array<ButtonOperateItem | null>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n}\n\nexport const ButtonOperate: VFC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\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 foldList = useMemo(() => {\n return props.operateList.filter((item) => {\n const has = item && !item.hidden && item.isFold;\n if (item && item.permission) {\n return hasPermission(item.permission) && has;\n }\n return has;\n }) as ButtonOperateItem[];\n }, [props.operateList]);\n\n const viewList = useMemo(() => {\n return props.operateList.filter((item) => {\n const has = item && !item.hidden && !item.isFold;\n if (item && item.permission) {\n return hasPermission(item.permission) && has;\n }\n return has;\n }) as ButtonOperateItem[];\n }, [props.operateList]);\n\n return (\n <div className=\"table-operate\">\n <Space\n split={<Divider type=\"vertical\" />}\n size={props.size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n const {\n text,\n color,\n onClick,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return null;\n if (permission && !hasPermission(permission)) return null;\n const newStyle = color ? { color, ...style } : style;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onVisibleChange={(_visible) => {\n if (!_visible) {\n setLoading(false);\n }\n }}\n >\n <Button {...otherProps} onClick={undefined} type={type} danger style={newStyle}>\n {text}\n </Button>\n </Popconfirm>\n );\n }\n return (\n <Button {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </Button>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n};\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 { 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 { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: 'init' | 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: '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, Empty, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useMemo, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { cascaderWrapperModel, ModelState } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value: string | number, selectedList: TPlainObject[]) => void;\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持多选\n * 2. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 3. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const { serviceConfig, modelKey, fieldNames, isDynamicLoad, ...otherProps } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-pre-${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-pre');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <NotFoundContent requestStatus={state.requestStatus} onAgainRequest={onAgainRequest} />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n />\n );\n});\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description={description}\n className={'tree-selector-wrapper-empty'}\n >\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\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, VFC } 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: VFC<DatePickerWrapperProps> = (props) => {\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, VFC } 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: VFC<DateRangePickerWrapperProps> = (props) => {\n const { value, onChange, style, ...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 (props.format) return props.format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.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 format={format}\n {...otherProps}\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 { 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 { FC, useEffect } from 'react';\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 * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper: FC<DrawerFormProps> = (props) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【DrawerWraper】组件已经过期,请使用DrawerWrapper替换包括DrawerWraper=>DrawerWrapper、createDrawerWraperModel=>createDrawerWrapperModel,如果使用DrawerWrapper组件原用法需要调整',\n );\n }, []);\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 } 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: FC<{ operationProps?: DrawerOperationProps }> = (props) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps} />\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 <DateRangePickerWrapper {...editableComptProps} value={props.value} onChange={onChange} />;\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, VFC } 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: VFC<InputWrapperProps> = (props) => {\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, VFC } 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: VFC<InputSearchWrapperProps> = (props) => {\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';\nimport { VFC } from 'react';\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: VFC<InputTextAreaWrapperProps> = (props) => {\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 {...(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';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n // originalSelectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: 'init' | 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n resetSelectBoxList: void;\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n // originalSelectorList: [],\n queryIsEmpty: false,\n requestStatus: 'init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n // state.originalSelectorList = params.originalSelectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.selectorList = [];\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 { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isNumber, isString } from '@dimjs/lang';\nimport { extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, message, Select, SelectProps } from 'antd';\nimport { DependencyList, forwardRef, ReactElement, useImperativeHandle, useMemo, useRef } from 'react';\nimport { useSafeState } from '../hooks';\nimport { ModelState, selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { dequal } from 'dequal';\n\nconst deepEqual = (foo: any, bar: any) => {\n return dequal(foo, bar);\n};\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n 'filterOption' | 'onSearch' | 'loading' | 'notFoundContent' | 'options' | 'fieldNames' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string };\n /**\n * useEffect依赖性数组\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 当设置selectorList后,serviceConfig、operateType=search将失效\n * 2. 不支持异步数据,异步使用serviceConfig方式\n * 3. 如果配置fieldNames,会转换后使用\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项\n * ```\n */\n showAllOption?: true | JSX.Element;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * 3. 在设置`selectorList`后,operateType=search将失效\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (\n value?: string | number | string[] | number[],\n selectedList?: TPlainObject[] | TPlainObject,\n ) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n};\n\nexport type SelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getSelectorList: () => TPlainObject[];\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 1.1: 当有effectDependencyList依赖项时,依赖项的发生变化后,每次都会去调用接口获取数据\n * 1.2: 当无effectDependencyList依赖项时,第一次调用接口成功后会有标记,下次访问存在标记,就不在调用接口,使用缓存数据;如果想强制刷新数据,可通过随便配置依赖项完成\n * 2. selectorList属性\n * 2.1 当设置selectorList属性后,serviceConfig、operateType=search将失效\n * 2.2 不支持异步数据,异步使用serviceConfig方式\n * 3. operateType=search状态下,回填数据查询接口时,会在接口中默认添加id字段(id的值为回填的值)\n * ```\n */\nexport const SelectorWrapper = forwardRef<SelectorWrapperRefApi, SelectorWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n showAllOption,\n effectDependencyList,\n onSelectorListChange,\n onSelectorRequestError,\n operateType,\n searchFieldName,\n selectorList,\n modelKey,\n fieldNames,\n ...otherProps\n } = props;\n const isSearch = operateType === 'search' && selectorList === undefined;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const changeOperateValueRef = useRef<any>();\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-pre-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value' }, fieldNames);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\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(\n async (inputValue?: string, searchId?: string | number) => {\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(`SelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-pre');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params['id'] = searchId;\n }\n const respData = await newServiceConfig.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n setLoading(false);\n onSelectorListChange?.(respAdapterData);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n console.error(error);\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n onSelectorRequestError?.(error);\n }\n },\n );\n hooks.useCustomCompareEffect(\n () => {\n if (selectorList) {\n void actions.setSelectBoxList({\n selectorList: selectorList || [],\n });\n return;\n }\n if (isSearch) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const allState = selectorWrapperModel(modelKey).getState();\n if (\n Boolean(newEffectDependencyList.length) ||\n (!window[requestPreKey] && allState.requestStatus !== 'request-success')\n ) {\n void startDataSourceRequest();\n }\n },\n newEffectDependencyList,\n deepEqual,\n );\n\n hooks.useCustomCompareEffect(\n () => {\n if (isSearch) {\n if (valueIsEmpty(props.value as string | number)) {\n onSelectorListChange?.([]);\n void actions.resetSelectBoxList();\n } else {\n // 判断是否由外部回填value数据(但changeOperateValueRef.current为复杂类型?)\n if (\n props.value !== changeOperateValueRef.current &&\n (isNumber(props.value) || isString(props.value))\n ) {\n void startDataSourceRequest(undefined, props.value as string | number);\n }\n }\n }\n },\n newEffectDependencyList.concat([props.value]),\n deepEqual,\n );\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetSelectBoxList();\n },\n getSelectorList: () => {\n return state.selectorList;\n },\n };\n });\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = (\n !option.children ? [] : isArray(option.children) ? option.children : [option.children]\n ) as any[];\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.resetSelectBoxList();\n }\n }, 300);\n\n const onChange = hooks.useCallbackRef((value: string | number | string[] | number[], otherParams) => {\n changeOperateValueRef.current = value;\n const selectedList = isArray(otherParams) ? otherParams : otherParams ? [otherParams] : [];\n const targetList = state.selectorList.filter((item) => {\n const value = item[fieldNamesMerge.value];\n return selectedList.filter((temp) => temp.value === value).length > 0;\n });\n if (valueIsEqual(props.mode, ['multiple', 'tags'])) {\n props.onChange?.(value, targetList);\n } else {\n props.onChange?.(value, targetList?.[0]);\n }\n });\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectOptionsAll = <Select.Option value=\"\">全部</Select.Option>;\n return (\n <Select\n showSearch={true}\n allowClear={true}\n {...otherProps}\n value={isUndefinedOrNull(props.value) ? undefined : props.value}\n notFoundContent={\n <NotFoundContent\n requestStatus={state.requestStatus}\n onAgainRequest={onAgainRequest}\n isSearch={isSearch}\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {showAllOption === true ? selectOptionsAll : showAllOption}\n {state.selectorList.map((item) => {\n const value = item[fieldNamesMerge.value];\n const label = item[fieldNamesMerge.label];\n return (\n <Select.Option value={value} label={label} key={value}>\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {props.onLabelRenderAdapter ? props.onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n});\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n isSearch?: boolean;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'init') {\n // ??\n return '暂无数据';\n } else if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n } else if (props.isSearch) {\n return '请输入搜索条件';\n }\n return '数据查询中';\n }, [props.isSearch, props.requestStatus]);\n return (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description={description}\n className={'tree-selector-wrapper-empty'}\n >\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\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 { FC, Fragment, 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: FC<UploadWrapperProps> = (props) => {\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: FC<{ listType?: UploadListType }> = (props) => {\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 ? 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 : null}\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 ) : null}\n </Space>\n {onFormListItemAfterRender\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 : null}\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 { 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};\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 <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\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 * 渲染中间件,如果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 />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorProps?: TPlainObject;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const [key, setKey] = useState(0);\n const [inputValue, setInputValue] = useState();\n\n const onChange = hooks.useCallbackRef((e) => {\n const content = e.target.$()?.html();\n const respValue = content ? content : undefined;\n setInputValue(respValue);\n props.onChange?.(respValue);\n });\n\n useEffectCustom(() => {\n if (props.value !== inputValue) {\n setKey(Date.now());\n }\n }, [props.value]);\n\n return (\n <div key={key} className=\"v-editor-wrapper\">\n <Editor\n initialValue={props.value}\n init={{\n menubar: true,\n language: 'zh_CN',\n height: '500px',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n ' advlist lists image charmap preview' +\n ' visualblocks code fullscreen' +\n ' media table paste help wordcount',\n toolbar:\n ' undo redo | formatselect | ' +\n ' bold italic backcolor bullist numlist | outdent indent alignleft aligncenter alignright alignjustify | textmark untextmark code preview |' +\n ' removeformat | help',\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n }}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n {...props.editorProps}\n onChange={onChange}\n />\n </div>\n );\n};\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { FC, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\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: FC<FileImportProps> = (props) => {\n const { onImportFinish, ...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 {props.children ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n 选择文件\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 { FC, 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 * ```\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: FC<FileUploadProps> = (props) => {\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 { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, FC } 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};\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: FC<FlexLayoutProps> = (props) => {\n const childrens = (isArray(props.children) ? props.children : [props.children]) as JSX.Element[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = !isUndefinedOrNull(props.fullIndex)\n ? isArray(props.fullIndex)\n ? props.fullIndex\n : [props.fullIndex as number]\n : [];\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 { CSSProperties, VFC } 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: VFC<GapProps> = (props) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties, VFC } 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};\nexport const IconWrapper: VFC<IconWrapperProps> = (props) => {\n return (\n <Tooltip title={props.hoverTips}>\n <div\n className={classNames('icon-wrapper', `icon-wrapper-${props.size || 'middle'}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </div>\n </Tooltip>\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 { FC, useEffect } from 'react';\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 * ```\n */\nexport const ModalWraper: FC<ModalFormProps> = (props) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【ModalWraper】组件已经过期,请使用ModalWrapper替换包括ModalWraper=>ModalWrapper、createModalWraperModel=>createModalWrapperModel,如果使用ModalWrapper组件原用法需要调整',\n );\n }, []);\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 } 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: FC<{ operationProps?: ModalOperationOldProps }> = (props) => {\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, FC } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n};\n\nexport const PageFixedFooter: FC<PageFixedFooterProps> = (props) => {\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_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\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_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } 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};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout: FC<SimpleLayoutProps> = (props) => {\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 return (\n <div className={className} style={props.style}>\n {props.title ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { classNames } from '@dimjs/utils';\nimport { Children, cloneElement, FC } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\ntype StaticMethods = {\n Condition: typeof Condition;\n Operate: typeof Operate;\n Table: typeof Table;\n Footer: typeof Footer;\n};\n\nconst overdueConsole = () => {\n console.error('@flatbiz/antd库【TableFilterLayout】组件已经过期,请使用【SimpleLayout】组件替代');\n};\n\nexport type TableFilterLayoutProps = {\n className?: string;\n isFixed?: boolean;\n fullIndex?: number;\n};\n\nexport const TableFilterLayout: FC<TableFilterLayoutProps> & StaticMethods = (props) => {\n useEffectCustom(() => {\n overdueConsole();\n }, []);\n\n return (\n <div\n className={classNames(\n 'table-filter-layout',\n { 'table-filter-layout-flex': props.isFixed },\n props.className,\n )}\n >\n {Children.map(props.children, (item, index) => {\n if (props.isFixed && index === props.fullIndex) {\n return cloneElement(item as JSX.Element, { className: 'table-filter-layout-flex-full' });\n }\n return item;\n })}\n </div>\n );\n};\n\nconst Condition: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-condition', props.className)}>{props.children}</div>;\n};\n\nconst Operate: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-operate', props.className)}>{props.children}</div>;\n};\n\nconst Table: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-table', props.className)}>{props.children}</div>;\n};\nconst Footer: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-footer', props.className)}>{props.children}</div>;\n};\n\nTableFilterLayout.Condition = Condition;\nTableFilterLayout.Operate = Operate;\nTableFilterLayout.Table = Table;\nTableFilterLayout.Footer = Footer;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: ModelState['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 } from '@dimjs/lang';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\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","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, treeToArray, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { ModelState, treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { dequal } from 'dequal';\nimport { getExpandedKeys } from './utils';\n\nconst deepEqual = (foo: any, bar: any) => {\n return dequal(foo, bar);\n};\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'\n> & {\n value?: string | number | Array<string | number>;\n modelKey: string;\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig、onTreeSelectorListChange将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\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 // onPreRequest:\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. 使用 onLabelRenderAdapter 拼接数据后,选中回填数据也是拼接后的\n */\n onChange?: (\n selectedValue?: Array<string | number> | string | number,\n selectedData?: TPlainObject[] | TPlainObject,\n selectAllDataList?: TPlainObject[],\n ) => void;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n};\n\nexport type TreeSelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeSelectorList: () => TreeSelectProps['treeData'];\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = forwardRef<TreeSelectorWrapperRefApi, TreeSelectorWrapperProps>(\n (props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n treeSelectorList,\n modelKey,\n value,\n fieldNames,\n ...otherProps\n } = props;\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-pre-${props.modelKey}`;\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...fieldNames };\n }, [fieldNames]);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === innerOperateValueRef.current && !isUndefinedOrNull(value)) return;\n // 重新计算 expandedKeys\n const valueList = (isArray(value) ? value : [value]) as Array<string | number>;\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n setRefreshKey(Date.now());\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-pre');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n treeSelectorList: respData || [],\n treeSelectorTiledArray: treeToArray(respData || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(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 (treeSelectorList) {\n void actions.setSelectBoxList({\n treeSelectorList: treeSelectorList,\n treeSelectorTiledArray: treeToArray(treeSelectorList || [], fieldNamesMerge.children),\n });\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const { requestStatus } = treeSelectorWrapperModel(modelKey).getState();\n if (\n newEffectDependencyList.length > 0 ||\n (!window[requestPreKey] && requestStatus !== 'request-success')\n ) {\n void startDataSourceRequest();\n }\n },\n newEffectDependencyList,\n deepEqual,\n );\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n },\n getTreeSelectorList: () => {\n return state.treeSelectorList;\n },\n };\n });\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 treeData = useMemo(() => {\n if (state.treeSelectorList.length === 0) return undefined;\n let allOption = props.showAllOption;\n if (allOption === true) {\n allOption = { [fieldNamesMerge.label]: '全部', [fieldNamesMerge.value]: '' };\n }\n if (allOption) {\n return [allOption, ...state.treeSelectorList];\n }\n return state.treeSelectorList;\n }, [fieldNamesMerge, props.showAllOption, state.treeSelectorList]);\n\n const getTreeExpandedKeys = hooks.useCallbackRef(\n (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 /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n */\n const onChange = hooks.useCallbackRef((changeValue: Array<string | number> | string | number) => {\n // treeCheckStrictly=true拿到的是对象数组数据\n const valueObjectList = isArray(changeValue) ? changeValue : changeValue ? [changeValue] : [];\n const valueList = valueObjectList.map((item) => {\n return isObject(item) ? item['value'] : item;\n }) as Array<string | number>;\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(valueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n\n const selectedAllList = [] as TPlainObject[];\n const selectedLeafList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n const selectedLeafValueList = [] as Array<string | number>;\n valueList.forEach((item) => {\n const target = state.treeSelectorTiledArray.find((temp) => temp[fieldNamesMerge.value] === item);\n if (!target) return;\n const children = target?.[fieldNamesMerge.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNamesMerge.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNamesMerge.value]);\n });\n if (props.treeCheckable) {\n if (\n props.treeCheckStrictly === true ||\n valueIsEqual(props.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n innerOperateValueRef.current = selectedAllValueList;\n props.onChange?.(selectedAllValueList, selectedAllList, selectedAllList);\n } else {\n innerOperateValueRef.current = selectedLeafValueList;\n props.onChange?.(selectedLeafValueList, selectedLeafList, selectedAllList);\n }\n } else {\n if (props.multiple) {\n innerOperateValueRef.current = selectedAllValueList;\n props.onChange?.(selectedAllValueList, selectedAllList, selectedAllList);\n } else {\n innerOperateValueRef.current = selectedAllValueList[0];\n props.onChange?.(selectedAllValueList[0], selectedAllList[0], selectedAllList);\n }\n }\n });\n\n const mapTree = (data) => {\n if (!data) return null;\n return data.map((item) => {\n const children = item[fieldNamesMerge.children];\n const value = item[fieldNamesMerge.value];\n const title = item[fieldNamesMerge.label];\n const titleAdapter = props.onLabelRenderAdapter?.(item) || title;\n return (\n <TreeSelect.TreeNode {...item} value={value} title={titleAdapter} key={`${value}`}>\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n };\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现\n */\n return (\n <TreeSelect\n key={refreshKey}\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n {...otherProps}\n className={classNames('v-tree-select-wrapper', props.className)}\n dropdownClassName={classNames('v-tree-select-wrapper-dropdown', props.dropdownClassName)}\n onChange={onChange}\n defaultValue={props.value}\n treeExpandedKeys={treeExpandedKeys}\n // treeData={treeData}\n loading={loading}\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 <NotFoundContent requestStatus={state.requestStatus} onAgainRequest={onAgainRequest} />\n }\n >\n {mapTree(treeData)}\n </TreeSelect>\n );\n },\n);\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description={description}\n className={'tree-selector-wrapper-empty'}\n >\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\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';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: ModelState['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","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, message, Spin, Tree, TreeProps } from 'antd';\nimport { AntdTreeNodeAttribute } from 'antd/lib/tree';\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 { ModelState, treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys } from './utils';\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 effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TreeProps['treeData'];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n value?: string | number | Array<string | number>;\n onChange?: (\n selectedKey?: string | number | Array<string | number>,\n selectedList?: TPlainObject[] | TPlainObject,\n selectedAllList?: 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: AntdTreeNodeAttribute & { isParent: boolean; isLeaf: boolean }) => ReactElement;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * 树包装组件\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 searchValue,\n showSearch,\n searchPlaceholder,\n ...otherProps\n } = props;\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-pre-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\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 useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === innerOperateValueRef.current && !isUndefinedOrNull(value)) return;\n // 重新计算 expandedKeys\n const valueList = (isArray(value) ? value : [value]) as Array<string | number>;\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n setRefreshKey(Date.now());\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 valueList = useMemo(() => {\n if (isUndefinedOrNull(value)) return undefined;\n return (isArray(value) ? value : [value]) as Array<string | number>;\n }, [value]);\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-pre');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n void actions.setTreeList({\n treeList: respData || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(respData as TPlainObject[]);\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 (selectorTreeList) {\n void actions.setTreeList({\n treeList: selectorTreeList || [],\n childrenName: fieldNames.children,\n });\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const realTimeState = treeWrapperModel(modelKey).getState();\n\n if (\n newEffectDependencyList.length > 0 ||\n (!window[requestPreKey] && realTimeState.requestStatus !== 'request-success')\n ) {\n void startDataSourceRequest();\n }\n }, newEffectDependencyList);\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, selectList?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n onChange?.(selectedKey, selectList, selectAllList);\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData) => {\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 setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n\n if (checkable) {\n if (!checkableResponseParentNode && !props.checkStrictly) {\n innerOperateValueRef.current = selectedLeafValueList;\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n innerOperateValueRef.current = checkedValueList;\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 onRespChange(undefined);\n }\n }\n });\n\n const treeData = useMemo(() => {\n if (treeSearchValue === '' || isUndefinedOrNull(treeSearchValue)) return state.treeList;\n const loop = (data: any[]): any[] =>\n data.map((item) => {\n const strTitle = item[fieldNames.label] as string;\n const index = strTitle.indexOf(treeSearchValue!);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue!.length);\n const title =\n index > -1 ? (\n <span>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : (\n <span>{strTitle}</span>\n );\n if (item[fieldNames.children]) {\n return {\n ...item,\n [fieldNames.label]: title,\n _treeItemName: strTitle,\n [fieldNames.children]: loop(item[fieldNames.children]),\n };\n }\n\n return {\n ...item,\n [fieldNames.label]: title,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [fieldNames.children, fieldNames.label, treeSearchValue, state.treeList]);\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 onSelectorTreeListChange?.(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 menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: nodeData._treeItemName || nodeData[fieldNames.label],\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 defaultCheckedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n defaultSelectedKeys: valueList,\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 <NotFoundContent\n requestStatus={state.requestStatus}\n loading={loading}\n onAgainRequest={startDataSourceRequest}\n />\n );\n});\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n loading: boolean;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <div className=\"tree-wrapper-empty\">\n <Spin spinning={props.loading}></Spin>\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description}>\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\n </div>\n );\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","useState","visible","_useState","setVisible","loading","_useState2","setLoading","onConfirmtTriggerClick","_hooks","useCallbackRef","event","stopPropagation","onConfirm","item","result","onClick","_isPromise","finally","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","_extends","buttonType","nromal","key","label","_createElement","Button","size","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","bind","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","console","log","ButtonOperate","foldList","useMemo","operateList","filter","has","isFold","viewList","className","_jsxs","Space","split","Divider","wrap","_isUndefined","map","placement","undefined","createElement","length","foldIcon","jsx","_MoreOutlined","defaultProps","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","useSafeState","initialState","state","setState","isMounted","useIsMounted","value","current","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","_extend","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","error","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","filterList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","targetOption","$await_3","concat","onChange","values","selectList","Cascader","showSearch","allowClear","notFoundContent","NotFoundContent","suffixIcon","_RedoOutlined","spin","multiple","description","Empty","image","PRESENTED_IMAGE_SIMPLE","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","onOpenChange","open","RangePicker","onCalendarChange","val","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","onOk","PageLoader","jsxs","DrawerWraper","_props$width","footer","operationProps","Drawer","_classNames","keyboard","forceRender","destroyOnClose","contentWrapperStyle","maxWidth","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","render","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","Form","Item","DatePickerWrapperFormItem","FormItemContent","data","viewLabel","join","DateRangePickerWrapperFormItem","InputWrapper","cpLockRef","useRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","isUndefinedOrNull","Date","now","onCompositionStart","onCompositionEnd","Input","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","e","Radio","RadioGroupFormItem","resetSelectBoxList","selectorWrapperModels","selectorWrapperModel","deepEqual","foo","bar","dequal","SelectorWrapper","showAllOption","effectDependencyList","onSelectorListChange","onSelectorRequestError","searchFieldName","isSearch","newEffectDependencyList","changeOperateValueRef","_selectorWrapperModel","valueIsEmpty","inputValue","searchId","requiredParamsKeys","isEmpty","keyword","warn","useCustomCompareEffect","allState","getState","Boolean","_isNumber","isNumber","_isString","onClearSelectorList","getSelectorList","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","otherParams","selectedList","targetList","valueIsEqual","mode","selectOptionsAll","Select","Option","showIcon","onLabelRenderAdapter","setSelectorList","setviewLabelList","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isBoolean","JSON","stringify","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","status","response","code","maxCount","targetIndex","findIndex","tempUid","splice","Upload","classNames","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","useFormInstance","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","_Fragment","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","_value","record","tableRowName","dataIndex","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","EditorWrapper","setKey","setInputValue","_e$target$$","content","$","html","respValue","_Editor","Editor","initialValue","init","menubar","language","height","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","cdnTinyMce","editorProps","FileImport","onImportFinish","showUploadList","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","childrens","direction","gap","fullIndexList","fullIndex","childrenStyle","flex","marginRight","marginBottom","cloneElement","Gap","inline","IconWrapper","Tooltip","hoverTips","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","Modal","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_auto","label_align_left","label_align_right","formItemClassName","preDefinedClassName","form","formItem","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","desc","contentStyle","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","catch","overdueConsole","TableFilterLayout","isFixed","Children","Condition","Operate","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","TreeSelectorWrapper","onTreeSelectorListChange","onTreeSelectorRequestError","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","innerOperateValueRef","refreshKey","setRefreshKey","expandedKeys","getTreeExpandedKeys","Array","Set","serviceResponseHandle","_respData2","treeToArray","_treeSelectorWrapperM2","getTreeSelectorList","onTreeExpand","treeData","allOption","_allOption","refresh","newTreeExpandedKeys","changeValue","valueObjectList","_isObject","prev","mergeList","selectedAllList","selectedLeafList","selectedAllValueList","selectedLeafValueList","treeCheckable","treeCheckStrictly","showCheckedStrategy","mapTree","titleAdapter","TreeSelect","TreeNode","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","TreeWrapper","selectorTreeList","checkableResponseParentNode","_props$checkableRespo","checkable","onSelectorTreeListChange","searchValue","searchPlaceholder","_treeWrapperModel$use","treeSearchValue","setTreeSearchValue","_params","$Try_2_Post","$Try_2_Catch","$await_4","realTimeState","useUpdateEffect","_item$label","getTreeDataList","onExpand","onRespChange","selectedKey","selectAllList","onTreeChangeHandle","checkedData","checkedValueList","checkStrictly","checked","currentNode","loop","_extends3","strTitle","beforeStr","substring","afterStr","slice","_extends2","_treeItemName","list","dataItem","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends4","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isValidElement","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","Spin","spinning","placeholder","Tree"],"mappings":"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"}
|