@flatbiz/antd 2.5.20 → 2.5.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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/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/date-range-picker-wrapper-form-item/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/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/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/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/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, ReactElement, useState } from 'react';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'overlay'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper: 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 const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n void item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <Button\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </Button>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n setVisible(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n visible={visible}\n okButtonProps={{\n loading,\n }}\n >\n <Button\n size=\"small\"\n {...otherProps}\n onClick={onConfirmtTriggerClick}\n type={buttonType}\n danger\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItems.push(confirm);\n } else {\n menuItems.push(nromal);\n }\n });\n\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n overlay={<Menu items={menuItems} />}\n onVisibleChange={(_visible) => {\n console.log(visible);\n if (!_visible) {\n setVisible(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { 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 | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n 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 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 const foldList = useMemo(() => {\n const filterList = 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 return [...filterList].map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\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, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef, VFC } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\n\nexport type FormItemNamePath = string | number | Array<string | number>;\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: Omit<DateRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n */\nexport const DateRangePickerWrapperFormItem: VFC<DateRangePickerWrapperFormItemProps> = (props) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","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[]; requestStatus?: ModelState['requestStatus'] };\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 if (params.requestStatus) {\n state.requestStatus = params.requestStatus;\n }\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.selectorList = [];\n state.requestStatus = 'request-init';\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 { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const selectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Select, SelectProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} 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';\nimport { getVauleList, selectorWrapperValueDeepEqual } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /**\n * 与 effectDependencyList 配合使用\n */\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'\n | 'onSearch'\n | 'loading'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\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 * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * 3. 设置后 serviceConfig 失效\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. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值: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?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n\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. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\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 labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const isSearch = operateType === 'search';\n // search模式下,selectorList配置失效\n const hasSelectorList = props.hasOwnProperty('selectorList') && !isSearch;\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-${modelKey}`;\n const fieldNamesMerge = { label: 'label', value: 'value', ...fieldNames };\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple', 'tags']);\n // 保存 onChange 选择数据\n const innerOperateValueRef = useRef<any>();\n const defaultValueRef = useRef<any>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (!selectorWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} SelectorWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = value;\n defaultValueRef.current = isMultiple ? valueList : valueList[0];\n setRefreshKey(Date.now());\n if (isSearch) {\n if (isUndefinedOrNull(value)) {\n void actions.resetSelectBoxList();\n // todo\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 if (state.selectorList.length > 0) {\n void actions.setSelectBoxList({ selectorList: [] });\n }\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 window[requestPreKey] = false;\n void actions.setSelectBoxList({ selectorList: respAdapterData, requestStatus: 'request-success' });\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 if (hasSelectorList) {\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n void actions.setSelectBoxList({ selectorList: [] });\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 dequal,\n );\n\n useEffectCustom(() => {\n if (state.requestStatus === 'request-success') {\n // 初始化不调用\n onSelectorListChange?.(state.selectorList);\n }\n }, [state.selectorList]);\n\n useEffectCustom(() => {\n if (hasSelectorList) {\n void actions.setSelectBoxList({ selectorList: selectorList || [], requestStatus: 'request-success' });\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 onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n if (labelInValue) {\n const labelInValueList = selectedList.map((item) => {\n return {\n [lvLabel]: item[fieldNamesMerge.label],\n [lvValue]: item[fieldNamesMerge.value],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[fieldNamesMerge.value]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((value: any, otherParams) => {\n innerOperateValueRef.current = value;\n const selectedList = isArray(otherParams) ? otherParams : otherParams ? [otherParams] : [];\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig?.value) {\n targetList.push({\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n });\n } else {\n const filterTarget = state.selectorList.find((temp) => temp[fieldNamesMerge.value] === item.value);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n return (\n allOptionConfig\n ? [{ [fieldNamesMerge.label]: allOptionConfig.label, [fieldNamesMerge.value]: allOptionConfig.value }]\n : []\n ).concat(state.selectorList);\n }, [allOptionConfig, fieldNamesMerge.label, fieldNamesMerge.value, state.selectorList]);\n\n return (\n <Select\n key={refreshKey}\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n defaultValue={defaultValueRef.current}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {selectorAllList.map((item) => {\n const value = item[fieldNamesMerge.value];\n const label = item[fieldNamesMerge.label];\n return (\n <Select.Option value={value} label={label} key={value} disabled={item['disabled']}>\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, isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport: FC<FileImportProps> = (props) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { 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 { Col } from 'antd';\nimport { FC } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol: FC<FormColProps> = (props) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo, VFC } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol: VFC<FormOperateColProps> = (props) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, FC, Fragment, isValidElement, ReactElement, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps;\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow: FC<FormRowProps> = (props) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0)\n return { gridList: [] as number[], gridGroupList: [] };\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { 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 { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement, VFC } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout: VFC<LabelValueLayoutProps> = (props) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { 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, extend } 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 /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\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 const style = extend({}, props.style, { padding: props.padding, width: props.width });\n\n return (\n <div className={className} style={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, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = otherProps.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n const isMultiple = otherProps.treeCheckable;\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n // const titleAdapter = onLabelRenderAdapter?.(item) || title;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = item[fieldNamesMerge.disabled] ? item[fieldNamesMerge.disabled] : item.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind<TPlainObject>(\n state.treeSelectorTiledArray,\n item as string,\n fieldNamesMerge.value,\n );\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n dropdownClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.dropdownClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={renderValueList as any}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport { 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, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: AntdTreeNodeAttribute & { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: any[]): any[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","useState","visible","_useState","setVisible","loading","_useState2","setLoading","onConfirmtTriggerClick","_hooks","useCallbackRef","event","stopPropagation","onConfirm","item","result","onClick","_isPromise","finally","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","_extends","buttonType","nromal","key","label","_createElement","Button","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","console","log","ButtonOperate","viewList","useMemo","operateList","filter","has","isFold","foldList","filterList","map","className","_jsxs","Space","split","Divider","wrap","_isUndefined","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","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","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","onOpenChange","open","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","setFields","reftest","useRef","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","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","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","isUndefinedOrNull","Date","now","onCompositionStart","onCompositionEnd","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","e","Radio","RadioGroupFormItem","resetSelectBoxList","selectorWrapperModels","selectorWrapperModel","getVauleList","labelInValueFieldNames","tempList","_isObject","array2map","list","selectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","SelectorWrapper","showAllOption","effectDependencyList","onSelectorListChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","searchIdFieldName","labelInValue","isSearch","hasSelectorList","hasOwnProperty","newEffectDependencyList","_selectorWrapperModel","labelInValueFieldNamesMerge","refreshKey","setRefreshKey","allOptionConfig","isTrue","isMultiple","mode","innerOperateValueRef","defaultValueRef","valueIsEmpty","inputValue","searchId","requiredParamsKeys","isEmpty","keyword","warn","useCustomCompareEffect","Boolean","allState","getState","onClearSelectorList","getSelectorList","filterOption","input","option","mergeString","_isString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","lvLabel","lvValue","labelInValueList","onInnerChange","otherParams","targetList","_targetList$push","filterTarget","selectorAllList","_ref2","Select","dropdownMatchSelectWidth","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","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","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","buttonName","showUploadList","isValidElement","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","childrens","direction","gap","fullIndexList","fullIndex","childrenStyle","flex","marginRight","marginBottom","cloneElement","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","Object","keys","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","a","b","gridGroupList","defaultGrid","FormRow","screenType","childrenList","toArray","_currentGridList","_temp$props","_extends2","itemProps","newProps","Gap","inline","IconWrapper","Tooltip","hoverTips","LabelValueLayout","labelWidth","Descriptions","column","bordered","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","formItem","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","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","treeSelectorWrapperValueDeepEqual","TreeSelectorWrapper","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","onChangeHandle","hasTreeSelectorList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Array","Set","serviceResponseHandle","_respData2","onChangeSelectorList","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","arrayFind","triggerNode","checked","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isNumber","getValueOrDefault","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","checkableResponseParentNode","_props$checkableRespo","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","treeSearchValue","setTreeSearchValue","_params","$Try_2_Post","$Try_2_Catch","$await_4","useUpdateEffect","_item$label","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/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/date-range-picker-wrapper-form-item/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/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/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/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/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, ReactElement, useState } from 'react';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'overlay'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper: 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 const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n void item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <Button\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </Button>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n setVisible(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n visible={visible}\n okButtonProps={{\n loading,\n }}\n >\n <Button\n size=\"small\"\n {...otherProps}\n onClick={onConfirmtTriggerClick}\n type={buttonType}\n danger\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItems.push(confirm);\n } else {\n menuItems.push(nromal);\n }\n });\n\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n overlay={<Menu items={menuItems} />}\n onVisibleChange={(_visible) => {\n console.log(visible);\n if (!_visible) {\n setVisible(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPromise, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\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 | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n operateList: Array<ButtonOperateItem | null>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\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 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 const foldList = useMemo(() => {\n const filterList = 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 return [...filterList].map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\n }, [props.operateList]);\n\n return (\n <div className={classNames('table-operate', props.className)}>\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, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, _format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef, VFC } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\n\nexport type FormItemNamePath = string | number | Array<string | number>;\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: Omit<DateRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n */\nexport const DateRangePickerWrapperFormItem: VFC<DateRangePickerWrapperFormItemProps> = (props) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","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[]; requestStatus?: ModelState['requestStatus'] };\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 if (params.requestStatus) {\n state.requestStatus = params.requestStatus;\n }\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.selectorList = [];\n state.requestStatus = 'request-init';\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 { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const selectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Select, SelectProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} 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';\nimport { getVauleList, selectorWrapperValueDeepEqual } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /**\n * 与 effectDependencyList 配合使用\n */\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'\n | 'onSearch'\n | 'loading'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\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 * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * 3. 设置后 serviceConfig 失效\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. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值: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?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n\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. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\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 labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const isSearch = operateType === 'search';\n // search模式下,selectorList配置失效\n const hasSelectorList = props.hasOwnProperty('selectorList') && !isSearch;\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-${modelKey}`;\n const fieldNamesMerge = { label: 'label', value: 'value', ...fieldNames };\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple', 'tags']);\n // 保存 onChange 选择数据\n const innerOperateValueRef = useRef<any>();\n const defaultValueRef = useRef<any>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (!selectorWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} SelectorWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = value;\n defaultValueRef.current = isMultiple ? valueList : valueList[0];\n setRefreshKey(Date.now());\n if (isSearch) {\n if (isUndefinedOrNull(value)) {\n void actions.resetSelectBoxList();\n // todo\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 if (state.selectorList.length > 0) {\n void actions.setSelectBoxList({ selectorList: [] });\n }\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 window[requestPreKey] = false;\n void actions.setSelectBoxList({ selectorList: respAdapterData, requestStatus: 'request-success' });\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 if (hasSelectorList) {\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n void actions.setSelectBoxList({ selectorList: [] });\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 dequal,\n );\n\n useEffectCustom(() => {\n if (state.requestStatus === 'request-success') {\n // 初始化不调用\n onSelectorListChange?.(state.selectorList);\n }\n }, [state.selectorList]);\n\n useEffectCustom(() => {\n if (hasSelectorList) {\n void actions.setSelectBoxList({ selectorList: selectorList || [], requestStatus: 'request-success' });\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 onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n if (labelInValue) {\n const labelInValueList = selectedList.map((item) => {\n return {\n [lvLabel]: item[fieldNamesMerge.label],\n [lvValue]: item[fieldNamesMerge.value],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[fieldNamesMerge.value]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((value: any, otherParams) => {\n innerOperateValueRef.current = value;\n const selectedList = isArray(otherParams) ? otherParams : otherParams ? [otherParams] : [];\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig?.value) {\n targetList.push({\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n });\n } else {\n const filterTarget = state.selectorList.find((temp) => temp[fieldNamesMerge.value] === item.value);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n return (\n allOptionConfig\n ? [{ [fieldNamesMerge.label]: allOptionConfig.label, [fieldNamesMerge.value]: allOptionConfig.value }]\n : []\n ).concat(state.selectorList);\n }, [allOptionConfig, fieldNamesMerge.label, fieldNamesMerge.value, state.selectorList]);\n\n return (\n <Select\n key={refreshKey}\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n defaultValue={defaultValueRef.current}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {selectorAllList.map((item) => {\n const value = item[fieldNamesMerge.value];\n const label = item[fieldNamesMerge.label];\n return (\n <Select.Option value={value} label={label} key={value} disabled={item['disabled']}>\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, isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport: FC<FileImportProps> = (props) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { 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 { Col } from 'antd';\nimport { FC } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol: FC<FormColProps> = (props) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo, VFC } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol: VFC<FormOperateColProps> = (props) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, FC, Fragment, isValidElement, ReactElement, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps;\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow: FC<FormRowProps> = (props) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0)\n return { gridList: [] as number[], gridGroupList: [] };\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { 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 { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement, VFC } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout: VFC<LabelValueLayoutProps> = (props) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { 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, extend } 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 /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\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 const style = extend({}, props.style, { padding: props.padding, width: props.width });\n\n return (\n <div className={className} style={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, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = otherProps.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n const isMultiple = otherProps.treeCheckable;\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n // const titleAdapter = onLabelRenderAdapter?.(item) || title;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = item[fieldNamesMerge.disabled] ? item[fieldNamesMerge.disabled] : item.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind<TPlainObject>(\n state.treeSelectorTiledArray,\n item as string,\n fieldNamesMerge.value,\n );\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n dropdownClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.dropdownClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={renderValueList as any}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport { 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, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: AntdTreeNodeAttribute & { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: any[]): any[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","useState","visible","_useState","setVisible","loading","_useState2","setLoading","onConfirmtTriggerClick","_hooks","useCallbackRef","event","stopPropagation","onConfirm","item","result","onClick","_isPromise","finally","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","_extends","buttonType","nromal","key","label","_createElement","Button","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","console","log","ButtonOperate","viewList","useMemo","operateList","filter","has","isFold","foldList","filterList","map","className","_classNames","classNames","_jsxs","Space","split","Divider","wrap","_isUndefined","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","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","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","onOpenChange","open","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","setFields","reftest","useRef","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","onOk","PageLoader","jsxs","DrawerWraper","_props$width","footer","operationProps","Drawer","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","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","isUndefinedOrNull","Date","now","onCompositionStart","onCompositionEnd","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","e","Radio","RadioGroupFormItem","resetSelectBoxList","selectorWrapperModels","selectorWrapperModel","getVauleList","labelInValueFieldNames","tempList","_isObject","array2map","list","selectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","SelectorWrapper","showAllOption","effectDependencyList","onSelectorListChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","searchIdFieldName","labelInValue","isSearch","hasSelectorList","hasOwnProperty","newEffectDependencyList","_selectorWrapperModel","labelInValueFieldNamesMerge","refreshKey","setRefreshKey","allOptionConfig","isTrue","isMultiple","mode","innerOperateValueRef","defaultValueRef","valueIsEmpty","inputValue","searchId","requiredParamsKeys","isEmpty","keyword","warn","useCustomCompareEffect","Boolean","allState","getState","onClearSelectorList","getSelectorList","filterOption","input","option","mergeString","_isString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","lvLabel","lvValue","labelInValueList","onInnerChange","otherParams","targetList","_targetList$push","filterTarget","selectorAllList","_ref2","Select","dropdownMatchSelectWidth","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","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","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","buttonName","showUploadList","isValidElement","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","childrens","direction","gap","fullIndexList","fullIndex","childrenStyle","flex","marginRight","marginBottom","cloneElement","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","Object","keys","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","a","b","gridGroupList","defaultGrid","FormRow","screenType","childrenList","toArray","_currentGridList","_temp$props","_extends2","itemProps","newProps","Gap","inline","IconWrapper","Tooltip","hoverTips","LabelValueLayout","labelWidth","Descriptions","column","bordered","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","formItem","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","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","treeSelectorWrapperValueDeepEqual","TreeSelectorWrapper","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","onChangeHandle","hasTreeSelectorList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Array","Set","serviceResponseHandle","_respData2","onChangeSelectorList","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","arrayFind","triggerNode","checked","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isNumber","getValueOrDefault","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","checkableResponseParentNode","_props$checkableRespo","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","treeSearchValue","setTreeSearchValue","_params","$Try_2_Post","$Try_2_Catch","$await_4","useUpdateEffect","_item$label","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}