@flatbiz/antd 2.5.4 → 2.5.5
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 +14 -0
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/index.d.ts +57 -16
- package/package.json +2 -2
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 * 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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"}
|
|
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/request-status/index.tsx","@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 { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus = 'request-init' | 'request-progress' | 'request-success' | 'request-error';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, ['request-success', 'request-progress', 'request-error'])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value: string | number, selectedList: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件\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, requestMessageConfig, ...otherProps } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n />\n );\n});\n","import { 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';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n // originalSelectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n 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, isString } from '@dimjs/lang';\nimport { extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Select, SelectProps } from 'antd';\nimport { DependencyList, forwardRef, ReactElement, useImperativeHandle, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\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 * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置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 * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchValue\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (\n value?: string | number | string[] | number[],\n selectedList?: TPlainObject[] | TPlainObject,\n ) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\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. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = forwardRef<SelectorWrapperRefApi, SelectorWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n showAllOption,\n effectDependencyList,\n onSelectorListChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n ...otherProps\n } = props;\n const isSearch = operateType === 'search' && selectorList === undefined;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value' }, fieldNames);\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) {\n setRefreshKey(Date.now());\n }\n }, [value, state.selectorList]);\n\n useEffectCustom(() => {\n if (isSearch) {\n if (value !== innerOperateValueRef.current) {\n if (isUndefinedOrNull(value)) {\n void actions.resetSelectBoxList();\n onSelectorListChange?.([]);\n } else {\n void startDataSourceRequest(undefined, props.value as string | number);\n }\n }\n }\n }, [value]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\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-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await 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 (isSearch) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = selectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n deepEqual,\n );\n\n useEffectCustom(() => {\n if (selectorList) {\n void actions.setSelectBoxList({ selectorList });\n onSelectorListChange?.(selectorList);\n }\n }, [selectorList]);\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 innerOperateValueRef.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 key={refreshKey}\n showSearch={true}\n allowClear={true}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n defaultValue={value}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={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 {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n});\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { 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';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray } 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, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\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 /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\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 requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\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 requestMessageConfig,\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-progress-${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-progress');\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 // 当无依赖项时,如果存在缓存数据,就不在调用接口\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 useEffectCustom(() => {\n if (treeSelectorList) {\n void actions.setSelectBoxList({\n treeSelectorList: treeSelectorList,\n treeSelectorTiledArray: treeToArray(treeSelectorList || [], fieldNamesMerge.children),\n });\n }\n }, [treeSelectorList]);\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 * 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 <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(treeData)}\n </TreeSelect>\n );\n },\n);\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n","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, 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 { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { 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 /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: 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 * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\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 requestMessageConfig,\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-progress-${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-progress');\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 // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const realTimeState = treeWrapperModel(modelKey).getState();\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 (selectorTreeList) {\n void actions.setTreeList({\n treeList: selectorTreeList || [],\n childrenName: fieldNames.children,\n });\n }\n }, [selectorTreeList]);\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 <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n"],"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","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","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","suffixIcon","_RedoOutlined","spin","multiple","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","onLabelRenderAdapter","searchFieldName","searchIdFieldName","isSearch","newEffectDependencyList","_selectorWrapperModel","refreshKey","setRefreshKey","innerOperateValueRef","valueIsEmpty","inputValue","searchId","requiredParamsKeys","isEmpty","keyword","warn","useCustomCompareEffect","Boolean","allState","getState","onClearSelectorList","getSelectorList","filterOption","input","option","mergeString","_isString","toLowerCase","indexOf","onSearch","useDebounceCallback","otherParams","selectedList","targetList","mode","selectOptionsAll","Select","Option","showIcon","setSelectorList","setviewLabelList","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","_isBoolean","JSON","stringify","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","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","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","placeholder","Tree"],"mappings":"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"}
|