@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,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, {}, HTMLDivElement, 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 { PropType } from 'vue';
2
+ import { VxeTableInstance, VxeTableDefines } from 'vxe-table';
3
+ import { 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, {}, HTMLDivElement>;
104
+ export default _default;
@@ -0,0 +1,25 @@
1
+ import { StoredColumnConfig, TableColumnStorage } from './types';
2
+ /**
3
+ * 获取存储键
4
+ */
5
+ export declare const getStorageKey: (tableId: string, prefix: string) => string;
6
+ /**
7
+ * 读取存储
8
+ */
9
+ export declare const getStorage: (tableId: string, prefix: string) => TableColumnStorage | null;
10
+ /**
11
+ * 保存存储
12
+ */
13
+ export declare const setStorage: (tableId: string, prefix: string, columns: StoredColumnConfig[]) => void;
14
+ /**
15
+ * 删除存储
16
+ */
17
+ export declare const removeStorage: (tableId: string, prefix: string) => void;
18
+ /**
19
+ * 更新单列宽度(增量更新)
20
+ */
21
+ export declare const updateColumnWidth: (tableId: string, prefix: string, field: string, width: number, allColumnsForFallback?: StoredColumnConfig[]) => void;
22
+ /**
23
+ * 检查是否有存储配置
24
+ */
25
+ export declare const hasStorage: (tableId: string, prefix: string) => boolean;
@@ -0,0 +1,98 @@
1
+ import { VxeTableInstance, VxeTableDefines } from 'vxe-table';
2
+ /**
3
+ * 外部传入的列分组配置(简化版)
4
+ */
5
+ export interface ColumnGroupConfig {
6
+ /** 分组标题 */
7
+ title: string;
8
+ /** 分组下的字段列表 */
9
+ fields: string[];
10
+ }
11
+ /**
12
+ * 内部使用的列分组(带 id)
13
+ */
14
+ export interface ColumnGroup extends ColumnGroupConfig {
15
+ /** 分组唯一标识(自动生成) */
16
+ id: string;
17
+ /** 是否为默认分组([基础信息]) */
18
+ isDefault?: boolean;
19
+ }
20
+ /**
21
+ * 存储的列配置(持久化到 localStorage)
22
+ */
23
+ export interface StoredColumnConfig {
24
+ /** 列字段名(唯一标识) */
25
+ field: string;
26
+ /** 是否可见 */
27
+ visible: boolean;
28
+ /** 固定方向 */
29
+ fixed?: 'left' | 'right';
30
+ /** 列宽(像素) */
31
+ width?: number;
32
+ /** 排序序号 */
33
+ sortNumber: number;
34
+ }
35
+ /**
36
+ * 完整存储结构
37
+ */
38
+ export interface TableColumnStorage {
39
+ /** 存储版本(用于兼容性升级) */
40
+ version: number;
41
+ /** 最后更新时间戳 */
42
+ timestamp: number;
43
+ /** 列配置数组 */
44
+ columns: StoredColumnConfig[];
45
+ }
46
+ /**
47
+ * 组件内部使用的列配置(扩展自 StoredColumnConfig)
48
+ */
49
+ export interface ColumnConfig extends StoredColumnConfig {
50
+ /** 列标题 */
51
+ title: string;
52
+ /** 是否锁定可见性(由 lockFieldList 决定) */
53
+ visibleLocked: boolean;
54
+ /** 原始索引(用于判断顺序是否变化) */
55
+ originalIndex: number;
56
+ /** 所属分组ID */
57
+ groupId?: string;
58
+ }
59
+ /**
60
+ * 组件 Props 类型
61
+ */
62
+ export interface ToolbarColumnConfigV2Props {
63
+ /** 表格实例(必需) */
64
+ table: VxeTableInstance | null;
65
+ /** 锁定不能隐藏的字段列表 */
66
+ lockFieldList?: string[];
67
+ /** 最大固定列数(左右合计) */
68
+ maxFixedCount?: number;
69
+ /** 每个字段项的宽度 */
70
+ itemWidth?: number;
71
+ /** 抽屉宽度 */
72
+ drawerWidth?: string;
73
+ /** 存储键前缀 */
74
+ storagePrefix?: string;
75
+ /** 列分组配置(可选) */
76
+ columnGroups?: ColumnGroupConfig[];
77
+ /** 默认可见的字段列表(仅这些字段可见,其他隐藏) */
78
+ defaultVisibleFields?: string[];
79
+ }
80
+ /**
81
+ * 组件暴露的方法
82
+ */
83
+ export interface ToolbarColumnConfigV2Expose {
84
+ /** 加载存储配置并应用到表格 */
85
+ loadStoredConfig: () => Promise<void>;
86
+ /** 恢复默认配置 */
87
+ resetToDefault: () => Promise<void>;
88
+ /** 保存并应用配置 */
89
+ saveAndApply: () => Promise<void>;
90
+ /** 打开配置抽屉 */
91
+ openDrawer: () => void;
92
+ /** 关闭配置抽屉 */
93
+ closeDrawer: () => void;
94
+ /** 处理列宽变化事件 */
95
+ onResizableChange: (params: VxeTableDefines.ResizableChangeEventParams) => void;
96
+ /** 检查是否有存储配置 */
97
+ hasStoredConfig: () => boolean;
98
+ }
@@ -0,0 +1,87 @@
1
+ import { Ref } from 'vue';
2
+ import { VxeTableInstance, VxeTableDefines } from 'vxe-table';
3
+ import { ColumnConfig, ColumnGroup, ColumnGroupConfig, StoredColumnConfig } from './types';
4
+ export interface UseColumnConfigOptions {
5
+ table: Ref<VxeTableInstance | null | undefined>;
6
+ lockFieldList: Ref<string[]>;
7
+ maxFixedCount: Ref<number>;
8
+ storagePrefix: Ref<string>;
9
+ columnGroupsConfig: Ref<ColumnGroupConfig[]>;
10
+ /** 默认可见的字段列表(仅这些字段可见,其他隐藏) */
11
+ defaultVisibleFields: Ref<string[]>;
12
+ }
13
+ export declare function useColumnConfig(options: UseColumnConfigOptions): {
14
+ allColumns: Ref<{
15
+ title: string;
16
+ visibleLocked: boolean;
17
+ originalIndex: number;
18
+ groupId?: string | undefined;
19
+ field: string;
20
+ visible: boolean;
21
+ fixed?: "left" | "right" | undefined;
22
+ width?: number | undefined;
23
+ sortNumber: number;
24
+ }[], ColumnConfig[] | {
25
+ title: string;
26
+ visibleLocked: boolean;
27
+ originalIndex: number;
28
+ groupId?: string | undefined;
29
+ field: string;
30
+ visible: boolean;
31
+ fixed?: "left" | "right" | undefined;
32
+ width?: number | undefined;
33
+ sortNumber: number;
34
+ }[]>;
35
+ columnGroups: Ref<{
36
+ id: string;
37
+ isDefault?: boolean | undefined;
38
+ title: string;
39
+ fields: string[];
40
+ }[], ColumnGroup[] | {
41
+ id: string;
42
+ isDefault?: boolean | undefined;
43
+ title: string;
44
+ fields: string[];
45
+ }[]>;
46
+ originalOrder: Ref<string[], string[]>;
47
+ filteredColumns: import('vue').ComputedRef<ColumnConfig[]>;
48
+ selectedColumns: import('vue').ComputedRef<{
49
+ title: string;
50
+ visibleLocked: boolean;
51
+ originalIndex: number;
52
+ groupId?: string | undefined;
53
+ field: string;
54
+ visible: boolean;
55
+ fixed?: "left" | "right" | undefined;
56
+ width?: number | undefined;
57
+ sortNumber: number;
58
+ }[]>;
59
+ selectedCount: import('vue').ComputedRef<number>;
60
+ leftFixedCount: import('vue').ComputedRef<number>;
61
+ rightFixedCount: import('vue').ComputedRef<number>;
62
+ totalFixedCount: import('vue').ComputedRef<number>;
63
+ selectAll: import('vue').ComputedRef<boolean>;
64
+ isIndeterminate: import('vue').ComputedRef<boolean>;
65
+ canFixLeft: (col: ColumnConfig) => boolean;
66
+ canFixRight: (col: ColumnConfig) => boolean;
67
+ initColumns: () => void;
68
+ buildCurrentConfig: () => StoredColumnConfig[];
69
+ applyConfigToTable: (configs: StoredColumnConfig[]) => Promise<void>;
70
+ loadStoredConfig: () => Promise<void>;
71
+ saveAndApply: () => Promise<void>;
72
+ resetToDefault: () => Promise<void>;
73
+ onResizableChange: (params: VxeTableDefines.ResizableChangeEventParams) => void;
74
+ checkHasStoredConfig: () => boolean;
75
+ updateSelectedOrder: (newOrder: ColumnConfig[]) => void;
76
+ onSelectAllChange: (val: boolean) => void;
77
+ onColumnVisibleChange: (col: ColumnConfig) => void;
78
+ onDragEnd: () => void;
79
+ moveToTop: (col: ColumnConfig, currentIndex: number) => void;
80
+ removeFromSelected: (col: ColumnConfig) => boolean;
81
+ toggleFixed: (col: ColumnConfig, direction: "left" | "right") => boolean;
82
+ onGroupSelectChange: (groupId: string, checked: boolean) => void;
83
+ getGroupCheckState: (groupId: string) => {
84
+ checked: boolean;
85
+ indeterminate: boolean;
86
+ };
87
+ };
@@ -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';
@@ -12,6 +12,7 @@ declare module "@vue/runtime-core" {
12
12
  JcListLayout: typeof components.JcListLayout;
13
13
  JcImportDialog: typeof components.JcImportDialog;
14
14
  JcImportButton: typeof components.JcImportButton;
15
+ JcColumnConfig: typeof components.JcColumnConfig;
15
16
 
16
17
  // Global component extensions
17
18
  [key: `Jc${string}`]: import("vue").DefineComponent;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bscjc/webui",
3
3
  "private": false,
4
- "version": "1.3.0",
4
+ "version": "1.4.1",
5
5
  "type": "module",
6
6
  "main": "./dist/lib/index.cjs",
7
7
  "module": "./dist/es/index.mjs",
@@ -37,14 +37,17 @@
37
37
  "prepare": "npm run build"
38
38
  },
39
39
  "dependencies": {
40
- "@vueuse/shared": "^13.4.0",
41
40
  "fuse.js": "^7.1.0",
42
41
  "vue-virtual-scroller": "^2.0.0-beta.8"
43
42
  },
44
43
  "peerDependencies": {
45
44
  "@element-plus/icons-vue": ">=2.0.0",
45
+ "@vueuse/shared": ">=10.0.0",
46
46
  "element-plus": ">=2.0.0",
47
- "vue": ">=3.2.0"
47
+ "lodash-es": ">=4.0.0",
48
+ "vue": ">=3.2.0",
49
+ "vuedraggable": ">=4.0.0",
50
+ "vxe-table": ">=4.0.0"
48
51
  },
49
52
  "devDependencies": {
50
53
  "@types/node": "^24.0.7",
@@ -52,5 +55,5 @@
52
55
  "cssnano": "^7.0.7",
53
56
  "unplugin-element-plus": "^0.10.0"
54
57
  },
55
- "gitHead": "8ad3604e29dd684fff35e2c9a7de13aa7176dfdd"
58
+ "gitHead": "1e9d673f933fc2ff528d6faedf03d43b46a1a437"
56
59
  }