@cfmm/umi-plugins-ui-v2 0.0.27 → 0.0.29

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.
@@ -404,7 +404,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
404
404
  * 通用操作处理
405
405
  */
406
406
  const handleAction = useMemoizedFn(async (method: API.MethodTypes, fields: any): Promise<boolean> => {
407
- if(!api.handle) return false;
407
+ if(!apis.handle) return false;
408
408
 
409
409
  // 自定义操作前处理
410
410
  if (onBeforeAction) {
@@ -7,4 +7,24 @@
7
7
  :global(.mainAnt-upload-list) {
8
8
  display: none;
9
9
  }
10
- }
10
+ }
11
+
12
+ // children 自定义触发区时撑满父容器(如下拉菜单 label),扩大可点击范围
13
+ .importExexlFill {
14
+ display: block;
15
+ width: 100%;
16
+ :global(.ant-upload) {
17
+ display: block;
18
+ width: 100%;
19
+ }
20
+ :global(.ant-upload-select) {
21
+ display: block;
22
+ width: 100%;
23
+ }
24
+ }
25
+ .importTrigger {
26
+ display: inline-flex;
27
+ align-items: center;
28
+ gap: 8px;
29
+ width: 100%;
30
+ }
@@ -2,6 +2,7 @@ import { UploadOutlined } from '@ant-design/icons';
2
2
  import { useIntl } from '@umijs/max';
3
3
  import type { UploadFile, UploadProps } from 'antd';
4
4
  import { Button, message, Modal, Upload } from 'antd';
5
+ import classNames from 'classnames';
5
6
  import React from 'react';
6
7
  import { ImportExeclProps } from '../types';
7
8
  import { importExexl } from '../utils/importHelper';
@@ -20,6 +21,7 @@ const ImportExecl = <T,>(props: ImportExeclProps<T>) => {
20
21
  buttonProps,
21
22
  children,
22
23
  showDefautlMessage = true,
24
+ fillContainer = false,
23
25
  onChange,
24
26
  } = props;
25
27
 
@@ -134,16 +136,18 @@ const ImportExecl = <T,>(props: ImportExeclProps<T>) => {
134
136
  }
135
137
  };
136
138
 
139
+ const useFillLayout = fillContainer && !!children;
140
+
137
141
  return (
138
142
  <Upload
139
143
  accept={accept}
140
- className={styles.importExexl}
144
+ className={classNames(styles.importExexl, useFillLayout && styles.importExexlFill, uploadProps?.className)}
141
145
  maxCount={1}
142
146
  customRequest={handleCustomRequest}
143
147
  {...uploadProps}
144
148
  >
145
- {children ? (
146
- children
149
+ {children ? (
150
+ useFillLayout ? <span className={styles.importTrigger}>{children}</span> : children
147
151
  ) : (
148
152
  <Button type="primary" icon={<UploadOutlined />} {...buttonProps}>
149
153
  {title ? title : formatMessage({ id: 'cfmmUI.File.import', defaultMessage: '导入' })}
@@ -48,6 +48,7 @@ const MySelect = <T,>(props: MySelectProps<T>, ref: ForwardedRef<any>) => {
48
48
  showDropdown,
49
49
  getSelectList,
50
50
  pageSize = 20,
51
+ searchDelay = 500,
51
52
  mode,
52
53
  dropDownListChange,
53
54
  ...reset
@@ -99,7 +100,7 @@ const MySelect = <T,>(props: MySelectProps<T>, ref: ForwardedRef<any>) => {
99
100
 
100
101
  const handleSearch = debounce((v: string) => {
101
102
  setSearchValue({ [searchKey]: v });
102
- }, 500);
103
+ }, searchDelay);
103
104
 
104
105
  // 获取数据
105
106
  useImperativeHandle(ref, () => ({}));
@@ -116,13 +117,13 @@ const MySelect = <T,>(props: MySelectProps<T>, ref: ForwardedRef<any>) => {
116
117
  // 如果显示全部,则不分页
117
118
  params = showAllList ? params : { pageIndex: 1, pageSize, ...params };
118
119
  const response = await request(params);
119
- if (response.rows && response.rows.length > 0) {
120
- // 如果有搜索值,则不添加回显值
121
- setListData(response.rows);
120
+ const data = response.rows || response.data;
121
+ if (data && data.length > 0) {
122
+ setListData(data);
122
123
 
123
124
  const allList = [...allListData];
124
125
  // 如果原有列表没有,则增加,防止getSelectList找不到选择的项
125
- response.rows.forEach((item) => {
126
+ data.forEach((item) => {
126
127
  if (!getListData.some((v) => item[keyNames.id] === v[keyNames.id])) {
127
128
  allList.push(item);
128
129
  }
@@ -2,31 +2,36 @@ import { useModel } from '@umijs/max';
2
2
  import { DatePicker } from 'antd';
3
3
  import dayjs from 'dayjs';
4
4
  import React, { useMemo } from 'react';
5
- import { UTC_FORMAT } from '../constants';
6
- import { UTCDatePickerProps } from "../types";
5
+ import { DATE_FORMAT, DATE_TIME_FORMAT, UTC_FORMAT } from '../constants';
6
+ import { UTCDatePickerProps } from '../types';
7
7
 
8
8
  /**
9
9
  * 带UTC时区转换功能的DatePicker组件
10
10
  */
11
11
  const UTCDatePicker = (props: UTCDatePickerProps) => {
12
12
  // 设置mode后无法显示时间
13
- const { readonly, convertTimeZone = true, showTime = false, mode, ...reset } = props;
14
- const { timeZone, timeFormat, dateFormat } = window.__POWERED_BY_QIANKUN__ ? useModel("@@qiankunStateFromMaster") : useModel('user');
13
+ const { readonly, convertTimeZone, showTime = false, mode, ...reset } = props;
14
+ const { timeZone, timeFormat, dateFormat } = window.__POWERED_BY_QIANKUN__
15
+ ? useModel('@@qiankunStateFromMaster')
16
+ : useModel('user');
17
+
18
+ // 如果不传convertTimeZone,则根据showTime判断是否转换时区,默认showTime为true转时区,false不转时区
19
+ const newConvertTimeZone = typeof convertTimeZone === 'boolean' ? convertTimeZone : showTime;
15
20
 
16
21
  // 将日期转换为地区时间显示
17
22
  const value = useMemo(() => {
18
23
  const v = props.value;
19
24
  if (v && dayjs(v).isValid()) {
20
25
  const date = dayjs(v);
21
- return convertTimeZone ? date.tz(timeZone) : date;
26
+ return newConvertTimeZone ? date.tz(timeZone) : date;
22
27
  }
23
- }, [props.value, convertTimeZone, timeZone]);
28
+ }, [props.value, newConvertTimeZone, timeZone]);
24
29
 
25
30
  // 获取设置的格式
26
31
  const format = useMemo(() => {
27
- if(typeof showTime === 'object' && showTime.format ) {
32
+ if (typeof showTime === 'object' && showTime.format) {
28
33
  return `${dateFormat} ${showTime.format}`;
29
- };
34
+ }
30
35
  return props.format || showTime ? `${dateFormat} ${timeFormat}` : dateFormat;
31
36
  }, [props.format, showTime, dateFormat, timeFormat]);
32
37
 
@@ -34,8 +39,10 @@ const UTCDatePicker = (props: UTCDatePickerProps) => {
34
39
  const handleChange = (date: dayjs.Dayjs, dateString: string | string[]) => {
35
40
  if (date) {
36
41
  // 转标准时间,显示时间转换有问题
37
- const standardTime: any = convertTimeZone ? date.utc().format(UTC_FORMAT) : date.format(UTC_FORMAT);
38
- const dateString = convertTimeZone ? date.utc().format(format) : date.format(format);
42
+ const standardTime: any = newConvertTimeZone
43
+ ? date.utc().format(UTC_FORMAT)
44
+ : date.format(showTime ? DATE_TIME_FORMAT : DATE_FORMAT);
45
+ const dateString = newConvertTimeZone ? date.utc().format(format) : date.format(format);
39
46
 
40
47
  props.onChange?.(standardTime, dateString);
41
48
  return;
@@ -2,8 +2,8 @@ import { useModel } from '@umijs/max';
2
2
  import { DatePicker } from 'antd';
3
3
  import dayjs from 'dayjs';
4
4
  import React, { useMemo } from 'react';
5
- import { UTC_FORMAT } from '../constants';
6
- import { RangePickerValueType, RangePickerOnChangeType, UTCRangePickerProps } from '../types';
5
+ import { DATE_FORMAT, DATE_TIME_FORMAT, UTC_FORMAT } from '../constants';
6
+ import { RangePickerOnChangeType, RangePickerValueType, UTCRangePickerProps } from '../types';
7
7
 
8
8
  const { RangePicker } = DatePicker;
9
9
 
@@ -12,16 +12,13 @@ const { RangePicker } = DatePicker;
12
12
  */
13
13
  const UTCRangePicker = (props: UTCRangePickerProps) => {
14
14
  // 设置mode后无法显示时间
15
- const {
16
- readonly,
17
- convertTimeZone = true,
18
- showTime = false,
19
- mode,
20
- endDateEndOfType,
21
- startDatStartOfType,
22
- ...reset
23
- } = props;
24
- const { timeZone, timeFormat, dateFormat } = window.__POWERED_BY_QIANKUN__ ? useModel("@@qiankunStateFromMaster") : useModel('user');
15
+ const { readonly, convertTimeZone, showTime = false, mode, endDateEndOfType, startDatStartOfType, ...reset } = props;
16
+ const { timeZone, timeFormat, dateFormat } = window.__POWERED_BY_QIANKUN__
17
+ ? useModel('@@qiankunStateFromMaster')
18
+ : useModel('user');
19
+
20
+ // 如果不传convertTimeZone,则根据showTime判断是否转换时区,默认showTime为true转时区,false不转时区
21
+ const newConvertTimeZone = typeof convertTimeZone === 'boolean' ? convertTimeZone : showTime;
25
22
 
26
23
  // 将日期转换为地区时间显示
27
24
  const value: RangePickerValueType = useMemo(() => {
@@ -31,16 +28,16 @@ const UTCRangePicker = (props: UTCRangePickerProps) => {
31
28
 
32
29
  const startTime = v[0] ? dayjs(v[0]) : undefined;
33
30
  const endTime = v[1] ? dayjs(v[1]) : undefined;
34
- return convertTimeZone
31
+ return newConvertTimeZone
35
32
  ? [startTime ? startTime.tz(timeZone) : undefined, endTime ? endTime.tz(timeZone) : undefined]
36
33
  : [startTime, endTime];
37
- }, [props.value, convertTimeZone, timeZone]);
34
+ }, [props.value, newConvertTimeZone, timeZone]);
38
35
 
39
36
  // 获取设置的格式
40
37
  const format = useMemo(() => {
41
- if(typeof showTime === 'object' && showTime.format ) {
38
+ if (typeof showTime === 'object' && showTime.format) {
42
39
  return `${dateFormat} ${showTime.format}`;
43
- };
40
+ }
44
41
  return props.format || showTime ? `${dateFormat} ${timeFormat}` : dateFormat;
45
42
  }, [props.format, showTime, dateFormat, timeFormat]);
46
43
 
@@ -57,10 +54,12 @@ const UTCRangePicker = (props: UTCRangePickerProps) => {
57
54
  const utcStartTime = startTime?.utc();
58
55
  const utcEndTime = endTime?.utc();
59
56
 
57
+ const notConvertFormat = showTime ? DATE_TIME_FORMAT : DATE_FORMAT;
58
+
60
59
  // 转标准时间,显示时间转换有问题
61
- const standardTime: any = convertTimeZone
60
+ const standardTime: any = newConvertTimeZone
62
61
  ? [utcStartTime?.format(UTC_FORMAT), utcEndTime?.format(UTC_FORMAT)]
63
- : [startTime?.format(UTC_FORMAT), endTime?.format(UTC_FORMAT)];
62
+ : [startTime?.format(notConvertFormat), endTime?.format(notConvertFormat)];
64
63
  const datesString: any = [startTime?.format(format), endTime?.format(format)];
65
64
 
66
65
  props.onChange?.(standardTime, datesString);
@@ -1 +1 @@
1
- export declare const DatePickerTypes = "\n export type DateType = dayjs.Dayjs | string;\n export type HasNullUndefinedDateType = DateType | undefined | null;\n\n export interface UTCDatePickerProps extends DatePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n }\n\n type DatePickValueType = Pick<ProFormItemProps<import('antd').DatePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormDatePickerProps extends ProFormItemProps<import('antd').DatePickerProps> {\n /**\n * DatePickerProps\n */\n fieldProps?: DatePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n\n\n type RangePickerValueType = RangePickerProps['value'];\n export type RangePickerOnChangeType = RangePickerProps['onChange'];\n\n export type RangeDateType = [HasNullUndefinedDateType, HasNullUndefinedDateType];\n\n export interface UTCRangePickerProps extends RangePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n /**\n * \u5F00\u59CB\u65E5\u671F\u7684startOf\u7C7B\u578B\n */\n startDatStartOfType?: OpUnitType;\n /**\n * \u7ED3\u675F\u65E5\u671F\u7684endOf\u7C7B\u578B\n */\n endDateEndOfType?: OpUnitType;\n }\n\n type RangePickValueType = Pick<ProFormItemProps<RangePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormRangePickerProps extends ProFormItemProps<RangePickerProps> {\n /**\n * RangePickerProps\n */\n fieldProps?: RangePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n";
1
+ export declare const DatePickerTypes = "\n export type DateType = dayjs.Dayjs | string;\n export type HasNullUndefinedDateType = DateType | undefined | null;\n\n export interface UTCDatePickerProps extends DatePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u5224\u65AD\u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u4E3Atrue\u8F6C\u65F6\u533A\uFF0Cfalse\u4E0D\u8F6C\u65F6\u533A\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n }\n\n type DatePickValueType = Pick<ProFormItemProps<import('antd').DatePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormDatePickerProps extends ProFormItemProps<import('antd').DatePickerProps> {\n /**\n * DatePickerProps\n */\n fieldProps?: DatePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n\n\n type RangePickerValueType = RangePickerProps['value'];\n export type RangePickerOnChangeType = RangePickerProps['onChange'];\n\n export type RangeDateType = [HasNullUndefinedDateType, HasNullUndefinedDateType];\n\n export interface UTCRangePickerProps extends RangePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u5224\u65AD\u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u4E3Atrue\u8F6C\u65F6\u533A\uFF0Cfalse\u4E0D\u8F6C\u65F6\u533A\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n /**\n * \u5F00\u59CB\u65E5\u671F\u7684startOf\u7C7B\u578B\n */\n startDatStartOfType?: OpUnitType;\n /**\n * \u7ED3\u675F\u65E5\u671F\u7684endOf\u7C7B\u578B\n */\n endDateEndOfType?: OpUnitType;\n }\n\n type RangePickValueType = Pick<ProFormItemProps<RangePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormRangePickerProps extends ProFormItemProps<RangePickerProps> {\n /**\n * RangePickerProps\n */\n fieldProps?: RangePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n";
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.DatePickerTypes = void 0;
7
- var DatePickerTypes = exports.DatePickerTypes = "\n export type DateType = dayjs.Dayjs | string;\n export type HasNullUndefinedDateType = DateType | undefined | null;\n\n export interface UTCDatePickerProps extends DatePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n }\n\n type DatePickValueType = Pick<ProFormItemProps<import('antd').DatePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormDatePickerProps extends ProFormItemProps<import('antd').DatePickerProps> {\n /**\n * DatePickerProps\n */\n fieldProps?: DatePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n\n\n type RangePickerValueType = RangePickerProps['value'];\n export type RangePickerOnChangeType = RangePickerProps['onChange'];\n\n export type RangeDateType = [HasNullUndefinedDateType, HasNullUndefinedDateType];\n\n export interface UTCRangePickerProps extends RangePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n /**\n * \u5F00\u59CB\u65E5\u671F\u7684startOf\u7C7B\u578B\n */\n startDatStartOfType?: OpUnitType;\n /**\n * \u7ED3\u675F\u65E5\u671F\u7684endOf\u7C7B\u578B\n */\n endDateEndOfType?: OpUnitType;\n }\n\n type RangePickValueType = Pick<ProFormItemProps<RangePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormRangePickerProps extends ProFormItemProps<RangePickerProps> {\n /**\n * RangePickerProps\n */\n fieldProps?: RangePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n";
7
+ var DatePickerTypes = exports.DatePickerTypes = "\n export type DateType = dayjs.Dayjs | string;\n export type HasNullUndefinedDateType = DateType | undefined | null;\n\n export interface UTCDatePickerProps extends DatePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u5224\u65AD\u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u4E3Atrue\u8F6C\u65F6\u533A\uFF0Cfalse\u4E0D\u8F6C\u65F6\u533A\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n }\n\n type DatePickValueType = Pick<ProFormItemProps<import('antd').DatePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormDatePickerProps extends ProFormItemProps<import('antd').DatePickerProps> {\n /**\n * DatePickerProps\n */\n fieldProps?: DatePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n\n\n type RangePickerValueType = RangePickerProps['value'];\n export type RangePickerOnChangeType = RangePickerProps['onChange'];\n\n export type RangeDateType = [HasNullUndefinedDateType, HasNullUndefinedDateType];\n\n export interface UTCRangePickerProps extends RangePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u5224\u65AD\u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u4E3Atrue\u8F6C\u65F6\u533A\uFF0Cfalse\u4E0D\u8F6C\u65F6\u533A\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n /**\n * \u5F00\u59CB\u65E5\u671F\u7684startOf\u7C7B\u578B\n */\n startDatStartOfType?: OpUnitType;\n /**\n * \u7ED3\u675F\u65E5\u671F\u7684endOf\u7C7B\u578B\n */\n endDateEndOfType?: OpUnitType;\n }\n\n type RangePickValueType = Pick<ProFormItemProps<RangePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormRangePickerProps extends ProFormItemProps<RangePickerProps> {\n /**\n * RangePickerProps\n */\n fieldProps?: RangePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n";
@@ -1 +1 @@
1
- export declare const ImportExeclTypes = "\nexport interface ImportExeclProps<T = any[]> {\n accept?: string;\n /**\n * \u4E0A\u4F20\u4E8B\u4EF6\uFF0C\u83B7\u53D6execl\u6570\u636E\u5217\u8868\uFF0C\u51FD\u6570\u8FD4\u56DEpromise\u5E76\u4E14showDefautlMessage\u4E0D\u662Ffalse\u65F6\u6709\u9ED8\u8BA4message\u63D0\u793A\n */\n onChange: (list: T, fileInfo: Pick<UploadFile, 'name' | 'size' | 'type' | 'uid'>) => Promise<{\n success: boolean; failMsg?: string; data?: {\n success: boolean;\n insertCount: number;\n updateCount: number;\n deleteCount: number;\n } | number\n } | void> | void;\n /**\n * \u663E\u793A\u9ED8\u8BA4\u7684\u63D0\u793A\n */\n showDefautlMessage?: boolean;\n /**\n * \u6309\u94AE\u6587\u672C\n */\n title?: string;\n /**\n * \u8BFB\u53D6\u5DE5\u4F5C\u7C3F\u6570\u91CF\uFF0C\u9ED8\u8BA41\n */\n max?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u884C\u4E3A\u8868\u5934\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\n */\n header?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u5217\u7B2C\u51E0\u884C\u5F00\u59CB\u8BFB\u53D6\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\u7B2C\u4E00\u5217\n */\n rangeStart?: { c: number; r: number };\n /**\n * \u7A7A\u5355\u5143\u683C\u5360\u4F4D\u503C\uFF1B\u4F20\u5165\u540E\u6BCF\u884C\u5BF9\u8C61\u4F1A\u5305\u542B\u4E0E\u8868\u5934\u5BF9\u9F50\u7684\u5168\u90E8 key\uFF08\u7A7A\u5355\u5143\u683C\u4E3A\u8BE5\u503C\uFF09\uFF0C\u5426\u5219 SheetJS \u4F1A\u7701\u7565\u7A7A\u5355\u5143\u683C\u5BF9\u5E94\u5B57\u6BB5\n */\n defval?: unknown;\n /**\n * \u4FDD\u7559\u7A7A\u884C\uFF0C\u9ED8\u8BA4false\n */\n blankrows?: boolean;\n /**\n * \u81EA\u5B9A\u4E49\u6309\u94AE\u5185\u5BB9\n */\n children?: React.ReactNode;\n /**\n * Upload\u7EC4\u4EF6\u5C5E\u6027\n */\n uploadProps?: UploadProps;\n /**\n * Button\u7EC4\u4EF6\u5C5E\u6027\n */\n buttonProps?: ButtonProps;\n}\n";
1
+ export declare const ImportExeclTypes = "\nexport interface ImportExeclProps<T = any[]> {\n accept?: string;\n /**\n * \u4E0A\u4F20\u4E8B\u4EF6\uFF0C\u83B7\u53D6execl\u6570\u636E\u5217\u8868\uFF0C\u51FD\u6570\u8FD4\u56DEpromise\u5E76\u4E14showDefautlMessage\u4E0D\u662Ffalse\u65F6\u6709\u9ED8\u8BA4message\u63D0\u793A\n */\n /**\n * \u81EA\u5B9A\u4E49 children \u65F6\u662F\u5426\u6491\u6EE1\u7236\u5BB9\u5668\uFF08\u5982\u4E0B\u62C9\u83DC\u5355 label\uFF09\uFF0C\u6269\u5927\u53EF\u70B9\u51FB\u8303\u56F4\n */\n fillContainer?: boolean;\n onChange: (list: T, fileInfo: Pick<UploadFile, 'name' | 'size' | 'type' | 'uid'>) => Promise<{\n success: boolean; failMsg?: string; data?: {\n success: boolean;\n insertCount: number;\n updateCount: number;\n deleteCount: number;\n } | number\n } | void> | void;\n /**\n * \u663E\u793A\u9ED8\u8BA4\u7684\u63D0\u793A\n */\n showDefautlMessage?: boolean;\n /**\n * \u6309\u94AE\u6587\u672C\n */\n title?: string;\n /**\n * \u8BFB\u53D6\u5DE5\u4F5C\u7C3F\u6570\u91CF\uFF0C\u9ED8\u8BA41\n */\n max?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u884C\u4E3A\u8868\u5934\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\n */\n header?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u5217\u7B2C\u51E0\u884C\u5F00\u59CB\u8BFB\u53D6\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\u7B2C\u4E00\u5217\n */\n rangeStart?: { c: number; r: number };\n /**\n * \u7A7A\u5355\u5143\u683C\u5360\u4F4D\u503C\uFF1B\u4F20\u5165\u540E\u6BCF\u884C\u5BF9\u8C61\u4F1A\u5305\u542B\u4E0E\u8868\u5934\u5BF9\u9F50\u7684\u5168\u90E8 key\uFF08\u7A7A\u5355\u5143\u683C\u4E3A\u8BE5\u503C\uFF09\uFF0C\u5426\u5219 SheetJS \u4F1A\u7701\u7565\u7A7A\u5355\u5143\u683C\u5BF9\u5E94\u5B57\u6BB5\n */\n defval?: unknown;\n /**\n * \u4FDD\u7559\u7A7A\u884C\uFF0C\u9ED8\u8BA4false\n */\n blankrows?: boolean;\n /**\n * \u81EA\u5B9A\u4E49\u6309\u94AE\u5185\u5BB9\n */\n children?: React.ReactNode;\n /**\n * Upload\u7EC4\u4EF6\u5C5E\u6027\n */\n uploadProps?: UploadProps;\n /**\n * Button\u7EC4\u4EF6\u5C5E\u6027\n */\n buttonProps?: ButtonProps;\n}\n";
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ImportExeclTypes = void 0;
7
- var ImportExeclTypes = exports.ImportExeclTypes = "\nexport interface ImportExeclProps<T = any[]> {\n accept?: string;\n /**\n * \u4E0A\u4F20\u4E8B\u4EF6\uFF0C\u83B7\u53D6execl\u6570\u636E\u5217\u8868\uFF0C\u51FD\u6570\u8FD4\u56DEpromise\u5E76\u4E14showDefautlMessage\u4E0D\u662Ffalse\u65F6\u6709\u9ED8\u8BA4message\u63D0\u793A\n */\n onChange: (list: T, fileInfo: Pick<UploadFile, 'name' | 'size' | 'type' | 'uid'>) => Promise<{\n success: boolean; failMsg?: string; data?: {\n success: boolean;\n insertCount: number;\n updateCount: number;\n deleteCount: number;\n } | number\n } | void> | void;\n /**\n * \u663E\u793A\u9ED8\u8BA4\u7684\u63D0\u793A\n */\n showDefautlMessage?: boolean;\n /**\n * \u6309\u94AE\u6587\u672C\n */\n title?: string;\n /**\n * \u8BFB\u53D6\u5DE5\u4F5C\u7C3F\u6570\u91CF\uFF0C\u9ED8\u8BA41\n */\n max?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u884C\u4E3A\u8868\u5934\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\n */\n header?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u5217\u7B2C\u51E0\u884C\u5F00\u59CB\u8BFB\u53D6\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\u7B2C\u4E00\u5217\n */\n rangeStart?: { c: number; r: number };\n /**\n * \u7A7A\u5355\u5143\u683C\u5360\u4F4D\u503C\uFF1B\u4F20\u5165\u540E\u6BCF\u884C\u5BF9\u8C61\u4F1A\u5305\u542B\u4E0E\u8868\u5934\u5BF9\u9F50\u7684\u5168\u90E8 key\uFF08\u7A7A\u5355\u5143\u683C\u4E3A\u8BE5\u503C\uFF09\uFF0C\u5426\u5219 SheetJS \u4F1A\u7701\u7565\u7A7A\u5355\u5143\u683C\u5BF9\u5E94\u5B57\u6BB5\n */\n defval?: unknown;\n /**\n * \u4FDD\u7559\u7A7A\u884C\uFF0C\u9ED8\u8BA4false\n */\n blankrows?: boolean;\n /**\n * \u81EA\u5B9A\u4E49\u6309\u94AE\u5185\u5BB9\n */\n children?: React.ReactNode;\n /**\n * Upload\u7EC4\u4EF6\u5C5E\u6027\n */\n uploadProps?: UploadProps;\n /**\n * Button\u7EC4\u4EF6\u5C5E\u6027\n */\n buttonProps?: ButtonProps;\n}\n";
7
+ var ImportExeclTypes = exports.ImportExeclTypes = "\nexport interface ImportExeclProps<T = any[]> {\n accept?: string;\n /**\n * \u4E0A\u4F20\u4E8B\u4EF6\uFF0C\u83B7\u53D6execl\u6570\u636E\u5217\u8868\uFF0C\u51FD\u6570\u8FD4\u56DEpromise\u5E76\u4E14showDefautlMessage\u4E0D\u662Ffalse\u65F6\u6709\u9ED8\u8BA4message\u63D0\u793A\n */\n /**\n * \u81EA\u5B9A\u4E49 children \u65F6\u662F\u5426\u6491\u6EE1\u7236\u5BB9\u5668\uFF08\u5982\u4E0B\u62C9\u83DC\u5355 label\uFF09\uFF0C\u6269\u5927\u53EF\u70B9\u51FB\u8303\u56F4\n */\n fillContainer?: boolean;\n onChange: (list: T, fileInfo: Pick<UploadFile, 'name' | 'size' | 'type' | 'uid'>) => Promise<{\n success: boolean; failMsg?: string; data?: {\n success: boolean;\n insertCount: number;\n updateCount: number;\n deleteCount: number;\n } | number\n } | void> | void;\n /**\n * \u663E\u793A\u9ED8\u8BA4\u7684\u63D0\u793A\n */\n showDefautlMessage?: boolean;\n /**\n * \u6309\u94AE\u6587\u672C\n */\n title?: string;\n /**\n * \u8BFB\u53D6\u5DE5\u4F5C\u7C3F\u6570\u91CF\uFF0C\u9ED8\u8BA41\n */\n max?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u884C\u4E3A\u8868\u5934\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\n */\n header?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u5217\u7B2C\u51E0\u884C\u5F00\u59CB\u8BFB\u53D6\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\u7B2C\u4E00\u5217\n */\n rangeStart?: { c: number; r: number };\n /**\n * \u7A7A\u5355\u5143\u683C\u5360\u4F4D\u503C\uFF1B\u4F20\u5165\u540E\u6BCF\u884C\u5BF9\u8C61\u4F1A\u5305\u542B\u4E0E\u8868\u5934\u5BF9\u9F50\u7684\u5168\u90E8 key\uFF08\u7A7A\u5355\u5143\u683C\u4E3A\u8BE5\u503C\uFF09\uFF0C\u5426\u5219 SheetJS \u4F1A\u7701\u7565\u7A7A\u5355\u5143\u683C\u5BF9\u5E94\u5B57\u6BB5\n */\n defval?: unknown;\n /**\n * \u4FDD\u7559\u7A7A\u884C\uFF0C\u9ED8\u8BA4false\n */\n blankrows?: boolean;\n /**\n * \u81EA\u5B9A\u4E49\u6309\u94AE\u5185\u5BB9\n */\n children?: React.ReactNode;\n /**\n * Upload\u7EC4\u4EF6\u5C5E\u6027\n */\n uploadProps?: UploadProps;\n /**\n * Button\u7EC4\u4EF6\u5C5E\u6027\n */\n buttonProps?: ButtonProps;\n}\n";
@@ -1 +1 @@
1
- export declare const MySelectTypes = "\n /** \u7EC4\u4EF6\u6620\u5C04\u5B57\u6BB5 */\n export type KeyNamesType<T> = {\n /** \u4E3B\u952E */\n id: keyof T;\n /** \u7F16\u7801 */\n code?: keyof T;\n /** \u540D\u79F0 */\n name: keyof T;\n };\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export interface MySelectProps<T> extends SelectProps {\n /** \u662F\u5426\u53EA\u8BFB */\n readonly?: boolean;\n /** \u5FC5\u987B\u8F93\u5165\u641C\u7D22\u6761\u4EF6 */\n mustSearch?: boolean;\n /** \u662F\u5426\u81EA\u52A8\u9009\u4E2D */\n autoSelect?: boolean;\n /** \u662F\u5426\u663E\u793A\u6240\u6709\u6570\u636E\uFF08\u4E0D\u5206\u9875\uFF09 */\n showAllList?: boolean;\n /** \u83B7\u53D6\u591A\u5C11\u6761\u6570\u636E\uFF0C\u9ED8\u8BA420 */\n pageSize?: number;\n /** \u672C\u5730\u5217\u8868\u6570\u636E */\n localListData?: T[];\n /** \u56DE\u663E\u6570\u636E\u5217\u8868 */\n backShowList?: T[];\n /** \u8BF7\u6C42\u5217\u8868\u6570\u636E */\n request: (searchKey?: { [key: string]: any }) => Promise<API.Result_Base_List<T[]>>;\n /** \u6E32\u67D3\u7684\u503C */\n keyNames: KeyNamesType<T>;\n /** \u641C\u7D22\u7684\u5B57\u6BB5 */\n searchKey?: keyof T;\n /** Select.Option\u7684value\u5B57\u6BB5 */\n selectKey?: keyof T;\n /** \u989D\u5916\u7684\u67E5\u8BE2\u6761\u4EF6 */\n otherSearchValue?: Record<string, any>;\n /** \u53EA\u663E\u793A\u540D\u79F0 */\n onlyShowName?: boolean;\n /** \u81EA\u5B9A\u4E49\u6E32\u67D3 */\n itemRender?: (list: T[]) => React.ReactNode;\n /** \u5185\u5BB9\u7C7B\u578B */\n valueType?: 'key' | 'object';\n /** \u5224\u65AD\u4E0B\u62C9\u6846\u7684\u663E\u793A */\n showDropdown?: boolean;\n /** \u83B7\u53D6\u5DF2\u9009\u62E9\u7684\u6570\u636E\u5217\u8868 */\n getSelectList?: (item: T[]) => void;\n /** \u6570\u636E\u4E0B\u62C9\u5217\u8868\u53D8\u5316\u56DE\u8C03 */\n dropDownListChange?: (list: T[]) => void;\n }\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export type MySelectListProps<T> = Partial<MySelectProps<T>>;\n";
1
+ export declare const MySelectTypes = "\n /** \u7EC4\u4EF6\u6620\u5C04\u5B57\u6BB5 */\n export type KeyNamesType<T> = {\n /** \u4E3B\u952E */\n id: keyof T;\n /** \u7F16\u7801 */\n code?: keyof T;\n /** \u540D\u79F0 */\n name: keyof T;\n };\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export interface MySelectProps<T> extends SelectProps {\n /** \u662F\u5426\u53EA\u8BFB */\n readonly?: boolean;\n /** \u5FC5\u987B\u8F93\u5165\u641C\u7D22\u6761\u4EF6 */\n mustSearch?: boolean;\n /** \u641C\u7D22\u5EF6\u8FDF\u65F6\u95F4 */\n searchDelay?: number;\n /** \u662F\u5426\u81EA\u52A8\u9009\u4E2D */\n autoSelect?: boolean;\n /** \u662F\u5426\u663E\u793A\u6240\u6709\u6570\u636E\uFF08\u4E0D\u5206\u9875\uFF09 */\n showAllList?: boolean;\n /** \u83B7\u53D6\u591A\u5C11\u6761\u6570\u636E\uFF0C\u9ED8\u8BA420 */\n pageSize?: number;\n /** \u672C\u5730\u5217\u8868\u6570\u636E */\n localListData?: T[];\n /** \u56DE\u663E\u6570\u636E\u5217\u8868 */\n backShowList?: T[];\n /** \u8BF7\u6C42\u5217\u8868\u6570\u636E */\n request: (searchKey?: { [key: string]: any }) => Promise<API.Result_Base_List<T[]>>;\n /** \u6E32\u67D3\u7684\u503C */\n keyNames: KeyNamesType<T>;\n /** \u641C\u7D22\u7684\u5B57\u6BB5 */\n searchKey?: keyof T;\n /** Select.Option\u7684value\u5B57\u6BB5 */\n selectKey?: keyof T;\n /** \u989D\u5916\u7684\u67E5\u8BE2\u6761\u4EF6 */\n otherSearchValue?: Record<string, any>;\n /** \u53EA\u663E\u793A\u540D\u79F0 */\n onlyShowName?: boolean;\n /** \u81EA\u5B9A\u4E49\u6E32\u67D3 */\n itemRender?: (list: T[]) => React.ReactNode;\n /** \u5185\u5BB9\u7C7B\u578B */\n valueType?: 'key' | 'object';\n /** \u5224\u65AD\u4E0B\u62C9\u6846\u7684\u663E\u793A */\n showDropdown?: boolean;\n /** \u83B7\u53D6\u5DF2\u9009\u62E9\u7684\u6570\u636E\u5217\u8868 */\n getSelectList?: (item: T[]) => void;\n /** \u6570\u636E\u4E0B\u62C9\u5217\u8868\u53D8\u5316\u56DE\u8C03 */\n dropDownListChange?: (list: T[]) => void;\n }\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export type MySelectListProps<T> = Partial<MySelectProps<T>>;\n";
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.MySelectTypes = void 0;
7
- var MySelectTypes = exports.MySelectTypes = "\n /** \u7EC4\u4EF6\u6620\u5C04\u5B57\u6BB5 */\n export type KeyNamesType<T> = {\n /** \u4E3B\u952E */\n id: keyof T;\n /** \u7F16\u7801 */\n code?: keyof T;\n /** \u540D\u79F0 */\n name: keyof T;\n };\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export interface MySelectProps<T> extends SelectProps {\n /** \u662F\u5426\u53EA\u8BFB */\n readonly?: boolean;\n /** \u5FC5\u987B\u8F93\u5165\u641C\u7D22\u6761\u4EF6 */\n mustSearch?: boolean;\n /** \u662F\u5426\u81EA\u52A8\u9009\u4E2D */\n autoSelect?: boolean;\n /** \u662F\u5426\u663E\u793A\u6240\u6709\u6570\u636E\uFF08\u4E0D\u5206\u9875\uFF09 */\n showAllList?: boolean;\n /** \u83B7\u53D6\u591A\u5C11\u6761\u6570\u636E\uFF0C\u9ED8\u8BA420 */\n pageSize?: number;\n /** \u672C\u5730\u5217\u8868\u6570\u636E */\n localListData?: T[];\n /** \u56DE\u663E\u6570\u636E\u5217\u8868 */\n backShowList?: T[];\n /** \u8BF7\u6C42\u5217\u8868\u6570\u636E */\n request: (searchKey?: { [key: string]: any }) => Promise<API.Result_Base_List<T[]>>;\n /** \u6E32\u67D3\u7684\u503C */\n keyNames: KeyNamesType<T>;\n /** \u641C\u7D22\u7684\u5B57\u6BB5 */\n searchKey?: keyof T;\n /** Select.Option\u7684value\u5B57\u6BB5 */\n selectKey?: keyof T;\n /** \u989D\u5916\u7684\u67E5\u8BE2\u6761\u4EF6 */\n otherSearchValue?: Record<string, any>;\n /** \u53EA\u663E\u793A\u540D\u79F0 */\n onlyShowName?: boolean;\n /** \u81EA\u5B9A\u4E49\u6E32\u67D3 */\n itemRender?: (list: T[]) => React.ReactNode;\n /** \u5185\u5BB9\u7C7B\u578B */\n valueType?: 'key' | 'object';\n /** \u5224\u65AD\u4E0B\u62C9\u6846\u7684\u663E\u793A */\n showDropdown?: boolean;\n /** \u83B7\u53D6\u5DF2\u9009\u62E9\u7684\u6570\u636E\u5217\u8868 */\n getSelectList?: (item: T[]) => void;\n /** \u6570\u636E\u4E0B\u62C9\u5217\u8868\u53D8\u5316\u56DE\u8C03 */\n dropDownListChange?: (list: T[]) => void;\n }\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export type MySelectListProps<T> = Partial<MySelectProps<T>>;\n";
7
+ var MySelectTypes = exports.MySelectTypes = "\n /** \u7EC4\u4EF6\u6620\u5C04\u5B57\u6BB5 */\n export type KeyNamesType<T> = {\n /** \u4E3B\u952E */\n id: keyof T;\n /** \u7F16\u7801 */\n code?: keyof T;\n /** \u540D\u79F0 */\n name: keyof T;\n };\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export interface MySelectProps<T> extends SelectProps {\n /** \u662F\u5426\u53EA\u8BFB */\n readonly?: boolean;\n /** \u5FC5\u987B\u8F93\u5165\u641C\u7D22\u6761\u4EF6 */\n mustSearch?: boolean;\n /** \u641C\u7D22\u5EF6\u8FDF\u65F6\u95F4 */\n searchDelay?: number;\n /** \u662F\u5426\u81EA\u52A8\u9009\u4E2D */\n autoSelect?: boolean;\n /** \u662F\u5426\u663E\u793A\u6240\u6709\u6570\u636E\uFF08\u4E0D\u5206\u9875\uFF09 */\n showAllList?: boolean;\n /** \u83B7\u53D6\u591A\u5C11\u6761\u6570\u636E\uFF0C\u9ED8\u8BA420 */\n pageSize?: number;\n /** \u672C\u5730\u5217\u8868\u6570\u636E */\n localListData?: T[];\n /** \u56DE\u663E\u6570\u636E\u5217\u8868 */\n backShowList?: T[];\n /** \u8BF7\u6C42\u5217\u8868\u6570\u636E */\n request: (searchKey?: { [key: string]: any }) => Promise<API.Result_Base_List<T[]>>;\n /** \u6E32\u67D3\u7684\u503C */\n keyNames: KeyNamesType<T>;\n /** \u641C\u7D22\u7684\u5B57\u6BB5 */\n searchKey?: keyof T;\n /** Select.Option\u7684value\u5B57\u6BB5 */\n selectKey?: keyof T;\n /** \u989D\u5916\u7684\u67E5\u8BE2\u6761\u4EF6 */\n otherSearchValue?: Record<string, any>;\n /** \u53EA\u663E\u793A\u540D\u79F0 */\n onlyShowName?: boolean;\n /** \u81EA\u5B9A\u4E49\u6E32\u67D3 */\n itemRender?: (list: T[]) => React.ReactNode;\n /** \u5185\u5BB9\u7C7B\u578B */\n valueType?: 'key' | 'object';\n /** \u5224\u65AD\u4E0B\u62C9\u6846\u7684\u663E\u793A */\n showDropdown?: boolean;\n /** \u83B7\u53D6\u5DF2\u9009\u62E9\u7684\u6570\u636E\u5217\u8868 */\n getSelectList?: (item: T[]) => void;\n /** \u6570\u636E\u4E0B\u62C9\u5217\u8868\u53D8\u5316\u56DE\u8C03 */\n dropDownListChange?: (list: T[]) => void;\n }\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export type MySelectListProps<T> = Partial<MySelectProps<T>>;\n";
@@ -270,6 +270,12 @@ export interface ExcelExportOptions {
270
270
  sheetPassword?: string;
271
271
  /** 是否锁定基础行(数据行前的行),默认为 true */
272
272
  lockHeaderRows?: boolean;
273
+ /**
274
+ * 是否锁定数据填写区(含 columnValidations 预留行)。
275
+ * - 默认 false:数据区可编辑(表头仍由 lockHeaderRows 锁定)
276
+ * - true:整表只读,需配合 lockHeaderRows(默认已 true)启用工作表保护
277
+ */
278
+ lockDataRows?: boolean;
273
279
  /** 自定义合并单元格范围数组(如 ['A1:B2', 'C1:D1']) */
274
280
  mergeCells?: string[];
275
281
  /** 数据行高度,默认 22 */
@@ -382,6 +388,35 @@ const applyColumnValidations = (
382
388
  });
383
389
  };
384
390
 
391
+ /**
392
+ * 工作表保护开启前,解锁数据填写区。
393
+ * Excel 新建单元格默认 protection.locked=true;仅锁表头并 protect 后,未显式解锁的数据区也不可编辑。
394
+ */
395
+ const unlockDataEntryArea = (
396
+ workSheet: ExcelJS.Worksheet,
397
+ headerRowCount: number,
398
+ colCount: number,
399
+ maxDataRows: number,
400
+ dataRowCount: number,
401
+ hasColumnValidations: boolean,
402
+ lockedColumns: number[],
403
+ ) => {
404
+ const rowSpan = hasColumnValidations ? Math.max(dataRowCount, maxDataRows) : dataRowCount;
405
+ if (rowSpan <= 0) return;
406
+
407
+ const startRow = headerRowCount + 1;
408
+ const endRow = startRow + rowSpan - 1;
409
+
410
+ for (let row = startRow; row <= endRow; row++) {
411
+ for (let col = 1; col <= colCount; col++) {
412
+ const colIndex = col - 1;
413
+ if (!lockedColumns.includes(colIndex)) {
414
+ workSheet.getCell(row, col).protection = { locked: false };
415
+ }
416
+ }
417
+ }
418
+ };
419
+
385
420
  function buildDataCellBorder(style: ExcelJS.BorderStyle): ExcelJS.Borders {
386
421
  const side = { style } as ExcelJS.Border;
387
422
  return {
@@ -538,6 +573,8 @@ export const genExcelAdvanced = async (
538
573
 
539
574
  // 是否锁定基础行(默认为 true)
540
575
  const lockHeaderRows = options?.lockHeaderRows !== false;
576
+ // 是否锁定数据填写区(整表只读),默认 false
577
+ const lockDataRows = options?.lockDataRows === true;
541
578
  // 物理行号:追加行时递增,用于 mergeCells 与「第几行」对应
542
579
  let currentRowIndex = 0;
543
580
 
@@ -569,11 +606,9 @@ export const genExcelAdvanced = async (
569
606
  bottom: { style: 'thin' },
570
607
  right: { style: 'thin' },
571
608
  };
572
- if (lockHeaderRows) {
573
- titleRow.eachCell((cell) => {
574
- cell.protection = { locked: true };
575
- });
576
- }
609
+ titleRow.eachCell((cell) => {
610
+ cell.protection = { locked: lockHeaderRows };
611
+ });
577
612
  }
578
613
 
579
614
  // ========== 第二行:注意事项(可选) ==========
@@ -607,11 +642,9 @@ export const genExcelAdvanced = async (
607
642
  bottom: { style: 'thin' },
608
643
  right: { style: 'thin' },
609
644
  };
610
- if (lockHeaderRows) {
611
- noticeRow.eachCell((cell) => {
612
- cell.protection = { locked: true };
613
- });
614
- }
645
+ noticeRow.eachCell((cell) => {
646
+ cell.protection = { locked: lockHeaderRows };
647
+ });
615
648
  }
616
649
 
617
650
  // ========== 编号行(可选,隐藏) ==========
@@ -625,9 +658,7 @@ export const genExcelAdvanced = async (
625
658
  bottom: { style: 'thin' },
626
659
  right: { style: 'thin' },
627
660
  };
628
- if (lockHeaderRows) {
629
- cell.protection = { locked: true };
630
- }
661
+ cell.protection = { locked: lockHeaderRows };
631
662
  });
632
663
  codeColumnRow.alignment = { horizontal: 'center', vertical: 'middle' };
633
664
  codeColumnRow.hidden = true;
@@ -649,9 +680,7 @@ export const genExcelAdvanced = async (
649
680
  bottom: { style: 'thin' },
650
681
  right: { style: 'thin' },
651
682
  };
652
- if (lockHeaderRows) {
653
- cell.protection = { locked: true };
654
- }
683
+ cell.protection = { locked: lockHeaderRows };
655
684
  });
656
685
  });
657
686
  } else {
@@ -672,9 +701,7 @@ export const genExcelAdvanced = async (
672
701
  bottom: { style: 'thin' },
673
702
  right: { style: 'thin' },
674
703
  };
675
- if (lockHeaderRows) {
676
- cell.protection = { locked: true };
677
- }
704
+ cell.protection = { locked: lockHeaderRows };
678
705
  });
679
706
  columnHeaderRow.height = 25;
680
707
  }
@@ -706,8 +733,14 @@ export const genExcelAdvanced = async (
706
733
  if (colNumber <= colCount) {
707
734
  const colIndex = colNumber - 1;
708
735
  applyDataCellAppearance(cell, dataRowIndex, colIndex, options);
709
- if (hasLockedColumns) {
736
+ if (lockDataRows) {
737
+ // 整表只读:数据行也锁定,不必显式写(ExcelJS 默认 locked=true),这里写明意图
738
+ cell.protection = { locked: true };
739
+ } else if (hasLockedColumns) {
710
740
  cell.protection = { locked: lockedColumns.includes(colIndex) };
741
+ } else if (lockHeaderRows) {
742
+ // 仅锁表头时,数据行显式解锁,避免 protect 后整表不可编辑
743
+ cell.protection = { locked: false };
711
744
  }
712
745
  }
713
746
  });
@@ -720,8 +753,20 @@ export const genExcelAdvanced = async (
720
753
  applyColumnValidations(workBook, workSheet, options.columnValidations, currentRowIndex, options.maxDataRows ?? 500);
721
754
  }
722
755
 
723
- // ========== 工作表保护:锁定表头区或部分列时启用(密码可选) ==========
724
- if (lockHeaderRows || hasLockedColumns) {
756
+ // ========== 工作表保护:锁定表头/数据区或部分列时启用(密码可选) ==========
757
+ if (lockHeaderRows || hasLockedColumns || lockDataRows) {
758
+ // lockDataRows=true 时整表只读,数据区保持默认 locked=true,不需要解锁
759
+ if (!lockDataRows) {
760
+ unlockDataEntryArea(
761
+ workSheet,
762
+ currentRowIndex,
763
+ colCount,
764
+ options?.maxDataRows ?? 500,
765
+ rows?.length ?? 0,
766
+ !!(options?.columnValidations?.length),
767
+ lockedColumns,
768
+ );
769
+ }
725
770
  workSheet.protect(options?.sheetPassword ?? '', {
726
771
  selectLockedCells: true,
727
772
  selectUnlockedCells: true,
@@ -8,6 +8,6 @@ var _default = exports.default = function _default(api) {
8
8
  var _api$userConfig$defin, _api$userConfig$defin2, _api$userConfig$defin3, _api$userConfig$defin4;
9
9
  return {
10
10
  path: "constants.ts",
11
- content: "\n export const UTC_FORMAT = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n export const BASE_API = '/api';\n\n export const BACKEND_API_URL = '".concat((_api$userConfig$defin = (_api$userConfig$defin2 = api.userConfig.define) === null || _api$userConfig$defin2 === void 0 ? void 0 : _api$userConfig$defin2.BACKEND_API_URL) !== null && _api$userConfig$defin !== void 0 ? _api$userConfig$defin : undefined, "';\n\n export const FILE_VIEWER_URL = '").concat((_api$userConfig$defin3 = (_api$userConfig$defin4 = api.userConfig.define) === null || _api$userConfig$defin4 === void 0 ? void 0 : _api$userConfig$defin4.FILE_VIEWER_URL) !== null && _api$userConfig$defin3 !== void 0 ? _api$userConfig$defin3 : undefined, "';\n ")
11
+ content: "\n export const UTC_FORMAT = 'YYYY-MM-DDTHH:mm:ss[Z]';\n export const DATE_FORMAT = 'YYYY-MM-DD';\n export const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';\n export const TIME_FORMAT = 'HH:mm:ss';\n\n export const BASE_API = '/api';\n\n export const BACKEND_API_URL = '".concat((_api$userConfig$defin = (_api$userConfig$defin2 = api.userConfig.define) === null || _api$userConfig$defin2 === void 0 ? void 0 : _api$userConfig$defin2.BACKEND_API_URL) !== null && _api$userConfig$defin !== void 0 ? _api$userConfig$defin : undefined, "';\n\n export const FILE_VIEWER_URL = '").concat((_api$userConfig$defin3 = (_api$userConfig$defin4 = api.userConfig.define) === null || _api$userConfig$defin4 === void 0 ? void 0 : _api$userConfig$defin4.FILE_VIEWER_URL) !== null && _api$userConfig$defin3 !== void 0 ? _api$userConfig$defin3 : undefined, "';\n ")
12
12
  };
13
13
  };
@@ -404,7 +404,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
404
404
  * 通用操作处理
405
405
  */
406
406
  const handleAction = useMemoizedFn(async (method: API.MethodTypes, fields: any): Promise<boolean> => {
407
- if(!api.handle) return false;
407
+ if(!apis.handle) return false;
408
408
 
409
409
  // 自定义操作前处理
410
410
  if (onBeforeAction) {
@@ -7,4 +7,24 @@
7
7
  :global(.mainAnt-upload-list) {
8
8
  display: none;
9
9
  }
10
- }
10
+ }
11
+
12
+ // children 自定义触发区时撑满父容器(如下拉菜单 label),扩大可点击范围
13
+ .importExexlFill {
14
+ display: block;
15
+ width: 100%;
16
+ :global(.ant-upload) {
17
+ display: block;
18
+ width: 100%;
19
+ }
20
+ :global(.ant-upload-select) {
21
+ display: block;
22
+ width: 100%;
23
+ }
24
+ }
25
+ .importTrigger {
26
+ display: inline-flex;
27
+ align-items: center;
28
+ gap: 8px;
29
+ width: 100%;
30
+ }
@@ -2,6 +2,7 @@ import { UploadOutlined } from '@ant-design/icons';
2
2
  import { useIntl } from '@umijs/max';
3
3
  import type { UploadFile, UploadProps } from 'antd';
4
4
  import { Button, message, Modal, Upload } from 'antd';
5
+ import classNames from 'classnames';
5
6
  import React from 'react';
6
7
  import { ImportExeclProps } from '../types';
7
8
  import { importExexl } from '../utils/importHelper';
@@ -20,6 +21,7 @@ const ImportExecl = <T,>(props: ImportExeclProps<T>) => {
20
21
  buttonProps,
21
22
  children,
22
23
  showDefautlMessage = true,
24
+ fillContainer = false,
23
25
  onChange,
24
26
  } = props;
25
27
 
@@ -134,16 +136,18 @@ const ImportExecl = <T,>(props: ImportExeclProps<T>) => {
134
136
  }
135
137
  };
136
138
 
139
+ const useFillLayout = fillContainer && !!children;
140
+
137
141
  return (
138
142
  <Upload
139
143
  accept={accept}
140
- className={styles.importExexl}
144
+ className={classNames(styles.importExexl, useFillLayout && styles.importExexlFill, uploadProps?.className)}
141
145
  maxCount={1}
142
146
  customRequest={handleCustomRequest}
143
147
  {...uploadProps}
144
148
  >
145
- {children ? (
146
- children
149
+ {children ? (
150
+ useFillLayout ? <span className={styles.importTrigger}>{children}</span> : children
147
151
  ) : (
148
152
  <Button type="primary" icon={<UploadOutlined />} {...buttonProps}>
149
153
  {title ? title : formatMessage({ id: 'cfmmUI.File.import', defaultMessage: '导入' })}
@@ -48,6 +48,7 @@ const MySelect = <T,>(props: MySelectProps<T>, ref: ForwardedRef<any>) => {
48
48
  showDropdown,
49
49
  getSelectList,
50
50
  pageSize = 20,
51
+ searchDelay = 500,
51
52
  mode,
52
53
  dropDownListChange,
53
54
  ...reset
@@ -99,7 +100,7 @@ const MySelect = <T,>(props: MySelectProps<T>, ref: ForwardedRef<any>) => {
99
100
 
100
101
  const handleSearch = debounce((v: string) => {
101
102
  setSearchValue({ [searchKey]: v });
102
- }, 500);
103
+ }, searchDelay);
103
104
 
104
105
  // 获取数据
105
106
  useImperativeHandle(ref, () => ({}));
@@ -116,13 +117,13 @@ const MySelect = <T,>(props: MySelectProps<T>, ref: ForwardedRef<any>) => {
116
117
  // 如果显示全部,则不分页
117
118
  params = showAllList ? params : { pageIndex: 1, pageSize, ...params };
118
119
  const response = await request(params);
119
- if (response.rows && response.rows.length > 0) {
120
- // 如果有搜索值,则不添加回显值
121
- setListData(response.rows);
120
+ const data = response.rows || response.data;
121
+ if (data && data.length > 0) {
122
+ setListData(data);
122
123
 
123
124
  const allList = [...allListData];
124
125
  // 如果原有列表没有,则增加,防止getSelectList找不到选择的项
125
- response.rows.forEach((item) => {
126
+ data.forEach((item) => {
126
127
  if (!getListData.some((v) => item[keyNames.id] === v[keyNames.id])) {
127
128
  allList.push(item);
128
129
  }
@@ -2,31 +2,36 @@ import { useModel } from '@umijs/max';
2
2
  import { DatePicker } from 'antd';
3
3
  import dayjs from 'dayjs';
4
4
  import React, { useMemo } from 'react';
5
- import { UTC_FORMAT } from '../constants';
6
- import { UTCDatePickerProps } from "../types";
5
+ import { DATE_FORMAT, DATE_TIME_FORMAT, UTC_FORMAT } from '../constants';
6
+ import { UTCDatePickerProps } from '../types';
7
7
 
8
8
  /**
9
9
  * 带UTC时区转换功能的DatePicker组件
10
10
  */
11
11
  const UTCDatePicker = (props: UTCDatePickerProps) => {
12
12
  // 设置mode后无法显示时间
13
- const { readonly, convertTimeZone = true, showTime = false, mode, ...reset } = props;
14
- const { timeZone, timeFormat, dateFormat } = window.__POWERED_BY_QIANKUN__ ? useModel("@@qiankunStateFromMaster") : useModel('user');
13
+ const { readonly, convertTimeZone, showTime = false, mode, ...reset } = props;
14
+ const { timeZone, timeFormat, dateFormat } = window.__POWERED_BY_QIANKUN__
15
+ ? useModel('@@qiankunStateFromMaster')
16
+ : useModel('user');
17
+
18
+ // 如果不传convertTimeZone,则根据showTime判断是否转换时区,默认showTime为true转时区,false不转时区
19
+ const newConvertTimeZone = typeof convertTimeZone === 'boolean' ? convertTimeZone : showTime;
15
20
 
16
21
  // 将日期转换为地区时间显示
17
22
  const value = useMemo(() => {
18
23
  const v = props.value;
19
24
  if (v && dayjs(v).isValid()) {
20
25
  const date = dayjs(v);
21
- return convertTimeZone ? date.tz(timeZone) : date;
26
+ return newConvertTimeZone ? date.tz(timeZone) : date;
22
27
  }
23
- }, [props.value, convertTimeZone, timeZone]);
28
+ }, [props.value, newConvertTimeZone, timeZone]);
24
29
 
25
30
  // 获取设置的格式
26
31
  const format = useMemo(() => {
27
- if(typeof showTime === 'object' && showTime.format ) {
32
+ if (typeof showTime === 'object' && showTime.format) {
28
33
  return `${dateFormat} ${showTime.format}`;
29
- };
34
+ }
30
35
  return props.format || showTime ? `${dateFormat} ${timeFormat}` : dateFormat;
31
36
  }, [props.format, showTime, dateFormat, timeFormat]);
32
37
 
@@ -34,8 +39,10 @@ const UTCDatePicker = (props: UTCDatePickerProps) => {
34
39
  const handleChange = (date: dayjs.Dayjs, dateString: string | string[]) => {
35
40
  if (date) {
36
41
  // 转标准时间,显示时间转换有问题
37
- const standardTime: any = convertTimeZone ? date.utc().format(UTC_FORMAT) : date.format(UTC_FORMAT);
38
- const dateString = convertTimeZone ? date.utc().format(format) : date.format(format);
42
+ const standardTime: any = newConvertTimeZone
43
+ ? date.utc().format(UTC_FORMAT)
44
+ : date.format(showTime ? DATE_TIME_FORMAT : DATE_FORMAT);
45
+ const dateString = newConvertTimeZone ? date.utc().format(format) : date.format(format);
39
46
 
40
47
  props.onChange?.(standardTime, dateString);
41
48
  return;
@@ -2,8 +2,8 @@ import { useModel } from '@umijs/max';
2
2
  import { DatePicker } from 'antd';
3
3
  import dayjs from 'dayjs';
4
4
  import React, { useMemo } from 'react';
5
- import { UTC_FORMAT } from '../constants';
6
- import { RangePickerValueType, RangePickerOnChangeType, UTCRangePickerProps } from '../types';
5
+ import { DATE_FORMAT, DATE_TIME_FORMAT, UTC_FORMAT } from '../constants';
6
+ import { RangePickerOnChangeType, RangePickerValueType, UTCRangePickerProps } from '../types';
7
7
 
8
8
  const { RangePicker } = DatePicker;
9
9
 
@@ -12,16 +12,13 @@ const { RangePicker } = DatePicker;
12
12
  */
13
13
  const UTCRangePicker = (props: UTCRangePickerProps) => {
14
14
  // 设置mode后无法显示时间
15
- const {
16
- readonly,
17
- convertTimeZone = true,
18
- showTime = false,
19
- mode,
20
- endDateEndOfType,
21
- startDatStartOfType,
22
- ...reset
23
- } = props;
24
- const { timeZone, timeFormat, dateFormat } = window.__POWERED_BY_QIANKUN__ ? useModel("@@qiankunStateFromMaster") : useModel('user');
15
+ const { readonly, convertTimeZone, showTime = false, mode, endDateEndOfType, startDatStartOfType, ...reset } = props;
16
+ const { timeZone, timeFormat, dateFormat } = window.__POWERED_BY_QIANKUN__
17
+ ? useModel('@@qiankunStateFromMaster')
18
+ : useModel('user');
19
+
20
+ // 如果不传convertTimeZone,则根据showTime判断是否转换时区,默认showTime为true转时区,false不转时区
21
+ const newConvertTimeZone = typeof convertTimeZone === 'boolean' ? convertTimeZone : showTime;
25
22
 
26
23
  // 将日期转换为地区时间显示
27
24
  const value: RangePickerValueType = useMemo(() => {
@@ -31,16 +28,16 @@ const UTCRangePicker = (props: UTCRangePickerProps) => {
31
28
 
32
29
  const startTime = v[0] ? dayjs(v[0]) : undefined;
33
30
  const endTime = v[1] ? dayjs(v[1]) : undefined;
34
- return convertTimeZone
31
+ return newConvertTimeZone
35
32
  ? [startTime ? startTime.tz(timeZone) : undefined, endTime ? endTime.tz(timeZone) : undefined]
36
33
  : [startTime, endTime];
37
- }, [props.value, convertTimeZone, timeZone]);
34
+ }, [props.value, newConvertTimeZone, timeZone]);
38
35
 
39
36
  // 获取设置的格式
40
37
  const format = useMemo(() => {
41
- if(typeof showTime === 'object' && showTime.format ) {
38
+ if (typeof showTime === 'object' && showTime.format) {
42
39
  return `${dateFormat} ${showTime.format}`;
43
- };
40
+ }
44
41
  return props.format || showTime ? `${dateFormat} ${timeFormat}` : dateFormat;
45
42
  }, [props.format, showTime, dateFormat, timeFormat]);
46
43
 
@@ -57,10 +54,12 @@ const UTCRangePicker = (props: UTCRangePickerProps) => {
57
54
  const utcStartTime = startTime?.utc();
58
55
  const utcEndTime = endTime?.utc();
59
56
 
57
+ const notConvertFormat = showTime ? DATE_TIME_FORMAT : DATE_FORMAT;
58
+
60
59
  // 转标准时间,显示时间转换有问题
61
- const standardTime: any = convertTimeZone
60
+ const standardTime: any = newConvertTimeZone
62
61
  ? [utcStartTime?.format(UTC_FORMAT), utcEndTime?.format(UTC_FORMAT)]
63
- : [startTime?.format(UTC_FORMAT), endTime?.format(UTC_FORMAT)];
62
+ : [startTime?.format(notConvertFormat), endTime?.format(notConvertFormat)];
64
63
  const datesString: any = [startTime?.format(format), endTime?.format(format)];
65
64
 
66
65
  props.onChange?.(standardTime, datesString);
@@ -1 +1 @@
1
- export declare const DatePickerTypes = "\n export type DateType = dayjs.Dayjs | string;\n export type HasNullUndefinedDateType = DateType | undefined | null;\n\n export interface UTCDatePickerProps extends DatePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n }\n\n type DatePickValueType = Pick<ProFormItemProps<import('antd').DatePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormDatePickerProps extends ProFormItemProps<import('antd').DatePickerProps> {\n /**\n * DatePickerProps\n */\n fieldProps?: DatePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n\n\n type RangePickerValueType = RangePickerProps['value'];\n export type RangePickerOnChangeType = RangePickerProps['onChange'];\n\n export type RangeDateType = [HasNullUndefinedDateType, HasNullUndefinedDateType];\n\n export interface UTCRangePickerProps extends RangePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n /**\n * \u5F00\u59CB\u65E5\u671F\u7684startOf\u7C7B\u578B\n */\n startDatStartOfType?: OpUnitType;\n /**\n * \u7ED3\u675F\u65E5\u671F\u7684endOf\u7C7B\u578B\n */\n endDateEndOfType?: OpUnitType;\n }\n\n type RangePickValueType = Pick<ProFormItemProps<RangePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormRangePickerProps extends ProFormItemProps<RangePickerProps> {\n /**\n * RangePickerProps\n */\n fieldProps?: RangePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n";
1
+ export declare const DatePickerTypes = "\n export type DateType = dayjs.Dayjs | string;\n export type HasNullUndefinedDateType = DateType | undefined | null;\n\n export interface UTCDatePickerProps extends DatePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u5224\u65AD\u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u4E3Atrue\u8F6C\u65F6\u533A\uFF0Cfalse\u4E0D\u8F6C\u65F6\u533A\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n }\n\n type DatePickValueType = Pick<ProFormItemProps<import('antd').DatePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormDatePickerProps extends ProFormItemProps<import('antd').DatePickerProps> {\n /**\n * DatePickerProps\n */\n fieldProps?: DatePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n\n\n type RangePickerValueType = RangePickerProps['value'];\n export type RangePickerOnChangeType = RangePickerProps['onChange'];\n\n export type RangeDateType = [HasNullUndefinedDateType, HasNullUndefinedDateType];\n\n export interface UTCRangePickerProps extends RangePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u5224\u65AD\u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u4E3Atrue\u8F6C\u65F6\u533A\uFF0Cfalse\u4E0D\u8F6C\u65F6\u533A\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n /**\n * \u5F00\u59CB\u65E5\u671F\u7684startOf\u7C7B\u578B\n */\n startDatStartOfType?: OpUnitType;\n /**\n * \u7ED3\u675F\u65E5\u671F\u7684endOf\u7C7B\u578B\n */\n endDateEndOfType?: OpUnitType;\n }\n\n type RangePickValueType = Pick<ProFormItemProps<RangePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormRangePickerProps extends ProFormItemProps<RangePickerProps> {\n /**\n * RangePickerProps\n */\n fieldProps?: RangePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n";
@@ -1 +1 @@
1
- export var DatePickerTypes = "\n export type DateType = dayjs.Dayjs | string;\n export type HasNullUndefinedDateType = DateType | undefined | null;\n\n export interface UTCDatePickerProps extends DatePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n }\n\n type DatePickValueType = Pick<ProFormItemProps<import('antd').DatePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormDatePickerProps extends ProFormItemProps<import('antd').DatePickerProps> {\n /**\n * DatePickerProps\n */\n fieldProps?: DatePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n\n\n type RangePickerValueType = RangePickerProps['value'];\n export type RangePickerOnChangeType = RangePickerProps['onChange'];\n\n export type RangeDateType = [HasNullUndefinedDateType, HasNullUndefinedDateType];\n\n export interface UTCRangePickerProps extends RangePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n /**\n * \u5F00\u59CB\u65E5\u671F\u7684startOf\u7C7B\u578B\n */\n startDatStartOfType?: OpUnitType;\n /**\n * \u7ED3\u675F\u65E5\u671F\u7684endOf\u7C7B\u578B\n */\n endDateEndOfType?: OpUnitType;\n }\n\n type RangePickValueType = Pick<ProFormItemProps<RangePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormRangePickerProps extends ProFormItemProps<RangePickerProps> {\n /**\n * RangePickerProps\n */\n fieldProps?: RangePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n";
1
+ export var DatePickerTypes = "\n export type DateType = dayjs.Dayjs | string;\n export type HasNullUndefinedDateType = DateType | undefined | null;\n\n export interface UTCDatePickerProps extends DatePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u5224\u65AD\u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u4E3Atrue\u8F6C\u65F6\u533A\uFF0Cfalse\u4E0D\u8F6C\u65F6\u533A\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n }\n\n type DatePickValueType = Pick<ProFormItemProps<import('antd').DatePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormDatePickerProps extends ProFormItemProps<import('antd').DatePickerProps> {\n /**\n * DatePickerProps\n */\n fieldProps?: DatePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n\n\n type RangePickerValueType = RangePickerProps['value'];\n export type RangePickerOnChangeType = RangePickerProps['onChange'];\n\n export type RangeDateType = [HasNullUndefinedDateType, HasNullUndefinedDateType];\n\n export interface UTCRangePickerProps extends RangePickerProps {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u5224\u65AD\u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4showTime\u4E3Atrue\u8F6C\u65F6\u533A\uFF0Cfalse\u4E0D\u8F6C\u65F6\u533A\n */\n convertTimeZone?: boolean;\n /**\n * \u662F\u5426\u53EA\u8BFB\uFF0C\u9ED8\u8BA4false\n */\n readonly?: boolean;\n /**\n * \u5F00\u59CB\u65E5\u671F\u7684startOf\u7C7B\u578B\n */\n startDatStartOfType?: OpUnitType;\n /**\n * \u7ED3\u675F\u65E5\u671F\u7684endOf\u7C7B\u578B\n */\n endDateEndOfType?: OpUnitType;\n }\n\n type RangePickValueType = Pick<ProFormItemProps<RangePickerProps>, 'fieldProps'>;\n\n export interface UTCProFormRangePickerProps extends ProFormItemProps<RangePickerProps> {\n /**\n * RangePickerProps\n */\n fieldProps?: RangePickValueType['fieldProps'] & {\n /**\n * \u662F\u5426\u8F6C\u6362\u65F6\u533A\uFF0C\u9ED8\u8BA4true\n */\n convertTimeZone?: boolean;\n };\n /**\n * \u662F\u5426\u7981\u7528\uFF0C\u9ED8\u8BA4false\n */\n disabled?: boolean;\n }\n";
@@ -1 +1 @@
1
- export declare const ImportExeclTypes = "\nexport interface ImportExeclProps<T = any[]> {\n accept?: string;\n /**\n * \u4E0A\u4F20\u4E8B\u4EF6\uFF0C\u83B7\u53D6execl\u6570\u636E\u5217\u8868\uFF0C\u51FD\u6570\u8FD4\u56DEpromise\u5E76\u4E14showDefautlMessage\u4E0D\u662Ffalse\u65F6\u6709\u9ED8\u8BA4message\u63D0\u793A\n */\n onChange: (list: T, fileInfo: Pick<UploadFile, 'name' | 'size' | 'type' | 'uid'>) => Promise<{\n success: boolean; failMsg?: string; data?: {\n success: boolean;\n insertCount: number;\n updateCount: number;\n deleteCount: number;\n } | number\n } | void> | void;\n /**\n * \u663E\u793A\u9ED8\u8BA4\u7684\u63D0\u793A\n */\n showDefautlMessage?: boolean;\n /**\n * \u6309\u94AE\u6587\u672C\n */\n title?: string;\n /**\n * \u8BFB\u53D6\u5DE5\u4F5C\u7C3F\u6570\u91CF\uFF0C\u9ED8\u8BA41\n */\n max?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u884C\u4E3A\u8868\u5934\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\n */\n header?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u5217\u7B2C\u51E0\u884C\u5F00\u59CB\u8BFB\u53D6\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\u7B2C\u4E00\u5217\n */\n rangeStart?: { c: number; r: number };\n /**\n * \u7A7A\u5355\u5143\u683C\u5360\u4F4D\u503C\uFF1B\u4F20\u5165\u540E\u6BCF\u884C\u5BF9\u8C61\u4F1A\u5305\u542B\u4E0E\u8868\u5934\u5BF9\u9F50\u7684\u5168\u90E8 key\uFF08\u7A7A\u5355\u5143\u683C\u4E3A\u8BE5\u503C\uFF09\uFF0C\u5426\u5219 SheetJS \u4F1A\u7701\u7565\u7A7A\u5355\u5143\u683C\u5BF9\u5E94\u5B57\u6BB5\n */\n defval?: unknown;\n /**\n * \u4FDD\u7559\u7A7A\u884C\uFF0C\u9ED8\u8BA4false\n */\n blankrows?: boolean;\n /**\n * \u81EA\u5B9A\u4E49\u6309\u94AE\u5185\u5BB9\n */\n children?: React.ReactNode;\n /**\n * Upload\u7EC4\u4EF6\u5C5E\u6027\n */\n uploadProps?: UploadProps;\n /**\n * Button\u7EC4\u4EF6\u5C5E\u6027\n */\n buttonProps?: ButtonProps;\n}\n";
1
+ export declare const ImportExeclTypes = "\nexport interface ImportExeclProps<T = any[]> {\n accept?: string;\n /**\n * \u4E0A\u4F20\u4E8B\u4EF6\uFF0C\u83B7\u53D6execl\u6570\u636E\u5217\u8868\uFF0C\u51FD\u6570\u8FD4\u56DEpromise\u5E76\u4E14showDefautlMessage\u4E0D\u662Ffalse\u65F6\u6709\u9ED8\u8BA4message\u63D0\u793A\n */\n /**\n * \u81EA\u5B9A\u4E49 children \u65F6\u662F\u5426\u6491\u6EE1\u7236\u5BB9\u5668\uFF08\u5982\u4E0B\u62C9\u83DC\u5355 label\uFF09\uFF0C\u6269\u5927\u53EF\u70B9\u51FB\u8303\u56F4\n */\n fillContainer?: boolean;\n onChange: (list: T, fileInfo: Pick<UploadFile, 'name' | 'size' | 'type' | 'uid'>) => Promise<{\n success: boolean; failMsg?: string; data?: {\n success: boolean;\n insertCount: number;\n updateCount: number;\n deleteCount: number;\n } | number\n } | void> | void;\n /**\n * \u663E\u793A\u9ED8\u8BA4\u7684\u63D0\u793A\n */\n showDefautlMessage?: boolean;\n /**\n * \u6309\u94AE\u6587\u672C\n */\n title?: string;\n /**\n * \u8BFB\u53D6\u5DE5\u4F5C\u7C3F\u6570\u91CF\uFF0C\u9ED8\u8BA41\n */\n max?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u884C\u4E3A\u8868\u5934\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\n */\n header?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u5217\u7B2C\u51E0\u884C\u5F00\u59CB\u8BFB\u53D6\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\u7B2C\u4E00\u5217\n */\n rangeStart?: { c: number; r: number };\n /**\n * \u7A7A\u5355\u5143\u683C\u5360\u4F4D\u503C\uFF1B\u4F20\u5165\u540E\u6BCF\u884C\u5BF9\u8C61\u4F1A\u5305\u542B\u4E0E\u8868\u5934\u5BF9\u9F50\u7684\u5168\u90E8 key\uFF08\u7A7A\u5355\u5143\u683C\u4E3A\u8BE5\u503C\uFF09\uFF0C\u5426\u5219 SheetJS \u4F1A\u7701\u7565\u7A7A\u5355\u5143\u683C\u5BF9\u5E94\u5B57\u6BB5\n */\n defval?: unknown;\n /**\n * \u4FDD\u7559\u7A7A\u884C\uFF0C\u9ED8\u8BA4false\n */\n blankrows?: boolean;\n /**\n * \u81EA\u5B9A\u4E49\u6309\u94AE\u5185\u5BB9\n */\n children?: React.ReactNode;\n /**\n * Upload\u7EC4\u4EF6\u5C5E\u6027\n */\n uploadProps?: UploadProps;\n /**\n * Button\u7EC4\u4EF6\u5C5E\u6027\n */\n buttonProps?: ButtonProps;\n}\n";
@@ -1 +1 @@
1
- export var ImportExeclTypes = "\nexport interface ImportExeclProps<T = any[]> {\n accept?: string;\n /**\n * \u4E0A\u4F20\u4E8B\u4EF6\uFF0C\u83B7\u53D6execl\u6570\u636E\u5217\u8868\uFF0C\u51FD\u6570\u8FD4\u56DEpromise\u5E76\u4E14showDefautlMessage\u4E0D\u662Ffalse\u65F6\u6709\u9ED8\u8BA4message\u63D0\u793A\n */\n onChange: (list: T, fileInfo: Pick<UploadFile, 'name' | 'size' | 'type' | 'uid'>) => Promise<{\n success: boolean; failMsg?: string; data?: {\n success: boolean;\n insertCount: number;\n updateCount: number;\n deleteCount: number;\n } | number\n } | void> | void;\n /**\n * \u663E\u793A\u9ED8\u8BA4\u7684\u63D0\u793A\n */\n showDefautlMessage?: boolean;\n /**\n * \u6309\u94AE\u6587\u672C\n */\n title?: string;\n /**\n * \u8BFB\u53D6\u5DE5\u4F5C\u7C3F\u6570\u91CF\uFF0C\u9ED8\u8BA41\n */\n max?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u884C\u4E3A\u8868\u5934\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\n */\n header?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u5217\u7B2C\u51E0\u884C\u5F00\u59CB\u8BFB\u53D6\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\u7B2C\u4E00\u5217\n */\n rangeStart?: { c: number; r: number };\n /**\n * \u7A7A\u5355\u5143\u683C\u5360\u4F4D\u503C\uFF1B\u4F20\u5165\u540E\u6BCF\u884C\u5BF9\u8C61\u4F1A\u5305\u542B\u4E0E\u8868\u5934\u5BF9\u9F50\u7684\u5168\u90E8 key\uFF08\u7A7A\u5355\u5143\u683C\u4E3A\u8BE5\u503C\uFF09\uFF0C\u5426\u5219 SheetJS \u4F1A\u7701\u7565\u7A7A\u5355\u5143\u683C\u5BF9\u5E94\u5B57\u6BB5\n */\n defval?: unknown;\n /**\n * \u4FDD\u7559\u7A7A\u884C\uFF0C\u9ED8\u8BA4false\n */\n blankrows?: boolean;\n /**\n * \u81EA\u5B9A\u4E49\u6309\u94AE\u5185\u5BB9\n */\n children?: React.ReactNode;\n /**\n * Upload\u7EC4\u4EF6\u5C5E\u6027\n */\n uploadProps?: UploadProps;\n /**\n * Button\u7EC4\u4EF6\u5C5E\u6027\n */\n buttonProps?: ButtonProps;\n}\n";
1
+ export var ImportExeclTypes = "\nexport interface ImportExeclProps<T = any[]> {\n accept?: string;\n /**\n * \u4E0A\u4F20\u4E8B\u4EF6\uFF0C\u83B7\u53D6execl\u6570\u636E\u5217\u8868\uFF0C\u51FD\u6570\u8FD4\u56DEpromise\u5E76\u4E14showDefautlMessage\u4E0D\u662Ffalse\u65F6\u6709\u9ED8\u8BA4message\u63D0\u793A\n */\n /**\n * \u81EA\u5B9A\u4E49 children \u65F6\u662F\u5426\u6491\u6EE1\u7236\u5BB9\u5668\uFF08\u5982\u4E0B\u62C9\u83DC\u5355 label\uFF09\uFF0C\u6269\u5927\u53EF\u70B9\u51FB\u8303\u56F4\n */\n fillContainer?: boolean;\n onChange: (list: T, fileInfo: Pick<UploadFile, 'name' | 'size' | 'type' | 'uid'>) => Promise<{\n success: boolean; failMsg?: string; data?: {\n success: boolean;\n insertCount: number;\n updateCount: number;\n deleteCount: number;\n } | number\n } | void> | void;\n /**\n * \u663E\u793A\u9ED8\u8BA4\u7684\u63D0\u793A\n */\n showDefautlMessage?: boolean;\n /**\n * \u6309\u94AE\u6587\u672C\n */\n title?: string;\n /**\n * \u8BFB\u53D6\u5DE5\u4F5C\u7C3F\u6570\u91CF\uFF0C\u9ED8\u8BA41\n */\n max?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u884C\u4E3A\u8868\u5934\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\n */\n header?: number;\n /**\n * \u4EE5\u7B2C\u51E0\u5217\u7B2C\u51E0\u884C\u5F00\u59CB\u8BFB\u53D6\uFF0C\u9ED8\u8BA4\u7B2C\u4E00\u884C\u7B2C\u4E00\u5217\n */\n rangeStart?: { c: number; r: number };\n /**\n * \u7A7A\u5355\u5143\u683C\u5360\u4F4D\u503C\uFF1B\u4F20\u5165\u540E\u6BCF\u884C\u5BF9\u8C61\u4F1A\u5305\u542B\u4E0E\u8868\u5934\u5BF9\u9F50\u7684\u5168\u90E8 key\uFF08\u7A7A\u5355\u5143\u683C\u4E3A\u8BE5\u503C\uFF09\uFF0C\u5426\u5219 SheetJS \u4F1A\u7701\u7565\u7A7A\u5355\u5143\u683C\u5BF9\u5E94\u5B57\u6BB5\n */\n defval?: unknown;\n /**\n * \u4FDD\u7559\u7A7A\u884C\uFF0C\u9ED8\u8BA4false\n */\n blankrows?: boolean;\n /**\n * \u81EA\u5B9A\u4E49\u6309\u94AE\u5185\u5BB9\n */\n children?: React.ReactNode;\n /**\n * Upload\u7EC4\u4EF6\u5C5E\u6027\n */\n uploadProps?: UploadProps;\n /**\n * Button\u7EC4\u4EF6\u5C5E\u6027\n */\n buttonProps?: ButtonProps;\n}\n";
@@ -1 +1 @@
1
- export declare const MySelectTypes = "\n /** \u7EC4\u4EF6\u6620\u5C04\u5B57\u6BB5 */\n export type KeyNamesType<T> = {\n /** \u4E3B\u952E */\n id: keyof T;\n /** \u7F16\u7801 */\n code?: keyof T;\n /** \u540D\u79F0 */\n name: keyof T;\n };\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export interface MySelectProps<T> extends SelectProps {\n /** \u662F\u5426\u53EA\u8BFB */\n readonly?: boolean;\n /** \u5FC5\u987B\u8F93\u5165\u641C\u7D22\u6761\u4EF6 */\n mustSearch?: boolean;\n /** \u662F\u5426\u81EA\u52A8\u9009\u4E2D */\n autoSelect?: boolean;\n /** \u662F\u5426\u663E\u793A\u6240\u6709\u6570\u636E\uFF08\u4E0D\u5206\u9875\uFF09 */\n showAllList?: boolean;\n /** \u83B7\u53D6\u591A\u5C11\u6761\u6570\u636E\uFF0C\u9ED8\u8BA420 */\n pageSize?: number;\n /** \u672C\u5730\u5217\u8868\u6570\u636E */\n localListData?: T[];\n /** \u56DE\u663E\u6570\u636E\u5217\u8868 */\n backShowList?: T[];\n /** \u8BF7\u6C42\u5217\u8868\u6570\u636E */\n request: (searchKey?: { [key: string]: any }) => Promise<API.Result_Base_List<T[]>>;\n /** \u6E32\u67D3\u7684\u503C */\n keyNames: KeyNamesType<T>;\n /** \u641C\u7D22\u7684\u5B57\u6BB5 */\n searchKey?: keyof T;\n /** Select.Option\u7684value\u5B57\u6BB5 */\n selectKey?: keyof T;\n /** \u989D\u5916\u7684\u67E5\u8BE2\u6761\u4EF6 */\n otherSearchValue?: Record<string, any>;\n /** \u53EA\u663E\u793A\u540D\u79F0 */\n onlyShowName?: boolean;\n /** \u81EA\u5B9A\u4E49\u6E32\u67D3 */\n itemRender?: (list: T[]) => React.ReactNode;\n /** \u5185\u5BB9\u7C7B\u578B */\n valueType?: 'key' | 'object';\n /** \u5224\u65AD\u4E0B\u62C9\u6846\u7684\u663E\u793A */\n showDropdown?: boolean;\n /** \u83B7\u53D6\u5DF2\u9009\u62E9\u7684\u6570\u636E\u5217\u8868 */\n getSelectList?: (item: T[]) => void;\n /** \u6570\u636E\u4E0B\u62C9\u5217\u8868\u53D8\u5316\u56DE\u8C03 */\n dropDownListChange?: (list: T[]) => void;\n }\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export type MySelectListProps<T> = Partial<MySelectProps<T>>;\n";
1
+ export declare const MySelectTypes = "\n /** \u7EC4\u4EF6\u6620\u5C04\u5B57\u6BB5 */\n export type KeyNamesType<T> = {\n /** \u4E3B\u952E */\n id: keyof T;\n /** \u7F16\u7801 */\n code?: keyof T;\n /** \u540D\u79F0 */\n name: keyof T;\n };\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export interface MySelectProps<T> extends SelectProps {\n /** \u662F\u5426\u53EA\u8BFB */\n readonly?: boolean;\n /** \u5FC5\u987B\u8F93\u5165\u641C\u7D22\u6761\u4EF6 */\n mustSearch?: boolean;\n /** \u641C\u7D22\u5EF6\u8FDF\u65F6\u95F4 */\n searchDelay?: number;\n /** \u662F\u5426\u81EA\u52A8\u9009\u4E2D */\n autoSelect?: boolean;\n /** \u662F\u5426\u663E\u793A\u6240\u6709\u6570\u636E\uFF08\u4E0D\u5206\u9875\uFF09 */\n showAllList?: boolean;\n /** \u83B7\u53D6\u591A\u5C11\u6761\u6570\u636E\uFF0C\u9ED8\u8BA420 */\n pageSize?: number;\n /** \u672C\u5730\u5217\u8868\u6570\u636E */\n localListData?: T[];\n /** \u56DE\u663E\u6570\u636E\u5217\u8868 */\n backShowList?: T[];\n /** \u8BF7\u6C42\u5217\u8868\u6570\u636E */\n request: (searchKey?: { [key: string]: any }) => Promise<API.Result_Base_List<T[]>>;\n /** \u6E32\u67D3\u7684\u503C */\n keyNames: KeyNamesType<T>;\n /** \u641C\u7D22\u7684\u5B57\u6BB5 */\n searchKey?: keyof T;\n /** Select.Option\u7684value\u5B57\u6BB5 */\n selectKey?: keyof T;\n /** \u989D\u5916\u7684\u67E5\u8BE2\u6761\u4EF6 */\n otherSearchValue?: Record<string, any>;\n /** \u53EA\u663E\u793A\u540D\u79F0 */\n onlyShowName?: boolean;\n /** \u81EA\u5B9A\u4E49\u6E32\u67D3 */\n itemRender?: (list: T[]) => React.ReactNode;\n /** \u5185\u5BB9\u7C7B\u578B */\n valueType?: 'key' | 'object';\n /** \u5224\u65AD\u4E0B\u62C9\u6846\u7684\u663E\u793A */\n showDropdown?: boolean;\n /** \u83B7\u53D6\u5DF2\u9009\u62E9\u7684\u6570\u636E\u5217\u8868 */\n getSelectList?: (item: T[]) => void;\n /** \u6570\u636E\u4E0B\u62C9\u5217\u8868\u53D8\u5316\u56DE\u8C03 */\n dropDownListChange?: (list: T[]) => void;\n }\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export type MySelectListProps<T> = Partial<MySelectProps<T>>;\n";
@@ -1 +1 @@
1
- export var MySelectTypes = "\n /** \u7EC4\u4EF6\u6620\u5C04\u5B57\u6BB5 */\n export type KeyNamesType<T> = {\n /** \u4E3B\u952E */\n id: keyof T;\n /** \u7F16\u7801 */\n code?: keyof T;\n /** \u540D\u79F0 */\n name: keyof T;\n };\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export interface MySelectProps<T> extends SelectProps {\n /** \u662F\u5426\u53EA\u8BFB */\n readonly?: boolean;\n /** \u5FC5\u987B\u8F93\u5165\u641C\u7D22\u6761\u4EF6 */\n mustSearch?: boolean;\n /** \u662F\u5426\u81EA\u52A8\u9009\u4E2D */\n autoSelect?: boolean;\n /** \u662F\u5426\u663E\u793A\u6240\u6709\u6570\u636E\uFF08\u4E0D\u5206\u9875\uFF09 */\n showAllList?: boolean;\n /** \u83B7\u53D6\u591A\u5C11\u6761\u6570\u636E\uFF0C\u9ED8\u8BA420 */\n pageSize?: number;\n /** \u672C\u5730\u5217\u8868\u6570\u636E */\n localListData?: T[];\n /** \u56DE\u663E\u6570\u636E\u5217\u8868 */\n backShowList?: T[];\n /** \u8BF7\u6C42\u5217\u8868\u6570\u636E */\n request: (searchKey?: { [key: string]: any }) => Promise<API.Result_Base_List<T[]>>;\n /** \u6E32\u67D3\u7684\u503C */\n keyNames: KeyNamesType<T>;\n /** \u641C\u7D22\u7684\u5B57\u6BB5 */\n searchKey?: keyof T;\n /** Select.Option\u7684value\u5B57\u6BB5 */\n selectKey?: keyof T;\n /** \u989D\u5916\u7684\u67E5\u8BE2\u6761\u4EF6 */\n otherSearchValue?: Record<string, any>;\n /** \u53EA\u663E\u793A\u540D\u79F0 */\n onlyShowName?: boolean;\n /** \u81EA\u5B9A\u4E49\u6E32\u67D3 */\n itemRender?: (list: T[]) => React.ReactNode;\n /** \u5185\u5BB9\u7C7B\u578B */\n valueType?: 'key' | 'object';\n /** \u5224\u65AD\u4E0B\u62C9\u6846\u7684\u663E\u793A */\n showDropdown?: boolean;\n /** \u83B7\u53D6\u5DF2\u9009\u62E9\u7684\u6570\u636E\u5217\u8868 */\n getSelectList?: (item: T[]) => void;\n /** \u6570\u636E\u4E0B\u62C9\u5217\u8868\u53D8\u5316\u56DE\u8C03 */\n dropDownListChange?: (list: T[]) => void;\n }\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export type MySelectListProps<T> = Partial<MySelectProps<T>>;\n";
1
+ export var MySelectTypes = "\n /** \u7EC4\u4EF6\u6620\u5C04\u5B57\u6BB5 */\n export type KeyNamesType<T> = {\n /** \u4E3B\u952E */\n id: keyof T;\n /** \u7F16\u7801 */\n code?: keyof T;\n /** \u540D\u79F0 */\n name: keyof T;\n };\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export interface MySelectProps<T> extends SelectProps {\n /** \u662F\u5426\u53EA\u8BFB */\n readonly?: boolean;\n /** \u5FC5\u987B\u8F93\u5165\u641C\u7D22\u6761\u4EF6 */\n mustSearch?: boolean;\n /** \u641C\u7D22\u5EF6\u8FDF\u65F6\u95F4 */\n searchDelay?: number;\n /** \u662F\u5426\u81EA\u52A8\u9009\u4E2D */\n autoSelect?: boolean;\n /** \u662F\u5426\u663E\u793A\u6240\u6709\u6570\u636E\uFF08\u4E0D\u5206\u9875\uFF09 */\n showAllList?: boolean;\n /** \u83B7\u53D6\u591A\u5C11\u6761\u6570\u636E\uFF0C\u9ED8\u8BA420 */\n pageSize?: number;\n /** \u672C\u5730\u5217\u8868\u6570\u636E */\n localListData?: T[];\n /** \u56DE\u663E\u6570\u636E\u5217\u8868 */\n backShowList?: T[];\n /** \u8BF7\u6C42\u5217\u8868\u6570\u636E */\n request: (searchKey?: { [key: string]: any }) => Promise<API.Result_Base_List<T[]>>;\n /** \u6E32\u67D3\u7684\u503C */\n keyNames: KeyNamesType<T>;\n /** \u641C\u7D22\u7684\u5B57\u6BB5 */\n searchKey?: keyof T;\n /** Select.Option\u7684value\u5B57\u6BB5 */\n selectKey?: keyof T;\n /** \u989D\u5916\u7684\u67E5\u8BE2\u6761\u4EF6 */\n otherSearchValue?: Record<string, any>;\n /** \u53EA\u663E\u793A\u540D\u79F0 */\n onlyShowName?: boolean;\n /** \u81EA\u5B9A\u4E49\u6E32\u67D3 */\n itemRender?: (list: T[]) => React.ReactNode;\n /** \u5185\u5BB9\u7C7B\u578B */\n valueType?: 'key' | 'object';\n /** \u5224\u65AD\u4E0B\u62C9\u6846\u7684\u663E\u793A */\n showDropdown?: boolean;\n /** \u83B7\u53D6\u5DF2\u9009\u62E9\u7684\u6570\u636E\u5217\u8868 */\n getSelectList?: (item: T[]) => void;\n /** \u6570\u636E\u4E0B\u62C9\u5217\u8868\u53D8\u5316\u56DE\u8C03 */\n dropDownListChange?: (list: T[]) => void;\n }\n\n /** \u7EC4\u4EF6Select\u7684\u53C2\u6570 */\n export type MySelectListProps<T> = Partial<MySelectProps<T>>;\n";
@@ -270,6 +270,12 @@ export interface ExcelExportOptions {
270
270
  sheetPassword?: string;
271
271
  /** 是否锁定基础行(数据行前的行),默认为 true */
272
272
  lockHeaderRows?: boolean;
273
+ /**
274
+ * 是否锁定数据填写区(含 columnValidations 预留行)。
275
+ * - 默认 false:数据区可编辑(表头仍由 lockHeaderRows 锁定)
276
+ * - true:整表只读,需配合 lockHeaderRows(默认已 true)启用工作表保护
277
+ */
278
+ lockDataRows?: boolean;
273
279
  /** 自定义合并单元格范围数组(如 ['A1:B2', 'C1:D1']) */
274
280
  mergeCells?: string[];
275
281
  /** 数据行高度,默认 22 */
@@ -382,6 +388,35 @@ const applyColumnValidations = (
382
388
  });
383
389
  };
384
390
 
391
+ /**
392
+ * 工作表保护开启前,解锁数据填写区。
393
+ * Excel 新建单元格默认 protection.locked=true;仅锁表头并 protect 后,未显式解锁的数据区也不可编辑。
394
+ */
395
+ const unlockDataEntryArea = (
396
+ workSheet: ExcelJS.Worksheet,
397
+ headerRowCount: number,
398
+ colCount: number,
399
+ maxDataRows: number,
400
+ dataRowCount: number,
401
+ hasColumnValidations: boolean,
402
+ lockedColumns: number[],
403
+ ) => {
404
+ const rowSpan = hasColumnValidations ? Math.max(dataRowCount, maxDataRows) : dataRowCount;
405
+ if (rowSpan <= 0) return;
406
+
407
+ const startRow = headerRowCount + 1;
408
+ const endRow = startRow + rowSpan - 1;
409
+
410
+ for (let row = startRow; row <= endRow; row++) {
411
+ for (let col = 1; col <= colCount; col++) {
412
+ const colIndex = col - 1;
413
+ if (!lockedColumns.includes(colIndex)) {
414
+ workSheet.getCell(row, col).protection = { locked: false };
415
+ }
416
+ }
417
+ }
418
+ };
419
+
385
420
  function buildDataCellBorder(style: ExcelJS.BorderStyle): ExcelJS.Borders {
386
421
  const side = { style } as ExcelJS.Border;
387
422
  return {
@@ -538,6 +573,8 @@ export const genExcelAdvanced = async (
538
573
 
539
574
  // 是否锁定基础行(默认为 true)
540
575
  const lockHeaderRows = options?.lockHeaderRows !== false;
576
+ // 是否锁定数据填写区(整表只读),默认 false
577
+ const lockDataRows = options?.lockDataRows === true;
541
578
  // 物理行号:追加行时递增,用于 mergeCells 与「第几行」对应
542
579
  let currentRowIndex = 0;
543
580
 
@@ -569,11 +606,9 @@ export const genExcelAdvanced = async (
569
606
  bottom: { style: 'thin' },
570
607
  right: { style: 'thin' },
571
608
  };
572
- if (lockHeaderRows) {
573
- titleRow.eachCell((cell) => {
574
- cell.protection = { locked: true };
575
- });
576
- }
609
+ titleRow.eachCell((cell) => {
610
+ cell.protection = { locked: lockHeaderRows };
611
+ });
577
612
  }
578
613
 
579
614
  // ========== 第二行:注意事项(可选) ==========
@@ -607,11 +642,9 @@ export const genExcelAdvanced = async (
607
642
  bottom: { style: 'thin' },
608
643
  right: { style: 'thin' },
609
644
  };
610
- if (lockHeaderRows) {
611
- noticeRow.eachCell((cell) => {
612
- cell.protection = { locked: true };
613
- });
614
- }
645
+ noticeRow.eachCell((cell) => {
646
+ cell.protection = { locked: lockHeaderRows };
647
+ });
615
648
  }
616
649
 
617
650
  // ========== 编号行(可选,隐藏) ==========
@@ -625,9 +658,7 @@ export const genExcelAdvanced = async (
625
658
  bottom: { style: 'thin' },
626
659
  right: { style: 'thin' },
627
660
  };
628
- if (lockHeaderRows) {
629
- cell.protection = { locked: true };
630
- }
661
+ cell.protection = { locked: lockHeaderRows };
631
662
  });
632
663
  codeColumnRow.alignment = { horizontal: 'center', vertical: 'middle' };
633
664
  codeColumnRow.hidden = true;
@@ -649,9 +680,7 @@ export const genExcelAdvanced = async (
649
680
  bottom: { style: 'thin' },
650
681
  right: { style: 'thin' },
651
682
  };
652
- if (lockHeaderRows) {
653
- cell.protection = { locked: true };
654
- }
683
+ cell.protection = { locked: lockHeaderRows };
655
684
  });
656
685
  });
657
686
  } else {
@@ -672,9 +701,7 @@ export const genExcelAdvanced = async (
672
701
  bottom: { style: 'thin' },
673
702
  right: { style: 'thin' },
674
703
  };
675
- if (lockHeaderRows) {
676
- cell.protection = { locked: true };
677
- }
704
+ cell.protection = { locked: lockHeaderRows };
678
705
  });
679
706
  columnHeaderRow.height = 25;
680
707
  }
@@ -706,8 +733,14 @@ export const genExcelAdvanced = async (
706
733
  if (colNumber <= colCount) {
707
734
  const colIndex = colNumber - 1;
708
735
  applyDataCellAppearance(cell, dataRowIndex, colIndex, options);
709
- if (hasLockedColumns) {
736
+ if (lockDataRows) {
737
+ // 整表只读:数据行也锁定,不必显式写(ExcelJS 默认 locked=true),这里写明意图
738
+ cell.protection = { locked: true };
739
+ } else if (hasLockedColumns) {
710
740
  cell.protection = { locked: lockedColumns.includes(colIndex) };
741
+ } else if (lockHeaderRows) {
742
+ // 仅锁表头时,数据行显式解锁,避免 protect 后整表不可编辑
743
+ cell.protection = { locked: false };
711
744
  }
712
745
  }
713
746
  });
@@ -720,8 +753,20 @@ export const genExcelAdvanced = async (
720
753
  applyColumnValidations(workBook, workSheet, options.columnValidations, currentRowIndex, options.maxDataRows ?? 500);
721
754
  }
722
755
 
723
- // ========== 工作表保护:锁定表头区或部分列时启用(密码可选) ==========
724
- if (lockHeaderRows || hasLockedColumns) {
756
+ // ========== 工作表保护:锁定表头/数据区或部分列时启用(密码可选) ==========
757
+ if (lockHeaderRows || hasLockedColumns || lockDataRows) {
758
+ // lockDataRows=true 时整表只读,数据区保持默认 locked=true,不需要解锁
759
+ if (!lockDataRows) {
760
+ unlockDataEntryArea(
761
+ workSheet,
762
+ currentRowIndex,
763
+ colCount,
764
+ options?.maxDataRows ?? 500,
765
+ rows?.length ?? 0,
766
+ !!(options?.columnValidations?.length),
767
+ lockedColumns,
768
+ );
769
+ }
725
770
  workSheet.protect(options?.sheetPassword ?? '', {
726
771
  selectLockedCells: true,
727
772
  selectUnlockedCells: true,
@@ -2,6 +2,6 @@ export default (function (api) {
2
2
  var _api$userConfig$defin, _api$userConfig$defin2, _api$userConfig$defin3, _api$userConfig$defin4;
3
3
  return {
4
4
  path: "constants.ts",
5
- content: "\n export const UTC_FORMAT = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n export const BASE_API = '/api';\n\n export const BACKEND_API_URL = '".concat((_api$userConfig$defin = (_api$userConfig$defin2 = api.userConfig.define) === null || _api$userConfig$defin2 === void 0 ? void 0 : _api$userConfig$defin2.BACKEND_API_URL) !== null && _api$userConfig$defin !== void 0 ? _api$userConfig$defin : undefined, "';\n\n export const FILE_VIEWER_URL = '").concat((_api$userConfig$defin3 = (_api$userConfig$defin4 = api.userConfig.define) === null || _api$userConfig$defin4 === void 0 ? void 0 : _api$userConfig$defin4.FILE_VIEWER_URL) !== null && _api$userConfig$defin3 !== void 0 ? _api$userConfig$defin3 : undefined, "';\n ")
5
+ content: "\n export const UTC_FORMAT = 'YYYY-MM-DDTHH:mm:ss[Z]';\n export const DATE_FORMAT = 'YYYY-MM-DD';\n export const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';\n export const TIME_FORMAT = 'HH:mm:ss';\n\n export const BASE_API = '/api';\n\n export const BACKEND_API_URL = '".concat((_api$userConfig$defin = (_api$userConfig$defin2 = api.userConfig.define) === null || _api$userConfig$defin2 === void 0 ? void 0 : _api$userConfig$defin2.BACKEND_API_URL) !== null && _api$userConfig$defin !== void 0 ? _api$userConfig$defin : undefined, "';\n\n export const FILE_VIEWER_URL = '").concat((_api$userConfig$defin3 = (_api$userConfig$defin4 = api.userConfig.define) === null || _api$userConfig$defin4 === void 0 ? void 0 : _api$userConfig$defin4.FILE_VIEWER_URL) !== null && _api$userConfig$defin3 !== void 0 ? _api$userConfig$defin3 : undefined, "';\n ")
6
6
  };
7
7
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cfmm/umi-plugins-ui-v2",
3
3
  "author": "ysj <411367308@qq.com>",
4
- "version": "0.0.27",
4
+ "version": "0.0.29",
5
5
  "main": "dist/cjs/index.js",
6
6
  "types": "dist/cjs/index.d.ts",
7
7
  "publishConfig": {