@ditari/bsui 5.0.1 → 5.0.3

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 (169) hide show
  1. package/dist/cjs/components/index.cjs +12 -7
  2. package/dist/cjs/components/index.cjs.map +1 -1
  3. package/dist/cjs/components/layout/Layout.vue.cjs +10 -0
  4. package/dist/cjs/components/layout/Layout.vue.cjs.map +1 -0
  5. package/dist/cjs/components/layout/Layout.vue2.cjs +144 -0
  6. package/dist/cjs/components/layout/Layout.vue2.cjs.map +1 -0
  7. package/dist/cjs/components/layout/{list.cjs → List.cjs} +18 -4
  8. package/dist/cjs/components/layout/List.cjs.map +1 -0
  9. package/dist/cjs/components/layout/Show.cjs +134 -0
  10. package/dist/cjs/components/layout/Show.cjs.map +1 -0
  11. package/dist/cjs/components/layout/components/layout/HeaderLayout.vue.cjs +10 -0
  12. package/dist/cjs/components/layout/components/layout/HeaderLayout.vue.cjs.map +1 -0
  13. package/dist/cjs/components/layout/components/layout/HeaderLayout.vue2.cjs +120 -0
  14. package/dist/cjs/components/layout/components/layout/HeaderLayout.vue2.cjs.map +1 -0
  15. package/dist/cjs/components/layout/components/layout/RouterContent.vue.cjs +10 -0
  16. package/dist/cjs/components/layout/components/layout/RouterContent.vue.cjs.map +1 -0
  17. package/dist/cjs/components/layout/components/layout/RouterContent.vue2.cjs +47 -0
  18. package/dist/cjs/components/layout/components/layout/RouterContent.vue2.cjs.map +1 -0
  19. package/dist/cjs/components/layout/components/menu/Menu.cjs +117 -0
  20. package/dist/cjs/components/layout/components/menu/Menu.cjs.map +1 -0
  21. package/dist/cjs/components/layout/index.cjs +16 -8
  22. package/dist/cjs/components/layout/index.cjs.map +1 -1
  23. package/dist/cjs/components/select/Select.vue.cjs +10 -0
  24. package/dist/cjs/components/select/Select.vue.cjs.map +1 -0
  25. package/dist/cjs/components/select/Select.vue2.cjs +105 -0
  26. package/dist/cjs/components/select/Select.vue2.cjs.map +1 -0
  27. package/dist/cjs/components/select/index.cjs +14 -0
  28. package/dist/cjs/components/select/index.cjs.map +1 -0
  29. package/dist/cjs/components/tab/Tab.vue.cjs +1 -1
  30. package/dist/cjs/components/tab/Tab.vue.cjs.map +1 -1
  31. package/dist/cjs/components/tab/Tab.vue2.cjs +92 -46
  32. package/dist/cjs/components/tab/Tab.vue2.cjs.map +1 -1
  33. package/dist/cjs/components/tab/index.cjs +1 -0
  34. package/dist/cjs/components/tab/index.cjs.map +1 -1
  35. package/dist/cjs/components/table/{table.cjs → Table.cjs} +2 -9
  36. package/dist/cjs/components/table/Table.cjs.map +1 -0
  37. package/dist/cjs/components/table/index.cjs +7 -6
  38. package/dist/cjs/components/table/index.cjs.map +1 -1
  39. package/dist/cjs/components/table/interface.cjs +1 -0
  40. package/dist/cjs/components/table/interface.cjs.map +1 -1
  41. package/dist/cjs/index.cjs +11 -6
  42. package/dist/cjs/index.cjs.map +1 -1
  43. package/dist/cjs/shims-vue.d.cjs +4 -0
  44. package/dist/cjs/shims-vue.d.cjs.map +1 -0
  45. package/dist/cjs/utils/useTheme.cjs +23 -0
  46. package/dist/cjs/utils/useTheme.cjs.map +1 -0
  47. package/dist/css/components/tab/style/index.css +1 -159
  48. package/dist/css/index.css +1 -159
  49. package/dist/esm/components/index.mjs +8 -3
  50. package/dist/esm/components/index.mjs.map +1 -1
  51. package/dist/esm/components/layout/Layout.vue.mjs +6 -0
  52. package/dist/esm/components/layout/Layout.vue.mjs.map +1 -0
  53. package/dist/esm/components/layout/Layout.vue2.mjs +140 -0
  54. package/dist/esm/components/layout/Layout.vue2.mjs.map +1 -0
  55. package/dist/esm/components/layout/{list.mjs → List.mjs} +18 -4
  56. package/dist/esm/components/layout/List.mjs.map +1 -0
  57. package/dist/esm/components/layout/Show.mjs +130 -0
  58. package/dist/esm/components/layout/Show.mjs.map +1 -0
  59. package/dist/esm/components/layout/components/layout/HeaderLayout.vue.mjs +6 -0
  60. package/dist/esm/components/layout/components/layout/HeaderLayout.vue.mjs.map +1 -0
  61. package/dist/esm/components/layout/components/layout/HeaderLayout.vue2.mjs +116 -0
  62. package/dist/esm/components/layout/components/layout/HeaderLayout.vue2.mjs.map +1 -0
  63. package/dist/esm/components/layout/components/layout/RouterContent.vue.mjs +6 -0
  64. package/dist/esm/components/layout/components/layout/RouterContent.vue.mjs.map +1 -0
  65. package/dist/esm/components/layout/components/layout/RouterContent.vue2.mjs +43 -0
  66. package/dist/esm/components/layout/components/layout/RouterContent.vue2.mjs.map +1 -0
  67. package/dist/esm/components/layout/components/menu/Menu.mjs +113 -0
  68. package/dist/esm/components/layout/components/menu/Menu.mjs.map +1 -0
  69. package/dist/esm/components/layout/index.mjs +12 -5
  70. package/dist/esm/components/layout/index.mjs.map +1 -1
  71. package/dist/esm/components/select/Select.vue.mjs +6 -0
  72. package/dist/esm/components/select/Select.vue.mjs.map +1 -0
  73. package/dist/esm/components/select/Select.vue2.mjs +101 -0
  74. package/dist/esm/components/select/Select.vue2.mjs.map +1 -0
  75. package/dist/esm/components/select/index.mjs +10 -0
  76. package/dist/esm/components/select/index.mjs.map +1 -0
  77. package/dist/esm/components/tab/Tab.vue.mjs +1 -1
  78. package/dist/esm/components/tab/Tab.vue.mjs.map +1 -1
  79. package/dist/esm/components/tab/Tab.vue2.mjs +94 -48
  80. package/dist/esm/components/tab/Tab.vue2.mjs.map +1 -1
  81. package/dist/esm/components/tab/index.mjs +1 -0
  82. package/dist/esm/components/tab/index.mjs.map +1 -1
  83. package/dist/esm/components/table/{table.mjs → Table.mjs} +3 -10
  84. package/dist/esm/components/table/Table.mjs.map +1 -0
  85. package/dist/esm/components/table/index.mjs +3 -2
  86. package/dist/esm/components/table/index.mjs.map +1 -1
  87. package/dist/esm/components/table/interface.mjs +1 -1
  88. package/dist/esm/index.mjs +6 -3
  89. package/dist/esm/index.mjs.map +1 -1
  90. package/dist/esm/shims-vue.d.mjs +2 -0
  91. package/dist/esm/shims-vue.d.mjs.map +1 -0
  92. package/dist/esm/utils/useTheme.mjs +21 -0
  93. package/dist/esm/utils/useTheme.mjs.map +1 -0
  94. package/dist/style/index.scss +1 -0
  95. package/dist/style/tab/style/index.scss +1 -1
  96. package/dist/{esm → types}/components/index.d.ts +2 -0
  97. package/dist/types/components/index.d.ts.map +1 -0
  98. package/dist/types/components/layout/Layout.vue.d.ts +56 -0
  99. package/dist/types/components/layout/Layout.vue.d.ts.map +1 -0
  100. package/dist/{cjs/components/layout/list.d.ts → types/components/layout/List.d.ts} +2 -2
  101. package/dist/types/components/layout/List.d.ts.map +1 -0
  102. package/dist/types/components/layout/Show.d.ts +18 -0
  103. package/dist/types/components/layout/Show.d.ts.map +1 -0
  104. package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts +28 -0
  105. package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts.map +1 -0
  106. package/dist/types/components/layout/components/layout/RouterContent.vue.d.ts +5 -0
  107. package/dist/types/components/layout/components/layout/RouterContent.vue.d.ts.map +1 -0
  108. package/dist/types/components/layout/components/menu/Menu.d.ts +3 -0
  109. package/dist/types/components/layout/components/menu/Menu.d.ts.map +1 -0
  110. package/dist/types/components/layout/index.d.ts +5 -0
  111. package/dist/types/components/layout/index.d.ts.map +1 -0
  112. package/dist/types/components/select/Select.vue.d.ts +97 -0
  113. package/dist/types/components/select/Select.vue.d.ts.map +1 -0
  114. package/dist/types/components/select/index.d.ts +3 -0
  115. package/dist/types/components/select/index.d.ts.map +1 -0
  116. package/dist/{cjs → types}/components/tab/Tab.vue.d.ts +10 -3
  117. package/dist/types/components/tab/Tab.vue.d.ts.map +1 -0
  118. package/dist/{cjs → types}/components/tab/index.d.ts +1 -0
  119. package/dist/types/components/tab/index.d.ts.map +1 -0
  120. package/dist/{cjs/components/table/table.d.ts → types/components/table/Table.d.ts} +8 -7
  121. package/dist/types/components/table/Table.d.ts.map +1 -0
  122. package/dist/types/components/table/index.d.ts +4 -0
  123. package/dist/types/components/table/index.d.ts.map +1 -0
  124. package/dist/{cjs → types}/components/table/interface.d.ts +1 -0
  125. package/dist/types/components/table/interface.d.ts.map +1 -0
  126. package/dist/{cjs → types}/index.d.ts +1 -0
  127. package/dist/types/index.d.ts.map +1 -0
  128. package/dist/types/utils/useTheme.d.ts +9 -0
  129. package/dist/types/utils/useTheme.d.ts.map +1 -0
  130. package/package.json +24 -6
  131. package/CHANGELOG.md +0 -7
  132. package/dist/cjs/components/index.d.ts +0 -3
  133. package/dist/cjs/components/layout/index.d.ts +0 -3
  134. package/dist/cjs/components/layout/list.cjs.map +0 -1
  135. package/dist/cjs/components/layout/show.cjs +0 -24
  136. package/dist/cjs/components/layout/show.cjs.map +0 -1
  137. package/dist/cjs/components/layout/show.d.ts +0 -5
  138. package/dist/cjs/components/table/index.d.ts +0 -3
  139. package/dist/cjs/components/table/table.cjs.map +0 -1
  140. package/dist/esm/components/layout/index.d.ts +0 -3
  141. package/dist/esm/components/layout/list.d.ts +0 -5
  142. package/dist/esm/components/layout/list.mjs.map +0 -1
  143. package/dist/esm/components/layout/show.d.ts +0 -5
  144. package/dist/esm/components/layout/show.mjs +0 -20
  145. package/dist/esm/components/layout/show.mjs.map +0 -1
  146. package/dist/esm/components/tab/Tab.vue.d.ts +0 -22
  147. package/dist/esm/components/tab/index.d.ts +0 -2
  148. package/dist/esm/components/table/index.d.ts +0 -3
  149. package/dist/esm/components/table/interface.d.ts +0 -45
  150. package/dist/esm/components/table/table.d.ts +0 -136
  151. package/dist/esm/components/table/table.mjs.map +0 -1
  152. package/dist/esm/index.d.ts +0 -7
  153. package/src/components/index.ts +0 -4
  154. package/src/components/layout/index.ts +0 -15
  155. package/src/components/layout/list.tsx +0 -137
  156. package/src/components/layout/show.tsx +0 -13
  157. package/src/components/readme.md +0 -4
  158. package/src/components/tab/Tab.vue +0 -105
  159. package/src/components/tab/index.ts +0 -9
  160. package/src/components/tab/style/index.scss +0 -176
  161. package/src/components/table/index.ts +0 -10
  162. package/src/components/table/interface.ts +0 -59
  163. package/src/components/table/table.tsx +0 -491
  164. package/src/index.scss +0 -1
  165. package/src/index.ts +0 -31
  166. package/tsconfig.app.json +0 -29
  167. package/tsconfig.json +0 -7
  168. package/tsconfig.node.json +0 -27
  169. package/vite.config.ts +0 -43
@@ -1,491 +0,0 @@
1
- import {
2
- computed,
3
- defineComponent,
4
- nextTick,
5
- onMounted,
6
- ref,
7
- watch
8
- } from "vue";
9
- import { type ExtractPropTypes, type PropType } from "vue";
10
- import { Flex, Pagination, Table, theme } from "ant-design-vue";
11
- import { type TablePaginationConfig } from "ant-design-vue";
12
-
13
- import { type PaginationProps } from "./interface";
14
- import { css } from "@emotion/css";
15
- import type { ColumnsType } from "ant-design-vue/es/table";
16
- import type {
17
- SelectionSelectFn,
18
- TableRowSelection
19
- } from "ant-design-vue/es/table/interface";
20
- import { merge } from "lodash";
21
-
22
- export type Key = string | number;
23
- export type SizeType = "small" | "middle" | "large" | undefined;
24
-
25
- // 定义分页
26
- interface Page {
27
- total: number;
28
- current: number;
29
- pageSize: number;
30
- }
31
-
32
- // 定义表格配置接口,支持泛型
33
- interface Config<T = unknown> {
34
- columns: ColumnsType<T>;
35
- // 分页
36
- pagination?: Page | undefined;
37
- // 分页配置
38
- paginationConfig?: PaginationProps;
39
- changePagination?: (current: number, size: number) => void;
40
- // 单击
41
- click?: (record: Record<string, unknown>, index: number) => void;
42
- // 双击
43
- dbClick?: (record: Record<string, unknown>, index: number) => void;
44
- // 选择框的默认属性配置
45
- getCheckboxProps?: (record: unknown) => Record<string, unknown> | undefined; // 返回一个对象或者 undefined
46
- // 点击行号激活的class
47
- activeRowClass?: string;
48
- // 复选框方式
49
- selection?: string;
50
- // 切换分页是否保留选中的ID
51
- keepSelected?: boolean;
52
- }
53
-
54
- // 定义 Props 类型,支持泛型
55
- export const tableProps = <T = unknown,>() => ({
56
- height: { type: Number, default: 0 },
57
- data: { type: Array as PropType<T[]>, default: () => [] }, // 泛型约束
58
- loading: { type: Boolean, default: false },
59
- rowKey: { type: String, default: "id" },
60
- bordered: { type: Boolean, default: false },
61
- size: { type: String as PropType<SizeType>, default: "small" },
62
- keys: { type: Array as PropType<Key[]>, default: () => [] },
63
- config: { type: Object as PropType<Config<T>>, required: true }
64
- });
65
-
66
- export type TableProps = Partial<
67
- ExtractPropTypes<ReturnType<typeof tableProps>>
68
- >;
69
-
70
- // 分页组件默认配置
71
- const defaultPaginationProps: PaginationProps = {
72
- defaultPageSize: 20,
73
- disabled: false,
74
- hideOnSinglePage: false,
75
- pageSize: 20,
76
- pageSizeOptions: ["20", "40", "60", "80", "99"],
77
- responsive: false,
78
- showLessItems: false,
79
- showQuickJumper: true,
80
- showSizeChanger: true, // 默认展示切换器
81
- showTotal: total => `总共 ${total} 条数据`,
82
- simple: false,
83
- size: "default",
84
- total: 0
85
- };
86
-
87
- // 表格默认配置
88
- const defaultConfig: Config = {
89
- columns: [],
90
- pagination: undefined,
91
- paginationConfig: defaultPaginationProps,
92
- activeRowClass: "",
93
- selection: "N",
94
- keepSelected: false
95
- };
96
-
97
- const paginationStyle = css`
98
- display: flex;
99
- justify-content: center;
100
- `;
101
-
102
- // 定义泛型组件
103
- const DTable = defineComponent({
104
- name: "DTable",
105
- props: tableProps(), // 初始泛型设置为 `unknown`
106
- emits: ["update:keys"],
107
- setup(props, { emit, slots }) {
108
- const { useToken } = theme;
109
- const { token } = useToken();
110
- console.log(token);
111
- // 保存选中的唯一id
112
- const selectedRowKeys = ref<Key[]>(props.keys || []);
113
- // 计算表格高度
114
- //const height = computed(() => props.height);
115
-
116
- const { columns, data, pagination } = useProps();
117
- const { tableSlots } = useSlots();
118
- const { paginationConfig, onPaginationChange } = usePagination();
119
- const { tableRef, tableHeight, antTableBodyRef } = useHeight();
120
- const rowSelection = useRowSelection();
121
-
122
- onMounted(() => {});
123
-
124
- /**
125
- * props计算属性处理
126
- */
127
- function useProps() {
128
- // 定义计算属性
129
- const _config = computed(() => merge({}, defaultConfig, props.config));
130
- const columns = computed(() => _config.value.columns);
131
- const data = computed(() => props.data || []);
132
- const pagination = computed(() => _config.value.pagination || false);
133
-
134
- return {
135
- columns,
136
- data,
137
- pagination
138
- };
139
- }
140
-
141
- /**
142
- * 插槽处理
143
- */
144
- function useSlots() {
145
- console.log(slots);
146
- // 定义插槽
147
- const tableSlots = {
148
- bodyCell: (params: unknown) => slots.bodyCell?.(params),
149
- summary: () => slots.summary?.()
150
- };
151
-
152
- return {
153
- tableSlots
154
- };
155
- }
156
-
157
- function useHeight() {
158
- const tableRef = ref();
159
- const tableHeight = ref(0);
160
- let headerHeight = 0,
161
- tableEl: HTMLElement;
162
-
163
- // 表格body对象
164
- const antTableBodyRef = ref<HTMLElement>();
165
-
166
- watch(
167
- () => props.height,
168
- val => {
169
- if (val !== 0) {
170
- nextTick(() => {
171
- _tableBodyHeight(val);
172
- });
173
- }
174
- },
175
- {
176
- immediate: true
177
- }
178
- );
179
-
180
- function _tableBodyHeight(height: number) {
181
- tableEl = tableRef?.value?.$el;
182
- //表头高度
183
- headerHeight = useEleHeight(
184
- tableEl.getElementsByClassName("ant-table-header")[0]
185
- );
186
- // 分页
187
- const paginationEl = tableEl.getElementsByClassName(
188
- "ant-pagination"
189
- )[0] as HTMLElement | undefined;
190
- let paginationHeight = 0;
191
- if (paginationEl) {
192
- paginationEl.style.marginBottom = "0";
193
- paginationHeight = useEleHeight(paginationEl as never) ?? 0;
194
- }
195
-
196
- //总结行
197
- let summaryHeight = 0;
198
- const summaryEl = tableEl.getElementsByClassName(
199
- "ant-table-summary"
200
- )[0] as HTMLElement | undefined;
201
- if (summaryEl) {
202
- summaryHeight = useEleHeight(summaryEl as HTMLElement) ?? 0;
203
- }
204
-
205
- tableHeight.value =
206
- height - paginationHeight - headerHeight - summaryHeight;
207
-
208
- antTableBodyRef.value = tableEl.getElementsByClassName(
209
- "ant-table-body"
210
- )[0] as HTMLElement;
211
-
212
- if (antTableBodyRef.value) {
213
- // 设置body高度
214
- antTableBodyRef.value.style.height = tableHeight.value + "px";
215
- //TODO antTableBodyRef 滚动到底部的时候,需要去除底部边框,否则边框会重叠
216
- //antTableBodyRef.value.style.borderBottom = "1px solid #f0f0f0";
217
- }
218
- }
219
-
220
- return {
221
- tableRef,
222
- tableHeight,
223
- antTableBodyRef
224
- };
225
- }
226
-
227
- function usePagination() {
228
- const { changePagination } = props.config!;
229
- const paginationConfig = computed<TablePaginationConfig>(() => {
230
- return {
231
- position: ["bottomCenter"], // 符合类型的分页位置
232
- total: 0, // 确保符合要求
233
- ...defaultPaginationProps,
234
- ...pagination.value
235
- };
236
- });
237
-
238
- const onPaginationChange = (page: number, pageSize: number) => {
239
- const { selection, keepSelected } = props.config!;
240
- changePagination?.(page, pageSize);
241
- // 切换分页的时候,表体滚动到顶部
242
- antTableBodyRef.value!.scrollTop = 0;
243
-
244
- // 如果当前为单选或未开启分页保留数据选中的数据都会被清除
245
- // 清空历史选中数据
246
- if (selection === "S" || !keepSelected) {
247
- // 只有selectedRowKeys被清空时,这里才触发update;
248
- // 不加判断,会出现执行update后,父组件监听的watch每次都会触发
249
- if (selectedRowKeys.value.length > 0) {
250
- selectedRowKeys.value = [];
251
- emit("update:keys", selectedRowKeys.value);
252
- }
253
- }
254
- };
255
-
256
- return {
257
- paginationConfig,
258
- onPaginationChange
259
- };
260
- }
261
-
262
- function useCustomRow() {
263
- return (record: never, index: number) => {
264
- // 用于存储 在某个事件内双击两次 则取消单击事件业务
265
- let clickTimeout: number = 0;
266
- const {
267
- rowKey,
268
- config: { click, dbClick, selection, getCheckboxProps } = {} as Config
269
- } = props;
270
-
271
- // 当前点击行的唯一ID,通过rowKey从record中取值
272
- const id = record[rowKey];
273
-
274
- /**
275
- * 处理单击事件业务
276
- * @param record 当前点击行数据
277
- */
278
- const onClick = () => {
279
- // 获取getCheckboxProps方法,如果不等于undefined,则执行方法获取disabled的值
280
- // 否则checkEnable为false
281
- const checkEnable =
282
- getCheckboxProps === undefined
283
- ? false
284
- : getCheckboxProps(record)?.disabled;
285
-
286
- if (selection === "N" || checkEnable) {
287
- // 1. 未开启复选框 则不处理数据选中操作
288
- // 2. 如果当前点击的行 包含在禁用的数据项目里面 则不进行选中操作
289
- // 3. checkEnable 用来判断复选框属性的值,如果当前的数据满足getCheckboxProps这个
290
- // 方法返回的disabled为true就不执行
291
- // 复选框选中的操作
292
- return;
293
- }
294
- const haveState = selectedRowKeys.value.some(
295
- (key: Key) => key === id
296
- );
297
- if (haveState) {
298
- //如果 当前点击行的ID 已存在 那么直接过滤掉当前的id
299
- selectedRowKeys.value = selectedRowKeys.value.filter(
300
- (key: Key) => key !== id
301
- );
302
- } else {
303
- if (selection === "S") {
304
- //单选的时候 清空选中的数据 再赋值新的ID
305
- selectedRowKeys.value = [];
306
- selectedRowKeys.value.push(id);
307
- } else {
308
- //多选直接追加ID
309
- selectedRowKeys.value.push(id);
310
- }
311
- }
312
- emit("update:keys", selectedRowKeys.value);
313
- };
314
-
315
- function activeRowBackground(event: Event) {
316
- const { activeRowClass } = props.config!;
317
- if (!activeRowClass) return;
318
- const curEl = event.target;
319
- if (curEl instanceof HTMLElement) {
320
- const parentElement = curEl.parentNode as HTMLElement;
321
- if (
322
- parentElement &&
323
- parentElement.classList.contains(activeRowClass)
324
- ) {
325
- parentElement.classList.remove(activeRowClass);
326
- } else {
327
- parentElement?.classList.add(activeRowClass);
328
- }
329
- }
330
- }
331
-
332
- return {
333
- onClick: (event: Event) => {
334
- clearTimeout(clickTimeout);
335
- clickTimeout = window.setTimeout(() => {
336
- // 处理背景激活逻辑
337
- activeRowBackground(event);
338
- // 处理单击事件业务
339
- onClick();
340
- // 回传数据 自定义单击后的业务
341
- click?.(record, index);
342
- }, 200);
343
- }, // 点击行
344
- onDblclick: () => {
345
- clearTimeout(clickTimeout);
346
- // 回传数据 自定义单击后的业务
347
- dbClick?.(record, index);
348
- }
349
- };
350
- };
351
- }
352
-
353
- function useRowSelection() {
354
- const rowSelection = ref<TableRowSelection<unknown> | undefined>(
355
- undefined
356
- );
357
-
358
- const { rowKey, config: { getCheckboxProps, selection } = {} } = props;
359
-
360
- const onSelect: SelectionSelectFn<unknown> = (record, selected) => {
361
- const data = record as Record<string, never>;
362
- if (selection === "S") {
363
- selectedRowKeys.value = [];
364
- selectedRowKeys.value = selected ? [data[rowKey]] : [];
365
- } else {
366
- selectedRowKeys.value = selected
367
- ? selectedRowKeys.value.concat(data[rowKey])
368
- : selectedRowKeys.value.filter((key: Key) => key !== data[rowKey]);
369
- }
370
- emit("update:keys", selectedRowKeys.value);
371
- };
372
-
373
- const onChange = (rowKeys: Key[], selectedRows: unknown[]) => {
374
- // 显式转换 selectedRows 的类型为 Record<string, never>[]
375
- const data = selectedRows as Record<string, never>[];
376
- // 等于0 说明是取消全选,反之
377
- const selected = data.length !== 0;
378
- // 显式转换 _ids 的类型为 Key[]
379
- const _ids: Key[] = props.data.map(
380
- record => (record as Record<string, unknown>)[rowKey] as Key
381
- );
382
-
383
- // 更新 selectedRowKeys
384
- // selected 为true,说明是全选,那么rowKeys是权限后的数组ID,需要过滤掉selectedRowKeys里的不在id才进行添加,
385
- // 否则会出现,比如一开始选择了两条数据,然后再进行全选的话 会多出两个重复ID
386
- // selected 为false,说明是取消全选,那么需要从selectedRowKeys过滤掉 _ids的id
387
- selectedRowKeys.value = selected
388
- ? selectedRowKeys.value.concat(
389
- rowKeys.filter((key: Key) => !selectedRowKeys.value.includes(key))
390
- )
391
- : selectedRowKeys.value.filter((key: Key) => !_ids.includes(key));
392
-
393
- emit("update:keys", selectedRowKeys.value);
394
- };
395
-
396
- // 监听父组件手动改变keys 重新赋值给 表格选中变量selectedRowKeys
397
- // 否则父组件 改变keys后当前selectedRowKeys还是原来的值
398
- watch(
399
- () => props.keys,
400
- val => {
401
- selectedRowKeys.value = val;
402
- }
403
- );
404
-
405
- watch(
406
- () => props.config?.selection,
407
- val => {
408
- if (val !== "N") {
409
- rowSelection.value = {
410
- selectedRowKeys: selectedRowKeys as never,
411
- onSelect,
412
- onChange,
413
- fixed: true,
414
- columnTitle: selection === "S" ? "选择" : null,
415
- columnWidth: selection === "S" ? 60 : 40,
416
- getCheckboxProps: getCheckboxProps as never
417
- };
418
- } else {
419
- rowSelection.value = undefined;
420
- }
421
- },
422
- {
423
- immediate: true
424
- }
425
- );
426
-
427
- return rowSelection;
428
- }
429
-
430
- return () => (
431
- <Flex vertical={true} ref={tableRef}>
432
- <Table
433
- loading={props.loading}
434
- size={props.size}
435
- bordered={props.bordered}
436
- dataSource={data.value}
437
- columns={columns.value}
438
- rowSelection={rowSelection.value}
439
- customRow={useCustomRow() as never}
440
- pagination={false}
441
- rowKey={props.rowKey}
442
- v-slots={tableSlots}
443
- scroll={{
444
- y: tableHeight.value,
445
- x: "100%",
446
- scrollToFirstRowOnChange: true
447
- }}
448
- />
449
- <div class={paginationStyle}>
450
- {pagination && (
451
- <Pagination
452
- style={{ marginTop: "16px" }}
453
- v-model:current={paginationConfig.value.current}
454
- v-model:pageSize={paginationConfig.value.pageSize}
455
- total={paginationConfig.value.total}
456
- disabled={props.loading}
457
- show-size-changer
458
- size={"default"}
459
- hide-on-single-page={paginationConfig.value.hideOnSinglePage}
460
- show-quick-jumper={paginationConfig.value.showQuickJumper}
461
- default-page-size={paginationConfig.value.defaultPageSize}
462
- page-size-options={paginationConfig.value.pageSizeOptions}
463
- show-total={paginationConfig.value.showTotal}
464
- onChange={onPaginationChange}
465
- ></Pagination>
466
- )}
467
- </div>
468
- </Flex>
469
- );
470
- }
471
- });
472
-
473
- export const useEleHeight = (node: Element) => {
474
- const list = [
475
- "margin-top",
476
- "margin-bottom",
477
- "border-top",
478
- "border-bottom",
479
- "padding-top",
480
- "padding-bottom",
481
- "height"
482
- ];
483
- const style = getComputedStyle(node);
484
- return list
485
- .map(k => parseInt(style.getPropertyValue(k), 10))
486
- .reduce((prev, cur) => {
487
- return prev + cur;
488
- });
489
- };
490
-
491
- export default DTable;
package/src/index.scss DELETED
@@ -1 +0,0 @@
1
- @use "./components/tab/style" as *;
package/src/index.ts DELETED
@@ -1,31 +0,0 @@
1
- import * as components from "./components";
2
- import type { App, DefineComponent, Plugin } from "vue";
3
-
4
- // import { version } from "../package.json";
5
-
6
- export * from "./components";
7
-
8
- console.log(components);
9
- // 定义组件类型,确保每个组件都可能具有 `install` 方法
10
- type ComponentWithInstall = DefineComponent<never, never, never> & {
11
- install?: (app: App) => void;
12
- };
13
-
14
- export const install = (app: App) => {
15
- Object.keys(components).forEach(key => {
16
- const component = components[
17
- key as keyof typeof components
18
- ] as ComponentWithInstall;
19
- // 类型断言,告诉 TypeScript component 可能是一个插件
20
- const plugin = component as Plugin;
21
- // 如果组件有 install 方法,则按插件安装
22
- if (plugin.install) {
23
- app.use(plugin);
24
- }
25
- });
26
- };
27
-
28
- export default {
29
- // version,
30
- install
31
- };
package/tsconfig.app.json DELETED
@@ -1,29 +0,0 @@
1
- {
2
- "extends": "@vue/tsconfig/tsconfig.json",
3
- "compilerOptions": {
4
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
5
- /* Linting */
6
- "strict": true,
7
- "noEmit": true,
8
- "noUnusedLocals": true,
9
- "noUnusedParameters": true,
10
- "noFallthroughCasesInSwitch": true,
11
- "noUncheckedSideEffectImports": true,
12
- "baseUrl": "./",
13
- "paths": {
14
- "@/*": [
15
- "src/*"
16
- ]
17
- }
18
- },
19
- "include": [
20
- "src/**/*.ts",
21
- "src/**/*.d.ts",
22
- "src/**/*.tsx",
23
- "src/**/*.vue"
24
- ],
25
- "exclude": [
26
- "node_modules",
27
- "dist"
28
- ]
29
- }
package/tsconfig.json DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "files": [],
3
- "references": [
4
- { "path": "./tsconfig.app.json" },
5
- { "path": "./tsconfig.node.json" }
6
- ]
7
- }
@@ -1,27 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
- "target": "ESNext",
5
- "lib": [
6
- "dom",
7
- "ESNext"
8
- ],
9
- "module": "ESNext",
10
- "skipLibCheck": true,
11
- /* Bundler mode */
12
- "moduleResolution": "bundler",
13
- "allowImportingTsExtensions": true,
14
- "isolatedModules": true,
15
- "moduleDetection": "force",
16
- "noEmit": true,
17
- /* Linting */
18
- "strict": true,
19
- "noUnusedLocals": true,
20
- "noUnusedParameters": true,
21
- "noFallthroughCasesInSwitch": true,
22
- "noUncheckedSideEffectImports": true
23
- },
24
- "include": [
25
- "vite.config.ts"
26
- ]
27
- }
package/vite.config.ts DELETED
@@ -1,43 +0,0 @@
1
- import vue from "@vitejs/plugin-vue";
2
- import pluginVueJsx from "@vitejs/plugin-vue-jsx";
3
- import { resolve } from "path";
4
- import { defineConfig } from "vite";
5
-
6
- export default defineConfig({
7
- build: {
8
- lib: {
9
- // 设置库的名称和入口文件
10
- name: "ui-library",
11
- entry: resolve(__dirname, "./src/index.ts")
12
- },
13
- rollupOptions: {
14
- // 输出配置
15
- output: [
16
- {
17
- format: "esm", // ESM 格式
18
- dir: resolve(__dirname, "./dist/esm"), // ESM 模块的输出目录
19
- preserveModules: true, // 保持模块化
20
- entryFileNames: `[name].js`, // 每个组件的输出文件名
21
- chunkFileNames: `[name].js`,
22
- preserveModulesRoot: "src" // 保持源文件目录结构
23
- },
24
- {
25
- format: "cjs", // CommonJS 格式
26
- dir: resolve(__dirname, "./dist/cjs"),
27
- preserveModules: true,
28
- entryFileNames: `[name].js`,
29
- chunkFileNames: `[name].js`,
30
- exports: "named",
31
- preserveModulesRoot: "src" // 保持源文件目录结构
32
- }
33
- ],
34
- external: ["vue", "lodash"] // 外部依赖,避免被打包到库中
35
- }
36
- },
37
- resolve: {
38
- alias: {
39
- "@": resolve(__dirname, "./src")
40
- }
41
- },
42
- plugins: [vue(), pluginVueJsx()]
43
- });