@skyfox2000/webui 1.3.19 → 1.3.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/lib/AceEditor.d.ts +1 -0
  2. package/lib/BasicLayout.d.ts +1 -0
  3. package/lib/Error403.d.ts +1 -0
  4. package/lib/Error404.d.ts +1 -0
  5. package/lib/ExcelForm.d.ts +1 -0
  6. package/lib/MenuLayout.d.ts +1 -0
  7. package/lib/UploadForm.d.ts +1 -0
  8. package/lib/assets/modules/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  9. package/lib/assets/modules/baseLayout-Bz3oRE5o.js +79 -0
  10. package/lib/assets/modules/file-upload-CmnCEJze.js +204 -0
  11. package/lib/assets/modules/index-CAqiqqdd.js +380 -0
  12. package/lib/assets/modules/index-CvQ24Mzh.js +112 -0
  13. package/lib/assets/modules/index-D0njzOzQ.js +109 -0
  14. package/lib/assets/modules/menuTabs-NVgroqVO.js +671 -0
  15. package/lib/assets/modules/toolIcon-BuqRfX4F.js +50 -0
  16. package/lib/assets/modules/uploadList-B6MIYOtN.js +2411 -0
  17. package/lib/assets/modules/uploadList-KG6kpOaY.js +382 -0
  18. package/lib/components/common/alert/index.vue.d.ts +13 -0
  19. package/lib/components/common/button/index.vue.d.ts +41 -0
  20. package/lib/components/common/icon/appicon.vue.d.ts +11 -0
  21. package/lib/components/common/icon/fullscreen.vue.d.ts +3 -0
  22. package/lib/components/common/icon/helper.vue.d.ts +23 -0
  23. package/lib/components/common/icon/index.vue.d.ts +243 -0
  24. package/lib/components/common/icon/layoutIcon.vue.d.ts +43 -0
  25. package/lib/components/common/icon/projectIcon.vue.d.ts +59 -0
  26. package/lib/components/common/icon/toolIcon.vue.d.ts +43 -0
  27. package/lib/components/common/index.d.ts +22 -0
  28. package/lib/components/common/loading/index.vue.d.ts +3 -0
  29. package/lib/components/common/tooltip/index.vue.d.ts +21 -0
  30. package/lib/components/content/dialog/index.vue.d.ts +35 -0
  31. package/lib/components/content/drawer/index.vue.d.ts +28 -0
  32. package/lib/components/content/form/formItem.vue.d.ts +28 -0
  33. package/lib/components/content/form/index.vue.d.ts +25 -0
  34. package/lib/components/content/index.d.ts +22 -0
  35. package/lib/components/content/search/index.vue.d.ts +32 -0
  36. package/lib/components/content/search/searchItem.vue.d.ts +23 -0
  37. package/lib/components/content/table/index.vue.d.ts +127 -0
  38. package/lib/components/content/table/tableOperate.vue.d.ts +18 -0
  39. package/lib/components/content/toolbar/icontool.vue.d.ts +7 -0
  40. package/lib/components/content/toolbar/index.vue.d.ts +18 -0
  41. package/lib/components/content/tree/index.vue.d.ts +46 -0
  42. package/lib/components/form/aceEditor/aceConfig.d.ts +8 -0
  43. package/lib/components/form/autoComplete/index.vue.d.ts +101 -0
  44. package/lib/components/form/cascader/index.vue.d.ts +80 -0
  45. package/lib/components/form/checkbox/index.vue.d.ts +100 -0
  46. package/lib/components/form/datePicker/index.vue.d.ts +6 -0
  47. package/lib/components/form/index.d.ts +41 -0
  48. package/lib/components/form/input/index.vue.d.ts +29 -0
  49. package/lib/components/form/input/inputIcon.vue.d.ts +10 -0
  50. package/lib/components/form/input/inputNumber.vue.d.ts +3 -0
  51. package/lib/components/form/input/inputPassword.vue.d.ts +3 -0
  52. package/lib/components/form/propEditor/index.vue.d.ts +15 -0
  53. package/lib/components/form/radio/index.vue.d.ts +105 -0
  54. package/lib/components/form/radio/radioStatus.vue.d.ts +31 -0
  55. package/lib/components/form/rangePicker/index.vue.d.ts +16 -0
  56. package/lib/components/form/select/index.vue.d.ts +119 -0
  57. package/lib/components/form/switch/index.vue.d.ts +76 -0
  58. package/lib/components/form/textarea/index.vue.d.ts +3 -0
  59. package/lib/components/form/timePicker/index.vue.d.ts +6 -0
  60. package/lib/components/form/transfer/index.vue.d.ts +38 -0
  61. package/lib/components/form/transfer/transferTable.vue.d.ts +38 -0
  62. package/lib/components/form/treeSelect/index.vue.d.ts +47 -0
  63. package/lib/components/form/upload/uploadList.vue.d.ts +488 -0
  64. package/lib/components/index.d.ts +4 -0
  65. package/lib/components/layout/breadcrumb/index.vue.d.ts +3 -0
  66. package/lib/components/layout/content/index.vue.d.ts +22 -0
  67. package/lib/components/layout/datetime/index.vue.d.ts +3 -0
  68. package/lib/components/layout/header/headerExits.vue.d.ts +3 -0
  69. package/lib/components/layout/header/index.vue.d.ts +3 -0
  70. package/lib/components/layout/header/user.vue.d.ts +3 -0
  71. package/lib/components/layout/index.d.ts +14 -0
  72. package/lib/components/layout/menu/index.vue.d.ts +6 -0
  73. package/lib/components/layout/menu/menuTabs.vue.d.ts +3 -0
  74. package/lib/const/options.d.ts +32 -0
  75. package/lib/directives/enter-submit.d.ts +4 -0
  76. package/lib/directives/index.d.ts +2 -0
  77. package/lib/directives/permission.d.ts +5 -0
  78. package/lib/es/AceEditor/index.js +167 -0
  79. package/lib/es/BasicLayout/index.js +54 -0
  80. package/lib/es/Error403/index.js +39 -0
  81. package/lib/es/Error404/index.js +39 -0
  82. package/lib/es/ExcelForm/index.js +491 -0
  83. package/lib/es/MenuLayout/index.js +54 -0
  84. package/lib/es/UploadForm/index.js +110 -0
  85. package/lib/index.d.ts +46 -0
  86. package/lib/router/index.d.ts +15 -0
  87. package/lib/stores/appInfo.d.ts +31 -0
  88. package/lib/stores/hostInfo.d.ts +11 -0
  89. package/lib/stores/pageInfo.d.ts +18 -0
  90. package/lib/stores/pinia.d.ts +3 -0
  91. package/lib/stores/settingInfo.d.ts +8 -0
  92. package/lib/stores/userInfo.d.ts +25 -0
  93. package/lib/typings/data.d.ts +80 -0
  94. package/lib/typings/form.d.ts +206 -0
  95. package/lib/typings/menu.d.ts +7 -0
  96. package/lib/typings/option.d.ts +209 -0
  97. package/lib/typings/page.d.ts +70 -0
  98. package/lib/typings/table.d.ts +181 -0
  99. package/lib/typings/tools.d.ts +130 -0
  100. package/lib/typings/tree.d.ts +76 -0
  101. package/lib/typings/upload.d.ts +161 -0
  102. package/lib/typings/urls.d.ts +69 -0
  103. package/lib/utils/cache.d.ts +23 -0
  104. package/lib/utils/data.d.ts +6 -0
  105. package/lib/utils/download.d.ts +6 -0
  106. package/lib/utils/eventbus.d.ts +16 -0
  107. package/lib/utils/excel-preview.d.ts +24 -0
  108. package/lib/utils/excel-view.d.ts +25 -0
  109. package/lib/utils/export-table.d.ts +12 -0
  110. package/lib/utils/file-upload.d.ts +17 -0
  111. package/lib/utils/form-csv.d.ts +18 -0
  112. package/lib/utils/form-excel.d.ts +36 -0
  113. package/lib/utils/form-validate.d.ts +29 -0
  114. package/lib/utils/form.d.ts +9 -0
  115. package/lib/utils/icon-loader.d.ts +125 -0
  116. package/lib/utils/isEmpty.d.ts +1 -0
  117. package/lib/utils/main-openapis.d.ts +8 -0
  118. package/lib/utils/menu.d.ts +6 -0
  119. package/lib/utils/options.d.ts +7 -0
  120. package/lib/utils/page.d.ts +30 -0
  121. package/lib/utils/table.d.ts +21 -0
  122. package/lib/utils/tools.d.ts +18 -0
  123. package/lib/utils/tree.d.ts +3 -0
  124. package/lib/vite-env.d.ts +8 -0
  125. package/lib/webui.css +1 -0
  126. package/lib/webui.es.js +2345 -0
  127. package/package.json +1 -1
  128. package/src/components/content/dialog/excelForm.vue +1 -1
  129. package/src/components/content/form/formItem.vue +5 -0
  130. package/src/typings/form.d.ts +1 -1
  131. package/src/typings/tree.d.ts +4 -0
  132. package/src/utils/form.ts +7 -1
  133. package/src/utils/table.ts +7 -2
  134. package/src/utils/tree.ts +4 -2
  135. package/.cursorignore +0 -8
  136. package/scripts/userInput.py +0 -2
@@ -0,0 +1,6 @@
1
+ import { PageControl } from '../typings/page.d';
2
+ import { IUrlInfo, ReqParams } from '../../../502417_fapi';
3
+ export declare const downloadBlob: (blob: Blob, fileName: string) => void;
4
+ export declare const donwloadFromMinio: <T>(url: IUrlInfo, params?: ReqParams, pageCtrl?: PageControl<T>) => Promise<undefined> | undefined;
5
+ export declare const CanPreviewFileExt: string[];
6
+ export declare const previewFromMinio: (url: IUrlInfo, fileName: string, params?: ReqParams) => false | Promise<undefined>;
@@ -0,0 +1,16 @@
1
+ export declare enum EventPrefix {
2
+ SelectReload = "Select.Reload",
3
+ RadioReload = "Radio.Reload",
4
+ CheckboxReload = "Checkbox.Reload",
5
+ TreeSelectReload = "TreeSelect.Reload",
6
+ TreeCheckReload = "TreeCheck.Reload"
7
+ }
8
+ declare class EventBus {
9
+ private listeners;
10
+ private isValidPrefix;
11
+ on(event: string, listener: (...args: any[]) => void): void;
12
+ off(event: string, listener: (...args: any[]) => void): void;
13
+ emit(event: string, ...args: any[]): void;
14
+ }
15
+ declare const eventBus: EventBus;
16
+ export default eventBus;
@@ -0,0 +1,24 @@
1
+ import { IUrlInfo } from '../../../502417_fapi';
2
+ export declare const isCsvContent: (data: string) => boolean;
3
+ export declare const isCsvType: (type?: string, filename?: string) => boolean;
4
+ export declare const isExcelType: (type?: string, filename?: string) => boolean;
5
+ export declare const processCsvContent: (content: string, filename?: string) => Promise<{
6
+ success: boolean;
7
+ blobUrl: string;
8
+ fileName: string;
9
+ }>;
10
+ export declare const processExcelContent: (content: string, mimeType?: string, filename?: string) => {
11
+ success: boolean;
12
+ blobUrl: string;
13
+ fileName: string;
14
+ };
15
+ export declare const handleFileData: (data: any, isRawMode?: boolean) => Promise<{
16
+ success: boolean;
17
+ blobUrl: any;
18
+ fileName: any;
19
+ }>;
20
+ export declare const loadPreviewFile: (previewUrl: IUrlInfo, excelCtrl: any) => Promise<{
21
+ success: boolean;
22
+ blobUrl?: string;
23
+ fileName?: string;
24
+ }>;
@@ -0,0 +1,25 @@
1
+ export interface ExcelMarkCell {
2
+ row: number;
3
+ col: number;
4
+ color?: string;
5
+ }
6
+ export interface ExcelMarkInfo {
7
+ markCells: ExcelMarkCell[];
8
+ markHeaders?: string[];
9
+ }
10
+ export interface NormalizedData {
11
+ headers: string[];
12
+ rows: any[][];
13
+ }
14
+ export interface ExcelViewResult {
15
+ success: boolean;
16
+ blobUrl?: string;
17
+ fileName?: string;
18
+ error?: string;
19
+ }
20
+ export declare const csvToNormalized: (csvContent: string) => NormalizedData;
21
+ export declare const excelToNormalized: (excelBuffer: ArrayBuffer) => Promise<NormalizedData>;
22
+ export declare const toExcel: (data: NormalizedData, fileName: string, markInfo?: ExcelMarkInfo) => Promise<ExcelViewResult>;
23
+ export declare const csvToExcelView: (csvContent: string, fileName: string) => Promise<ExcelViewResult>;
24
+ export declare const excelToExcelView: (excelBuffer: ArrayBuffer, fileName: string) => Promise<ExcelViewResult>;
25
+ export declare const normalizedToExcelView: (data: NormalizedData, fileName: string) => Promise<ExcelViewResult>;
@@ -0,0 +1,12 @@
1
+ import { GridControl } from '../typings/table.d';
2
+ import { IUrlInfo } from '../../../502417_fapi';
3
+ export interface TableColumn {
4
+ title: string;
5
+ dataIndex?: string;
6
+ key?: string;
7
+ visible?: boolean;
8
+ export?: boolean;
9
+ customRender?: (value: any, record: Record<string, any>) => any;
10
+ }
11
+ export declare const exportSelectedRows: <T extends Record<string, any>>(fileName: string, columns: TableColumn[], selectRows: T[]) => Promise<void>;
12
+ export declare const exportResults: <T extends Record<string, any>>(fileName: string, columns: TableColumn[], gridCtrl: GridControl<T>, url: IUrlInfo) => Promise<undefined>;
@@ -0,0 +1,17 @@
1
+ import { IUrlInfo } from '../../../502417_fapi';
2
+ import { UploadFile } from '../typings/upload.d';
3
+ import { Ref } from 'vue';
4
+ export declare class path {
5
+ static join(...args: (string | undefined | null)[]): string;
6
+ }
7
+ export declare class AsyncUploader {
8
+ private urlInfo;
9
+ private maxConcurrent;
10
+ private abortController?;
11
+ constructor(urlInfo: IUrlInfo, maxConcurrent?: number);
12
+ doUpload(fileList: UploadFile[], loading: Ref<boolean>, continueOnError: boolean, onComplete?: (result: boolean, files: UploadFile[]) => void, onProgress?: (file: UploadFile) => void): Promise<void>;
13
+ private uploadFiles;
14
+ private handleFileStatus;
15
+ uploadFile(file: UploadFile, signal: AbortSignal, onProgress: (percent: number) => void): Promise<UploadFile>;
16
+ cancelUpload(): void;
17
+ }
@@ -0,0 +1,18 @@
1
+ export declare const csvToExcelBlob: (csvContent: string, fileName: string) => Promise<{
2
+ blobUrl: string;
3
+ fileName: string;
4
+ blob: null;
5
+ }>;
6
+ export declare const processCsvFile: (csvBuffer: ArrayBuffer, fileName: string) => Promise<{
7
+ success: boolean;
8
+ blobUrl: string | undefined;
9
+ fileName: string | undefined;
10
+ error: string | undefined;
11
+ csvContent: string;
12
+ } | {
13
+ success: boolean;
14
+ error: string;
15
+ blobUrl?: undefined;
16
+ fileName?: undefined;
17
+ csvContent?: undefined;
18
+ }>;
@@ -0,0 +1,36 @@
1
+ import { IUrlInfo } from '../../../502417_fapi';
2
+ import { ValidateRule } from '../typings/form';
3
+ import { UploadFile } from '../typings/upload';
4
+ import { ExcelMarkInfo, ExcelViewResult } from './excel-view';
5
+ export declare const processExcelFile: (excelBuffer: ArrayBuffer) => Promise<{
6
+ headers: string[];
7
+ excelData: Record<string, any>[];
8
+ excelRows: any[][];
9
+ } | null>;
10
+ export declare const createMarkedExcelView: (excelBuffer: ArrayBuffer, markInfo: ExcelMarkInfo, fileName: string) => Promise< ExcelViewResult>;
11
+ export declare const validateExcel: (excelBuffer: ArrayBuffer, rules?: Record<string, ValidateRule>) => Promise<{
12
+ hasError: boolean;
13
+ markCells?: Array<{
14
+ row: number;
15
+ col: number;
16
+ color: string;
17
+ }>;
18
+ markHeaders?: string[];
19
+ }>;
20
+ export declare const checkExcelDuplicates: (excelBuffer: ArrayBuffer, duplicateRules: string[], url?: IUrlInfo) => Promise<{
21
+ hasError: boolean;
22
+ markCells?: Array<{
23
+ row: number;
24
+ col: number;
25
+ color: string;
26
+ }>;
27
+ markHeaders?: string[];
28
+ }>;
29
+ export declare const validateExcelUnified: (excelBuffer: ArrayBuffer, rules?: Record<string, ValidateRule>, duplicateRules?: string[], duplicateUrl?: IUrlInfo) => Promise<{
30
+ errBlob?: Blob;
31
+ validationMsg: string;
32
+ duplicateMsg: string;
33
+ hasFormatError?: boolean;
34
+ hasDuplicateError?: boolean;
35
+ }>;
36
+ export declare const appendExcelData: (fileInfo: UploadFile, fileData: Record<string, any>, fields?: string[]) => Promise<void>;
@@ -0,0 +1,29 @@
1
+ import { Ref } from 'vue';
2
+ import { default as Validator } from 'async-validator';
3
+ import { EditorControl, InputFactoryItems, ValidateRule } from '../typings/form.d';
4
+ import { AnyData } from '../../../502417_fapi';
5
+ export declare let validMessages: Validator;
6
+ export declare const initValidate: (messages?: Record<string, any>) => void;
7
+ export declare const getRuleTexts: (rules?: Record<string, ValidateRule>) => {
8
+ field: string;
9
+ rules: string[];
10
+ }[];
11
+ export declare const formValidate: <T>(editorCtrl: EditorControl<T>) => Promise<void>;
12
+ export declare const validateData: (data: Record<string, AnyData>, rules: Record<string, ValidateRule>, validator?: Validator) => Promise<any>;
13
+ export declare const resetRules: <T>(editorCtrl: EditorControl<T>) => void;
14
+ interface RuleFactoryOptions {
15
+ label?: string;
16
+ rule?: string;
17
+ }
18
+ export declare const useInputFactory: () => InputFactoryItems<AnyData>;
19
+ export declare const useFormItemFactory: (options: RuleFactoryOptions, editorCtrl?: EditorControl<AnyData>) => Ref<{
20
+ msg: string;
21
+ errClass: string;
22
+ }, {
23
+ msg: string;
24
+ errClass: string;
25
+ } | {
26
+ msg: string;
27
+ errClass: string;
28
+ }>;
29
+ export {};
@@ -0,0 +1,9 @@
1
+ import { EditorControl } from '../typings/form.d';
2
+ export declare const onFormSave: <T>(editorCtrl: EditorControl<T>) => void;
3
+ export declare const onFormSaveAs: <T>(editorCtrl: EditorControl<T>) => void;
4
+ export declare const onFormClose: <T>(editorCtrl: EditorControl<T>) => void;
5
+ export declare const saveForm: <T>(editorCtrl: EditorControl<T>) => Promise<void>;
6
+ export declare const getFormDetail: <T>(editorCtrl: EditorControl<T>) => Promise<void>;
7
+ export declare const openNewForm: <T>(editorCtrl: EditorControl<T>) => void;
8
+ export declare const setFormData: <T>(editorCtrl: EditorControl<T>, formData?: T) => void;
9
+ export declare const resetForm: <T>(editorCtrl: EditorControl<T>) => void;
@@ -0,0 +1,125 @@
1
+ import { Ref, VNode, RendererNode, RendererElement, DefineComponent, ExtractPropTypes, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
2
+ export type IconFontOptions = {
3
+ iconUrl: string;
4
+ monoColor?: boolean;
5
+ icon?: string;
6
+ icons?: string[];
7
+ };
8
+ export declare const ICONS_LIB: Ref<Record<string, any>, Record<string, any>>;
9
+ export declare const createFromIconfont: (options: IconFontOptions) => VNode<RendererNode, RendererElement, {
10
+ [key: string]: any;
11
+ }> | DefineComponent<ExtractPropTypes<{
12
+ icon: {
13
+ type: StringConstructor;
14
+ };
15
+ icons: {
16
+ type: {
17
+ (arrayLength: number): string[];
18
+ (...items: string[]): string[];
19
+ new (arrayLength: number): string[];
20
+ new (...items: string[]): string[];
21
+ isArray(arg: any): arg is any[];
22
+ readonly prototype: any[];
23
+ from<T>(arrayLike: ArrayLike<T>): T[];
24
+ from<T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];
25
+ from<T>(iterable: Iterable<T> | ArrayLike<T>): T[];
26
+ from<T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];
27
+ of<T>(...items: T[]): T[];
28
+ readonly [Symbol.species]: ArrayConstructor;
29
+ };
30
+ };
31
+ iconIndex: {
32
+ type: NumberConstructor;
33
+ };
34
+ clickable: {
35
+ type: BooleanConstructor;
36
+ };
37
+ angle: {
38
+ type: NumberConstructor;
39
+ };
40
+ flip: {
41
+ type: BooleanConstructor;
42
+ };
43
+ class: {
44
+ type: (StringConstructor | {
45
+ (arrayLength: number): string[];
46
+ (...items: string[]): string[];
47
+ new (arrayLength: number): string[];
48
+ new (...items: string[]): string[];
49
+ isArray(arg: any): arg is any[];
50
+ readonly prototype: any[];
51
+ from<T>(arrayLike: ArrayLike<T>): T[];
52
+ from<T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];
53
+ from<T>(iterable: Iterable<T> | ArrayLike<T>): T[];
54
+ from<T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];
55
+ of<T>(...items: T[]): T[];
56
+ readonly [Symbol.species]: ArrayConstructor;
57
+ })[];
58
+ default: string;
59
+ };
60
+ }>, {
61
+ isLoaded: Ref<boolean, boolean>;
62
+ Icon: Ref<string, string>;
63
+ handleClick: () => void;
64
+ }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, "update:iconIndex"[], "update:iconIndex", PublicProps, Readonly< ExtractPropTypes<{
65
+ icon: {
66
+ type: StringConstructor;
67
+ };
68
+ icons: {
69
+ type: {
70
+ (arrayLength: number): string[];
71
+ (...items: string[]): string[];
72
+ new (arrayLength: number): string[];
73
+ new (...items: string[]): string[];
74
+ isArray(arg: any): arg is any[];
75
+ readonly prototype: any[];
76
+ from<T>(arrayLike: ArrayLike<T>): T[];
77
+ from<T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];
78
+ from<T>(iterable: Iterable<T> | ArrayLike<T>): T[];
79
+ from<T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];
80
+ of<T>(...items: T[]): T[];
81
+ readonly [Symbol.species]: ArrayConstructor;
82
+ };
83
+ };
84
+ iconIndex: {
85
+ type: NumberConstructor;
86
+ };
87
+ clickable: {
88
+ type: BooleanConstructor;
89
+ };
90
+ angle: {
91
+ type: NumberConstructor;
92
+ };
93
+ flip: {
94
+ type: BooleanConstructor;
95
+ };
96
+ class: {
97
+ type: (StringConstructor | {
98
+ (arrayLength: number): string[];
99
+ (...items: string[]): string[];
100
+ new (arrayLength: number): string[];
101
+ new (...items: string[]): string[];
102
+ isArray(arg: any): arg is any[];
103
+ readonly prototype: any[];
104
+ from<T>(arrayLike: ArrayLike<T>): T[];
105
+ from<T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];
106
+ from<T>(iterable: Iterable<T> | ArrayLike<T>): T[];
107
+ from<T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];
108
+ of<T>(...items: T[]): T[];
109
+ readonly [Symbol.species]: ArrayConstructor;
110
+ })[];
111
+ default: string;
112
+ };
113
+ }>> & Readonly<{
114
+ "onUpdate:iconIndex"?: ((...args: any[]) => any) | undefined;
115
+ }>, {
116
+ class: string | string[];
117
+ clickable: boolean;
118
+ flip: boolean;
119
+ }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
120
+ export declare const checkIconsExpired: () => void;
121
+ export declare const circleLoading: VNode<RendererNode, RendererElement, {
122
+ [key: string]: any;
123
+ }>;
124
+ export declare const parseIcons: (key: string, monoColor: boolean) => void;
125
+ export declare const getIconTransform: (angle?: number, flip?: boolean) => string;
@@ -0,0 +1 @@
1
+ export declare const isEmpty: <T>(data: T | null | undefined) => boolean;
@@ -0,0 +1,8 @@
1
+ import { ApiResponse } from '../../../502417_fapi';
2
+ import { AppInfo, HostInfo, LoginInfo, UserInfo } from '../../../502424_MicroBase';
3
+ export declare const getHostInfo: () => HostInfo;
4
+ export declare const getAppInfo: () => AppInfo;
5
+ export declare const userLogin: (loginInfo: LoginInfo) => Promise<ApiResponse<LoginInfo> | void>;
6
+ export declare const userLogout: () => Promise<ApiResponse<void> | void>;
7
+ export declare const getToken: () => string;
8
+ export declare const getUserInfo: () => UserInfo;
@@ -0,0 +1,6 @@
1
+ import { BreadcrumbRoute } from '../typings/menu';
2
+ import { RouteRecord } from '../../../502424_MicroBase';
3
+ import { Component } from 'vue';
4
+ export declare const initMenu: <T>(routes: RouteRecord[], menuData: T[], iconCom: Component, iconProps?: Record<string, any>) => void;
5
+ export declare const crumbs: BreadcrumbRoute[];
6
+ export declare const showBreadcrumb: () => void;
@@ -0,0 +1,7 @@
1
+ import { OptionItemProps, SelectValue, OptionControl, OptionProps } from '../typings/option.d';
2
+ export declare const loadOption: (load: boolean, optionCtrl: OptionControl, props?: OptionProps) => void;
3
+ export declare const unloadOption: (optionCtrl: OptionControl, props: OptionProps) => void;
4
+ export declare const getSelectedValues: (values: undefined | string | number | (string | number | undefined)[], options: OptionItemProps[], keepChildren?: boolean) => OptionItemProps | OptionItemProps[] | undefined;
5
+ export declare const getSelectedLabels: (selectedValues: OptionItemProps | OptionItemProps[] | undefined) => string[];
6
+ export declare const outFormDataFields: (formData: Record<string, any>, outFields: Record<string, string>, selectedValues?: OptionItemProps | OptionItemProps[] | null) => void;
7
+ export declare const onOptionChanged: (optionCtrl: OptionControl, props: OptionProps, values?: SelectValue) => OptionItemProps | OptionItemProps[] | undefined;
@@ -0,0 +1,30 @@
1
+ import { ApiUrls } from '../typings/urls.d';
2
+ import { ValidateRule, EditorControl, EditorControlOption } from '../typings/form.d';
3
+ import { GridControl, GridControlOption } from '../typings/table.d';
4
+ import { PageControl, PageControlOption } from '../typings/page.d';
5
+ import { TreeControl, TreeControlOption } from '../typings/tree.d';
6
+ import { OptionControl, OptionProps } from '../typings/option';
7
+ import { IUrlInfo } from '../../../502417_fapi';
8
+ export declare const initPageFactory: (options: {
9
+ pageOption?: PageControlOption;
10
+ gridOption?: GridControlOption;
11
+ editorOptions?: EditorControlOption;
12
+ treeOption?: TreeControlOption;
13
+ }) => void;
14
+ export declare const useEditorFactory: <T, E>(urls: ApiUrls, pageCtrl: PageControl<T>, defaultData?: Partial<E>, formRules?: Record<string, ValidateRule>) => {
15
+ editorCtrl: EditorControl<E>;
16
+ };
17
+ export declare const useGridFactory: <T, G>(urls: ApiUrls, pageCtrl: PageControl<T>, columns?: Record<string, any>[]) => {
18
+ gridCtrl: GridControl<G>;
19
+ };
20
+ export declare const useTreeFactory: <T>(urls: ApiUrls, pageCtrl: PageControl<T>) => {
21
+ treeCtrl: TreeControl;
22
+ };
23
+ export declare const useOptionFactory: (url?: IUrlInfo, props?: OptionProps) => {
24
+ optionCtrl: OptionControl;
25
+ };
26
+ export declare const usePageFactory: <T>(urls: ApiUrls, defaultData?: Partial<T>, formRules?: Record<string, ValidateRule>) => {
27
+ pageCtrl: PageControl<T>;
28
+ editorCtrl: EditorControl<T>;
29
+ gridCtrl: GridControl<T>;
30
+ };
@@ -0,0 +1,21 @@
1
+ import { GridControl } from '../typings/table.d';
2
+ import { ExecuteOptions } from '../typings/data.d';
3
+ import { RowRecord } from '../typings/tools.d';
4
+ import { AnyJsonData, ApiResponse, FindResult, IUrlInfo, ReqParams } from '../../../502417_fapi';
5
+ interface TableColumn {
6
+ role?: string;
7
+ permit?: string;
8
+ visible?: boolean | (() => boolean);
9
+ [key: string]: any;
10
+ }
11
+ export declare const filterColumns: (columns: TableColumn[], toolCtl?: boolean) => TableColumn[];
12
+ export declare const mergeColumns: (newColumns: TableColumn[], oldColumns?: TableColumn[]) => TableColumn[];
13
+ export declare const gridQueryList: <T>(gridCtrl: GridControl<T>) => Promise<T[]>;
14
+ export declare const gridQueryFind: <T>(gridCtrl: GridControl<T>) => Promise<FindResult>;
15
+ export declare const gridRowUpdate: <T>(gridCtrl: GridControl<T>, record: Record<string, any>, options?: Partial<ExecuteOptions<T>>) => Promise<any | undefined>;
16
+ export declare const gridStatusUpdate: <T>(gridCtrl: GridControl<T>, record: Record<string, any>) => Promise<any | undefined>;
17
+ export declare const getRecordDetail: <T>(gridCtrl: GridControl<T>, params: ReqParams, url?: IUrlInfo) => Promise<ApiResponse<AnyJsonData> | null>;
18
+ export declare const onGridRowExpand: <T>(gridCtrl: GridControl<T>, record: T) => Promise<ApiResponse<any> | null>;
19
+ export declare const onGridRowEdit: <T>(gridCtrl: GridControl<T>, record: T) => void;
20
+ export declare const onGridRowDelete: <T>(gridCtrl: GridControl<T>, record: string[] | RowRecord | T) => Promise<ApiResponse<T> | null>;
21
+ export {};
@@ -0,0 +1,18 @@
1
+ import { GridControl } from '../typings/table.d';
2
+ import { PageControl } from '../typings/page.d';
3
+ import { RowRecord, ButtonTool, IconTool } from '../typings/tools';
4
+ export declare const getToolByKey: (defaultTools: (IconTool | ButtonTool)[], key: string) => ButtonTool | IconTool | undefined;
5
+ export declare const getToolGroup: (defaultTools: (IconTool | ButtonTool)[], autoFlat: number, tools?: (IconTool | ButtonTool | string)[]) => {
6
+ buttons: (ButtonTool | IconTool)[];
7
+ menus: (ButtonTool | IconTool)[];
8
+ };
9
+ export declare const getToolStatus: (item: IconTool | ButtonTool, record?: Record<string, any>) => boolean | undefined;
10
+ export declare const getToolVisible: (item: IconTool | ButtonTool, record?: Record<string, any>) => boolean;
11
+ export declare const onReloadClick: <T>(_: PageControl<T>, gridCtrl?: GridControl<T>) => void;
12
+ export declare const onToolClicked: <T>(item: IconTool | ButtonTool, pageCtrl?: PageControl<T>, gridCtrl?: GridControl<T>, record?: T | RowRecord | string[], confirm?: true) => void;
13
+ export declare const onFullscreenClick: () => void;
14
+ export declare const onColumnVisibleChanged: (column: any, checked: boolean) => void;
15
+ export declare const defaultTools: IconTool[];
16
+ export declare const useToolFactory: <T>(gridCtrl: GridControl<T>) => {
17
+ tools: IconTool[];
18
+ };
@@ -0,0 +1,3 @@
1
+ import { TreeControl, TreeNode } from '../typings/tree.d';
2
+ import { ReqParams } from '../../../502417_fapi';
3
+ export declare const queryTree: (treeCtrl: TreeControl, params?: ReqParams) => Promise<TreeNode[]>;
@@ -0,0 +1,8 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ //解决ts文件引入vue文件出现红色警告问题
4
+ declare module '*.vue' {
5
+ import { defineComponent } from 'vue';
6
+ const Component: ReturnType<typeof defineComponent>;
7
+ export default Component;
8
+ }
package/lib/webui.css ADDED
@@ -0,0 +1 @@
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.visible{visibility:visible}.static{position:static}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.bottom-\[3px\]{bottom:3px}.left-0{left:0}.left-\[2px\]{left:2px}.left-\[85px\]{left:85px}.top-0{top:0}.top-\[-2px\]{top:-2px}.z-10{z-index:10}.z-\[1\]{z-index:1}.z-\[9999\]{z-index:9999}.m-\[10px\]{margin:10px}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-\[5px\]{margin-left:5px;margin-right:5px}.mx-\[6px\]{margin-left:6px;margin-right:6px}.mx-auto{margin-left:auto;margin-right:auto}.\!ml-\[10px\]{margin-left:10px!important}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-7{margin-bottom:1.75rem}.mb-\[-3px\]{margin-bottom:-3px}.mb-\[10px\]{margin-bottom:10px}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-5{margin-left:1.25rem}.ml-\[10px\]{margin-left:10px}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-\[10px\]{margin-right:10px}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-\[-2px\]{margin-top:-2px}.mt-\[5px\]{margin-top:5px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.\!h-4{height:1rem!important}.\!h-5{height:1.25rem!important}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-\[100px\]{height:100px}.h-\[12px\]{height:12px}.h-\[14px\]{height:14px}.h-\[15px\]{height:15px}.h-\[17px\]{height:17px}.h-\[18\.5px\]{height:18.5px}.h-\[18px\]{height:18px}.h-\[19px\]{height:19px}.h-\[240px\]{height:240px}.h-\[24px\]{height:24px}.h-\[30px\]{height:30px}.h-\[40px\]{height:40px}.h-\[500px\]{height:500px}.h-\[60px\]{height:60px}.h-\[calc\(100vh-100px\)\]{height:calc(100vh - 100px)}.h-\[calc\(100vh-40px\)\]{height:calc(100vh - 40px)}.h-\[calc\(100vh-80px\)\]{height:calc(100vh - 80px)}.h-\[calc\(100vh-81px\)\]{height:calc(100vh - 81px)}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[40px\]{max-height:40px}.\!min-h-\[calc\(100vh-100px\)\]{min-height:calc(100vh - 100px)!important}.min-h-\[32px\]{min-height:32px}.min-h-\[480px\]{min-height:480px}.min-h-full{min-height:100%}.\!w-4{width:1rem!important}.\!w-5{width:1.25rem!important}.\!w-\[46px\]{width:46px!important}.w-1\/3{width:33.333333%}.w-1\/4{width:25%}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-\[100\%\]{width:100%}.w-\[12px\]{width:12px}.w-\[14px\]{width:14px}.w-\[15px\]{width:15px}.w-\[17px\]{width:17px}.w-\[18px\]{width:18px}.w-\[19px\]{width:19px}.w-\[22\%\]{width:22%}.w-\[248px\]{width:248px}.w-\[24px\]{width:24px}.w-\[3\%\]{width:3%}.w-\[33\%\]{width:33%}.w-\[430px\]{width:430px}.w-\[50\%\]{width:50%}.w-\[58px\]{width:58px}.w-\[60px\]{width:60px}.w-\[64\%\]{width:64%}.w-\[80\%\]{width:80%}.w-\[80px\]{width:80px}.w-\[90\%\]{width:90%}.w-\[95\%\]{width:95%}.w-\[99\.3\%\]{width:99.3%}.w-full{width:100%}.min-w-\[100px\]{min-width:100px}.min-w-\[170px\]{min-width:170px}.min-w-\[430px\]{min-width:430px}.max-w-\[200px\]{max-width:200px}.max-w-\[248px\]{max-width:248px}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-nowrap{text-wrap:nowrap}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-l-\[5px\]{border-top-left-radius:5px;border-bottom-left-radius:5px}.rounded-r-\[5px\]{border-top-right-radius:5px;border-bottom-right-radius:5px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-solid{border-style:solid}.\!border-red-300{--tw-border-opacity: 1 !important;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))!important}.border-\[\#b3e0ff\]{--tw-border-opacity: 1;border-color:rgb(179 224 255 / var(--tw-border-opacity, 1))}.border-\[\#ccc\]{--tw-border-opacity: 1;border-color:rgb(204 204 204 / var(--tw-border-opacity, 1))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.bg-\[\#ccc\]{--tw-bg-opacity: 1;background-color:rgb(204 204 204 / var(--tw-bg-opacity, 1))}.bg-\[\#e6f7ff\]{--tw-bg-opacity: 1;background-color:rgb(230 247 255 / var(--tw-bg-opacity, 1))}.bg-\[\#fcfcfc\]{--tw-bg-opacity: 1;background-color:rgb(252 252 252 / var(--tw-bg-opacity, 1))}.bg-\[rgba\(240\,240\,240\,0\.2\)\]{background-color:#f0f0f033}.bg-blue-300{--tw-bg-opacity: 1;background-color:rgb(147 197 253 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-\[10px\]{padding:10px}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-\[10px\]{padding-left:10px;padding-right:10px}.px-\[5px\]{padding-left:5px;padding-right:5px}.px-\[8px\]{padding-left:8px;padding-right:8px}.py-0{padding-top:0;padding-bottom:0}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-\[2px\]{padding-top:2px;padding-bottom:2px}.py-\[4px\]{padding-top:4px;padding-bottom:4px}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pl-5{padding-left:1.25rem}.pr-4{padding-right:1rem}.pr-5{padding-right:1.25rem}.pt-1{padding-top:.25rem}.pt-\[5px\]{padding-top:5px}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-\[\'Courier\'\]{font-family:Courier}.\!text-\[12px\]{font-size:12px!important}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.leading-\[2\.5\]{line-height:2.5}.leading-\[3\]{line-height:3}.\!text-red-400{--tw-text-opacity: 1 !important;color:rgb(248 113 113 / var(--tw-text-opacity, 1))!important}.text-\[\#555\]{--tw-text-opacity: 1;color:rgb(85 85 85 / var(--tw-text-opacity, 1))}.text-\[\#666\]{--tw-text-opacity: 1;color:rgb(102 102 102 / var(--tw-text-opacity, 1))}.text-\[\#888\]{--tw-text-opacity: 1;color:rgb(136 136 136 / var(--tw-text-opacity, 1))}.text-\[\#999\]{--tw-text-opacity: 1;color:rgb(153 153 153 / var(--tw-text-opacity, 1))}.text-\[\#ff4d4f\]{--tw-text-opacity: 1;color:rgb(255 77 79 / var(--tw-text-opacity, 1))}.text-\[\#ff4d4fcc\]{color:#ff4d4fcc}.text-\[rgba\(0\,0\,0\,0\.45\)\]{color:#00000073}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-\[0_-3px_6px_\#000\]{--tw-shadow: 0 -3px 6px #000;--tw-shadow-colored: 0 -3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_3px_0px_\#ff4d4f\]{--tw-shadow: 0 0 3px 0px #ff4d4f;--tw-shadow-colored: 0 0 3px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.disabled{opacity:.3;cursor:not-allowed;filter:grayscale(90%)}.last\:mb-0:last-child{margin-bottom:0}.hover\:z-10:hover{z-index:10}.hover\:border-\[\#8abeff\]:hover{--tw-border-opacity: 1;border-color:rgb(138 190 255 / var(--tw-border-opacity, 1))}.hover\:bg-\[\#b3e0ff\]:hover{--tw-bg-opacity: 1;background-color:rgb(179 224 255 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:text-blue-700:hover{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.\[\&\>div\]\:ml-\[-1px\]>div{margin-left:-1px}.first\:\[\&\>div\]\:ml-0>div:first-child{margin-left:0}.re-icon-container[data-v-0146f00c]{position:relative;display:inline-flex;vertical-align:middle;justify-content:center;align-items:center;overflow:hidden}.re-icon.symbol[data-v-0146f00c]{position:relative;margin:5px 0;width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden}.re-icon.fontclass[data-v-0146f00c]{position:relative;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}.re-icon[disabled][data-v-0146f00c]{pointer-events:none;cursor:not-allowed;color:#666}.clickable[data-v-0146f00c]{cursor:pointer}.rotate[data-v-0146f00c]{animation:rotate 2s linear infinite}.flip[data-v-0146f00c]{transform:scaleX(-1)}.error[data-v-62a24cf4] .ant-select-selector{border-color:#ff4d4f80;box-shadow:0 0 3px #ff4d4f}[data-v-62a24cf4] input::-webkit-search-cancel-button,[data-v-62a24cf4] input::-webkit-clear-button{display:none!important}.error[data-v-7f0def6e] .ant-select-selector{border-color:#ef444480;box-shadow:0 0 3px #ff4d4f}.error[data-v-64193a41] input+span{border-color:#ff717190;box-shadow:0 0 3px #ff4d4f}.error[data-v-358b82ef] .ant-input-group-addon,.error[data-v-358b82ef] .ant-input-affix-wrapper{border-color:#ff4d4f80;box-shadow:0 0 3px #ff4d4f}.error[data-v-a10d18a5] input+span{border-color:#ff7171;box-shadow:0 0 3px #ff4d4f}.error[data-v-da38e265] .ant-select-selector{border-color:#ff4d4f80;box-shadow:0 0 3px #ff4d4f}.error[data-v-a0ed9c4e] .ant-select-selector{border-color:#ef444480;box-shadow:0 0 3px #ff4d4f}.error[data-v-7d076856]{border-color:#ff4d4f80;box-shadow:0 0 3px #ff4d4f}.error-text[data-v-7d076856]{color:#ff4d4f!important}body{margin:0}.x-spreadsheet{font-size:13px;line-height:normal;-webkit-user-select:none;user-select:none;-moz-user-select:none;font-family:Lato,Source Sans Pro,Roboto,Helvetica,Arial,sans-serif;box-sizing:content-box;background:#fff;-webkit-font-smoothing:antialiased}.x-spreadsheet textarea{font:400 13px Arial,Lato,Source Sans Pro,Roboto,Helvetica,sans-serif}.x-spreadsheet-sheet{position:relative;overflow:hidden}.x-spreadsheet-table{vertical-align:bottom}.x-spreadsheet-tooltip{font-family:inherit;position:absolute;padding:5px 10px;color:#fff;border-radius:1px;background:#000;font-size:12px;z-index:201}.x-spreadsheet-tooltip:before{pointer-events:none;position:absolute;left:calc(50% - 4px);top:-4px;content:"";width:8px;height:8px;background:inherit;transform:rotate(45deg);z-index:1;box-shadow:1px 1px 3px -1px #0000004d}.x-spreadsheet-color-palette{padding:5px}.x-spreadsheet-color-palette table{margin:0;padding:0;border-collapse:separate;border-spacing:2;background:#fff}.x-spreadsheet-color-palette table td{margin:0;cursor:pointer;border:1px solid transparent}.x-spreadsheet-color-palette table td:hover{border-color:#ddd}.x-spreadsheet-color-palette table td .x-spreadsheet-color-palette-cell{width:16px;height:16px}.x-spreadsheet-border-palette{padding:6px}.x-spreadsheet-border-palette table{margin:0;padding:0;border-collapse:separate;border-spacing:0;background:#fff;table-layout:fixed}.x-spreadsheet-border-palette table td{margin:0}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left{border-right:1px solid #eee;padding-right:6px}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell{width:30px;height:30px;cursor:pointer;text-align:center}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell:hover{background-color:#eee}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right{padding-left:6px}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right .x-spreadsheet-line-type{position:relative;left:0;top:-3px}.x-spreadsheet-dropdown{position:relative}.x-spreadsheet-dropdown .x-spreadsheet-dropdown-content{position:absolute;z-index:200;background:#fff;box-shadow:1px 2px 5px 2px #33333326}.x-spreadsheet-dropdown.bottom-left .x-spreadsheet-dropdown-content{top:calc(100% + 5px);left:0}.x-spreadsheet-dropdown.bottom-right .x-spreadsheet-dropdown-content{top:calc(100% + 5px);right:0}.x-spreadsheet-dropdown.top-left .x-spreadsheet-dropdown-content{bottom:calc(100% + 5px);left:0}.x-spreadsheet-dropdown.top-right .x-spreadsheet-dropdown-content{bottom:calc(100% + 5px);right:0}.x-spreadsheet-dropdown .x-spreadsheet-dropdown-title{padding:0 5px;display:inline-block}.x-spreadsheet-resizer{position:absolute;z-index:11}.x-spreadsheet-resizer .x-spreadsheet-resizer-hover{background-color:#4b89ff40}.x-spreadsheet-resizer .x-spreadsheet-resizer-line{position:absolute}.x-spreadsheet-resizer.horizontal{cursor:row-resize}.x-spreadsheet-resizer.horizontal .x-spreadsheet-resizer-line{border-bottom:2px dashed #4b89ff;left:0;bottom:0}.x-spreadsheet-resizer.vertical{cursor:col-resize}.x-spreadsheet-resizer.vertical .x-spreadsheet-resizer-line{border-right:2px dashed #4b89ff;top:0;right:0}.x-spreadsheet-scrollbar{position:absolute;bottom:0;right:0;background-color:#f4f5f8;opacity:.9;z-index:12}.x-spreadsheet-scrollbar.horizontal{right:15px;overflow-x:scroll;overflow-y:hidden}.x-spreadsheet-scrollbar.horizontal>div{height:1px;background:#ddd}.x-spreadsheet-scrollbar.vertical{bottom:15px;overflow-x:hidden;overflow-y:scroll}.x-spreadsheet-scrollbar.vertical>div{width:1px;background:#ddd}.x-spreadsheet-overlayer{position:absolute;left:0;top:0;z-index:10}.x-spreadsheet-overlayer .x-spreadsheet-overlayer-content{position:absolute;overflow:hidden;pointer-events:none;width:100%;height:100%}.x-spreadsheet-editor,.x-spreadsheet-selector{box-sizing:content-box;position:absolute;overflow:hidden;pointer-events:none;top:0;left:0;width:100%;height:100%}.x-spreadsheet-selector .hide-input{position:absolute;z-index:0}.x-spreadsheet-selector .hide-input input{padding:0;width:0;border:none!important}.x-spreadsheet-selector .x-spreadsheet-selector-area{position:absolute;border:2px solid #4b89ff;background:#4b89ff1a;z-index:5}.x-spreadsheet-selector .x-spreadsheet-selector-clipboard,.x-spreadsheet-selector .x-spreadsheet-selector-autofill{position:absolute;background:transparent;z-index:100}.x-spreadsheet-selector .x-spreadsheet-selector-clipboard{border:2px dashed #4b89ff}.x-spreadsheet-selector .x-spreadsheet-selector-autofill{border:1px dashed rgba(0,0,0,.45)}.x-spreadsheet-selector .x-spreadsheet-selector-corner{pointer-events:auto;position:absolute;cursor:crosshair;font-size:0;height:5px;width:5px;right:-5px;bottom:-5px;border:2px solid #ffffff;background:#4b89ff}.x-spreadsheet-editor{z-index:20}.x-spreadsheet-editor .x-spreadsheet-editor-area{position:absolute;text-align:left;border:2px solid #4b89ff;line-height:0;z-index:100;pointer-events:auto}.x-spreadsheet-editor .x-spreadsheet-editor-area textarea{box-sizing:content-box;border:none;padding:0 3px;outline:none;resize:none;text-align:start;overflow-y:hidden;font:400 13px Arial,Lato,Source Sans Pro,Roboto,Helvetica,sans-serif;color:inherit;white-space:normal;word-wrap:break-word;line-height:22px;margin:0}.x-spreadsheet-editor .x-spreadsheet-editor-area .textline{overflow:hidden;visibility:hidden;position:fixed;top:0;left:0}.x-spreadsheet-item{-webkit-user-select:none;-moz-user-select:none;user-select:none;background:0;border:1px solid transparent;outline:none;height:26px;color:#000000e6;line-height:26px;list-style:none;padding:2px 10px;cursor:default;text-align:left;overflow:hidden}.x-spreadsheet-item.disabled{pointer-events:none;opacity:.5}.x-spreadsheet-item:hover,.x-spreadsheet-item.active{background:#0000000d}.x-spreadsheet-item.divider{height:0;padding:0;margin:5px 0;border:none;border-bottom:1px solid rgba(0,0,0,.1)}.x-spreadsheet-item .label{float:right;opacity:.65;font-size:1em}.x-spreadsheet-item.state,.x-spreadsheet-header.state{padding-left:35px!important;position:relative}.x-spreadsheet-item.state:before,.x-spreadsheet-header.state:before{content:"";position:absolute;width:10px;height:10px;left:12px;top:calc(50% - 5px);background:#00000014;border-radius:2px}.x-spreadsheet-item.state.checked:before,.x-spreadsheet-header.state.checked:before{background:#4b89ff}.x-spreadsheet-checkbox{position:relative;display:inline-block;backface-visibility:hidden;outline:0;vertical-align:baseline;font-style:normal;font-size:1rem;line-height:1em}.x-spreadsheet-checkbox>input{position:absolute;top:0;left:0;opacity:0!important;outline:0;z-index:-1}.x-spreadsheet-suggest,.x-spreadsheet-contextmenu,.x-spreadsheet-sort-filter{position:absolute;box-shadow:1px 2px 5px 2px #33333326;background:#fff;z-index:100;width:260px;pointer-events:auto;overflow:auto}.x-spreadsheet-suggest{width:200px}.x-spreadsheet-filter{border:1px solid #e9e9e9;font-size:12px;margin:10px}.x-spreadsheet-filter .x-spreadsheet-header{padding:.5em .75em;background:#f8f8f9;border-bottom:1px solid #e9e9e9;border-left:1px solid transparent}.x-spreadsheet-filter .x-spreadsheet-body{height:200px;overflow-y:auto}.x-spreadsheet-filter .x-spreadsheet-body .x-spreadsheet-item{height:20px;line-height:20px}.x-spreadsheet-sort-filter .x-spreadsheet-buttons{margin:10px}.x-spreadsheet-bottombar{height:40px;padding:0 30px;text-align:left;background:#f5f6f7;display:flex;position:relative;border-top:1px solid #e0e2e4}.x-spreadsheet-bottombar .x-spreadsheet-menu>li{line-height:40px;height:40px;padding-top:0;padding-bottom:0;vertical-align:middle;border-right:1px solid #e8eaed}.x-spreadsheet-menu{display:flex;overflow-x:auto;list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.x-spreadsheet-menu>li{float:left;line-height:1.25em;padding:.785em 1em;margin:0;vertical-align:middle;text-align:left;font-weight:400;color:#80868b;white-space:nowrap;cursor:pointer;transition:all .3s;font-weight:700}.x-spreadsheet-menu>li.active{background-color:#fff;color:#000000a6}.x-spreadsheet-menu>li .x-spreadsheet-dropdown{display:inline-block}.x-spreadsheet-print{position:absolute;left:0;top:0;z-index:100;width:100%;height:100%;display:flex;flex-direction:column}.x-spreadsheet-print-bar{background:#424242;height:60px;line-height:60px;padding:0 30px}.x-spreadsheet-print-bar .-title{color:#fff;font-weight:700;font-size:1.2em;float:left}.x-spreadsheet-print-bar .-right{float:right;margin-top:12px}.x-spreadsheet-print-content{display:flex;flex:auto;flex-direction:row;background:#d0d0d0;height:calc(100% - 60px)}.x-spreadsheet-print-content .-sider{flex:0 0 300px;width:300px;border-left:2px solid #ccc;background:#fff}.x-spreadsheet-print-content .-content{flex:auto;overflow-x:auto;overflow-y:scroll;height:100%}.x-spreadsheet-canvas-card-wraper{margin:40px 20px}.x-spreadsheet-canvas-card{background:#fff;margin:auto;page-break-before:auto;page-break-after:always;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 3px #0000001f,0 4px 5px #0003}.x-spreadsheet-calendar{color:#000000a6;background:#fff;-webkit-user-select:none;-moz-user-select:none;user-select:none}.x-spreadsheet-calendar .calendar-header{font-weight:700;line-height:30px;text-align:center;width:100%;float:left;background:#f9fafb}.x-spreadsheet-calendar .calendar-header .calendar-header-left{padding-left:5px;float:left}.x-spreadsheet-calendar .calendar-header .calendar-header-right{float:right}.x-spreadsheet-calendar .calendar-header .calendar-header-right a{padding:3px 0;margin-right:2px;border-radius:2px}.x-spreadsheet-calendar .calendar-header .calendar-header-right a:hover{background:#00000014}.x-spreadsheet-calendar .calendar-body{border-collapse:collapse;border-spacing:0}.x-spreadsheet-calendar .calendar-body th,.x-spreadsheet-calendar .calendar-body td{width:14.28571429%;min-width:32px;text-align:center;font-weight:700;line-height:30px;padding:0}.x-spreadsheet-calendar .calendar-body td>.cell:hover{background:#ecf6fd}.x-spreadsheet-calendar .calendar-body td>.cell.active,.x-spreadsheet-calendar .calendar-body td>.cell.active:hover{background:#ecf6fd;color:#2185d0}.x-spreadsheet-calendar .calendar-body td>.cell.disabled{pointer-events:none;opacity:.5}.x-spreadsheet-datepicker{box-shadow:2px 2px 5px #0003;position:absolute;left:0;top:calc(100% + 5px);z-index:10;width:auto}.x-spreadsheet-buttons{display:flex;justify-content:flex-end}.x-spreadsheet-buttons .x-spreadsheet-button{margin-left:8px}.x-spreadsheet-button{display:inline-block;border-radius:3px;line-height:1em;min-height:1em;white-space:nowrap;text-align:center;cursor:pointer;font-size:1em;font-weight:700;padding:.75em 1em;color:#0009;background:#e0e1e2;text-decoration:none;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;outline:none;vertical-align:baseline;zoom:1;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .1s linear}.x-spreadsheet-button.active,.x-spreadsheet-button:hover{background-color:#c0c1c2;color:#000c}.x-spreadsheet-button.primary{color:#fff;background-color:#2185d0}.x-spreadsheet-button.primary:hover,.x-spreadsheet-button.primary.active{color:#fff;background-color:#1678c2}.x-spreadsheet-form-input{font-size:1em;position:relative;font-weight:400;display:inline-flex;color:#000000de}.x-spreadsheet-form-input input{z-index:1;margin:0;max-width:100%;flex:1 0 auto;outline:0;-webkit-tap-highlight-color:rgba(255,255,255,0);text-align:left;line-height:30px;height:30px;padding:0 8px;background:#fff;border:1px solid #e9e9e9;border-radius:3px;transition:box-shadow .1s ease,border-color .1s ease;box-shadow:inset 0 1px 2px #0a0a0a0f}.x-spreadsheet-form-input input:focus{border-color:#4b89ff;box-shadow:inset 0 1px 2px #4b89ff33}.x-spreadsheet-form-select{position:relative;display:inline-block;background:#fff;border:1px solid #e9e9e9;border-radius:2px;cursor:pointer;color:#000000de;-webkit-user-select:none;-moz-user-select:none;user-select:none;box-shadow:inset 0 1px 2px #0a0a0a0f}.x-spreadsheet-form-select .input-text{text-overflow:ellipsis;white-space:nowrap;min-width:60px;width:auto;height:30px;line-height:30px;padding:0 8px}.x-spreadsheet-form-fields{display:flex;flex-direction:row;flex-wrap:wrap}.x-spreadsheet-form-fields .x-spreadsheet-form-field{flex:0 1 auto}.x-spreadsheet-form-fields .x-spreadsheet-form-field .label{display:inline-block;margin:0 10px 0 0}.x-spreadsheet-form-field{display:block;vertical-align:middle;margin-left:10px;margin-bottom:10px}.x-spreadsheet-form-field:first-child{margin-left:0}.x-spreadsheet-form-field.error .x-spreadsheet-form-select,.x-spreadsheet-form-field.error input{border-color:#f04134}.x-spreadsheet-form-field .tip{color:#f04134;font-size:.9em}.x-spreadsheet-dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;background-color:#0009;opacity:0;animation-fill-mode:both;animation-duration:.5s;transition:background-color .5s linear;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:1000}.x-spreadsheet-dimmer.active{display:block;opacity:1}form fieldset{border:none}form fieldset label{display:block;margin-bottom:.5em;font-size:1em;color:#666}form fieldset select{font-size:1.1em;width:100%;background-color:#fff;border:none;border-bottom:2px solid #ddd;padding:.5em .85em;border-radius:2px}.x-spreadsheet-modal,.x-spreadsheet-toast{font-size:13px;position:fixed;z-index:1001;text-align:left;line-height:1.25em;min-width:360px;color:#000000de;font-family:Lato,Source Sans Pro,Roboto,Helvetica,Arial,sans-serif;border-radius:4px;border:1px solid rgba(0,0,0,.1);background-color:#fff;background-clip:padding-box;box-shadow:#0003 0 2px 8px}.x-spreadsheet-toast{background-color:#ffffffd9}.x-spreadsheet-modal-header,.x-spreadsheet-toast-header{font-weight:600;background-clip:padding-box;background-color:#ffffffd9;border-bottom:1px solid rgba(0,0,0,.05);border-radius:4px 4px 0 0}.x-spreadsheet-toast-header{color:#f2711c}.x-spreadsheet-modal-header{border-bottom:1px solid #e0e2e4;background:#00000014;font-size:1.0785em}.x-spreadsheet-modal-header,.x-spreadsheet-modal-content,.x-spreadsheet-toast-header,.x-spreadsheet-toast-content{padding:.75em 1em}.x-spreadsheet-menu li:first-child{display:none}.vue-office-excel{height:100%}.modal .ant-modal-content{padding:16px}.full-modal .ant-modal{width:100%!important;max-width:100%;top:0;padding-bottom:0;margin:0}.full-modal .ant-modal-content{display:flex;flex-direction:column;height:100vh}.full-modal .ant-modal-body{flex:1}