@bscjc/webui 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,9 @@
1
+ /**
2
+ * ToolbarColumnConfigV2 常量定义
3
+ */
4
+ /** 存储键前缀 */
5
+ export declare const STORAGE_PREFIX = "VXE_TABLE_CUSTOM_COLUMN_";
6
+ /** 存储版本号 */
7
+ export declare const STORAGE_VERSION = 1;
8
+ /** 特殊列类型(不参与配置) */
9
+ export declare const SPECIAL_COLUMN_TYPES: readonly ["checkbox", "seq", "radio", "expand"];
@@ -0,0 +1,205 @@
1
+ export declare const JcColumnConfig: {
2
+ new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
3
+ table: {
4
+ type: import("vue").PropType<import("vxe-table").VxeTableInstance>;
5
+ default: null;
6
+ };
7
+ itemWidth: {
8
+ type: NumberConstructor;
9
+ default: number;
10
+ };
11
+ drawerWidth: {
12
+ type: StringConstructor;
13
+ default: string;
14
+ };
15
+ maxFixedCount: {
16
+ type: NumberConstructor;
17
+ default: number;
18
+ };
19
+ lockFieldList: {
20
+ type: import("vue").PropType<string[]>;
21
+ default: () => never[];
22
+ };
23
+ storagePrefix: {
24
+ type: StringConstructor;
25
+ default: string;
26
+ };
27
+ columnGroups: {
28
+ type: import("vue").PropType<import("./types").ColumnGroupConfig[]>;
29
+ default: () => never[];
30
+ };
31
+ defaultVisibleFields: {
32
+ type: import("vue").PropType<string[]>;
33
+ default: () => never[];
34
+ };
35
+ }>> & Readonly<{
36
+ onChange?: ((config: import("./types").ColumnConfig[]) => any) | undefined;
37
+ onReset?: (() => any) | undefined;
38
+ onSaved?: ((config: import("./types").ColumnConfig[]) => any) | undefined;
39
+ "onWidth-change"?: ((params: {
40
+ field: string;
41
+ width: number;
42
+ }) => any) | undefined;
43
+ }>, {
44
+ openDrawer: () => void;
45
+ closeDrawer: () => void;
46
+ loadStoredConfig: () => Promise<void>;
47
+ resetToDefault: () => Promise<void>;
48
+ saveAndApply: () => Promise<void>;
49
+ onResizableChange: (params: import("vxe-table").VxeTableDefines.ResizableChangeEventParams) => void;
50
+ hasStoredConfig: () => boolean;
51
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
52
+ change: (config: import("./types").ColumnConfig[]) => any;
53
+ reset: () => any;
54
+ saved: (config: import("./types").ColumnConfig[]) => any;
55
+ "width-change": (params: {
56
+ field: string;
57
+ width: number;
58
+ }) => any;
59
+ }, import("vue").PublicProps, {
60
+ table: import("vxe-table").VxeTableInstance;
61
+ lockFieldList: string[];
62
+ maxFixedCount: number;
63
+ storagePrefix: string;
64
+ defaultVisibleFields: string[];
65
+ itemWidth: number;
66
+ drawerWidth: string;
67
+ columnGroups: import("./types").ColumnGroupConfig[];
68
+ }, true, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
69
+ P: {};
70
+ B: {};
71
+ D: {};
72
+ C: {};
73
+ M: {};
74
+ Defaults: {};
75
+ }, Readonly<import("vue").ExtractPropTypes<{
76
+ table: {
77
+ type: import("vue").PropType<import("vxe-table").VxeTableInstance>;
78
+ default: null;
79
+ };
80
+ itemWidth: {
81
+ type: NumberConstructor;
82
+ default: number;
83
+ };
84
+ drawerWidth: {
85
+ type: StringConstructor;
86
+ default: string;
87
+ };
88
+ maxFixedCount: {
89
+ type: NumberConstructor;
90
+ default: number;
91
+ };
92
+ lockFieldList: {
93
+ type: import("vue").PropType<string[]>;
94
+ default: () => never[];
95
+ };
96
+ storagePrefix: {
97
+ type: StringConstructor;
98
+ default: string;
99
+ };
100
+ columnGroups: {
101
+ type: import("vue").PropType<import("./types").ColumnGroupConfig[]>;
102
+ default: () => never[];
103
+ };
104
+ defaultVisibleFields: {
105
+ type: import("vue").PropType<string[]>;
106
+ default: () => never[];
107
+ };
108
+ }>> & Readonly<{
109
+ onChange?: ((config: import("./types").ColumnConfig[]) => any) | undefined;
110
+ onReset?: (() => any) | undefined;
111
+ onSaved?: ((config: import("./types").ColumnConfig[]) => any) | undefined;
112
+ "onWidth-change"?: ((params: {
113
+ field: string;
114
+ width: number;
115
+ }) => any) | undefined;
116
+ }>, {
117
+ openDrawer: () => void;
118
+ closeDrawer: () => void;
119
+ loadStoredConfig: () => Promise<void>;
120
+ resetToDefault: () => Promise<void>;
121
+ saveAndApply: () => Promise<void>;
122
+ onResizableChange: (params: import("vxe-table").VxeTableDefines.ResizableChangeEventParams) => void;
123
+ hasStoredConfig: () => boolean;
124
+ }, {}, {}, {}, {
125
+ table: import("vxe-table").VxeTableInstance;
126
+ lockFieldList: string[];
127
+ maxFixedCount: number;
128
+ storagePrefix: string;
129
+ defaultVisibleFields: string[];
130
+ itemWidth: number;
131
+ drawerWidth: string;
132
+ columnGroups: import("./types").ColumnGroupConfig[];
133
+ }>;
134
+ __isFragment?: never;
135
+ __isTeleport?: never;
136
+ __isSuspense?: never;
137
+ } & import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<{
138
+ table: {
139
+ type: import("vue").PropType<import("vxe-table").VxeTableInstance>;
140
+ default: null;
141
+ };
142
+ itemWidth: {
143
+ type: NumberConstructor;
144
+ default: number;
145
+ };
146
+ drawerWidth: {
147
+ type: StringConstructor;
148
+ default: string;
149
+ };
150
+ maxFixedCount: {
151
+ type: NumberConstructor;
152
+ default: number;
153
+ };
154
+ lockFieldList: {
155
+ type: import("vue").PropType<string[]>;
156
+ default: () => never[];
157
+ };
158
+ storagePrefix: {
159
+ type: StringConstructor;
160
+ default: string;
161
+ };
162
+ columnGroups: {
163
+ type: import("vue").PropType<import("./types").ColumnGroupConfig[]>;
164
+ default: () => never[];
165
+ };
166
+ defaultVisibleFields: {
167
+ type: import("vue").PropType<string[]>;
168
+ default: () => never[];
169
+ };
170
+ }>> & Readonly<{
171
+ onChange?: ((config: import("./types").ColumnConfig[]) => any) | undefined;
172
+ onReset?: (() => any) | undefined;
173
+ onSaved?: ((config: import("./types").ColumnConfig[]) => any) | undefined;
174
+ "onWidth-change"?: ((params: {
175
+ field: string;
176
+ width: number;
177
+ }) => any) | undefined;
178
+ }>, {
179
+ openDrawer: () => void;
180
+ closeDrawer: () => void;
181
+ loadStoredConfig: () => Promise<void>;
182
+ resetToDefault: () => Promise<void>;
183
+ saveAndApply: () => Promise<void>;
184
+ onResizableChange: (params: import("vxe-table").VxeTableDefines.ResizableChangeEventParams) => void;
185
+ hasStoredConfig: () => boolean;
186
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
187
+ change: (config: import("./types").ColumnConfig[]) => any;
188
+ reset: () => any;
189
+ saved: (config: import("./types").ColumnConfig[]) => any;
190
+ "width-change": (params: {
191
+ field: string;
192
+ width: number;
193
+ }) => any;
194
+ }, string, {
195
+ table: import("vxe-table").VxeTableInstance;
196
+ lockFieldList: string[];
197
+ maxFixedCount: number;
198
+ storagePrefix: string;
199
+ defaultVisibleFields: string[];
200
+ itemWidth: number;
201
+ drawerWidth: string;
202
+ columnGroups: import("./types").ColumnGroupConfig[];
203
+ }, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & import("vue").Plugin;
204
+ export default JcColumnConfig;
205
+ export type { ColumnGroupConfig } from "./types";
@@ -0,0 +1,104 @@
1
+ import { type PropType } from "vue";
2
+ import type { VxeTableInstance, VxeTableDefines } from "vxe-table";
3
+ import type { ColumnConfig, ColumnGroupConfig } from "./types";
4
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
5
+ table: {
6
+ type: PropType<VxeTableInstance>;
7
+ default: null;
8
+ };
9
+ itemWidth: {
10
+ type: NumberConstructor;
11
+ default: number;
12
+ };
13
+ drawerWidth: {
14
+ type: StringConstructor;
15
+ default: string;
16
+ };
17
+ maxFixedCount: {
18
+ type: NumberConstructor;
19
+ default: number;
20
+ };
21
+ lockFieldList: {
22
+ type: PropType<string[]>;
23
+ default: () => never[];
24
+ };
25
+ storagePrefix: {
26
+ type: StringConstructor;
27
+ default: string;
28
+ };
29
+ columnGroups: {
30
+ type: PropType<ColumnGroupConfig[]>;
31
+ default: () => never[];
32
+ };
33
+ defaultVisibleFields: {
34
+ type: PropType<string[]>;
35
+ default: () => never[];
36
+ };
37
+ }>, {
38
+ openDrawer: () => void;
39
+ closeDrawer: () => void;
40
+ loadStoredConfig: () => Promise<void>;
41
+ resetToDefault: () => Promise<void>;
42
+ saveAndApply: () => Promise<void>;
43
+ onResizableChange: (params: VxeTableDefines.ResizableChangeEventParams) => void;
44
+ hasStoredConfig: () => boolean;
45
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
46
+ change: (config: ColumnConfig[]) => any;
47
+ reset: () => any;
48
+ saved: (config: ColumnConfig[]) => any;
49
+ "width-change": (params: {
50
+ field: string;
51
+ width: number;
52
+ }) => any;
53
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
54
+ table: {
55
+ type: PropType<VxeTableInstance>;
56
+ default: null;
57
+ };
58
+ itemWidth: {
59
+ type: NumberConstructor;
60
+ default: number;
61
+ };
62
+ drawerWidth: {
63
+ type: StringConstructor;
64
+ default: string;
65
+ };
66
+ maxFixedCount: {
67
+ type: NumberConstructor;
68
+ default: number;
69
+ };
70
+ lockFieldList: {
71
+ type: PropType<string[]>;
72
+ default: () => never[];
73
+ };
74
+ storagePrefix: {
75
+ type: StringConstructor;
76
+ default: string;
77
+ };
78
+ columnGroups: {
79
+ type: PropType<ColumnGroupConfig[]>;
80
+ default: () => never[];
81
+ };
82
+ defaultVisibleFields: {
83
+ type: PropType<string[]>;
84
+ default: () => never[];
85
+ };
86
+ }>> & Readonly<{
87
+ onChange?: ((config: ColumnConfig[]) => any) | undefined;
88
+ onReset?: (() => any) | undefined;
89
+ onSaved?: ((config: ColumnConfig[]) => any) | undefined;
90
+ "onWidth-change"?: ((params: {
91
+ field: string;
92
+ width: number;
93
+ }) => any) | undefined;
94
+ }>, {
95
+ table: VxeTableInstance;
96
+ lockFieldList: string[];
97
+ maxFixedCount: number;
98
+ storagePrefix: string;
99
+ defaultVisibleFields: string[];
100
+ itemWidth: number;
101
+ drawerWidth: string;
102
+ columnGroups: ColumnGroupConfig[];
103
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
104
+ export default _default;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * ToolbarColumnConfigV2 存储工具函数
3
+ */
4
+ import type { StoredColumnConfig, TableColumnStorage } from './types';
5
+ /**
6
+ * 获取存储键
7
+ */
8
+ export declare const getStorageKey: (tableId: string, prefix: string) => string;
9
+ /**
10
+ * 读取存储
11
+ */
12
+ export declare const getStorage: (tableId: string, prefix: string) => TableColumnStorage | null;
13
+ /**
14
+ * 保存存储
15
+ */
16
+ export declare const setStorage: (tableId: string, prefix: string, columns: StoredColumnConfig[]) => void;
17
+ /**
18
+ * 删除存储
19
+ */
20
+ export declare const removeStorage: (tableId: string, prefix: string) => void;
21
+ /**
22
+ * 更新单列宽度(增量更新)
23
+ */
24
+ export declare const updateColumnWidth: (tableId: string, prefix: string, field: string, width: number, allColumnsForFallback?: StoredColumnConfig[]) => void;
25
+ /**
26
+ * 检查是否有存储配置
27
+ */
28
+ export declare const hasStorage: (tableId: string, prefix: string) => boolean;
@@ -0,0 +1,101 @@
1
+ /**
2
+ * ToolbarColumnConfigV2 类型定义
3
+ */
4
+ import type { VxeTableInstance, VxeTableDefines } from 'vxe-table';
5
+ /**
6
+ * 外部传入的列分组配置(简化版)
7
+ */
8
+ export interface ColumnGroupConfig {
9
+ /** 分组标题 */
10
+ title: string;
11
+ /** 分组下的字段列表 */
12
+ fields: string[];
13
+ }
14
+ /**
15
+ * 内部使用的列分组(带 id)
16
+ */
17
+ export interface ColumnGroup extends ColumnGroupConfig {
18
+ /** 分组唯一标识(自动生成) */
19
+ id: string;
20
+ /** 是否为默认分组([基础信息]) */
21
+ isDefault?: boolean;
22
+ }
23
+ /**
24
+ * 存储的列配置(持久化到 localStorage)
25
+ */
26
+ export interface StoredColumnConfig {
27
+ /** 列字段名(唯一标识) */
28
+ field: string;
29
+ /** 是否可见 */
30
+ visible: boolean;
31
+ /** 固定方向 */
32
+ fixed?: 'left' | 'right';
33
+ /** 列宽(像素) */
34
+ width?: number;
35
+ /** 排序序号 */
36
+ sortNumber: number;
37
+ }
38
+ /**
39
+ * 完整存储结构
40
+ */
41
+ export interface TableColumnStorage {
42
+ /** 存储版本(用于兼容性升级) */
43
+ version: number;
44
+ /** 最后更新时间戳 */
45
+ timestamp: number;
46
+ /** 列配置数组 */
47
+ columns: StoredColumnConfig[];
48
+ }
49
+ /**
50
+ * 组件内部使用的列配置(扩展自 StoredColumnConfig)
51
+ */
52
+ export interface ColumnConfig extends StoredColumnConfig {
53
+ /** 列标题 */
54
+ title: string;
55
+ /** 是否锁定可见性(由 lockFieldList 决定) */
56
+ visibleLocked: boolean;
57
+ /** 原始索引(用于判断顺序是否变化) */
58
+ originalIndex: number;
59
+ /** 所属分组ID */
60
+ groupId?: string;
61
+ }
62
+ /**
63
+ * 组件 Props 类型
64
+ */
65
+ export interface ToolbarColumnConfigV2Props {
66
+ /** 表格实例(必需) */
67
+ table: VxeTableInstance | null;
68
+ /** 锁定不能隐藏的字段列表 */
69
+ lockFieldList?: string[];
70
+ /** 最大固定列数(左右合计) */
71
+ maxFixedCount?: number;
72
+ /** 每个字段项的宽度 */
73
+ itemWidth?: number;
74
+ /** 抽屉宽度 */
75
+ drawerWidth?: string;
76
+ /** 存储键前缀 */
77
+ storagePrefix?: string;
78
+ /** 列分组配置(可选) */
79
+ columnGroups?: ColumnGroupConfig[];
80
+ /** 默认可见的字段列表(仅这些字段可见,其他隐藏) */
81
+ defaultVisibleFields?: string[];
82
+ }
83
+ /**
84
+ * 组件暴露的方法
85
+ */
86
+ export interface ToolbarColumnConfigV2Expose {
87
+ /** 加载存储配置并应用到表格 */
88
+ loadStoredConfig: () => Promise<void>;
89
+ /** 恢复默认配置 */
90
+ resetToDefault: () => Promise<void>;
91
+ /** 保存并应用配置 */
92
+ saveAndApply: () => Promise<void>;
93
+ /** 打开配置抽屉 */
94
+ openDrawer: () => void;
95
+ /** 关闭配置抽屉 */
96
+ closeDrawer: () => void;
97
+ /** 处理列宽变化事件 */
98
+ onResizableChange: (params: VxeTableDefines.ResizableChangeEventParams) => void;
99
+ /** 检查是否有存储配置 */
100
+ hasStoredConfig: () => boolean;
101
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * ToolbarColumnConfigV2 核心逻辑 Composable
3
+ */
4
+ import { type Ref } from "vue";
5
+ import type { VxeTableInstance, VxeTableDefines } from "vxe-table";
6
+ import type { ColumnConfig, ColumnGroup, ColumnGroupConfig, StoredColumnConfig } from "./types";
7
+ export interface UseColumnConfigOptions {
8
+ table: Ref<VxeTableInstance | null | undefined>;
9
+ lockFieldList: Ref<string[]>;
10
+ maxFixedCount: Ref<number>;
11
+ storagePrefix: Ref<string>;
12
+ columnGroupsConfig: Ref<ColumnGroupConfig[]>;
13
+ /** 默认可见的字段列表(仅这些字段可见,其他隐藏) */
14
+ defaultVisibleFields: Ref<string[]>;
15
+ }
16
+ export declare function useColumnConfig(options: UseColumnConfigOptions): {
17
+ allColumns: Ref<{
18
+ title: string;
19
+ visibleLocked: boolean;
20
+ originalIndex: number;
21
+ groupId?: string | undefined;
22
+ field: string;
23
+ visible: boolean;
24
+ fixed?: "left" | "right" | undefined;
25
+ width?: number | undefined;
26
+ sortNumber: number;
27
+ }[], ColumnConfig[] | {
28
+ title: string;
29
+ visibleLocked: boolean;
30
+ originalIndex: number;
31
+ groupId?: string | undefined;
32
+ field: string;
33
+ visible: boolean;
34
+ fixed?: "left" | "right" | undefined;
35
+ width?: number | undefined;
36
+ sortNumber: number;
37
+ }[]>;
38
+ columnGroups: Ref<{
39
+ id: string;
40
+ isDefault?: boolean | undefined;
41
+ title: string;
42
+ fields: string[];
43
+ }[], ColumnGroup[] | {
44
+ id: string;
45
+ isDefault?: boolean | undefined;
46
+ title: string;
47
+ fields: string[];
48
+ }[]>;
49
+ originalOrder: Ref<string[], string[]>;
50
+ filteredColumns: import("vue").ComputedRef<ColumnConfig[]>;
51
+ selectedColumns: import("vue").ComputedRef<{
52
+ title: string;
53
+ visibleLocked: boolean;
54
+ originalIndex: number;
55
+ groupId?: string | undefined;
56
+ field: string;
57
+ visible: boolean;
58
+ fixed?: "left" | "right" | undefined;
59
+ width?: number | undefined;
60
+ sortNumber: number;
61
+ }[]>;
62
+ selectedCount: import("vue").ComputedRef<number>;
63
+ leftFixedCount: import("vue").ComputedRef<number>;
64
+ rightFixedCount: import("vue").ComputedRef<number>;
65
+ totalFixedCount: import("vue").ComputedRef<number>;
66
+ selectAll: import("vue").ComputedRef<boolean>;
67
+ isIndeterminate: import("vue").ComputedRef<boolean>;
68
+ canFixLeft: (col: ColumnConfig) => boolean;
69
+ canFixRight: (col: ColumnConfig) => boolean;
70
+ initColumns: () => void;
71
+ buildCurrentConfig: () => StoredColumnConfig[];
72
+ applyConfigToTable: (configs: StoredColumnConfig[]) => Promise<void>;
73
+ loadStoredConfig: () => Promise<void>;
74
+ saveAndApply: () => Promise<void>;
75
+ resetToDefault: () => Promise<void>;
76
+ onResizableChange: (params: VxeTableDefines.ResizableChangeEventParams) => void;
77
+ checkHasStoredConfig: () => boolean;
78
+ updateSelectedOrder: (newOrder: ColumnConfig[]) => void;
79
+ onSelectAllChange: (val: boolean) => void;
80
+ onColumnVisibleChange: (col: ColumnConfig) => void;
81
+ onDragEnd: () => void;
82
+ moveToTop: (col: ColumnConfig, currentIndex: number) => void;
83
+ removeFromSelected: (col: ColumnConfig) => boolean;
84
+ toggleFixed: (col: ColumnConfig, direction: "left" | "right") => boolean;
85
+ onGroupSelectChange: (groupId: string, checked: boolean) => void;
86
+ getGroupCheckState: (groupId: string) => {
87
+ checked: boolean;
88
+ indeterminate: boolean;
89
+ };
90
+ };
@@ -8,3 +8,4 @@ export * from "./JcMoreQueryContain/index";
8
8
  export * from "./JcListLayout/index";
9
9
  export * from "./JcImportDialog/index";
10
10
  export * from "./JcImportButton/index";
11
+ export * from "./JcColumnConfig/index";