正在显示
77 个修改的文件
包含
362 行增加
和
310 行删除
.fatherrc.ts
0 → 100644
| 1 | +import { defineConfig } from 'father'; | |
| 2 | + | |
| 3 | +export default defineConfig({ | |
| 4 | + umd: { output: 'dist/lib' }, | |
| 5 | + esm: { | |
| 6 | + output: 'dist', | |
| 7 | + input: 'src', // 默认编译目录 | |
| 8 | + platform: 'browser', // 默认构建为 Browser 环境的产物 | |
| 9 | + transformer: 'babel', // 默认使用 babel 以提供更好的兼容性 | |
| 10 | + }, | |
| 11 | + // 或者 | |
| 12 | + cjs: { | |
| 13 | + output: 'dist/cjs', | |
| 14 | + input: 'src', // 默认编译目录 | |
| 15 | + platform: 'node', // 默认构建为 Node.js 环境的产物 | |
| 16 | + transformer: 'esbuild', // 默认使用 esbuild 以获得更快的构建速度 | |
| 17 | + }, | |
| 18 | +}); | ... | ... |
| ... | ... | @@ -4,8 +4,10 @@ |
| 4 | 4 | "description": "", |
| 5 | 5 | "main": "index.js", |
| 6 | 6 | "scripts": { |
| 7 | + "father:dev": "father dev", | |
| 8 | + "father:build": "father build", | |
| 7 | 9 | "dev": "vite", |
| 8 | - "build": "vite build && tsc --declaration --emitDeclarationOnly --noEmitOnError false", | |
| 10 | + "build": "vite build&&tsc", | |
| 9 | 11 | "prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'", |
| 10 | 12 | "lint-staged": "lint-staged", |
| 11 | 13 | "test": "echo \"Error: no test specified\" && exit 1" |
| ... | ... | @@ -25,11 +27,6 @@ |
| 25 | 27 | "author": "juvenile <juvenile.business01@gmail.com>", |
| 26 | 28 | "license": "MIT", |
| 27 | 29 | "devDependencies": { |
| 28 | - "@amap/amap-jsapi-loader": "^1.0.1", | |
| 29 | - "@ant-design/icons": "^5.1.2", | |
| 30 | - "@formily/antd-v5": "1.1.0-beta.3", | |
| 31 | - "@formily/core": "^2.2.24", | |
| 32 | - "@formily/react": "^2.2.24", | |
| 33 | 30 | "@types/jquery": "^3.5.16", |
| 34 | 31 | "@types/node": "^20.2.5", |
| 35 | 32 | "@types/react": "^18.2.7", |
| ... | ... | @@ -37,7 +34,6 @@ |
| 37 | 34 | "@typescript-eslint/eslint-plugin": "^5.59.7", |
| 38 | 35 | "@typescript-eslint/parser": "^5.59.7", |
| 39 | 36 | "@vitejs/plugin-react": "^4.0.0", |
| 40 | - "antd": "^5.5.1", | |
| 41 | 37 | "braft-editor": "^2.3.9", |
| 42 | 38 | "classnames": "^2.3.2", |
| 43 | 39 | "eslint": "^8.41.0", |
| ... | ... | @@ -50,7 +46,7 @@ |
| 50 | 46 | "lint-staged": "^13.2.2", |
| 51 | 47 | "moment": "^2.29.4", |
| 52 | 48 | "prettier": "^2.8.8", |
| 53 | - "react-router-dom": "^6.11.2", | |
| 49 | + "styled-components": "^5.3.11", | |
| 54 | 50 | "stylelint": "^15.6.2", |
| 55 | 51 | "stylelint-config-rational-order": "^0.1.2", |
| 56 | 52 | "stylelint-config-standard": "^33.0.0", |
| ... | ... | @@ -61,8 +57,16 @@ |
| 61 | 57 | "vite": "^4.3.9" |
| 62 | 58 | }, |
| 63 | 59 | "dependencies": { |
| 64 | - "react": "^18.2.0", | |
| 65 | - "react-dom": "^18.2.0", | |
| 66 | - "react-is": "^18.2.0" | |
| 60 | + "@amap/amap-jsapi-loader": "^1.0.1", | |
| 61 | + "@ant-design/icons": "^5.1.4", | |
| 62 | + "@formily/antd-v5": "1.1.0-beta.3", | |
| 63 | + "@formily/core": "^2.2.24", | |
| 64 | + "@formily/react": "^2.2.24", | |
| 65 | + "antd": "5.3.2", | |
| 66 | + "father": "^4.2.2", | |
| 67 | + "react": "^18.0.0", | |
| 68 | + "react-dom": "^18.0.0", | |
| 69 | + "react-is": "^18.2.0", | |
| 70 | + "react-router-dom": "^6.0.2" | |
| 67 | 71 | } |
| 68 | 72 | } | ... | ... |
packages/hr/bread_crumb/index.d.ts
已删除
100644 → 0
packages/hr/button_radio/index.d.ts
已删除
100644 → 0
| 1 | -import React from 'react'; | |
| 2 | -import { ButtonProps } from 'antd'; | |
| 3 | -import type { SpaceProps } from 'antd'; | |
| 4 | -export interface ButtonRadioProps extends SpaceProps { | |
| 5 | - className?: string; | |
| 6 | - prefixCls?: string; | |
| 7 | - buttonProps?: ButtonProps; | |
| 8 | - onChange?: (value: any) => void; | |
| 9 | - value?: any; | |
| 10 | - [props: string]: any; | |
| 11 | -} | |
| 12 | -declare const ButtonRadio: React.FC<ButtonRadioProps>; | |
| 13 | -export default ButtonRadio; |
packages/hr/form_modal/index.d.ts
已删除
100644 → 0
| 1 | -import React from 'react'; | |
| 2 | -import { ModalProps } from 'antd'; | |
| 3 | -interface Props extends ModalProps { | |
| 4 | - handleOk?: (values: { | |
| 5 | - [props: string]: string; | |
| 6 | - }, e: React.MouseEvent<HTMLButtonElement>) => void; | |
| 7 | - handleCancel?: (e: React.MouseEvent<HTMLButtonElement>) => void; | |
| 8 | - initialValues?: { | |
| 9 | - props?: string; | |
| 10 | - }; | |
| 11 | - open: boolean; | |
| 12 | -} | |
| 13 | -declare const FormModal: React.FC<Props>; | |
| 14 | -export default FormModal; |
packages/hr/image/index.d.ts
已删除
100644 → 0
packages/hr/image/index.tsx
已删除
100644 → 0
| 1 | -import { ImageProps, Image as MyImage } from 'antd'; | |
| 2 | - | |
| 3 | -interface Props extends ImageProps { | |
| 4 | - imgValues?: string[]; | |
| 5 | - show_image?: boolean; | |
| 6 | - setShowImage?: (value: any) => void; | |
| 7 | -} | |
| 8 | - | |
| 9 | -const Image: React.FC<Props> = (props) => { | |
| 10 | - const { src, style, preview, imgValues = [], show_image, setShowImage, ...args } = props; | |
| 11 | - let my_preview = preview | |
| 12 | - ? preview | |
| 13 | - : { | |
| 14 | - visible: show_image, | |
| 15 | - src: src, | |
| 16 | - }; | |
| 17 | - | |
| 18 | - return ( | |
| 19 | - <> | |
| 20 | - <MyImage | |
| 21 | - width={200} | |
| 22 | - style={style} | |
| 23 | - src={src} | |
| 24 | - preview={my_preview} | |
| 25 | - {...args} | |
| 26 | - onClick={() => setShowImage && setShowImage(!show_image)} | |
| 27 | - /> | |
| 28 | - <div style={{ display: 'none' }}> | |
| 29 | - <MyImage.PreviewGroup | |
| 30 | - preview={{ | |
| 31 | - visible: show_image, | |
| 32 | - onVisibleChange: (vis) => setShowImage && setShowImage(vis), | |
| 33 | - }} | |
| 34 | - > | |
| 35 | - {imgValues.map((data: string, index: number) => ( | |
| 36 | - <MyImage src={data} key={index} /> | |
| 37 | - ))} | |
| 38 | - </MyImage.PreviewGroup> | |
| 39 | - </div> | |
| 40 | - </> | |
| 41 | - ); | |
| 42 | -}; | |
| 43 | - | |
| 44 | -export default Image; |
packages/hr/map_select/index.d.ts
已删除
100644 → 0
packages/hr/modal_confirm/index.d.ts
已删除
100644 → 0
src/hr/App.d.ts
0 → 100644
| ... | ... | @@ -2,7 +2,7 @@ import { useMemo } from 'react'; |
| 2 | 2 | import AddTags from '@/hr/add_tags'; |
| 3 | 3 | import { FormProvider } from '@formily/react'; |
| 4 | 4 | import { createForm } from '@formily/core'; |
| 5 | -import SearchWrap from '@/hr/search/search'; | |
| 5 | +import SearchWrap from '@/hr/search'; | |
| 6 | 6 | import InputField from '@/hr/antd_input'; |
| 7 | 7 | |
| 8 | 8 | const App = () => { | ... | ... |
| ... | ... | @@ -7,18 +7,19 @@ import { Field } from '@formily/react'; |
| 7 | 7 | import { FieldProps } from '../typings'; |
| 8 | 8 | import { FormItem } from '@formily/antd-v5'; |
| 9 | 9 | |
| 10 | -interface Props { | |
| 10 | +export interface TagProps extends FieldProps { | |
| 11 | + name: string; | |
| 12 | + title?: string; | |
| 11 | 13 | initValues?: string[]; |
| 12 | - tag_text?: string; | |
| 13 | - showValues?: boolean; | |
| 14 | - onChange?: (value: string[]) => void; | |
| 15 | - value?: string[]; | |
| 16 | - maxLength?: number; | |
| 17 | 14 | } |
| 18 | 15 | |
| 19 | -export const AddTag = (props: Props) => { | |
| 20 | - const { onChange, tag_text, showValues = true, value = [], maxLength = 0 } = props; | |
| 21 | - | |
| 16 | +export const TagComponent: React.FC<TagProps> = ({ | |
| 17 | + onChange, | |
| 18 | + tag_text, | |
| 19 | + showValues = true, | |
| 20 | + value = [], | |
| 21 | + maxLength = 0, | |
| 22 | +}) => { | |
| 22 | 23 | const [inputVisible, setInputVisible] = useState(false); |
| 23 | 24 | const [inputValue, setInputValue] = useState(''); |
| 24 | 25 | const inputRef = useRef<InputRef>(null); |
| ... | ... | @@ -30,7 +31,7 @@ export const AddTag = (props: Props) => { |
| 30 | 31 | }, [inputVisible]); |
| 31 | 32 | |
| 32 | 33 | const handleClose = (removedTag: string) => { |
| 33 | - const newTags = value?.filter((tag) => tag !== removedTag) || []; | |
| 34 | + const newTags = value?.filter((tag: string) => tag !== removedTag) || []; | |
| 34 | 35 | |
| 35 | 36 | onChange && onChange([...newTags]); |
| 36 | 37 | }; |
| ... | ... | @@ -56,7 +57,7 @@ export const AddTag = (props: Props) => { |
| 56 | 57 | {showValues && ( |
| 57 | 58 | <Space size={10} wrap> |
| 58 | 59 | {value && |
| 59 | - value.map((tag, index) => { | |
| 60 | + value.map((tag: string, index: number) => { | |
| 60 | 61 | const isLongTag = tag.length > 20; |
| 61 | 62 | const tagElem = ( |
| 62 | 63 | <Tag |
| ... | ... | @@ -115,21 +116,20 @@ export const AddTag = (props: Props) => { |
| 115 | 116 | ); |
| 116 | 117 | }; |
| 117 | 118 | |
| 118 | -interface AddTagsProps extends FieldProps { | |
| 119 | - name: string; | |
| 120 | - title?: string; | |
| 121 | - initValues?: string[]; | |
| 122 | -} | |
| 123 | -const AddTags: React.FC<AddTagsProps> = (props) => { | |
| 124 | - const { name, title, decoratorProps, componentProps, validator } = props; | |
| 125 | - | |
| 119 | +const AddTags: React.FC<TagProps> = ({ | |
| 120 | + name, | |
| 121 | + title, | |
| 122 | + decoratorProps, | |
| 123 | + componentProps, | |
| 124 | + validator, | |
| 125 | +}) => { | |
| 126 | 126 | return ( |
| 127 | 127 | <Field |
| 128 | 128 | name={name} |
| 129 | 129 | title={title} |
| 130 | 130 | decorator={[FormItem, { ...decoratorProps }]} |
| 131 | 131 | component={[ |
| 132 | - AddTag, | |
| 132 | + TagComponent, | |
| 133 | 133 | { |
| 134 | 134 | ...componentProps, |
| 135 | 135 | }, | ... | ... |
| ... | ... | @@ -10,12 +10,11 @@ import { FormItem } from '@formily/antd-v5'; |
| 10 | 10 | import { Field } from '@formily/react'; |
| 11 | 11 | import { IFieldProps } from '@formily/core'; |
| 12 | 12 | |
| 13 | -interface Props extends BraftEditorProps { | |
| 13 | +interface EditorProps extends BraftEditorProps { | |
| 14 | 14 | contentStyle?: { [props: string]: string | number }; |
| 15 | 15 | changeEditor?: (editorState: EditorState) => void; |
| 16 | 16 | } |
| 17 | - | |
| 18 | -const Editor: React.FC<Props> = (props) => { | |
| 17 | +const Editor: React.FC<EditorProps> = (props) => { | |
| 19 | 18 | const { |
| 20 | 19 | value = null, |
| 21 | 20 | changeEditor, |
| ... | ... | @@ -60,7 +59,7 @@ const Editor: React.FC<Props> = (props) => { |
| 60 | 59 | ); |
| 61 | 60 | }; |
| 62 | 61 | |
| 63 | -interface P extends IFieldProps { | |
| 62 | +export interface BraftDeitorProps extends IFieldProps { | |
| 64 | 63 | name: string | [string, string]; |
| 65 | 64 | title?: string | ReactElement; |
| 66 | 65 | validator?: any; |
| ... | ... | @@ -73,7 +72,7 @@ interface P extends IFieldProps { |
| 73 | 72 | }; |
| 74 | 73 | } |
| 75 | 74 | |
| 76 | -const BraftDeitor: React.FC<P> = (props) => { | |
| 75 | +const BraftDeitor: React.FC<BraftDeitorProps> = (props) => { | |
| 77 | 76 | const { name, title, validator, decoratorProps, componentProps } = props; |
| 78 | 77 | |
| 79 | 78 | return ( | ... | ... |
| ... | ... | @@ -3,16 +3,14 @@ import { Breadcrumb as MyBreadcrumb } from 'antd'; |
| 3 | 3 | import { ItemType } from 'antd/lib/breadcrumb/Breadcrumb'; |
| 4 | 4 | import './bread.less'; |
| 5 | 5 | |
| 6 | -interface P { | |
| 6 | +export interface BreadcrumbProps { | |
| 7 | 7 | separator?: string; |
| 8 | 8 | items: ItemType[]; |
| 9 | 9 | } |
| 10 | 10 | |
| 11 | -const Breadcrumb: React.FC<P> = (props) => { | |
| 12 | - const { separator = '>', items = [] } = props; | |
| 13 | - | |
| 11 | +const Breadcrumb: React.FC<BreadcrumbProps> = ({ separator = '>', items = [] }) => { | |
| 14 | 12 | return ( |
| 15 | - <div className={'bread_warp'}> | |
| 13 | + <div className="breadcrumb-wrapper"> | |
| 16 | 14 | <MyBreadcrumb separator={separator} items={items} /> |
| 17 | 15 | </div> |
| 18 | 16 | ); | ... | ... |
| 1 | 1 | import React from 'react'; |
| 2 | 2 | import { Button, Space, ButtonProps } from 'antd'; |
| 3 | 3 | import type { SpaceProps } from 'antd'; |
| 4 | + | |
| 5 | +interface OptionType { | |
| 6 | + value: any; | |
| 7 | + label: | |
| 8 | + | string | |
| 9 | + | number | |
| 10 | + | boolean | |
| 11 | + | React.ReactElement | |
| 12 | + | React.ReactFragment | |
| 13 | + | React.ReactPortal | |
| 14 | + | null | |
| 15 | + | undefined; | |
| 16 | +} | |
| 17 | + | |
| 4 | 18 | export interface ButtonRadioProps extends SpaceProps { |
| 5 | 19 | className?: string; |
| 6 | 20 | prefixCls?: string; |
| 7 | 21 | buttonProps?: ButtonProps; |
| 8 | 22 | onChange?: (value: any) => void; |
| 9 | 23 | value?: any; |
| 10 | - [props: string]: any; | |
| 24 | + options?: OptionType[]; | |
| 11 | 25 | } |
| 12 | 26 | |
| 13 | -const ButtonRadio: React.FC<ButtonRadioProps> = (props) => { | |
| 14 | - const { options = [], buttonProps = {}, value, onChange } = props; | |
| 15 | - | |
| 27 | +const ButtonRadio: React.FC<ButtonRadioProps> = ({ | |
| 28 | + options = [], | |
| 29 | + buttonProps = {}, | |
| 30 | + value, | |
| 31 | + onChange, | |
| 32 | + ...restProps | |
| 33 | +}) => { | |
| 16 | 34 | return ( |
| 17 | - <Space {...props}> | |
| 18 | - {options.map( | |
| 19 | - ( | |
| 20 | - option: { | |
| 21 | - value: any; | |
| 22 | - label: | |
| 23 | - | string | |
| 24 | - | number | |
| 25 | - | boolean | |
| 26 | - | React.ReactElement<any, string | React.JSXElementConstructor<any>> | |
| 27 | - | React.ReactFragment | |
| 28 | - | React.ReactPortal | |
| 29 | - | null | |
| 30 | - | undefined; | |
| 31 | - }, | |
| 32 | - i: React.Key | null | undefined, | |
| 33 | - ) => { | |
| 34 | - const type = option.value === value ? 'primary' : 'default'; | |
| 35 | - return ( | |
| 36 | - <Button | |
| 37 | - key={i} | |
| 38 | - {...buttonProps} | |
| 39 | - type={type} | |
| 40 | - onClick={() => { | |
| 41 | - onChange && onChange(option.value); | |
| 42 | - }} | |
| 43 | - > | |
| 44 | - {option.label} | |
| 45 | - </Button> | |
| 46 | - ); | |
| 47 | - }, | |
| 48 | - )} | |
| 35 | + <Space {...restProps}> | |
| 36 | + {options.map((option, i) => { | |
| 37 | + const type = option.value === value ? 'primary' : 'default'; | |
| 38 | + return ( | |
| 39 | + <Button | |
| 40 | + key={i} | |
| 41 | + {...buttonProps} | |
| 42 | + type={type} | |
| 43 | + onClick={() => { | |
| 44 | + onChange && onChange(option.value); | |
| 45 | + }} | |
| 46 | + > | |
| 47 | + {option.label} | |
| 48 | + </Button> | |
| 49 | + ); | |
| 50 | + })} | |
| 49 | 51 | </Space> |
| 50 | 52 | ); |
| 51 | 53 | }; | ... | ... |
| ... | ... | @@ -3,46 +3,36 @@ import { Modal, ModalProps } from 'antd'; |
| 3 | 3 | import { FormProvider } from '@formily/react'; |
| 4 | 4 | import { createForm } from '@formily/core'; |
| 5 | 5 | |
| 6 | -interface Props extends ModalProps { | |
| 6 | +export interface FormModalProps extends ModalProps { | |
| 7 | 7 | handleOk?: (values: { [props: string]: string }, e: React.MouseEvent<HTMLButtonElement>) => void; |
| 8 | 8 | handleCancel?: (e: React.MouseEvent<HTMLButtonElement>) => void; |
| 9 | 9 | initialValues?: { props?: string }; |
| 10 | 10 | open: boolean; |
| 11 | 11 | } |
| 12 | 12 | |
| 13 | -const FormModal: React.FC<Props> = (props) => { | |
| 13 | +const FormModal: React.FC<FormModalProps> = ({ | |
| 14 | + initialValues, | |
| 15 | + title = '我是弹框标题', | |
| 16 | + handleOk, | |
| 17 | + handleCancel, | |
| 18 | + children, | |
| 19 | + open, | |
| 20 | + ...args | |
| 21 | +}) => { | |
| 14 | 22 | const form = createForm(); |
| 15 | - const { | |
| 16 | - initialValues, | |
| 17 | - title = '我是弹框标题', | |
| 18 | - handleOk, | |
| 19 | - handleCancel, | |
| 20 | - children = [], | |
| 21 | - open, | |
| 22 | - ...args | |
| 23 | - } = props; | |
| 24 | - const items = React.Children.toArray(children); | |
| 25 | 23 | |
| 26 | 24 | useEffect(() => { |
| 27 | 25 | form.setInitialValues(initialValues); |
| 28 | - }); | |
| 26 | + }, [initialValues]); | |
| 29 | 27 | |
| 30 | 28 | const onOK = (e: React.MouseEvent<HTMLButtonElement>) => { |
| 31 | - if (handleOk) { | |
| 32 | - form.submit().then((values: any) => { | |
| 33 | - handleOk(values, e); | |
| 34 | - }); | |
| 35 | - | |
| 36 | - return; | |
| 37 | - } | |
| 29 | + form.submit().then((values: any) => { | |
| 30 | + handleOk && handleOk(values, e); | |
| 31 | + }); | |
| 38 | 32 | }; |
| 39 | 33 | |
| 40 | 34 | const onCancel = (e: React.MouseEvent<HTMLButtonElement>) => { |
| 41 | - if (handleCancel) { | |
| 42 | - handleCancel(e); | |
| 43 | - | |
| 44 | - return; | |
| 45 | - } | |
| 35 | + handleCancel && handleCancel(e); | |
| 46 | 36 | }; |
| 47 | 37 | |
| 48 | 38 | return ( |
| ... | ... | @@ -56,7 +46,7 @@ const FormModal: React.FC<Props> = (props) => { |
| 56 | 46 | {...args} |
| 57 | 47 | getContainer={false} |
| 58 | 48 | > |
| 59 | - <FormProvider form={form}>{React.Children.map(items, (item: any) => item)}</FormProvider> | |
| 49 | + <FormProvider form={form}>{React.Children.map(children, (item) => item)}</FormProvider> | |
| 60 | 50 | </Modal> |
| 61 | 51 | ); |
| 62 | 52 | }; | ... | ... |
src/hr/image/index.tsx
0 → 100644
| 1 | +import { ImageProps, Image as AntdImage } from 'antd'; | |
| 2 | + | |
| 3 | +export interface ImageComponentProps extends ImageProps { | |
| 4 | + imageSources?: string[]; | |
| 5 | + showImage?: boolean; | |
| 6 | + toggleImageVisibility?: (value: any) => void; | |
| 7 | +} | |
| 8 | + | |
| 9 | +const ImageComponent: React.FC<ImageComponentProps> = ({ | |
| 10 | + src, | |
| 11 | + style, | |
| 12 | + preview, | |
| 13 | + imageSources = [], | |
| 14 | + showImage, | |
| 15 | + toggleImageVisibility, | |
| 16 | + ...args | |
| 17 | +}) => { | |
| 18 | + let myPreview = preview | |
| 19 | + ? preview | |
| 20 | + : { | |
| 21 | + visible: showImage, | |
| 22 | + src: src, | |
| 23 | + }; | |
| 24 | + | |
| 25 | + return ( | |
| 26 | + <> | |
| 27 | + <AntdImage | |
| 28 | + width={200} | |
| 29 | + style={style} | |
| 30 | + src={src} | |
| 31 | + preview={myPreview} | |
| 32 | + {...args} | |
| 33 | + onClick={() => toggleImageVisibility && toggleImageVisibility(!showImage)} | |
| 34 | + /> | |
| 35 | + <div style={{ display: 'none' }}> | |
| 36 | + <AntdImage.PreviewGroup | |
| 37 | + preview={{ | |
| 38 | + visible: showImage, | |
| 39 | + onVisibleChange: (vis) => toggleImageVisibility && toggleImageVisibility(vis), | |
| 40 | + }} | |
| 41 | + > | |
| 42 | + {imageSources.map((data: string, index: number) => ( | |
| 43 | + <AntdImage src={data} key={index} /> | |
| 44 | + ))} | |
| 45 | + </AntdImage.PreviewGroup> | |
| 46 | + </div> | |
| 47 | + </> | |
| 48 | + ); | |
| 49 | +}; | |
| 50 | + | |
| 51 | +export default ImageComponent; | ... | ... |
| 1 | 1 | import { Modal, ModalFuncProps } from 'antd'; |
| 2 | 2 | import { ExclamationCircleFilled } from '@ant-design/icons'; |
| 3 | -const { confirm } = Modal; | |
| 4 | 3 | |
| 5 | -const showPropsConfirm = (props: ModalFuncProps) => { | |
| 6 | - const { title, icon, content, okText, okType, okButtonProps, cancelText, onOk, onCancel } = props; | |
| 4 | +const { confirm } = Modal; | |
| 7 | 5 | |
| 6 | +const showPropsConfirm = ({ | |
| 7 | + title, | |
| 8 | + icon, | |
| 9 | + content, | |
| 10 | + okText, | |
| 11 | + okType, | |
| 12 | + okButtonProps, | |
| 13 | + cancelText, | |
| 14 | + onOk, | |
| 15 | + onCancel, | |
| 16 | +}: ModalFuncProps) => { | |
| 8 | 17 | confirm({ |
| 9 | 18 | title: title, |
| 10 | 19 | icon: icon || <ExclamationCircleFilled />, | ... | ... |
| 1 | 1 | import { Pagination } from 'antd'; |
| 2 | 2 | |
| 3 | -interface paginationProps { | |
| 4 | - [props: string]: any; | |
| 5 | - onChange: Function; | |
| 3 | +interface PaginationValues { | |
| 4 | + offset: number; | |
| 5 | + limit: number; | |
| 6 | + total_count: number; | |
| 6 | 7 | } |
| 7 | 8 | |
| 8 | -const PaginationWrap = (props: paginationProps) => { | |
| 9 | +export interface PaginationProps { | |
| 10 | + pagination: PaginationValues; | |
| 11 | + changePagination: (pagination: PaginationValues) => void; | |
| 12 | + onChange: (pagination: PaginationValues) => void; | |
| 13 | +} | |
| 14 | + | |
| 15 | +const PaginationWrap = (props: PaginationProps) => { | |
| 9 | 16 | const { pagination, changePagination, onChange, ...rest } = props; |
| 10 | 17 | |
| 11 | 18 | const { offset, limit = 10, total_count } = pagination; |
| 12 | 19 | |
| 13 | 20 | // 分页改变 |
| 14 | 21 | const onPaginationChange = (page: number, limit: number) => { |
| 15 | - changePagination({ | |
| 22 | + const newPagination = { | |
| 16 | 23 | ...pagination, |
| 17 | 24 | offset: (page - 1) * (limit || 10), |
| 18 | 25 | limit: limit, |
| 19 | - }); | |
| 20 | - onChange({ | |
| 21 | - offset: (page - 1) * (limit || 10), | |
| 22 | - limit: limit, | |
| 23 | - }); | |
| 26 | + }; | |
| 27 | + | |
| 28 | + changePagination(newPagination); | |
| 29 | + onChange(newPagination); | |
| 24 | 30 | }; |
| 25 | 31 | |
| 26 | 32 | return ( |
| ... | ... | @@ -35,7 +41,6 @@ const PaginationWrap = (props: paginationProps) => { |
| 35 | 41 | onPaginationChange(page, pageSize); |
| 36 | 42 | }} |
| 37 | 43 | {...rest} |
| 38 | - // pageSizeOptions={['10', '25', '50', '100']} | |
| 39 | 44 | /> |
| 40 | 45 | ); |
| 41 | 46 | }; | ... | ... |
| 1 | -import { ReactElement, useEffect, useMemo, useState } from 'react'; | |
| 1 | +import { ReactElement, useCallback, useEffect, useMemo, useState } from 'react'; | |
| 2 | 2 | import { Space, Button, Tooltip, Tag } from 'antd'; |
| 3 | 3 | import './index.less'; |
| 4 | 4 | import { FormProvider, VoidField } from '@formily/react'; |
| 5 | -import { createForm, onFieldValueChange, Field } from '@formily/core'; | |
| 5 | +import { createForm, onFieldValueChange, Field, FormPath } from '@formily/core'; | |
| 6 | 6 | import { ossAddress } from '@/utils/ossAddress'; |
| 7 | 7 | import { useDebounce } from '@/utils/format'; |
| 8 | 8 | import moment from 'moment'; |
| 9 | + | |
| 10 | +// Avoid magic numbers | |
| 11 | +const MAX_COMPONENTS = 6; | |
| 12 | +const DEBOUNCE_DELAY = 800; | |
| 13 | + | |
| 9 | 14 | export interface SearchWrapProps { |
| 10 | 15 | leftSectionComponents?: ReactElement[]; |
| 11 | 16 | searchInput?: ReactElement; |
| ... | ... | @@ -15,17 +20,32 @@ export interface SearchWrapProps { |
| 15 | 20 | moreCategories?: Boolean; |
| 16 | 21 | ProForm?: any; |
| 17 | 22 | } |
| 18 | - | |
| 23 | +type FormPathPattern = | |
| 24 | + | string | |
| 25 | + | number | |
| 26 | + | Array<string | number> | |
| 27 | + | FormPath | |
| 28 | + | RegExp | |
| 29 | + | (((address: Array<string | number>) => boolean) & { | |
| 30 | + path: FormPath; | |
| 31 | + }); | |
| 19 | 32 | interface SearchChooseProps { |
| 20 | 33 | name: string; |
| 21 | 34 | title: string; |
| 22 | 35 | value: string; |
| 23 | - path: any; | |
| 36 | + path: FormPathPattern; | |
| 24 | 37 | address: any; |
| 25 | 38 | } |
| 26 | 39 | |
| 27 | -const _getValueLable = (field: Field) => { | |
| 28 | - const { title, value, dataSource, props, path, address, componentProps } = field; | |
| 40 | +const getValueLable = ({ | |
| 41 | + title, | |
| 42 | + value, | |
| 43 | + dataSource, | |
| 44 | + props, | |
| 45 | + path, | |
| 46 | + address, | |
| 47 | + componentProps, | |
| 48 | +}: Field) => { | |
| 29 | 49 | const { name } = props; |
| 30 | 50 | |
| 31 | 51 | const { componenttypename, format } = componentProps; |
| ... | ... | @@ -35,6 +55,7 @@ const _getValueLable = (field: Field) => { |
| 35 | 55 | address, |
| 36 | 56 | title: title ? title : '', |
| 37 | 57 | }; |
| 58 | + | |
| 38 | 59 | const getValue = (key: any) => { |
| 39 | 60 | const dataSourceMap: Record<string, string> = {}; |
| 40 | 61 | dataSource.map((item) => { |
| ... | ... | @@ -44,6 +65,7 @@ const _getValueLable = (field: Field) => { |
| 44 | 65 | }); |
| 45 | 66 | return dataSourceMap[key]; |
| 46 | 67 | }; |
| 68 | + | |
| 47 | 69 | switch (componenttypename) { |
| 48 | 70 | case 'Radio.Group': |
| 49 | 71 | labelMap.value = getValue(value); |
| ... | ... | @@ -87,12 +109,12 @@ const _getValueLable = (field: Field) => { |
| 87 | 109 | return labelMap; |
| 88 | 110 | }; |
| 89 | 111 | |
| 90 | -const _getPopupValuesLabel = (field: any, searchLabels: SearchChooseProps[]) => { | |
| 112 | +const getPopupValuesLabel = (field: any, searchLabels: SearchChooseProps[]) => { | |
| 91 | 113 | const { props } = field; |
| 92 | 114 | const { name } = props; |
| 93 | 115 | |
| 94 | 116 | const searchLableMap: any = {}; |
| 95 | - const changeLabel = _getValueLable(field); | |
| 117 | + const changeLabel = getValueLable(field); | |
| 96 | 118 | if (searchLabels.length > 0) { |
| 97 | 119 | searchLabels.map((label) => { |
| 98 | 120 | if (name == label.name) { |
| ... | ... | @@ -110,7 +132,7 @@ const _getPopupValuesLabel = (field: any, searchLabels: SearchChooseProps[]) => |
| 110 | 132 | searchLableMap[name] = changeLabel; |
| 111 | 133 | } |
| 112 | 134 | return searchLableMap; |
| 113 | -}; | |
| 135 | +} | |
| 114 | 136 | |
| 115 | 137 | const SearchWrap: React.FC<SearchWrapProps> = (props) => { |
| 116 | 138 | const { |
| ... | ... | @@ -129,7 +151,7 @@ const SearchWrap: React.FC<SearchWrapProps> = (props) => { |
| 129 | 151 | const [centerWidth, setCenterWidth] = useState<number>(0); |
| 130 | 152 | const valueChange = useDebounce((value: any) => { |
| 131 | 153 | searchChange && searchChange(value); |
| 132 | - }, 800); | |
| 154 | + }, DEBOUNCE_DELAY); | |
| 133 | 155 | |
| 134 | 156 | const form = ProForm ? ProForm : useMemo(() => createForm(), []); |
| 135 | 157 | |
| ... | ... | @@ -140,7 +162,7 @@ const SearchWrap: React.FC<SearchWrapProps> = (props) => { |
| 140 | 162 | }, [searchLabels]); |
| 141 | 163 | |
| 142 | 164 | useEffect(() => { |
| 143 | - form.addEffects('popup_search', () => { | |
| 165 | + const removeEffects = form.addEffects('popup_search', () => { | |
| 144 | 166 | onFieldValueChange('*', (field) => { |
| 145 | 167 | const { |
| 146 | 168 | address: { entire = '' }, |
| ... | ... | @@ -150,13 +172,16 @@ const SearchWrap: React.FC<SearchWrapProps> = (props) => { |
| 150 | 172 | } |
| 151 | 173 | if ((entire as string).indexOf('popup') > -1) { |
| 152 | 174 | setSearchLabels((searchLabels) => { |
| 153 | - const labelValues = _getPopupValuesLabel(field, searchLabels); | |
| 175 | + const labelValues = getPopupValuesLabel(field, searchLabels); | |
| 154 | 176 | |
| 155 | 177 | return Object.values(labelValues); |
| 156 | 178 | }); |
| 157 | 179 | } |
| 158 | 180 | }); |
| 159 | 181 | }); |
| 182 | + return () => { | |
| 183 | + form.removeEffects(removeEffects); | |
| 184 | + }; | |
| 160 | 185 | }, [ProForm]); |
| 161 | 186 | |
| 162 | 187 | useEffect(() => { |
| ... | ... | @@ -176,14 +201,14 @@ const SearchWrap: React.FC<SearchWrapProps> = (props) => { |
| 176 | 201 | setOpen(!open); |
| 177 | 202 | }; |
| 178 | 203 | |
| 179 | - const submit = () => { | |
| 204 | + const submit = useCallback(() => { | |
| 180 | 205 | const { values: allValue } = form; |
| 181 | 206 | searchChange && searchChange(allValue); |
| 182 | 207 | togglePopup(); |
| 183 | 208 | setShowPopupValue(true); |
| 184 | - }; | |
| 209 | + }, []); | |
| 185 | 210 | |
| 186 | - const closeLabel = (label: SearchChooseProps) => { | |
| 211 | + const closeLabel = useCallback((label: SearchChooseProps) => { | |
| 187 | 212 | const { path } = label; |
| 188 | 213 | const field = form.query(path).take(); |
| 189 | 214 | if (field && field.setValue) { |
| ... | ... | @@ -191,16 +216,16 @@ const SearchWrap: React.FC<SearchWrapProps> = (props) => { |
| 191 | 216 | } |
| 192 | 217 | const { values: allValue } = form; |
| 193 | 218 | searchChange && searchChange(allValue); |
| 194 | - }; | |
| 219 | + }, []); | |
| 195 | 220 | |
| 196 | - const handleCancle = () => { | |
| 221 | + const handleCancle = useCallback(() => { | |
| 197 | 222 | form.reset('popup.*'); |
| 198 | 223 | const { values: allValue } = form; |
| 199 | 224 | searchChange && searchChange(allValue); |
| 200 | 225 | togglePopup(); |
| 201 | - }; | |
| 226 | + }, []); | |
| 202 | 227 | |
| 203 | - const text = () => { | |
| 228 | + const text = useCallback(() => { | |
| 204 | 229 | return ( |
| 205 | 230 | <div> |
| 206 | 231 | <VoidField name="popup"> |
| ... | ... | @@ -217,16 +242,16 @@ const SearchWrap: React.FC<SearchWrapProps> = (props) => { |
| 217 | 242 | </div> |
| 218 | 243 | </div> |
| 219 | 244 | ); |
| 220 | - }; | |
| 245 | + }, [popupContent]); | |
| 221 | 246 | |
| 222 | - const labels = () => { | |
| 247 | + const labels = useCallback(() => { | |
| 223 | 248 | // 左边显示操作6个搜索条件 |
| 224 | 249 | const len = (leftSectionComponents && leftSectionComponents.length - 1) || 0; |
| 225 | 250 | return ( |
| 226 | 251 | <div style={{ width: centerWidth, overflow: 'hidden' }}> |
| 227 | 252 | {showPopupValue && |
| 228 | 253 | searchLabels && |
| 229 | - searchLabels.slice(0, 6 - len).map((item, index) => { | |
| 254 | + searchLabels.slice(0, MAX_COMPONENTS - len).map((item) => { | |
| 230 | 255 | return ( |
| 231 | 256 | <Tag key={item.name} closable onClose={() => closeLabel(item)}> |
| 232 | 257 | {item.value} |
| ... | ... | @@ -235,14 +260,14 @@ const SearchWrap: React.FC<SearchWrapProps> = (props) => { |
| 235 | 260 | })} |
| 236 | 261 | </div> |
| 237 | 262 | ); |
| 238 | - }; | |
| 263 | + }, [showPopupValue, centerWidth]); | |
| 239 | 264 | |
| 240 | 265 | return ( |
| 241 | 266 | <FormProvider form={form}> |
| 242 | 267 | <div className="search-component"> |
| 243 | 268 | <Space className="left-section"> |
| 244 | - {leftSectionComponents.slice(0, 6).map((component, index) => ( | |
| 245 | - <div key={index} className="left-section-component"> | |
| 269 | + {leftSectionComponents.slice(0, MAX_COMPONENTS).map((component) => ( | |
| 270 | + <div key={component.key || component.props.id} className="left-section-component"> | |
| 246 | 271 | {component} |
| 247 | 272 | </div> |
| 248 | 273 | ))} | ... | ... |
| ... | ... | @@ -10,7 +10,7 @@ export interface tableProps extends TableProps<Record<string, number>> { |
| 10 | 10 | } |
| 11 | 11 | |
| 12 | 12 | export const dealNumber = (val: number) => { |
| 13 | - if (val && val != null) { | |
| 13 | + if (val || val === 0) { | |
| 14 | 14 | let money = String(val); |
| 15 | 15 | let left = money.split('.')[0], |
| 16 | 16 | right = money.split('.')[1]; |
| ... | ... | @@ -19,10 +19,8 @@ export const dealNumber = (val: number) => { |
| 19 | 19 | .split('') |
| 20 | 20 | .reverse() |
| 21 | 21 | .join('') |
| 22 | - .match(/(\d{1,3})/g); // 将字符串顺序反转 :字符串-->数组 --> 顺序反转-->字符串 | |
| 23 | - return (Number(money) < 0 ? '-' : '') + temp.join(',').split('').reverse().join('') + right; | |
| 24 | - } else if (val === 0) { | |
| 25 | - return '0.00'; | |
| 22 | + .match(/(\d{1,3})/g); | |
| 23 | + return `${Number(money) < 0 ? '-' : ''}${temp.join(',').split('').reverse().join('')}${right}`; | |
| 26 | 24 | } else { |
| 27 | 25 | return ''; |
| 28 | 26 | } |
| ... | ... | @@ -31,9 +29,11 @@ export const dealNumber = (val: number) => { |
| 31 | 29 | const TableWrap: React.FC<tableProps> = (props) => { |
| 32 | 30 | const { tableHeader, columns, scroll } = props; |
| 33 | 31 | const [newScroll, setNewScroll] = useState<any>(0); |
| 34 | - const [tableColumns, setTableColumns] = useState<any>([]); | |
| 32 | + const [tableColumns, setTableColumns] = useState<TableProps<Record<string, number>>['columns']>( | |
| 33 | + [], | |
| 34 | + ); | |
| 35 | 35 | |
| 36 | - const sex = { | |
| 36 | + const sex: Record<string, string> = { | |
| 37 | 37 | '1': '男', |
| 38 | 38 | '2': '女', |
| 39 | 39 | }; |
| ... | ... | @@ -52,7 +52,7 @@ const TableWrap: React.FC<tableProps> = (props) => { |
| 52 | 52 | |
| 53 | 53 | useEffect(() => { |
| 54 | 54 | let calculateScroll = 0; |
| 55 | - columns?.map((item: any) => { | |
| 55 | + const newColumns = columns?.map((item: any) => { | |
| 56 | 56 | // 处理attr |
| 57 | 57 | if (item.attr) { |
| 58 | 58 | handleAttr(item); |
| ... | ... | @@ -61,9 +61,11 @@ const TableWrap: React.FC<tableProps> = (props) => { |
| 61 | 61 | item.ellipsis = true; |
| 62 | 62 | // 计算scroll |
| 63 | 63 | if (item.width) calculateScroll += item.width; |
| 64 | + | |
| 65 | + return item; | |
| 64 | 66 | }); |
| 65 | 67 | |
| 66 | - setTableColumns(columns); | |
| 68 | + setTableColumns(newColumns); | |
| 67 | 69 | setNewScroll(calculateScroll); |
| 68 | 70 | }, [columns]); |
| 69 | 71 | ... | ... |
| 1 | - | |
| 2 | -import { Tabs as MyTabs } from 'antd'; | |
| 1 | +import { Tabs as MyTabs, TabPaneProps } from 'antd'; | |
| 3 | 2 | import { TabsProps } from 'antd/lib/Tabs'; |
| 4 | 3 | import './tabs.less'; |
| 5 | 4 | |
| 6 | -const Tabs: React.FC<TabsProps> = (props) => { | |
| 5 | +export interface Tab extends Omit<TabPaneProps, 'tab'> { | |
| 6 | + key: string; | |
| 7 | + label: React.ReactNode; | |
| 8 | +} | |
| 9 | + | |
| 10 | +export interface MyTabsProps extends TabsProps { | |
| 11 | + items?: Tab[]; | |
| 12 | +} | |
| 13 | + | |
| 14 | +const Tabs: React.FC<MyTabsProps> = (props) => { | |
| 7 | 15 | const { defaultActiveKey, items = [], ...other } = props; |
| 8 | - const defaultKey = defaultActiveKey || items[0].key; | |
| 16 | + const defaultKey = items.length > 0 ? defaultActiveKey || items[0].key : undefined; | |
| 9 | 17 | |
| 10 | 18 | return ( |
| 11 | 19 | <div className={'tabs_warp'}> |
| 12 | - <MyTabs defaultActiveKey={defaultKey} items={items} {...other} /> | |
| 20 | + <MyTabs defaultActiveKey={defaultKey} {...other} /> | |
| 13 | 21 | </div> |
| 14 | 22 | ); |
| 15 | 23 | }; | ... | ... |
| 1 | 1 | import { ReactElement } from 'react'; |
| 2 | - | |
| 3 | 2 | export interface FieldProps { |
| 4 | - name: string | [string, string]; | |
| 5 | - title?: string | ReactElement; | |
| 6 | - validator?: any; | |
| 7 | - [props: string]: any; | |
| 8 | - decoratorProps?: { | |
| 3 | + name: string | [string, string]; | |
| 4 | + title?: string | ReactElement; | |
| 5 | + validator?: any; | |
| 9 | 6 | [props: string]: any; |
| 10 | - }; | |
| 11 | - componentProps?: { | |
| 12 | - [props: string]: any; | |
| 13 | - }; | |
| 7 | + decoratorProps?: { | |
| 8 | + [props: string]: any; | |
| 9 | + }; | |
| 10 | + componentProps?: { | |
| 11 | + [props: string]: any; | |
| 12 | + }; | |
| 14 | 13 | } | ... | ... |
| 1 | -import React, { ReactElement } from 'react'; | |
| 2 | -import 'braft-editor/dist/index.css'; | |
| 3 | -import './index.less'; | |
| 4 | -import { IFieldProps } from '@formily/core'; | |
| 5 | -interface P extends IFieldProps { | |
| 6 | - name: string | [string, string]; | |
| 7 | - title?: string | ReactElement; | |
| 8 | - validator?: any; | |
| 1 | +import { ReactElement } from 'react'; | |
| 2 | + | |
| 3 | +export interface FieldProps { | |
| 4 | + name: string | [string, string]; | |
| 5 | + title?: string | ReactElement; | |
| 6 | + validator?: any; | |
| 7 | + [props: string]: any; | |
| 8 | + decoratorProps?: { | |
| 9 | 9 | [props: string]: any; |
| 10 | - decoratorProps?: { | |
| 11 | - [props: string]: any; | |
| 12 | - }; | |
| 13 | - componentProps?: { | |
| 14 | - [props: string]: any; | |
| 15 | - }; | |
| 10 | + }; | |
| 11 | + componentProps?: { | |
| 12 | + [props: string]: any; | |
| 13 | + }; | |
| 16 | 14 | } |
| 17 | -declare const BraftDeitor: React.FC<P>; | |
| 18 | -export default BraftDeitor; | ... | ... |
| ... | ... | @@ -5,7 +5,7 @@ import { UploadFile, UploadListType, UploadProps } from 'antd/lib/upload/interfa |
| 5 | 5 | import { UploadOutlined } from '@ant-design/icons'; |
| 6 | 6 | import cx from 'classnames'; |
| 7 | 7 | |
| 8 | -interface UploadFileProps { | |
| 8 | +export interface UploadFileProps { | |
| 9 | 9 | accept?: string; |
| 10 | 10 | listType?: UploadListType; |
| 11 | 11 | Callback?: (e: any) => void; |
| ... | ... | @@ -26,12 +26,11 @@ type Config = Record< |
| 26 | 26 | | 'signature' |
| 27 | 27 | | 'callback' |
| 28 | 28 | | 'x:access_token' |
| 29 | - // | 'x-oss-security-token' | |
| 30 | 29 | | 'success_action_status', |
| 31 | 30 | string |
| 32 | 31 | >; |
| 33 | 32 | |
| 34 | -// picture-card | |
| 33 | + | |
| 35 | 34 | const UploadFiles: React.FC<UploadFileProps> = (props) => { |
| 36 | 35 | const { |
| 37 | 36 | value, |
| ... | ... | @@ -85,22 +84,29 @@ const UploadFiles: React.FC<UploadFileProps> = (props) => { |
| 85 | 84 | |
| 86 | 85 | const onchange = ({ fileList }: { fileList: any }) => { |
| 87 | 86 | if (fileList[fileList.length - 1].status === 'done') { |
| 88 | - // setFileList([...fileLists, fileList[fileList.length - 1]]); | |
| 87 | + setFileList([...fileLists, fileList[fileList.length - 1]]); | |
| 89 | 88 | |
| 90 | - if (onChange) { | |
| 91 | - onChange([...fileLists, fileList[fileList.length - 1]]); | |
| 92 | - } | |
| 93 | - if (Callback) Callback([...fileLists, fileList[fileList.length - 1]]); | |
| 89 | + // if (onChange) { | |
| 90 | + // onChange([...fileLists, fileList[fileList.length - 1]]); | |
| 91 | + // } | |
| 92 | + // if (Callback) Callback([...fileLists, fileList[fileList.length - 1]]); | |
| 94 | 93 | } |
| 95 | 94 | }; |
| 96 | 95 | |
| 96 | + useEffect(() => { | |
| 97 | + if (onChange) { | |
| 98 | + onChange(fileLists); | |
| 99 | + } | |
| 100 | + if (Callback) Callback(fileLists); | |
| 101 | + }, [fileLists]); | |
| 102 | + | |
| 97 | 103 | const onRemove = (file: UploadFile) => { |
| 98 | 104 | const files = value.filter((v: { uid: string }) => v.uid !== file.uid); |
| 99 | 105 | setFileList(files); |
| 100 | - if (onChange) { | |
| 101 | - onChange(files); | |
| 102 | - } | |
| 103 | - if (Callback) Callback([...files]); | |
| 106 | + // if (onChange) { | |
| 107 | + // onChange(files); | |
| 108 | + // } | |
| 109 | + // if (Callback) Callback([...files]); | |
| 104 | 110 | }; |
| 105 | 111 | |
| 106 | 112 | const onPreview = async (file: any) => { | ... | ... |
src/index.tsx
0 → 100644
| 1 | +export { default as AddTags } from './hr/add_tags'; | |
| 2 | +export type { TagProps } from './hr/add_tags'; | |
| 3 | + | |
| 4 | +export { default as InputItem } from './hr/antd_input'; | |
| 5 | + | |
| 6 | +export { default as BraftEditor } from './hr/braft_editor'; | |
| 7 | +export type { BraftDeitorProps } from './hr/braft_editor'; | |
| 8 | + | |
| 9 | +export { default as Breadcrumb } from './hr/bread_crumb'; | |
| 10 | +export type { BreadcrumbProps } from './hr/bread_crumb'; | |
| 11 | + | |
| 12 | +export { default as ButtonRadio } from './hr/button_radio'; | |
| 13 | +export type { ButtonRadioProps } from './hr/button_radio'; | |
| 14 | + | |
| 15 | +export { default as FormModal } from './hr/form_modal'; | |
| 16 | +export type { FormModalProps } from './hr/form_modal'; | |
| 17 | + | |
| 18 | +export { default as Image } from './hr/image'; | |
| 19 | +export type { ImageComponentProps } from './hr/image'; | |
| 20 | + | |
| 21 | +export { default as ModalConfirm } from './hr/modal_confirm'; | |
| 22 | + | |
| 23 | +export { default as Pagination } from './hr/pagination'; | |
| 24 | +export type { PaginationProps } from './hr/pagination'; | |
| 25 | + | |
| 26 | +export { default as SearchWrap } from './hr/search'; | |
| 27 | +export type { SearchWrapProps } from './hr/search'; | |
| 28 | + | |
| 29 | +export { default as TableWrap } from './hr/table'; | |
| 30 | +export type { tableProps } from './hr/table'; | |
| 31 | + | |
| 32 | +export { default as Tabs } from './hr/tabs'; | |
| 33 | +export type { MyTabsProps } from './hr/tabs'; | |
| 34 | + | |
| 35 | +export { default as UploadFiles } from './hr/upload_file'; | |
| 36 | +export type { UploadFileProps } from './hr/upload_file'; | |
| 37 | + | |
| 38 | +export { default as NoData } from './hr/nodata'; | |
| 39 | + | ... | ... |
| ... | ... | @@ -15,16 +15,16 @@ |
| 15 | 15 | "jsx": "react-jsx", |
| 16 | 16 | "allowSyntheticDefaultImports": true, |
| 17 | 17 | "paths": { |
| 18 | - "@/hr/*": ["./packages/hr/*"], | |
| 19 | - "@/hro/*": ["./packages/hro/*"], | |
| 20 | - "@/utils/*": ["./utils/*"], | |
| 21 | - "@/services/*": ["./services/*"] | |
| 18 | + "@/hr/*": ["./src/hr/*"], | |
| 19 | + "@/hro/*": ["./src/hro/*"], | |
| 20 | + "@/utils/*": ["./src/utils/*"], | |
| 21 | + "@/services/*": ["./src/services/*"] | |
| 22 | 22 | }, |
| 23 | 23 | "declaration": true, // 自动生成声明文件 |
| 24 | - "declarationDir": "./", // 声明文件生成的目录 | |
| 24 | + // "declarationDir": "./", // 声明文件生成的目录 | |
| 25 | 25 | "noEmitOnError": false |
| 26 | 26 | }, |
| 27 | - "include": ["packages", "index.tsx", "typings.d.ts"], | |
| 27 | + "include": ["src/*", "src/*.d.ts", "src/utils/*"], | |
| 28 | 28 | "exclude": ["node_modules"], |
| 29 | 29 | "references": [{ "path": "./tsconfig.node.json" }] |
| 30 | 30 | } | ... | ... |
| ... | ... | @@ -18,10 +18,10 @@ export default defineConfig({ |
| 18 | 18 | }, |
| 19 | 19 | resolve: { |
| 20 | 20 | alias: { |
| 21 | - '@/hr': resolve(__dirname, 'packages/hr'), | |
| 22 | - '@/hro': resolve(__dirname, 'packages/hro'), | |
| 23 | - '@/utils': resolve(__dirname, 'utils'), | |
| 24 | - '@/services': resolve(__dirname, 'services'), | |
| 21 | + '@/hr': resolve(__dirname, 'src/hr'), | |
| 22 | + '@/hro': resolve(__dirname, 'src/hro'), | |
| 23 | + '@/utils': resolve(__dirname, 'src/utils'), | |
| 24 | + '@/services': resolve(__dirname, 'src/services'), | |
| 25 | 25 | }, |
| 26 | 26 | }, |
| 27 | 27 | }); | ... | ... |
请
注册
或
登录
后发表评论