@guo514360255/antd-lib 1.4.1
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/LICENSE +21 -0
- package/README.md +44 -0
- package/dist/CustomDetailModal/detailModal.d.ts +72 -0
- package/dist/CustomDetailModal/index.d.ts +5 -0
- package/dist/CustomDetailModal/index.js +183 -0
- package/dist/CustomDetailModal/index.less +6 -0
- package/dist/CustomFormModal/formModal.d.ts +78 -0
- package/dist/CustomFormModal/index.d.ts +5 -0
- package/dist/CustomFormModal/index.js +293 -0
- package/dist/CustomFormModal/index.less +29 -0
- package/dist/CustomTable/index.d.ts +5 -0
- package/dist/CustomTable/index.js +412 -0
- package/dist/CustomTable/index.less +69 -0
- package/dist/CustomTable/table.d.ts +143 -0
- package/dist/CustomTag/index.d.ts +3 -0
- package/dist/CustomTag/index.js +27 -0
- package/dist/CustomTag/tag.d.ts +19 -0
- package/dist/CustomUpload/index.d.ts +22 -0
- package/dist/CustomUpload/index.js +197 -0
- package/dist/DynamicIcon/index.d.ts +9 -0
- package/dist/DynamicIcon/index.js +34 -0
- package/dist/FormItem/index.d.ts +9 -0
- package/dist/FormItem/index.js +47 -0
- package/dist/compontent.d.ts +86 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/useFullscreen.d.ts +6 -0
- package/dist/hooks/useFullscreen.js +77 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +9 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/rememberPwd.d.ts +34 -0
- package/dist/utils/rememberPwd.js +112 -0
- package/dist/utils/util.d.ts +54 -0
- package/dist/utils/util.js +119 -0
- package/package.json +90 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
3
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
4
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
5
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
6
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
7
|
+
var _excluded = ["value", "onChange", "isDragger", "children"];
|
|
8
|
+
/*
|
|
9
|
+
* @Author: 郭郭
|
|
10
|
+
* @Date: 2025/9/15
|
|
11
|
+
* @Description:
|
|
12
|
+
*/
|
|
13
|
+
import { InboxOutlined, PlusOutlined } from '@ant-design/icons';
|
|
14
|
+
import { fileTransformBase64 } from "../utils/util";
|
|
15
|
+
import { Image, message, Upload } from 'antd';
|
|
16
|
+
import ImgCrop from 'antd-img-crop';
|
|
17
|
+
import React, { useEffect, useState } from 'react';
|
|
18
|
+
var CustomUpload = function CustomUpload(_ref) {
|
|
19
|
+
var _ref$value = _ref.value,
|
|
20
|
+
value = _ref$value === void 0 ? [] : _ref$value,
|
|
21
|
+
onChange = _ref.onChange,
|
|
22
|
+
isDragger = _ref.isDragger,
|
|
23
|
+
children = _ref.children,
|
|
24
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
25
|
+
var props = (rest === null || rest === void 0 ? void 0 : rest.fieldProps) || rest;
|
|
26
|
+
var _useState = useState([]),
|
|
27
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
28
|
+
fileList = _useState2[0],
|
|
29
|
+
setFileList = _useState2[1];
|
|
30
|
+
var _useState3 = useState(false),
|
|
31
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
32
|
+
previewOpen = _useState4[0],
|
|
33
|
+
setPreviewOpen = _useState4[1];
|
|
34
|
+
var _useState5 = useState(''),
|
|
35
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
36
|
+
previewImage = _useState6[0],
|
|
37
|
+
setPreviewImage = _useState6[1];
|
|
38
|
+
var _message$useMessage = message.useMessage(),
|
|
39
|
+
_message$useMessage2 = _slicedToArray(_message$useMessage, 2),
|
|
40
|
+
messageApi = _message$useMessage2[0],
|
|
41
|
+
messageHolder = _message$useMessage2[1];
|
|
42
|
+
var Component = isDragger || props.isDragger ? Upload.Dragger : Upload;
|
|
43
|
+
var handlePreview = /*#__PURE__*/function () {
|
|
44
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(file) {
|
|
45
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
46
|
+
while (1) switch (_context.prev = _context.next) {
|
|
47
|
+
case 0:
|
|
48
|
+
if (!(!file.url && !file.preview)) {
|
|
49
|
+
_context.next = 4;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
_context.next = 3;
|
|
53
|
+
return fileTransformBase64(file.originFileObj);
|
|
54
|
+
case 3:
|
|
55
|
+
file.preview = _context.sent;
|
|
56
|
+
case 4:
|
|
57
|
+
setPreviewImage(file.url || file.preview);
|
|
58
|
+
setPreviewOpen(true);
|
|
59
|
+
case 6:
|
|
60
|
+
case "end":
|
|
61
|
+
return _context.stop();
|
|
62
|
+
}
|
|
63
|
+
}, _callee);
|
|
64
|
+
}));
|
|
65
|
+
return function handlePreview(_x) {
|
|
66
|
+
return _ref2.apply(this, arguments);
|
|
67
|
+
};
|
|
68
|
+
}();
|
|
69
|
+
|
|
70
|
+
// 同步 value 变化(如果父级通过 form.setFieldsValue 修改)
|
|
71
|
+
useEffect(function () {
|
|
72
|
+
setFileList(_toConsumableArray(value));
|
|
73
|
+
}, [JSON.stringify(value)]);
|
|
74
|
+
var customRequest = /*#__PURE__*/function () {
|
|
75
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref3) {
|
|
76
|
+
var file, formData, request, _yield$request, url, originalName, uid, obj;
|
|
77
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
78
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
79
|
+
case 0:
|
|
80
|
+
file = _ref3.file;
|
|
81
|
+
if (file) {
|
|
82
|
+
_context2.next = 3;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
return _context2.abrupt("return");
|
|
86
|
+
case 3:
|
|
87
|
+
if (!(props && props.maxCount && value.length >= props.maxCount)) {
|
|
88
|
+
_context2.next = 6;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
messageApi.warning("\u6700\u591A\u4E0A\u4F20".concat(props.maxCount, "\u4E2A\u6587\u4EF6"));
|
|
92
|
+
return _context2.abrupt("return");
|
|
93
|
+
case 6:
|
|
94
|
+
_context2.prev = 6;
|
|
95
|
+
formData = new FormData();
|
|
96
|
+
formData.append('file', file);
|
|
97
|
+
formData.append('biz', props === null || props === void 0 ? void 0 : props.biz);
|
|
98
|
+
request = props === null || props === void 0 ? void 0 : props.request;
|
|
99
|
+
if (!request) {
|
|
100
|
+
_context2.next = 21;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
_context2.next = 14;
|
|
104
|
+
return request(formData);
|
|
105
|
+
case 14:
|
|
106
|
+
_yield$request = _context2.sent;
|
|
107
|
+
url = _yield$request.url;
|
|
108
|
+
originalName = _yield$request.originalName;
|
|
109
|
+
uid = _yield$request.uid;
|
|
110
|
+
obj = {
|
|
111
|
+
uid: uid,
|
|
112
|
+
name: originalName,
|
|
113
|
+
status: 'done',
|
|
114
|
+
url: url
|
|
115
|
+
};
|
|
116
|
+
if (onChange) {
|
|
117
|
+
onChange([].concat(_toConsumableArray(value), [obj]));
|
|
118
|
+
}
|
|
119
|
+
setTimeout(function () {
|
|
120
|
+
setFileList([].concat(_toConsumableArray(fileList), [obj]));
|
|
121
|
+
}, 200);
|
|
122
|
+
case 21:
|
|
123
|
+
_context2.next = 26;
|
|
124
|
+
break;
|
|
125
|
+
case 23:
|
|
126
|
+
_context2.prev = 23;
|
|
127
|
+
_context2.t0 = _context2["catch"](6);
|
|
128
|
+
console.log(_context2.t0);
|
|
129
|
+
case 26:
|
|
130
|
+
case "end":
|
|
131
|
+
return _context2.stop();
|
|
132
|
+
}
|
|
133
|
+
}, _callee2, null, [[6, 23]]);
|
|
134
|
+
}));
|
|
135
|
+
return function customRequest(_x2) {
|
|
136
|
+
return _ref4.apply(this, arguments);
|
|
137
|
+
};
|
|
138
|
+
}();
|
|
139
|
+
var handleRemove = function handleRemove(file) {
|
|
140
|
+
if (onChange) {
|
|
141
|
+
onChange(value.filter(function (item) {
|
|
142
|
+
return item.uid !== file.uid;
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
setTimeout(function () {
|
|
146
|
+
setFileList(fileList.filter(function (item) {
|
|
147
|
+
return item.uid !== file.uid;
|
|
148
|
+
}));
|
|
149
|
+
}, 200);
|
|
150
|
+
};
|
|
151
|
+
var fileComponent = function fileComponent() {
|
|
152
|
+
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
153
|
+
listType: "picture-card",
|
|
154
|
+
fileList: fileList,
|
|
155
|
+
onPreview: handlePreview,
|
|
156
|
+
onRemove: handleRemove,
|
|
157
|
+
customRequest: customRequest
|
|
158
|
+
}, props || {}), children ? children : isDragger || props.isDragger ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {
|
|
159
|
+
className: "ant-upload-drag-icon"
|
|
160
|
+
}, /*#__PURE__*/React.createElement(InboxOutlined, null)), /*#__PURE__*/React.createElement("p", {
|
|
161
|
+
className: "ant-upload-text"
|
|
162
|
+
}, "\u5355\u51FB\u6216\u62D6\u52A8\u6587\u4EF6\u5230\u6B64\u533A\u57DF\u8FDB\u884C\u4E0A\u4F20"), /*#__PURE__*/React.createElement("p", {
|
|
163
|
+
className: "ant-upload-hint"
|
|
164
|
+
}, "\u652F\u6301\u5355\u6B21\u6216\u6279\u91CF\u4E0A\u4F20\u3002")) : /*#__PURE__*/React.createElement("button", {
|
|
165
|
+
style: {
|
|
166
|
+
border: 0,
|
|
167
|
+
background: 'none'
|
|
168
|
+
},
|
|
169
|
+
type: "button"
|
|
170
|
+
}, /*#__PURE__*/React.createElement(PlusOutlined, null), /*#__PURE__*/React.createElement("div", {
|
|
171
|
+
style: {
|
|
172
|
+
marginTop: 8
|
|
173
|
+
}
|
|
174
|
+
}, "\u70B9\u51FB\u4E0A\u4F20")));
|
|
175
|
+
};
|
|
176
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, messageHolder, props !== null && props !== void 0 && props.isCrop ? /*#__PURE__*/React.createElement(ImgCrop, _extends({
|
|
177
|
+
rotationSlider: true,
|
|
178
|
+
showReset: true
|
|
179
|
+
}, (props === null || props === void 0 ? void 0 : props.imgCrop) || {}, {
|
|
180
|
+
onModalOk: customRequest
|
|
181
|
+
}), fileComponent()) : fileComponent(), previewImage && /*#__PURE__*/React.createElement(Image, {
|
|
182
|
+
wrapperStyle: {
|
|
183
|
+
display: 'none'
|
|
184
|
+
},
|
|
185
|
+
preview: {
|
|
186
|
+
visible: previewOpen,
|
|
187
|
+
onVisibleChange: function onVisibleChange(visible) {
|
|
188
|
+
return setPreviewOpen(visible);
|
|
189
|
+
},
|
|
190
|
+
afterOpenChange: function afterOpenChange(visible) {
|
|
191
|
+
return !visible && setPreviewImage('');
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
src: previewImage
|
|
195
|
+
}));
|
|
196
|
+
};
|
|
197
|
+
export default CustomUpload;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface DynamicIconProps {
|
|
3
|
+
iconName?: string;
|
|
4
|
+
component?: React.ReactNode;
|
|
5
|
+
style?: React.CSSProperties;
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}
|
|
8
|
+
declare const _default: React.NamedExoticComponent<DynamicIconProps>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["iconName", "component"];
|
|
4
|
+
/*
|
|
5
|
+
* @Author: 郭郭
|
|
6
|
+
* @Date: 2025/9/3
|
|
7
|
+
* @Description:
|
|
8
|
+
*/
|
|
9
|
+
import IconComponent, * as Icons from '@ant-design/icons';
|
|
10
|
+
import React, { memo } from 'react';
|
|
11
|
+
var DynamicIcon = function DynamicIcon(_ref) {
|
|
12
|
+
var iconName = _ref.iconName,
|
|
13
|
+
component = _ref.component,
|
|
14
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
15
|
+
// 自定义icon component
|
|
16
|
+
var CustomComponent = component;
|
|
17
|
+
if (CustomComponent) {
|
|
18
|
+
return /*#__PURE__*/React.createElement(IconComponent
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
, _extends({
|
|
21
|
+
component: CustomComponent
|
|
22
|
+
}, props));
|
|
23
|
+
}
|
|
24
|
+
if (!iconName) return null;
|
|
25
|
+
|
|
26
|
+
// 尝试匹配 Outlined、Filled、TwoTone 等
|
|
27
|
+
var Icon = Icons["".concat(iconName, "Outlined")] || Icons["".concat(iconName, "Filled")] || Icons["".concat(iconName, "TwoTone")] || Icons["".concat(iconName)] || null;
|
|
28
|
+
if (!Icon) {
|
|
29
|
+
console.warn("Icon ".concat(iconName, " not found in @ant-design/icons"));
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
return /*#__PURE__*/React.createElement(Icon, props);
|
|
33
|
+
};
|
|
34
|
+
export default /*#__PURE__*/memo(DynamicIcon);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { UploadFile } from 'antd/es/upload/interface';
|
|
3
|
+
interface FormItemProps {
|
|
4
|
+
value?: UploadFile[];
|
|
5
|
+
onChange?: (fileList: UploadFile[]) => void;
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}
|
|
8
|
+
declare const FormItem: ({ value, onChange, ...rest }: FormItemProps) => JSX.Element;
|
|
9
|
+
export default FormItem;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["value", "onChange"];
|
|
4
|
+
/*
|
|
5
|
+
* @Author: 郭郭
|
|
6
|
+
* @Date: 2025/9/15
|
|
7
|
+
* @Description:
|
|
8
|
+
*/
|
|
9
|
+
import { valueEnumTransform } from "../utils/util";
|
|
10
|
+
import { Checkbox, Input, InputNumber, Radio, Select, TreeSelect } from 'antd';
|
|
11
|
+
import React from 'react';
|
|
12
|
+
var FormItem = function FormItem(_ref) {
|
|
13
|
+
var value = _ref.value,
|
|
14
|
+
_onChange = _ref.onChange,
|
|
15
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
16
|
+
var comField = {
|
|
17
|
+
input: Input,
|
|
18
|
+
radio: Radio.Group,
|
|
19
|
+
select: Select,
|
|
20
|
+
inputNumber: InputNumber,
|
|
21
|
+
treeSelect: TreeSelect,
|
|
22
|
+
textArea: Input.TextArea,
|
|
23
|
+
checkbox: Checkbox.Group
|
|
24
|
+
};
|
|
25
|
+
var placeholder = rest.defaultPlaceholder || ['input', 'inputNumber', 'textArea'].includes(rest.type) ? '请输入' : '请选择';
|
|
26
|
+
var FieldComponent = comField[rest.type || 'input'];
|
|
27
|
+
return /*#__PURE__*/React.createElement(FieldComponent, _extends({
|
|
28
|
+
value: value,
|
|
29
|
+
onChange: function onChange(e) {
|
|
30
|
+
return _onChange === null || _onChange === void 0 ? void 0 : _onChange(['treeSelect', 'select', 'checkbox'].includes(rest.type) ? e : !rest.type || ['input', 'inputNumber'].includes(rest.type) ? e : e.target.value);
|
|
31
|
+
}
|
|
32
|
+
}, ['radio', 'checkbox', 'inputNumber'].includes(rest.type) ? {} : {
|
|
33
|
+
allowClear: true
|
|
34
|
+
}, ['select'].includes(rest.type) ? {
|
|
35
|
+
showSearch: true,
|
|
36
|
+
optionFilterProp: 'label'
|
|
37
|
+
} : {}, {
|
|
38
|
+
style: {
|
|
39
|
+
width: '100%'
|
|
40
|
+
}
|
|
41
|
+
}, ['radio', 'select'].includes(rest.type) ? {
|
|
42
|
+
options: valueEnumTransform(rest.valueEnum, value)
|
|
43
|
+
} : {}, {
|
|
44
|
+
placeholder: placeholder
|
|
45
|
+
}, rest.fieldProps || {}));
|
|
46
|
+
};
|
|
47
|
+
export default FormItem;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 郭郭
|
|
3
|
+
* @Date: 2025/8/15
|
|
4
|
+
* @Description:
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { ProColumns } from '@ant-design/pro-table';
|
|
8
|
+
import { Rules } from '@rc-component/async-validator';
|
|
9
|
+
import { ImgCropProps } from 'antd-img-crop';
|
|
10
|
+
import { ReactNode } from 'react';
|
|
11
|
+
|
|
12
|
+
interface CustomColumnProps extends ProColumns {
|
|
13
|
+
/**
|
|
14
|
+
* 字段类型
|
|
15
|
+
*/
|
|
16
|
+
type?:
|
|
17
|
+
| 'input'
|
|
18
|
+
| 'radio'
|
|
19
|
+
| 'select'
|
|
20
|
+
| 'checkbox'
|
|
21
|
+
| 'inputNumber'
|
|
22
|
+
| 'treeSelect'
|
|
23
|
+
| 'textArea'
|
|
24
|
+
| 'upload'
|
|
25
|
+
| 'progress'
|
|
26
|
+
| 'tag'
|
|
27
|
+
| 'group';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* 是否必填
|
|
31
|
+
*/
|
|
32
|
+
required?: boolean;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 校验
|
|
36
|
+
*/
|
|
37
|
+
rules?: Rules[];
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* 表单字段绑定
|
|
41
|
+
*/
|
|
42
|
+
fieldProps?: {
|
|
43
|
+
/**
|
|
44
|
+
* 详情item参数
|
|
45
|
+
*/
|
|
46
|
+
descriptionsItemProps?: {
|
|
47
|
+
[key: string]: any;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* 图片上传接口
|
|
51
|
+
* @param data
|
|
52
|
+
*/
|
|
53
|
+
request?: (data: any) => any;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* 裁切图片参数
|
|
57
|
+
*/
|
|
58
|
+
imgCrop?:
|
|
59
|
+
| ImgCropProps
|
|
60
|
+
| {
|
|
61
|
+
aspect?: any;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* 是否裁切图片
|
|
66
|
+
*/
|
|
67
|
+
isCrop?: boolean;
|
|
68
|
+
|
|
69
|
+
[key: string]: any;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* 表单字段唯一key
|
|
74
|
+
*/
|
|
75
|
+
formKey?: string;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 详情是否展示
|
|
79
|
+
*/
|
|
80
|
+
hideInDetail?: boolean;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* 操作按钮
|
|
84
|
+
*/
|
|
85
|
+
buttons?: (data: { [key: string]: any }) => ReactNode;
|
|
86
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
/*
|
|
3
|
+
* @Author: 郭郭
|
|
4
|
+
* @Date: 2025/11/20
|
|
5
|
+
* @Description:
|
|
6
|
+
*/
|
|
7
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
8
|
+
var useFullscreen = function useFullscreen(targetRef) {
|
|
9
|
+
var _useState = useState(false),
|
|
10
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
11
|
+
isFullscreen = _useState2[0],
|
|
12
|
+
setIsFullscreen = _useState2[1];
|
|
13
|
+
|
|
14
|
+
// 获取目标元素
|
|
15
|
+
var getTargetElement = function getTargetElement() {
|
|
16
|
+
if (typeof targetRef === 'string') {
|
|
17
|
+
return document.querySelector(targetRef);
|
|
18
|
+
}
|
|
19
|
+
return targetRef.current;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// 切换全屏
|
|
23
|
+
var toggle = useCallback(function () {
|
|
24
|
+
var elem = getTargetElement();
|
|
25
|
+
if (!elem) return;
|
|
26
|
+
if (!isFullscreen) {
|
|
27
|
+
// 进入全屏
|
|
28
|
+
if (elem.requestFullscreen) {
|
|
29
|
+
elem.requestFullscreen();
|
|
30
|
+
} else if (elem.msRequestFullscreen) {
|
|
31
|
+
elem.msRequestFullscreen();
|
|
32
|
+
} else if (elem.mozRequestFullScreen) {
|
|
33
|
+
elem.mozRequestFullScreen();
|
|
34
|
+
} else if (elem.webkitRequestFullscreen) {
|
|
35
|
+
elem.webkitRequestFullscreen();
|
|
36
|
+
}
|
|
37
|
+
} else {
|
|
38
|
+
// 退出全屏
|
|
39
|
+
if (document.exitFullscreen) {
|
|
40
|
+
document.exitFullscreen();
|
|
41
|
+
} else if (document.msExitFullscreen) {
|
|
42
|
+
document.msExitFullscreen();
|
|
43
|
+
} else if (document.mozCancelFullScreen) {
|
|
44
|
+
document.mozCancelFullScreen();
|
|
45
|
+
} else if (document.webkitExitFullscreen) {
|
|
46
|
+
document.webkitExitFullscreen();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}, [isFullscreen]);
|
|
50
|
+
|
|
51
|
+
// 监听全屏状态变化
|
|
52
|
+
useEffect(function () {
|
|
53
|
+
var handleFullscreenChange = function handleFullscreenChange() {
|
|
54
|
+
var fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;
|
|
55
|
+
var elem = getTargetElement();
|
|
56
|
+
// 只有当全屏元素是我们指定的目标时,才认为是“我们的全屏”
|
|
57
|
+
setIsFullscreen(!!(fullscreenElement && elem && fullscreenElement === elem));
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// 添加事件监听
|
|
61
|
+
document.addEventListener('fullscreenchange', handleFullscreenChange);
|
|
62
|
+
document.addEventListener('webkitfullscreenchange', handleFullscreenChange);
|
|
63
|
+
document.addEventListener('mozfullscreenchange', handleFullscreenChange);
|
|
64
|
+
document.addEventListener('MSFullscreenChange', handleFullscreenChange);
|
|
65
|
+
return function () {
|
|
66
|
+
document.removeEventListener('fullscreenchange', handleFullscreenChange);
|
|
67
|
+
document.removeEventListener('webkitfullscreenchange', handleFullscreenChange);
|
|
68
|
+
document.removeEventListener('mozfullscreenchange', handleFullscreenChange);
|
|
69
|
+
document.removeEventListener('MSFullscreenChange', handleFullscreenChange);
|
|
70
|
+
};
|
|
71
|
+
}, [targetRef]);
|
|
72
|
+
return {
|
|
73
|
+
isFullscreen: isFullscreen,
|
|
74
|
+
toggle: toggle
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
export default useFullscreen;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type { CustomColumnProps } from './compontent';
|
|
2
|
+
export { default as CustomDetailModal } from './CustomDetailModal';
|
|
3
|
+
export type { CustomDetailModalProps } from './CustomDetailModal/detailModal';
|
|
4
|
+
export { default as CustomModal } from './CustomFormModal';
|
|
5
|
+
export type { CustomFormModalProps } from './CustomFormModal/formModal';
|
|
6
|
+
export { default as CustomTable } from './CustomTable';
|
|
7
|
+
export type { CustomTableProps } from './CustomTable/table';
|
|
8
|
+
export { default as CustomTag } from './CustomTag';
|
|
9
|
+
export { default as CustomUpload } from './CustomUpload';
|
|
10
|
+
export { default as DynamicIcon } from './DynamicIcon';
|
|
11
|
+
export { default as FormItem } from './FormItem';
|
|
12
|
+
export * from './hooks';
|
|
13
|
+
export * from './utils';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { default as CustomDetailModal } from "./CustomDetailModal";
|
|
2
|
+
export { default as CustomModal } from "./CustomFormModal";
|
|
3
|
+
export { default as CustomTable } from "./CustomTable";
|
|
4
|
+
export { default as CustomTag } from "./CustomTag";
|
|
5
|
+
export { default as CustomUpload } from "./CustomUpload";
|
|
6
|
+
export { default as DynamicIcon } from "./DynamicIcon";
|
|
7
|
+
export { default as FormItem } from "./FormItem";
|
|
8
|
+
export * from "./hooks";
|
|
9
|
+
export * from "./utils";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import RememberPwd from './rememberPwd';
|
|
2
|
+
import { capitalizeFirstLetter, capitalizeFirstLetters, fileTransformBase64, findTreeNodeByKey, handleColumnFieldProps, isEmptyValue, randomInt, valueEnumTransform } from './util';
|
|
3
|
+
export { capitalizeFirstLetter, capitalizeFirstLetters, fileTransformBase64, findTreeNodeByKey, handleColumnFieldProps, isEmptyValue, randomInt, RememberPwd, valueEnumTransform, };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 郭郭
|
|
3
|
+
* @Date: 2025/11/4
|
|
4
|
+
* @Description:
|
|
5
|
+
*/
|
|
6
|
+
import RememberPwd from "./rememberPwd";
|
|
7
|
+
import { capitalizeFirstLetter, capitalizeFirstLetters, fileTransformBase64, findTreeNodeByKey, handleColumnFieldProps, isEmptyValue, randomInt, valueEnumTransform } from "./util";
|
|
8
|
+
export { capitalizeFirstLetter, capitalizeFirstLetters, fileTransformBase64, findTreeNodeByKey, handleColumnFieldProps, isEmptyValue, randomInt, RememberPwd, valueEnumTransform };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
declare class RememberPwd {
|
|
2
|
+
private desIv;
|
|
3
|
+
private desKey;
|
|
4
|
+
constructor(props?: any);
|
|
5
|
+
/**
|
|
6
|
+
* 加密方法
|
|
7
|
+
* @returns {string}
|
|
8
|
+
*/
|
|
9
|
+
desEncrypt(data: any): string;
|
|
10
|
+
/**
|
|
11
|
+
* 解密方法
|
|
12
|
+
* @returns {string}
|
|
13
|
+
*/
|
|
14
|
+
desDecrypt(data: any): string;
|
|
15
|
+
/**
|
|
16
|
+
* 设置cookie
|
|
17
|
+
* @param name
|
|
18
|
+
* @param value
|
|
19
|
+
* @param seconds
|
|
20
|
+
*/
|
|
21
|
+
setCookie(name: string, value: any, seconds?: number): void;
|
|
22
|
+
/**
|
|
23
|
+
* 获取cookie
|
|
24
|
+
* @param name
|
|
25
|
+
* @returns {string}
|
|
26
|
+
*/
|
|
27
|
+
getCookie(name: string): any;
|
|
28
|
+
/**
|
|
29
|
+
* 移除cookie
|
|
30
|
+
* @param name
|
|
31
|
+
*/
|
|
32
|
+
removeCookie(name: string): void;
|
|
33
|
+
}
|
|
34
|
+
export default RememberPwd;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
3
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
4
|
+
/*
|
|
5
|
+
* @Author: 郭郭
|
|
6
|
+
* @Date: 2025/11/05
|
|
7
|
+
* @Description:
|
|
8
|
+
*/
|
|
9
|
+
import cryptoJS from 'crypto-js';
|
|
10
|
+
import Cookies from 'js-cookie';
|
|
11
|
+
import isObject from 'lodash/isObject';
|
|
12
|
+
|
|
13
|
+
// 记住密码
|
|
14
|
+
var RememberPwd = /*#__PURE__*/function () {
|
|
15
|
+
function RememberPwd() {
|
|
16
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
17
|
+
_classCallCheck(this, RememberPwd);
|
|
18
|
+
_defineProperty(this, "desIv", 'msvQw2d#9n@R(lcXmMOxs8%i^@3Dd5QDe_lu!U4Hx(wLVHD6Gc8n(v+%t^zzxM');
|
|
19
|
+
_defineProperty(this, "desKey", 'w4D7U_wy)Q%GqoV2');
|
|
20
|
+
var _ref = props || {},
|
|
21
|
+
iv = _ref.iv,
|
|
22
|
+
key = _ref.key;
|
|
23
|
+
if (iv) {
|
|
24
|
+
this.desIv = iv;
|
|
25
|
+
}
|
|
26
|
+
if (key) {
|
|
27
|
+
this.desKey = key;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 加密方法
|
|
33
|
+
* @returns {string}
|
|
34
|
+
*/
|
|
35
|
+
_createClass(RememberPwd, [{
|
|
36
|
+
key: "desEncrypt",
|
|
37
|
+
value: function desEncrypt(data) {
|
|
38
|
+
var key = cryptoJS.enc.Utf8.parse(this.desKey),
|
|
39
|
+
iv = cryptoJS.enc.Utf8.parse(this.desIv),
|
|
40
|
+
srcs = cryptoJS.enc.Utf8.parse(data),
|
|
41
|
+
encrypted = cryptoJS.DES.encrypt(srcs, key, {
|
|
42
|
+
iv: iv,
|
|
43
|
+
mode: cryptoJS.mode.CBC,
|
|
44
|
+
//明文长度不是分组长度(8 字节)的整数倍时,需要补齐。补充模式为Pkcs7
|
|
45
|
+
padding: cryptoJS.pad.Pkcs7
|
|
46
|
+
});
|
|
47
|
+
return encrypted.toString();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* 解密方法
|
|
52
|
+
* @returns {string}
|
|
53
|
+
*/
|
|
54
|
+
}, {
|
|
55
|
+
key: "desDecrypt",
|
|
56
|
+
value: function desDecrypt(data) {
|
|
57
|
+
var key = cryptoJS.enc.Utf8.parse(this.desKey),
|
|
58
|
+
iv = cryptoJS.enc.Utf8.parse(this.desIv),
|
|
59
|
+
decrypted = cryptoJS.DES.decrypt(data, key, {
|
|
60
|
+
iv: iv,
|
|
61
|
+
mode: cryptoJS.mode.CBC,
|
|
62
|
+
//明文长度不是分组长度(8 字节)的整数倍时,需要补齐。补充模式为Pkcs7
|
|
63
|
+
padding: cryptoJS.pad.Pkcs7
|
|
64
|
+
});
|
|
65
|
+
return decrypted.toString(cryptoJS.enc.Utf8);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* 设置cookie
|
|
70
|
+
* @param name
|
|
71
|
+
* @param value
|
|
72
|
+
* @param seconds
|
|
73
|
+
*/
|
|
74
|
+
}, {
|
|
75
|
+
key: "setCookie",
|
|
76
|
+
value: function setCookie(name, value) {
|
|
77
|
+
var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;
|
|
78
|
+
if (!name || !value || !isObject(value)) return;
|
|
79
|
+
var expires = new Date(Date.now() + seconds * 24 * 60 * 60 * 1000);
|
|
80
|
+
Cookies.set(name, this.desEncrypt(JSON.stringify(value)), {
|
|
81
|
+
expires: expires
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* 获取cookie
|
|
87
|
+
* @param name
|
|
88
|
+
* @returns {string}
|
|
89
|
+
*/
|
|
90
|
+
}, {
|
|
91
|
+
key: "getCookie",
|
|
92
|
+
value: function getCookie(name) {
|
|
93
|
+
var data = Cookies.get(name);
|
|
94
|
+
if (!data) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
return JSON.parse(this.desDecrypt(data));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* 移除cookie
|
|
102
|
+
* @param name
|
|
103
|
+
*/
|
|
104
|
+
}, {
|
|
105
|
+
key: "removeCookie",
|
|
106
|
+
value: function removeCookie(name) {
|
|
107
|
+
Cookies.remove(name);
|
|
108
|
+
}
|
|
109
|
+
}]);
|
|
110
|
+
return RememberPwd;
|
|
111
|
+
}();
|
|
112
|
+
export default RememberPwd;
|