@ditari/bsui 5.1.23 → 5.1.24

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 (32) hide show
  1. package/dist/cjs/components/card/Card.cjs +8 -2
  2. package/dist/cjs/components/card/Card.cjs.map +1 -1
  3. package/dist/cjs/components/card/Card.d.ts +11 -1
  4. package/dist/cjs/components/card/style.cjs +20 -8
  5. package/dist/cjs/components/card/style.cjs.map +1 -1
  6. package/dist/cjs/components/table/Table.cjs +45 -0
  7. package/dist/cjs/components/table/Table.cjs.map +1 -1
  8. package/dist/cjs/components/table-form/TableFormItem.cjs +18 -6
  9. package/dist/cjs/components/table-form/TableFormItem.cjs.map +1 -1
  10. package/dist/cjs/components/table-form/style.cjs +82 -50
  11. package/dist/cjs/components/table-form/style.cjs.map +1 -1
  12. package/dist/cjs/components/table-form/style.d.ts +0 -3
  13. package/dist/esm/components/card/Card.d.ts +11 -1
  14. package/dist/esm/components/card/Card.mjs +8 -2
  15. package/dist/esm/components/card/Card.mjs.map +1 -1
  16. package/dist/esm/components/card/style.mjs +20 -8
  17. package/dist/esm/components/card/style.mjs.map +1 -1
  18. package/dist/esm/components/table/Table.mjs +45 -0
  19. package/dist/esm/components/table/Table.mjs.map +1 -1
  20. package/dist/esm/components/table-form/TableFormItem.mjs +18 -6
  21. package/dist/esm/components/table-form/TableFormItem.mjs.map +1 -1
  22. package/dist/esm/components/table-form/style.d.ts +0 -3
  23. package/dist/esm/components/table-form/style.mjs +82 -50
  24. package/dist/esm/components/table-form/style.mjs.map +1 -1
  25. package/dist/types/components/card/Card.d.ts +11 -1
  26. package/dist/types/components/card/Card.d.ts.map +1 -1
  27. package/dist/types/components/card/style.d.ts.map +1 -1
  28. package/dist/types/components/table/Table.d.ts.map +1 -1
  29. package/dist/types/components/table-form/TableFormItem.d.ts.map +1 -1
  30. package/dist/types/components/table-form/style.d.ts +0 -3
  31. package/dist/types/components/table-form/style.d.ts.map +1 -1
  32. package/package.json +1 -1
@@ -10,111 +10,143 @@ const useFormItemStyle = (styles, _token) => {
10
10
  borderColor,
11
11
  focusBorderColor
12
12
  } = styles;
13
- const boxShadowStyle = `0 0 0 1px ${focusBorderColor}`;
14
- const inputFocusStyles = `
15
- &:focus{
16
- box-shadow: ${boxShadowStyle};
17
- }
13
+ const token = _token.value;
14
+ const horizontalPadding = `${token.paddingSM}px`;
15
+ const textColor = token.colorText;
16
+ const focusStyle = `
17
+ outline: 1px solid ${focusBorderColor} !important;
18
+ outline-offset: -1px !important;
19
+ z-index: 10;
20
+ position: relative;
21
+ `;
22
+ const errorStyle = `
23
+ outline: 1px solid ${token.colorError} !important;
24
+ outline-offset: -1px !important;
25
+ z-index: 10;
26
+ position: relative;
18
27
  `;
19
28
  return {
20
29
  cellBorderStyle: css.css`
21
- //min-height: ${rowHeight}px;
22
- /* 现有单元格边框 */
23
30
  border-right: 1px solid ${borderColor};
24
31
  border-bottom: 1px solid ${borderColor};
32
+ overflow: hidden;
33
+ position: relative;
25
34
 
26
35
  .ant-form-item {
27
- height: 100%;
28
36
  margin-bottom: 0 !important;
29
-
37
+ height: 100%;
30
38
  .ant-form-item-row {
31
39
  height: 100%;
32
40
 
33
41
  .ant-form-item-label {
34
- height: 100%;
42
+ //height: 100%;
35
43
  border-right: 1px solid ${borderColor};
36
44
  background-color: ${labelBgColor};
37
-
45
+ display: flex;
46
+ align-items: center;
47
+ justify-content: flex-end;
38
48
  & > label {
39
- height: ${rowHeight}px;
40
49
  }
41
50
  }
42
51
 
43
52
  .ant-form-item-control-input {
44
- height: 100%;
45
-
53
+ min-height: ${rowHeight}px;
46
54
  .ant-form-item-control-input-content {
47
55
  display: flex;
48
56
  align-items: center;
49
57
  height: 100%;
50
58
 
51
- .ant-radio-group {
52
- margin-left: 10px;
53
- }
54
-
59
+ // 基础组件宽高
55
60
  input,
56
61
  .ant-picker,
57
62
  .ant-select,
58
63
  .ant-input-number,
59
- .ant-input-number-input-wrap {
64
+ .ant-select-selector,
65
+ .ant-input-number-input-wrap,
66
+ .ant-mentions textarea {
60
67
  width: 100%;
61
- height: 100%;
68
+ height: ${rowHeight}px;
62
69
  }
63
- .ant-select-selector {
64
- display: flex;
65
- align-items: center;
66
- height: 100%;
70
+
71
+ .ant-mentions textarea {
72
+ line-height: ${rowHeight}px;
67
73
  }
68
74
  }
69
75
  }
70
76
 
77
+ // ⭐️ 统一重置:移除 AntD 默认边框和阴影,设置直角
71
78
  .ant-input,
72
79
  .ant-select-selector,
73
80
  .ant-input-number,
74
- .ant-picker {
75
- border: 0;
76
- border-radius: 0;
81
+ .ant-picker,
82
+ .ant-mentions {
83
+ border: 0 !important;
84
+ box-shadow: none !important;
85
+ border-radius: 0 !important;
86
+ background: transparent !important;
87
+ transition: none !important;
88
+ }
77
89
 
78
- ${inputFocusStyles}
79
- // 数字输入框要单独处理
80
- .ant-input-number-input {
81
- border: 0;
82
- border-radius: 0;
83
- ${inputFocusStyles};
84
- }
90
+ // ⭐️ 只有在获取焦点时才添加边框(使用 outline)
91
+ // 1. 普通 Input
92
+ .ant-input:focus,
93
+ .ant-mentions textarea:focus {
94
+ ${focusStyle}
95
+ }
96
+ // 2. Select (AntD 聚焦类在 selector 上)
97
+ .ant-select-focused .ant-select-selector {
98
+ ${focusStyle}
99
+ }
100
+ // 3. DatePicker
101
+ .ant-picker-focused {
102
+ ${focusStyle}
103
+ }
104
+ // 4. InputNumber (外层容器聚焦)
105
+ .ant-input-number-focused {
106
+ ${focusStyle}
85
107
  }
86
108
 
87
- .ant-picker-focused,
88
- .ant-select-focused {
89
- box-shadow: ${boxShadowStyle};
109
+ // 修正 InputNumber 内部结构线
110
+ .ant-input-number-handler-wrap {
111
+ border-left: 0;
112
+ background: transparent;
90
113
  }
91
114
 
92
- .ant-input[disabled] {
93
- ${inputFocusStyles}
115
+ // 文本居中处理
116
+ .ant-select-selector {
117
+ padding: 0 ${horizontalPadding} !important;
118
+ display: flex !important;
119
+ align-items: center !important;
120
+ }
121
+ .ant-input,
122
+ .ant-input-number-input,
123
+ .ant-mentions textarea {
124
+ padding: 0 ${horizontalPadding} !important;
94
125
  }
95
126
  }
96
127
 
97
- .ant-input-status-error,
98
- .ant-picker-status-error,
99
- .ant-select-status-error {
100
- box-shadow: 0 0 0 1px red;
101
- border-radius: 0;
128
+ // ⭐️ 错误状态的处理
129
+ &.ant-form-item-has-error {
130
+ .ant-input,
131
+ .ant-select-selector,
132
+ .ant-input-number,
133
+ .ant-picker {
134
+ ${errorStyle}
135
+ }
102
136
  }
103
137
  }
104
138
  `,
105
139
  valueDisplayClass: css.css`
106
140
  width: 100%;
107
- height: 100%;
108
141
  display: flex;
109
- padding-left: 11px;
110
142
  align-items: center;
143
+ padding-left: ${horizontalPadding};
144
+ color: ${textColor};
145
+ box-sizing: border-box;
111
146
  `,
112
- // 内部元素:实现文本溢出
113
147
  textWrapperClass: css.css`
114
- /* ⭐️ 核心修复:确保内部元素可以被压缩,且强制文本在一行 */
115
- flex-grow: 1; /* 占据可用空间 */
148
+ flex-grow: 1;
116
149
  min-width: 0;
117
-
118
150
  white-space: nowrap;
119
151
  overflow: hidden;
120
152
  text-overflow: ellipsis;
@@ -1 +1 @@
1
- {"version":3,"file":"style.cjs","sources":["../../../../src/components/table-form/style.ts"],"sourcesContent":["import { ComputedRef } from \"vue\";\r\n\r\nimport { StylesConfig } from \"./interface\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\n/**\r\n * 表单项样式\r\n */\r\nexport const useFormItemStyle = (\r\n styles: StylesConfig,\r\n _token: ComputedRef<GlobalToken>\r\n) => {\r\n const {\r\n rowHeight,\r\n labelBgColor,\r\n borderColor,\r\n focusBorderColor\r\n } = styles;\r\n //TODO _token 后续得兼容下主题色\r\n const boxShadowStyle = `0 0 0 1px ${focusBorderColor}`;\r\n const inputFocusStyles = `\r\n &:focus{\r\n box-shadow: ${boxShadowStyle};\r\n }\r\n `;\r\n\r\n return {\r\n cellBorderStyle: css`\r\n //min-height: ${rowHeight}px;\r\n /* 现有单元格边框 */\r\n border-right: 1px solid ${borderColor};\r\n border-bottom: 1px solid ${borderColor};\r\n\r\n .ant-form-item {\r\n height: 100%;\r\n margin-bottom: 0 !important;\r\n\r\n .ant-form-item-row {\r\n height: 100%;\r\n\r\n .ant-form-item-label {\r\n height: 100%;\r\n border-right: 1px solid ${borderColor};\r\n background-color: ${labelBgColor};\r\n\r\n & > label {\r\n height: ${rowHeight}px;\r\n }\r\n }\r\n\r\n .ant-form-item-control-input {\r\n height: 100%;\r\n\r\n .ant-form-item-control-input-content {\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n\r\n .ant-radio-group {\r\n margin-left: 10px;\r\n }\r\n\r\n input,\r\n .ant-picker,\r\n .ant-select,\r\n .ant-input-number,\r\n .ant-input-number-input-wrap {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n .ant-select-selector {\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n }\r\n }\r\n }\r\n\r\n .ant-input,\r\n .ant-select-selector,\r\n .ant-input-number,\r\n .ant-picker {\r\n border: 0;\r\n border-radius: 0;\r\n\r\n ${inputFocusStyles}\r\n // 数字输入框要单独处理\r\n .ant-input-number-input {\r\n border: 0;\r\n border-radius: 0;\r\n ${inputFocusStyles};\r\n }\r\n }\r\n\r\n .ant-picker-focused,\r\n .ant-select-focused {\r\n box-shadow: ${boxShadowStyle};\r\n }\r\n\r\n .ant-input[disabled] {\r\n ${inputFocusStyles}\r\n }\r\n }\r\n\r\n .ant-input-status-error,\r\n .ant-picker-status-error,\r\n .ant-select-status-error {\r\n box-shadow: 0 0 0 1px red;\r\n border-radius: 0;\r\n }\r\n }\r\n `,\r\n valueDisplayClass: css`\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n padding-left: 11px;\r\n align-items: center;\r\n `,\r\n // 内部元素:实现文本溢出\r\n textWrapperClass: css`\r\n /* ⭐️ 核心修复:确保内部元素可以被压缩,且强制文本在一行 */\r\n flex-grow: 1; /* 占据可用空间 */\r\n min-width: 0;\r\n\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n `\r\n };\r\n};\r\n"],"names":["css"],"mappings":";;;;;AASO,MAAM,gBAAA,GAAmB,CAC9B,MAAA,EACA,MAAA,KACG;AACH,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAA;AAEJ,EAAA,MAAM,cAAA,GAAiB,cAAc,gBAAgB,CAAA,CAAA;AACrD,EAAA,MAAM,gBAAA,GAAmB;AAAA;AAAA,kBAAA,EAEP,cAAc,CAAA;AAAA;AAAA,EAAA,CAAA;AAIhC,EAAA,OAAO;AAAA,IACL,eAAA,EAAiBA,OAAA;AAAA,oBAAA,EACC,SAAS,CAAA;AAAA;AAAA,8BAAA,EAEC,WAAW,CAAA;AAAA,+BAAA,EACV,WAAW,CAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,oCAAA,EAWN,WAAW,CAAA;AAAA,8BAAA,EACjB,YAAY,CAAA;;AAAA;AAAA,sBAAA,EAGpB,SAAS,CAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,YAAA,EAuCnB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,EAKd,gBAAgB,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,wBAAA,EAMN,cAAc,CAAA;AAAA;;AAAA;AAAA,YAAA,EAI1B,gBAAgB;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAY1B,iBAAA,EAAmBA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA;AAAA,IAQnB,gBAAA,EAAkBA,OAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,IAAA;AAAA,GASpB;AACF;;;;"}
1
+ {"version":3,"file":"style.cjs","sources":["../../../../src/components/table-form/style.ts"],"sourcesContent":["import { ComputedRef } from \"vue\";\r\n\r\nimport { StylesConfig } from \"./interface\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nexport const useFormItemStyle = (\r\n styles: StylesConfig,\r\n _token: ComputedRef<GlobalToken>\r\n) => {\r\n const {\r\n rowHeight,\r\n labelBgColor,\r\n borderColor,\r\n focusBorderColor\r\n } = styles;\r\n const token = _token.value;\r\n\r\n const horizontalPadding = `${token.paddingSM}px`;\r\n const textColor = token.colorText;\r\n\r\n // ⭐️ 核心聚焦样式:使用 outline 确保覆盖在所有子组件(如加减按钮)之上\r\n const focusStyle = `\r\n outline: 1px solid ${focusBorderColor} !important;\r\n outline-offset: -1px !important;\r\n z-index: 10;\r\n position: relative;\r\n `;\r\n\r\n // 错误样式\r\n const errorStyle = `\r\n outline: 1px solid ${token.colorError} !important;\r\n outline-offset: -1px !important;\r\n z-index: 10;\r\n position: relative;\r\n `;\r\n\r\n return {\r\n cellBorderStyle: css`\r\n border-right: 1px solid ${borderColor};\r\n border-bottom: 1px solid ${borderColor};\r\n overflow: hidden;\r\n position: relative;\r\n\r\n .ant-form-item {\r\n margin-bottom: 0 !important;\r\n height: 100%;\r\n .ant-form-item-row {\r\n height: 100%;\r\n\r\n .ant-form-item-label {\r\n //height: 100%;\r\n border-right: 1px solid ${borderColor};\r\n background-color: ${labelBgColor};\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n & > label {\r\n }\r\n }\r\n\r\n .ant-form-item-control-input {\r\n min-height: ${rowHeight}px;\r\n .ant-form-item-control-input-content {\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n\r\n // 基础组件宽高\r\n input,\r\n .ant-picker,\r\n .ant-select,\r\n .ant-input-number,\r\n .ant-select-selector,\r\n .ant-input-number-input-wrap,\r\n .ant-mentions textarea {\r\n width: 100%;\r\n height: ${rowHeight}px;\r\n }\r\n\r\n .ant-mentions textarea {\r\n line-height: ${rowHeight}px;\r\n }\r\n }\r\n }\r\n\r\n // ⭐️ 统一重置:移除 AntD 默认边框和阴影,设置直角\r\n .ant-input,\r\n .ant-select-selector,\r\n .ant-input-number,\r\n .ant-picker,\r\n .ant-mentions {\r\n border: 0 !important;\r\n box-shadow: none !important;\r\n border-radius: 0 !important;\r\n background: transparent !important;\r\n transition: none !important;\r\n }\r\n\r\n // ⭐️ 只有在获取焦点时才添加边框(使用 outline)\r\n // 1. 普通 Input\r\n .ant-input:focus,\r\n .ant-mentions textarea:focus {\r\n ${focusStyle}\r\n }\r\n // 2. Select (AntD 聚焦类在 selector 上)\r\n .ant-select-focused .ant-select-selector {\r\n ${focusStyle}\r\n }\r\n // 3. DatePicker\r\n .ant-picker-focused {\r\n ${focusStyle}\r\n }\r\n // 4. InputNumber (外层容器聚焦)\r\n .ant-input-number-focused {\r\n ${focusStyle}\r\n }\r\n\r\n // 修正 InputNumber 内部结构线\r\n .ant-input-number-handler-wrap {\r\n border-left: 0;\r\n background: transparent;\r\n }\r\n\r\n // 文本居中处理\r\n .ant-select-selector {\r\n padding: 0 ${horizontalPadding} !important;\r\n display: flex !important;\r\n align-items: center !important;\r\n }\r\n .ant-input,\r\n .ant-input-number-input,\r\n .ant-mentions textarea {\r\n padding: 0 ${horizontalPadding} !important;\r\n }\r\n }\r\n\r\n // ⭐️ 错误状态的处理\r\n &.ant-form-item-has-error {\r\n .ant-input,\r\n .ant-select-selector,\r\n .ant-input-number,\r\n .ant-picker {\r\n ${errorStyle}\r\n }\r\n }\r\n }\r\n `,\r\n\r\n valueDisplayClass: css`\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n padding-left: ${horizontalPadding};\r\n color: ${textColor};\r\n box-sizing: border-box;\r\n `,\r\n\r\n textWrapperClass: css`\r\n flex-grow: 1;\r\n min-width: 0;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n `\r\n };\r\n};\r\n"],"names":["css"],"mappings":";;;;;AAMO,MAAM,gBAAA,GAAmB,CAC9B,MAAA,EACA,MAAA,KACG;AACH,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAA;AACJ,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AAErB,EAAA,MAAM,iBAAA,GAAoB,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA,EAAA,CAAA;AAC5C,EAAA,MAAM,YAAY,KAAA,CAAM,SAAA;AAGxB,EAAA,MAAM,UAAA,GAAa;AAAA,uBAAA,EACI,gBAAgB,CAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAOvC,EAAA,MAAM,UAAA,GAAa;AAAA,uBAAA,EACI,MAAM,UAAU,CAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAMvC,EAAA,OAAO;AAAA,IACL,eAAA,EAAiBA,OAAA;AAAA,8BAAA,EACW,WAAW,CAAA;AAAA,+BAAA,EACV,WAAW,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,oCAAA,EAYN,WAAW,CAAA;AAAA,8BAAA,EACjB,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,wBAAA,EASlB,SAAS,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAA,EAeT,SAAS,CAAA;AAAA;;AAAA;AAAA,6BAAA,EAIJ,SAAS,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,YAAA,EAsB1B,UAAU;AAAA;AAAA;AAAA;AAAA,YAAA,EAIV,UAAU;AAAA;AAAA;AAAA;AAAA,YAAA,EAIV,UAAU;AAAA;AAAA;AAAA;AAAA,YAAA,EAIV,UAAU;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,uBAAA,EAWC,iBAAiB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAA,EAOjB,iBAAiB,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAA,EAU5B,UAAU;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAMpB,iBAAA,EAAmBA,OAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAID,iBAAiB,CAAA;AAAA,aAAA,EACxB,SAAS,CAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAIpB,gBAAA,EAAkBA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA;AAAA,GAOpB;AACF;;;;"}
@@ -1,9 +1,6 @@
1
1
  import { ComputedRef } from "vue";
2
2
  import { StylesConfig } from "./interface";
3
3
  import type { GlobalToken } from "ant-design-vue/es/theme/interface";
4
- /**
5
- * 表单项样式
6
- */
7
4
  export declare const useFormItemStyle: (styles: StylesConfig, _token: ComputedRef<GlobalToken>) => {
8
5
  cellBorderStyle: string;
9
6
  valueDisplayClass: string;
@@ -1,6 +1,16 @@
1
1
  export declare const Card: import("../../utils/withInstall").SFCWithInstall<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
2
  title: StringConstructor;
3
+ headerBordered: {
4
+ type: BooleanConstructor;
5
+ default: boolean;
6
+ };
3
7
  }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
4
8
  title: StringConstructor;
5
- }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
9
+ headerBordered: {
10
+ type: BooleanConstructor;
11
+ default: boolean;
12
+ };
13
+ }>> & Readonly<{}>, {
14
+ headerBordered: boolean;
15
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
6
16
  //# sourceMappingURL=Card.d.ts.map
@@ -8,7 +8,11 @@ import { withInstall } from '../../utils/withInstall.mjs';
8
8
  const _Card = /* @__PURE__ */ defineComponent({
9
9
  name: "DCard",
10
10
  props: {
11
- title: String
11
+ title: String,
12
+ headerBordered: {
13
+ type: Boolean,
14
+ default: false
15
+ }
12
16
  },
13
17
  setup(props, {
14
18
  slots
@@ -30,7 +34,9 @@ const _Card = /* @__PURE__ */ defineComponent({
30
34
  return createVNode("div", {
31
35
  "class": cx(rootCls, styles.container)
32
36
  }, [createVNode("div", {
33
- "class": cx(headerWrapperCls, styles.header)
37
+ "class": cx(headerWrapperCls, styles.header, {
38
+ border: props.headerBordered
39
+ })
34
40
  }, [createVNode("div", {
35
41
  "class": cx(headerCls, styles.headerLeft)
36
42
  }, [slots.icon && createVNode("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"Card.mjs","sources":["../../../../src/components/card/Card.tsx"],"sourcesContent":["// components/card/index.tsx\r\nimport { defineComponent } from \"vue\";\r\n\r\nimport { useStyle } from \"./style\";\r\nimport { cx } from \"@emotion/css\"; // 引入 cx\r\n\r\nimport { useDesign } from \"../../hooks/useDesign\"; // 引入我们刚才写的 hook\r\n\r\nimport { withInstall } from \"../../utils/withInstall\";\r\n\r\nconst _Card = defineComponent({\r\n name: \"DCard\",\r\n props: {\r\n title: String\r\n },\r\n setup(props, { slots }) {\r\n // 初始化 Design Hook,传入组件名 'card'\r\n const { getPrefixCls } = useDesign(\"card\");\r\n\r\n // 初始化 Emotion 样式\r\n const styles = useStyle();\r\n\r\n return () => {\r\n // 生成语义化类名\r\n const rootCls = getPrefixCls();\r\n const headerWrapperCls = getPrefixCls(\"head-wrapper\");\r\n const headerCls = getPrefixCls(\"head\");\r\n const headerExctraCls = getPrefixCls(\"extra\");\r\n const iconCls = getPrefixCls(\"icon\");\r\n const titleCls = getPrefixCls(\"title\");\r\n const actionCls = getPrefixCls(\"action\");\r\n const bodyCls = getPrefixCls(\"body\");\r\n\r\n return (\r\n <div class={cx(rootCls, styles.container)}>\r\n {/* Header 区域 */}\r\n <div class={cx(headerWrapperCls, styles.header)}>\r\n <div class={cx(headerCls, styles.headerLeft)}>\r\n {slots.icon && (\r\n <div class={cx(iconCls, styles.icon)}>\r\n {slots.icon()}\r\n </div>\r\n )}\r\n <div\r\n class={cx(titleCls, styles.header_title)}\r\n >\r\n {props.title}\r\n </div>\r\n </div>\r\n {slots.extra && (\r\n <div class={cx(headerExctraCls)}>\r\n {slots.extra()}\r\n </div>\r\n )}\r\n </div>\r\n {/*action*/}\r\n {slots.action && (\r\n <div class={cx(actionCls, styles.action)}>\r\n {slots.action()}\r\n </div>\r\n )}\r\n\r\n {/* Body 区域 */}\r\n <div class={cx(bodyCls, styles.body)}>\r\n {slots.default?.()}\r\n </div>\r\n </div>\r\n );\r\n };\r\n }\r\n});\r\n\r\nexport const Card = withInstall(_Card);\r\n"],"names":["_Card","defineComponent","name","props","title","String","setup","slots","getPrefixCls","useDesign","styles","useStyle","rootCls","headerWrapperCls","headerCls","headerExctraCls","iconCls","titleCls","actionCls","bodyCls","_createVNode","cx","container","header","headerLeft","icon","header_title","extra","action","body","default","Card","withInstall"],"mappings":";;;;;;;AAUA,MAAMA,wBAAQC,eAAAA,CAAgB;AAAA,EAC5BC,IAAAA,EAAM,OAAA;AAAA,EACNC,KAAAA,EAAO;AAAA,IACLC,KAAAA,EAAOC;AAAAA,GACT;AAAA,EACAC,MAAMH,KAAAA,EAAO;AAAA,IAAEI;AAAAA,GAAM,EAAG;AAEtB,IAAA,MAAM;AAAA,MAAEC;AAAAA,KAAa,GAAIC,UAAU,MAAM,CAAA;AAGzC,IAAA,MAAMC,SAASC,QAAAA,EAAS;AAExB,IAAA,OAAO,MAAM;AAtBjB,MAAA,IAAA,EAAA;AAwBM,MAAA,MAAMC,UAAUJ,YAAAA,EAAa;AAC7B,MAAA,MAAMK,gBAAAA,GAAmBL,aAAa,cAAc,CAAA;AACpD,MAAA,MAAMM,SAAAA,GAAYN,aAAa,MAAM,CAAA;AACrC,MAAA,MAAMO,eAAAA,GAAkBP,aAAa,OAAO,CAAA;AAC5C,MAAA,MAAMQ,OAAAA,GAAUR,aAAa,MAAM,CAAA;AACnC,MAAA,MAAMS,QAAAA,GAAWT,aAAa,OAAO,CAAA;AACrC,MAAA,MAAMU,SAAAA,GAAYV,aAAa,QAAQ,CAAA;AACvC,MAAA,MAAMW,OAAAA,GAAUX,aAAa,MAAM,CAAA;AAEnC,MAAA,OAAAY,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EACcC,EAAAA,CAAGT,OAAAA,EAASF,MAAAA,CAAOY,SAAS;AAAA,OAAC,EAAA,CAAAF,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAE3BC,EAAAA,CAAGR,gBAAAA,EAAkBH,MAAAA,CAAOa,MAAM;AAAA,OAAC,EAAA,CAAAH,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EACjCC,EAAAA,CAAGP,SAAAA,EAAWJ,MAAAA,CAAOc,UAAU;AAAA,OAAC,EAAA,CACzCjB,KAAAA,CAAMkB,IAAAA,IAAIL,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EACGC,EAAAA,CAAGL,OAAAA,EAASN,MAAAA,CAAOe,IAAI;AAAA,OAAC,EAAA,CACjClB,KAAAA,CAAMkB,IAAAA,EAAM,CAAA,CAAA,EAEhBL,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAEQC,EAAAA,CAAGJ,QAAAA,EAAUP,MAAAA,CAAOgB,YAAY;AAAA,OAAC,EAAA,CAEvCvB,KAAAA,CAAMC,KAAK,CAAA,CAAA,CAAA,CAAA,EAGfG,KAAAA,CAAMoB,KAAAA,IAAKP,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EACEC,GAAGN,eAAe;AAAA,OAAC,EAAA,CAC5BR,KAAAA,CAAMoB,KAAAA,EAAO,CAAA,CAEjB,CAAA,CAAA,EAGFpB,KAAAA,CAAMqB,MAAAA,IAAMR,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EACCC,EAAAA,CAAGH,SAAAA,EAAWR,MAAAA,CAAOkB,MAAM;AAAA,OAAC,EAAA,CACrCrB,KAAAA,CAAMqB,MAAAA,EAAQ,CAAA,CAAA,EAElBR,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAGWC,EAAAA,CAAGF,OAAAA,EAAST,MAAAA,CAAOmB,IAAI;AAAA,SAAC,CAAA,CACjCtB,EAAAA,GAAAA,KAAAA,CAAMuB,YAANvB,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,IAAAA,CAAAA,KAAAA,CAAiB,CAAA,CAAA,CAAA,CAAA;AAAA,IAI1B,CAAA;AAAA,EACF;AACF,CAAC,CAAA;AAEM,MAAMwB,IAAAA,GAAOC,YAAYhC,KAAK;;;;"}
1
+ {"version":3,"file":"Card.mjs","sources":["../../../../src/components/card/Card.tsx"],"sourcesContent":["// components/card/index.tsx\r\nimport { defineComponent } from \"vue\";\r\n\r\nimport { useStyle } from \"./style\";\r\nimport { cx } from \"@emotion/css\"; // 引入 cx\r\n\r\nimport { useDesign } from \"../../hooks/useDesign\"; // 引入我们刚才写的 hook\r\n\r\nimport { withInstall } from \"../../utils/withInstall\";\r\n\r\nconst _Card = defineComponent({\r\n name: \"DCard\",\r\n props: {\r\n title: String,\r\n headerBordered: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n setup(props, { slots }) {\r\n // 初始化 Design Hook,传入组件名 'card'\r\n const { getPrefixCls } = useDesign(\"card\");\r\n\r\n // 初始化 Emotion 样式\r\n const styles = useStyle();\r\n\r\n return () => {\r\n // 生成语义化类名\r\n const rootCls = getPrefixCls();\r\n const headerWrapperCls = getPrefixCls(\"head-wrapper\");\r\n const headerCls = getPrefixCls(\"head\");\r\n const headerExctraCls = getPrefixCls(\"extra\");\r\n const iconCls = getPrefixCls(\"icon\");\r\n const titleCls = getPrefixCls(\"title\");\r\n const actionCls = getPrefixCls(\"action\");\r\n const bodyCls = getPrefixCls(\"body\");\r\n\r\n return (\r\n <div class={cx(rootCls, styles.container)}>\r\n {/* Header 区域 */}\r\n <div\r\n class={cx(headerWrapperCls, styles.header, {\r\n border: props.headerBordered\r\n })}\r\n >\r\n <div class={cx(headerCls, styles.headerLeft)}>\r\n {slots.icon && (\r\n <div class={cx(iconCls, styles.icon)}>\r\n {slots.icon()}\r\n </div>\r\n )}\r\n <div\r\n class={cx(titleCls, styles.header_title)}\r\n >\r\n {props.title}\r\n </div>\r\n </div>\r\n {slots.extra && (\r\n <div class={cx(headerExctraCls)}>\r\n {slots.extra()}\r\n </div>\r\n )}\r\n </div>\r\n {/*action*/}\r\n {slots.action && (\r\n <div class={cx(actionCls, styles.action)}>\r\n {slots.action()}\r\n </div>\r\n )}\r\n\r\n {/* Body 区域 */}\r\n <div class={cx(bodyCls, styles.body)}>\r\n {slots.default?.()}\r\n </div>\r\n </div>\r\n );\r\n };\r\n }\r\n});\r\n\r\nexport const Card = withInstall(_Card);\r\n"],"names":["_Card","defineComponent","name","props","title","String","headerBordered","type","Boolean","default","setup","slots","getPrefixCls","useDesign","styles","useStyle","rootCls","headerWrapperCls","headerCls","headerExctraCls","iconCls","titleCls","actionCls","bodyCls","_createVNode","cx","container","header","border","headerLeft","icon","header_title","extra","action","body","Card","withInstall"],"mappings":"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"}
@@ -2,41 +2,53 @@ import { css } from '@emotion/css';
2
2
 
3
3
  "use strict";
4
4
  const useStyle = () => {
5
+ const paddingBase = "10px";
6
+ const borderColor = "rgba(5, 5, 5, 0.06)";
5
7
  return {
6
8
  container: css`
7
9
  display: flex;
8
10
  flex-direction: column;
9
11
  background-color: #fff;
12
+
13
+ overflow: hidden; /* 确保子元素边框不溢出圆角 */
10
14
  `,
11
15
  header: css`
12
16
  display: flex;
13
- padding: 10px;
17
+ padding: ${paddingBase};
14
18
  align-items: center;
15
19
  justify-content: space-between;
16
- border-bottom: 1px solid #d9d9d9;
20
+ transition: border-color 0.3s; /* 增加平滑感 */
21
+
22
+ &.border {
23
+ border-bottom: 1px solid ${borderColor};
24
+ }
17
25
  `,
18
26
  headerLeft: css`
19
27
  display: flex;
20
28
  align-items: center;
29
+ min-width: 0; /* 配合 ellipsis 必须加这行 */
21
30
  `,
22
31
  header_title: css`
23
- //line-height: 1.5;
24
- /* 如果标题过长,防止换行破坏布局,可以加这行 */
32
+ font-weight: 600; /* 标题加粗 */
33
+ color: rgba(0, 0, 0, 0.88);
25
34
  white-space: nowrap;
35
+ overflow: hidden;
36
+ text-overflow: ellipsis; /* 标题过长自动省略号,比单纯截断更友好 */
26
37
  `,
27
- // 可选:如果你需要对 icon 容器做特殊处理(例如防止图标被压缩)
28
38
  icon: css`
29
- margin-right: 10px;
39
+ margin-right: 8px; /* 间距稍大一点 */
30
40
  display: inline-flex;
31
41
  align-items: center;
32
- flex-shrink: 0; /* 防止标题过长时挤压图标 */
42
+ flex-shrink: 0;
43
+ font-size: 16px; /* 统一图标大小 */
33
44
  `,
34
45
  action: css`
35
- padding: 10px;
46
+ padding: ${paddingBase};
36
47
  `,
37
48
  body: css`
38
49
  display: flex;
39
50
  flex-direction: column;
51
+ flex: 1; /* 让 body 自动撑开 */
40
52
  `
41
53
  };
42
54
  };
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","sources":["../../../../src/components/card/style.ts"],"sourcesContent":["import { css } from \"@emotion/css\";\r\n\r\nexport const useStyle = () => {\r\n return {\r\n container: css`\r\n display: flex;\r\n flex-direction: column;\r\n background-color: #fff;\r\n `,\r\n header: css`\r\n display: flex;\r\n padding: 10px;\r\n align-items: center;\r\n justify-content: space-between;\r\n border-bottom: 1px solid #d9d9d9;\r\n `,\r\n headerLeft: css`\r\n display: flex;\r\n align-items: center;\r\n `,\r\n header_title: css`\r\n //line-height: 1.5;\r\n /* 如果标题过长,防止换行破坏布局,可以加这行 */\r\n white-space: nowrap;\r\n `,\r\n // 可选:如果你需要对 icon 容器做特殊处理(例如防止图标被压缩)\r\n icon: css`\r\n margin-right: 10px;\r\n display: inline-flex;\r\n align-items: center;\r\n flex-shrink: 0; /* 防止标题过长时挤压图标 */\r\n `,\r\n action: css`\r\n padding: 10px;\r\n `,\r\n body: css`\r\n display: flex;\r\n flex-direction: column;\r\n `\r\n };\r\n};\r\n"],"names":[],"mappings":";;;AAEO,MAAM,WAAW,MAAM;AAC5B,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,GAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAKX,MAAA,EAAQ,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAOR,UAAA,EAAY,GAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAIZ,YAAA,EAAc,GAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA;AAAA,IAMd,IAAA,EAAM,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAMN,MAAA,EAAQ,GAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAGR,IAAA,EAAM,GAAA;AAAA;AAAA;AAAA,IAAA;AAAA,GAIR;AACF;;;;"}
1
+ {"version":3,"file":"style.mjs","sources":["../../../../src/components/card/style.ts"],"sourcesContent":["import { css } from \"@emotion/css\";\r\n\r\nexport const useStyle = () => {\r\n // 建议定义一组内部变量,或者从主题 hook 中获取\r\n const paddingBase = \"10px\"; // 稍微大一点的内边距看起来更有质感\r\n const borderColor = \"rgba(5, 5, 5, 0.06)\"; // AntD 5 风格的淡色边框\r\n\r\n return {\r\n container: css`\r\n display: flex;\r\n flex-direction: column;\r\n background-color: #fff;\r\n\r\n overflow: hidden; /* 确保子元素边框不溢出圆角 */\r\n `,\r\n header: css`\r\n display: flex;\r\n padding: ${paddingBase};\r\n align-items: center;\r\n justify-content: space-between;\r\n transition: border-color 0.3s; /* 增加平滑感 */\r\n\r\n &.border {\r\n border-bottom: 1px solid ${borderColor};\r\n }\r\n `,\r\n headerLeft: css`\r\n display: flex;\r\n align-items: center;\r\n min-width: 0; /* 配合 ellipsis 必须加这行 */\r\n `,\r\n header_title: css`\r\n font-weight: 600; /* 标题加粗 */\r\n color: rgba(0, 0, 0, 0.88);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis; /* 标题过长自动省略号,比单纯截断更友好 */\r\n `,\r\n icon: css`\r\n margin-right: 8px; /* 间距稍大一点 */\r\n display: inline-flex;\r\n align-items: center;\r\n flex-shrink: 0;\r\n font-size: 16px; /* 统一图标大小 */\r\n `,\r\n action: css`\r\n padding: ${paddingBase};\r\n `,\r\n body: css`\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1; /* 让 body 自动撑开 */\r\n `\r\n };\r\n};\r\n"],"names":[],"mappings":";;;AAEO,MAAM,WAAW,MAAM;AAE5B,EAAA,MAAM,WAAA,GAAc,MAAA;AACpB,EAAA,MAAM,WAAA,GAAc,qBAAA;AAEpB,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,GAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,IAAA,CAAA;AAAA,IAOX,MAAA,EAAQ,GAAA;AAAA;AAAA,eAAA,EAEK,WAAW,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,iCAAA,EAMO,WAAW,CAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAG1C,UAAA,EAAY,GAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAKZ,YAAA,EAAc,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAOd,IAAA,EAAM,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAON,MAAA,EAAQ,GAAA;AAAA,eAAA,EACK,WAAW,CAAA;AAAA,IAAA,CAAA;AAAA,IAExB,IAAA,EAAM,GAAA;AAAA;AAAA;AAAA;AAAA,IAAA;AAAA,GAKR;AACF;;;;"}
@@ -128,14 +128,59 @@ const DTable = /* @__PURE__ */ defineComponent({
128
128
  }
129
129
  function useSlots() {
130
130
  const tableSlots2 = {
131
+ // --- 单元格类 ---
131
132
  bodyCell: (params) => {
132
133
  var _a;
133
134
  return (_a = slots.bodyCell) == null ? void 0 : _a.call(slots, params);
134
135
  },
136
+ headerCell: (params) => {
137
+ var _a;
138
+ return (_a = slots.headerCell) == null ? void 0 : _a.call(slots, params);
139
+ },
140
+ // 自定义表头
141
+ // --- 展开与总结 ---
142
+ expandedRowRender: (params) => {
143
+ var _a;
144
+ return (_a = slots.expandedRowRender) == null ? void 0 : _a.call(slots, params);
145
+ },
146
+ // 额外展开行内容
147
+ expandIcon: (params) => {
148
+ var _a;
149
+ return (_a = slots.expandIcon) == null ? void 0 : _a.call(slots, params);
150
+ },
151
+ // 自定义展开图标
135
152
  summary: () => {
136
153
  var _a;
137
154
  return (_a = slots.summary) == null ? void 0 : _a.call(slots);
155
+ },
156
+ // 总结行
157
+ // --- 筛选与搜索 ---
158
+ customFilterDropdown: (params) => {
159
+ var _a;
160
+ return (_a = slots.customFilterDropdown) == null ? void 0 : _a.call(slots, params);
161
+ },
162
+ // 自定义筛选菜单
163
+ customFilterIcon: (params) => {
164
+ var _a;
165
+ return (_a = slots.customFilterIcon) == null ? void 0 : _a.call(slots, params);
166
+ },
167
+ // 自定义筛选图标
168
+ // --- 装饰类 ---
169
+ title: () => {
170
+ var _a;
171
+ return (_a = slots.title) == null ? void 0 : _a.call(slots);
172
+ },
173
+ // 表格顶部标题
174
+ footer: () => {
175
+ var _a;
176
+ return (_a = slots.footer) == null ? void 0 : _a.call(slots);
177
+ },
178
+ // 表格底部页脚
179
+ emptyText: () => {
180
+ var _a;
181
+ return (_a = slots.emptyText) == null ? void 0 : _a.call(slots);
138
182
  }
183
+ // 自定义空状态内容
139
184
  };
140
185
  return {
141
186
  tableSlots: tableSlots2
@@ -1 +1 @@
1
- {"version":3,"file":"Table.mjs","sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import {\r\n computed,\r\n defineComponent,\r\n nextTick,\r\n onMounted,\r\n ref,\r\n watch\r\n} from \"vue\";\r\nimport { type ExtractPropTypes, type PropType } from \"vue\";\r\nimport { Flex, Pagination, Table } from \"ant-design-vue\";\r\nimport { type TablePaginationConfig } from \"ant-design-vue\";\r\n\r\nimport { type PaginationProps } from \"./interface\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { ColumnsType } from \"ant-design-vue/es/table\";\r\nimport type {\r\n SelectionSelectFn,\r\n TableRowSelection\r\n} from \"ant-design-vue/es/table/interface\";\r\nimport { merge } from \"lodash-es\";\r\n\r\nexport type Key = string | number;\r\nexport type SizeType =\r\n | \"small\"\r\n | \"middle\"\r\n | \"large\"\r\n | undefined;\r\n\r\n// 定义分页\r\ninterface Page {\r\n total: number;\r\n current: number;\r\n pageSize: number;\r\n}\r\n\r\n// 定义表格配置接口,支持泛型\r\ninterface Config<T = unknown> {\r\n columns: ColumnsType<T>;\r\n // 分页\r\n pagination?: Page | undefined;\r\n // 分页配置\r\n paginationConfig?: PaginationProps;\r\n changePagination?: (\r\n current: number,\r\n size: number\r\n ) => void;\r\n // 单击\r\n click?: (\r\n record: Record<string, unknown>,\r\n index: number\r\n ) => void;\r\n // 双击\r\n dbClick?: (\r\n record: Record<string, unknown>,\r\n index: number\r\n ) => void;\r\n // 选择框的默认属性配置\r\n getCheckboxProps?: (\r\n record: unknown\r\n ) => Record<string, unknown> | undefined; // 返回一个对象或者 undefined\r\n // 点击行号激活的class\r\n activeRowClass?: string;\r\n // 复选框方式\r\n selection?: string;\r\n // 切换分页是否保留选中的ID\r\n keepSelected?: boolean;\r\n}\r\n\r\n// 定义 Props 类型,支持泛型\r\nexport const tableProps = <T = unknown,>() => ({\r\n height: { type: Number, default: 0 },\r\n data: { type: Array as PropType<T[]>, default: () => [] }, // 泛型约束\r\n loading: { type: Boolean, default: false },\r\n rowKey: { type: String, default: \"id\" },\r\n bordered: { type: Boolean, default: false },\r\n size: {\r\n type: String as PropType<SizeType>,\r\n default: \"small\"\r\n },\r\n keys: {\r\n type: Array as PropType<Key[]>,\r\n default: () => []\r\n },\r\n config: {\r\n type: Object as PropType<Config<T>>,\r\n required: true\r\n }\r\n});\r\n\r\nexport type TableProps = Partial<\r\n ExtractPropTypes<ReturnType<typeof tableProps>>\r\n>;\r\n\r\n// 分页组件默认配置\r\nconst defaultPaginationProps: PaginationProps = {\r\n defaultPageSize: 20,\r\n disabled: false,\r\n hideOnSinglePage: false,\r\n pageSize: 20,\r\n pageSizeOptions: [\"20\", \"40\", \"60\", \"80\", \"99\"],\r\n responsive: false,\r\n showLessItems: false,\r\n showQuickJumper: true,\r\n showSizeChanger: true, // 默认展示切换器\r\n showTotal: total => `总共 ${total} 条数据`,\r\n simple: false,\r\n size: \"default\",\r\n total: 0\r\n};\r\n\r\n// 表格默认配置\r\nconst defaultConfig: Config = {\r\n columns: [],\r\n pagination: undefined,\r\n paginationConfig: defaultPaginationProps,\r\n activeRowClass: \"\",\r\n selection: \"N\",\r\n keepSelected: false\r\n};\r\n\r\nconst paginationStyle = css`\r\n display: flex;\r\n justify-content: center;\r\n padding-top: 6px;\r\n`;\r\n\r\n// 定义泛型组件\r\nconst DTable = defineComponent({\r\n name: \"DTable\",\r\n props: tableProps(), // 初始泛型设置为 `unknown`\r\n emits: [\"update:keys\"],\r\n setup(props, { emit, slots, attrs }) {\r\n // 保存选中的唯一id\r\n const selectedRowKeys = ref<Key[]>(props.keys || []);\r\n // 计算表格高度\r\n //const height = computed(() => props.height);\r\n\r\n const { columns, data, pagination } = useProps();\r\n const { tableSlots } = useSlots();\r\n const { paginationConfig, onPaginationChange } =\r\n usePagination();\r\n const { tableRef, tableHeight, antTableBodyRef } =\r\n useHeight();\r\n const rowSelection = useRowSelection();\r\n\r\n onMounted(() => {});\r\n\r\n /**\r\n * props计算属性处理\r\n */\r\n function useProps() {\r\n // 定义计算属性\r\n const _config = computed(() =>\r\n merge({}, defaultConfig, props.config)\r\n );\r\n const columns = computed(() => _config.value.columns);\r\n const data = computed(() => props.data || []);\r\n const pagination = computed(\r\n () => _config.value.pagination || false\r\n );\r\n\r\n return {\r\n columns,\r\n data,\r\n pagination\r\n };\r\n }\r\n\r\n /**\r\n * 插槽处理\r\n */\r\n function useSlots() {\r\n // 定义插槽\r\n const tableSlots = {\r\n bodyCell: (params: unknown) =>\r\n slots.bodyCell?.(params),\r\n summary: () => slots.summary?.()\r\n };\r\n\r\n return {\r\n tableSlots\r\n };\r\n }\r\n\r\n function useHeight() {\r\n const tableRef = ref();\r\n const tableHeight = ref(0);\r\n\r\n // 表格body对象\r\n const antTableBodyRef = ref<HTMLElement>();\r\n\r\n watch(\r\n () => props.height,\r\n val => {\r\n if (val > 0) {\r\n // 使用 nextTick + requestAnimationFrame 确保 DOM 完全渲染\r\n nextTick(() => {\r\n requestAnimationFrame(() => {\r\n _tableBodyHeight(val);\r\n });\r\n });\r\n }\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n function _tableBodyHeight(height: number) {\r\n const tableEl = tableRef.value?.$el as HTMLElement | undefined;\r\n if (!tableEl) return;\r\n\r\n // 表头高度 - 增加空值检查\r\n const headerEl = tableEl.getElementsByClassName(\r\n \"ant-table-header\"\r\n )[0] as HTMLElement | undefined;\r\n const headerHeight = headerEl ? useEleHeight(headerEl) : 0;\r\n\r\n // 分页 - 增加空值检查\r\n const paginationEl = tableEl.getElementsByClassName(\r\n \"d-pagination\"\r\n )[0] as HTMLElement | undefined;\r\n let paginationHeight = 0;\r\n if (paginationEl) {\r\n paginationEl.style.marginBottom = \"0\";\r\n paginationHeight = useEleHeight(paginationEl) ?? 0;\r\n }\r\n\r\n // 总结行 - 增加空值检查\r\n const summaryEl = tableEl.getElementsByClassName(\r\n \"ant-table-summary\"\r\n )[0] as HTMLElement | undefined;\r\n const summaryHeight = summaryEl\r\n ? useEleHeight(summaryEl) ?? 0\r\n : 0;\r\n\r\n // 计算最终高度,确保不为负数\r\n tableHeight.value = Math.max(\r\n 0,\r\n height - paginationHeight - headerHeight - summaryHeight\r\n );\r\n\r\n antTableBodyRef.value = tableEl.getElementsByClassName(\r\n \"ant-table-body\"\r\n )[0] as HTMLElement;\r\n\r\n if (antTableBodyRef.value) {\r\n // 设置body高度\r\n antTableBodyRef.value.style.height =\r\n tableHeight.value + \"px\";\r\n }\r\n }\r\n\r\n return {\r\n tableRef,\r\n tableHeight,\r\n antTableBodyRef\r\n };\r\n }\r\n\r\n function usePagination() {\r\n const { changePagination } = props.config!;\r\n const paginationConfig =\r\n computed<TablePaginationConfig>(() => {\r\n return {\r\n position: [\"bottomCenter\"], // 符合类型的分页位置\r\n total: 0, // 确保符合要求\r\n ...defaultPaginationProps,\r\n ...pagination.value\r\n };\r\n });\r\n\r\n const onPaginationChange = (\r\n page: number,\r\n pageSize: number\r\n ) => {\r\n const { selection, keepSelected } = props.config!;\r\n changePagination?.(page, pageSize);\r\n // 切换分页的时候,表体滚动到顶部\r\n antTableBodyRef.value!.scrollTop = 0;\r\n\r\n // 如果当前为单选或未开启分页保留数据选中的数据都会被清除\r\n // 清空历史选中数据\r\n if (selection === \"S\" || !keepSelected) {\r\n // 只有selectedRowKeys被清空时,这里才触发update;\r\n // 不加判断,会出现执行update后,父组件监听的watch每次都会触发\r\n if (selectedRowKeys.value.length > 0) {\r\n selectedRowKeys.value = [];\r\n emit(\"update:keys\", selectedRowKeys.value);\r\n }\r\n }\r\n };\r\n\r\n return {\r\n paginationConfig,\r\n onPaginationChange\r\n };\r\n }\r\n\r\n function useCustomRow() {\r\n return (record: never, index: number) => {\r\n // 用于存储 在某个事件内双击两次 则取消单击事件业务\r\n let clickTimeout: number = 0;\r\n const {\r\n rowKey,\r\n config: {\r\n click,\r\n dbClick,\r\n selection,\r\n getCheckboxProps\r\n } = {} as Config\r\n } = props;\r\n\r\n // 当前点击行的唯一ID,通过rowKey从record中取值\r\n const id = record[rowKey];\r\n\r\n /**\r\n * 处理单击事件业务\r\n * @param record 当前点击行数据\r\n */\r\n const onClick = () => {\r\n // 获取getCheckboxProps方法,如果不等于undefined,则执行方法获取disabled的值\r\n // 否则checkEnable为false\r\n const checkEnable =\r\n getCheckboxProps === undefined\r\n ? false\r\n : getCheckboxProps(record)?.disabled;\r\n\r\n if (selection === \"N\" || checkEnable) {\r\n // 1. 未开启复选框 则不处理数据选中操作\r\n // 2. 如果当前点击的行 包含在禁用的数据项目里面 则不进行选中操作\r\n // 3. checkEnable 用来判断复选框属性的值,如果当前的数据满足getCheckboxProps这个\r\n // 方法返回的disabled为true就不执行\r\n // 复选框选中的操作\r\n return;\r\n }\r\n const haveState = selectedRowKeys.value.some(\r\n (key: Key) => key === id\r\n );\r\n if (haveState) {\r\n //如果 当前点击行的ID 已存在 那么直接过滤掉当前的id\r\n selectedRowKeys.value =\r\n selectedRowKeys.value.filter(\r\n (key: Key) => key !== id\r\n );\r\n } else {\r\n if (selection === \"S\") {\r\n //单选的时候 清空选中的数据 再赋值新的ID\r\n selectedRowKeys.value = [];\r\n selectedRowKeys.value.push(id);\r\n } else {\r\n //多选直接追加ID\r\n selectedRowKeys.value.push(id);\r\n }\r\n }\r\n emit(\"update:keys\", selectedRowKeys.value);\r\n };\r\n\r\n function activeRowBackground(event: Event) {\r\n const { activeRowClass } = props.config!;\r\n if (!activeRowClass) return;\r\n const curEl = event.target;\r\n if (curEl instanceof HTMLElement) {\r\n const parentElement =\r\n curEl.parentNode as HTMLElement;\r\n if (\r\n parentElement &&\r\n parentElement.classList.contains(\r\n activeRowClass\r\n )\r\n ) {\r\n parentElement.classList.remove(\r\n activeRowClass\r\n );\r\n } else {\r\n parentElement?.classList.add(activeRowClass);\r\n }\r\n }\r\n }\r\n\r\n return {\r\n onClick: (event: Event) => {\r\n clearTimeout(clickTimeout);\r\n clickTimeout = window.setTimeout(() => {\r\n // 处理背景激活逻辑\r\n activeRowBackground(event);\r\n // 处理单击事件业务\r\n onClick();\r\n // 回传数据 自定义单击后的业务\r\n click?.(record, index);\r\n }, 200);\r\n }, // 点击行\r\n onDblclick: () => {\r\n clearTimeout(clickTimeout);\r\n // 回传数据 自定义单击后的业务\r\n dbClick?.(record, index);\r\n }\r\n };\r\n };\r\n }\r\n\r\n function useRowSelection() {\r\n const rowSelection = ref<\r\n TableRowSelection<unknown> | undefined\r\n >(undefined);\r\n\r\n const {\r\n rowKey,\r\n config: { getCheckboxProps, selection } = {}\r\n } = props;\r\n\r\n const onSelect: SelectionSelectFn<unknown> = (\r\n record,\r\n selected\r\n ) => {\r\n const data = record as Record<string, never>;\r\n if (selection === \"S\") {\r\n selectedRowKeys.value = [];\r\n selectedRowKeys.value = selected\r\n ? [data[rowKey]]\r\n : [];\r\n } else {\r\n selectedRowKeys.value = selected\r\n ? selectedRowKeys.value.concat(data[rowKey])\r\n : selectedRowKeys.value.filter(\r\n (key: Key) => key !== data[rowKey]\r\n );\r\n }\r\n emit(\"update:keys\", selectedRowKeys.value);\r\n };\r\n\r\n const onSelectAll = (\r\n selected: boolean,\r\n selectedRows: unknown[],\r\n changeRows: unknown[]\r\n ) => {\r\n const _ids = changeRows.map(\r\n (record: unknown) =>\r\n (record as { [key: string]: never })[rowKey]\r\n );\r\n selectedRowKeys.value = selected\r\n ? selectedRowKeys.value.concat(_ids)\r\n : selectedRowKeys.value.filter(\r\n (key: Key) => !_ids.includes(key as never)\r\n );\r\n\r\n emit(\"update:keys\", selectedRowKeys.value);\r\n };\r\n\r\n //TODO 这个方法在单选的时候 会出现异常bug,暂时不知道怎么解决\r\n const onChange = (\r\n rowKeys: Key[],\r\n selectedRows: unknown[]\r\n ) => {\r\n // 显式转换 selectedRows 的类型为 Record<string, never>[]\r\n const data = selectedRows as Record<\r\n string,\r\n never\r\n >[];\r\n // 等于0 说明是取消全选,反之\r\n const selected = data.length !== 0;\r\n // 显式转换 _ids 的类型为 Key[]\r\n const _ids: Key[] = props.data.map(\r\n record =>\r\n (record as Record<string, unknown>)[\r\n rowKey\r\n ] as Key\r\n );\r\n\r\n // 更新 selectedRowKeys\r\n // selected 为true,说明是全选,那么rowKeys是权限后的数组ID,需要过滤掉selectedRowKeys里的不在id才进行添加,\r\n // 否则会出现,比如一开始选择了两条数据,然后再进行全选的话 会多出两个重复ID\r\n // selected 为false,说明是取消全选,那么需要从selectedRowKeys过滤掉 _ids的id\r\n selectedRowKeys.value = selected\r\n ? selectedRowKeys.value.concat(\r\n rowKeys.filter(\r\n (key: Key) =>\r\n !selectedRowKeys.value.includes(key)\r\n )\r\n )\r\n : selectedRowKeys.value.filter(\r\n (key: Key) => !_ids.includes(key)\r\n );\r\n emit(\"update:keys\", selectedRowKeys.value);\r\n };\r\n\r\n // 监听父组件手动改变keys 重新赋值给 表格选中变量selectedRowKeys\r\n // 否则父组件 改变keys后当前selectedRowKeys还是原来的值\r\n watch(\r\n () => props.keys,\r\n val => {\r\n selectedRowKeys.value = val;\r\n },\r\n {\r\n deep: true,\r\n immediate: true\r\n }\r\n );\r\n\r\n watch(\r\n () => props.config?.selection,\r\n val => {\r\n if (val !== \"N\") {\r\n rowSelection.value = {\r\n selectedRowKeys: selectedRowKeys as never,\r\n onSelect,\r\n onSelectAll,\r\n fixed: true,\r\n columnTitle:\r\n selection === \"S\" ? \"选择\" : null,\r\n columnWidth: selection === \"S\" ? 60 : 40,\r\n getCheckboxProps: getCheckboxProps as never\r\n };\r\n } else {\r\n rowSelection.value = undefined;\r\n }\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n return rowSelection;\r\n }\r\n\r\n return () => (\r\n <Flex vertical={true} ref={tableRef}>\r\n <Table\r\n {...attrs}\r\n loading={props.loading}\r\n size={props.size}\r\n bordered={props.bordered}\r\n dataSource={data.value}\r\n columns={columns.value}\r\n rowSelection={rowSelection.value}\r\n customRow={useCustomRow() as never}\r\n pagination={false}\r\n rowKey={props.rowKey}\r\n v-slots={tableSlots}\r\n scroll={{\r\n y: tableHeight.value,\r\n x: \"100%\",\r\n scrollToFirstRowOnChange: true\r\n }}\r\n />\r\n {pagination.value && (\r\n <div class={[paginationStyle, \"d-pagination\"]}>\r\n {\r\n <Pagination\r\n v-model:current={\r\n paginationConfig.value.current\r\n }\r\n v-model:pageSize={\r\n paginationConfig.value.pageSize\r\n }\r\n total={paginationConfig.value.total}\r\n disabled={props.loading}\r\n show-size-changer\r\n size={\"default\"}\r\n hide-on-single-page={\r\n paginationConfig.value.hideOnSinglePage\r\n }\r\n show-quick-jumper={\r\n paginationConfig.value.showQuickJumper\r\n }\r\n default-page-size={\r\n paginationConfig.value.defaultPageSize\r\n }\r\n page-size-options={\r\n paginationConfig.value.pageSizeOptions\r\n }\r\n show-total={\r\n paginationConfig.value.showTotal\r\n }\r\n onChange={onPaginationChange}\r\n showLessItems={true}\r\n ></Pagination>\r\n }\r\n </div>\r\n )}\r\n </Flex>\r\n );\r\n }\r\n});\r\n\r\nexport const useEleHeight = (node: Element | undefined | null): number => {\r\n if (!node) return 0;\r\n\r\n const list = [\r\n \"margin-top\",\r\n \"margin-bottom\",\r\n \"border-top\",\r\n \"border-bottom\",\r\n \"padding-top\",\r\n \"padding-bottom\",\r\n \"height\"\r\n ];\r\n const style = getComputedStyle(node);\r\n return list\r\n .map(k => parseInt(style.getPropertyValue(k), 10) || 0)\r\n .reduce((prev, cur) => {\r\n return prev + cur;\r\n }, 0);\r\n};\r\n\r\nexport default DTable;\r\n"],"names":["tableProps","height","type","Number","default","data","Array","loading","Boolean","rowKey","String","bordered","size","keys","config","Object","required","defaultPaginationProps","defaultPageSize","disabled","hideOnSinglePage","pageSize","pageSizeOptions","responsive","showLessItems","showQuickJumper","showSizeChanger","showTotal","total","simple","defaultConfig","columns","pagination","undefined","paginationConfig","activeRowClass","selection","keepSelected","paginationStyle","css","DTable","defineComponent","name","props","emits","setup","emit","slots","attrs","selectedRowKeys","ref","useProps","tableSlots","useSlots","onPaginationChange","usePagination","tableRef","tableHeight","antTableBodyRef","useHeight","rowSelection","useRowSelection","onMounted","_config","computed","merge","value","bodyCell","params","summary","watch","val","nextTick","requestAnimationFrame","_tableBodyHeight","immediate","tableEl","$el","headerEl","getElementsByClassName","headerHeight","useEleHeight","paginationEl","paginationHeight","style","marginBottom","summaryEl","summaryHeight","Math","max","changePagination","position","page","scrollTop","length","useCustomRow","record","index","clickTimeout","click","dbClick","getCheckboxProps","id","onClick","checkEnable","haveState","some","key","filter","push","activeRowBackground","event","curEl","target","HTMLElement","parentElement","parentNode","classList","contains","remove","add","clearTimeout","window","setTimeout","onDblclick","onSelect","selected","concat","onSelectAll","selectedRows","changeRows","_ids","map","includes","onChange","rowKeys","deep","fixed","columnTitle","columnWidth","_createVNode","Flex","Table","_mergeProps","y","x","scrollToFirstRowOnChange","Pagination","current","$event","node","list","getComputedStyle","k","parseInt","getPropertyValue","reduce","prev","cur"],"mappings":"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"}
1
+ {"version":3,"file":"Table.mjs","sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import {\r\n computed,\r\n defineComponent,\r\n nextTick,\r\n onMounted,\r\n ref,\r\n watch\r\n} from \"vue\";\r\nimport { type ExtractPropTypes, type PropType } from \"vue\";\r\nimport { Flex, Pagination, Table } from \"ant-design-vue\";\r\nimport { type TablePaginationConfig } from \"ant-design-vue\";\r\n\r\nimport { type PaginationProps } from \"./interface\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { ColumnsType } from \"ant-design-vue/es/table\";\r\nimport type {\r\n SelectionSelectFn,\r\n TableRowSelection\r\n} from \"ant-design-vue/es/table/interface\";\r\nimport { merge } from \"lodash-es\";\r\n\r\nexport type Key = string | number;\r\nexport type SizeType =\r\n | \"small\"\r\n | \"middle\"\r\n | \"large\"\r\n | undefined;\r\n\r\n// 定义分页\r\ninterface Page {\r\n total: number;\r\n current: number;\r\n pageSize: number;\r\n}\r\n\r\n// 定义表格配置接口,支持泛型\r\ninterface Config<T = unknown> {\r\n columns: ColumnsType<T>;\r\n // 分页\r\n pagination?: Page | undefined;\r\n // 分页配置\r\n paginationConfig?: PaginationProps;\r\n changePagination?: (\r\n current: number,\r\n size: number\r\n ) => void;\r\n // 单击\r\n click?: (\r\n record: Record<string, unknown>,\r\n index: number\r\n ) => void;\r\n // 双击\r\n dbClick?: (\r\n record: Record<string, unknown>,\r\n index: number\r\n ) => void;\r\n // 选择框的默认属性配置\r\n getCheckboxProps?: (\r\n record: unknown\r\n ) => Record<string, unknown> | undefined; // 返回一个对象或者 undefined\r\n // 点击行号激活的class\r\n activeRowClass?: string;\r\n // 复选框方式\r\n selection?: string;\r\n // 切换分页是否保留选中的ID\r\n keepSelected?: boolean;\r\n}\r\n\r\n// 定义 Props 类型,支持泛型\r\nexport const tableProps = <T = unknown,>() => ({\r\n height: { type: Number, default: 0 },\r\n data: { type: Array as PropType<T[]>, default: () => [] }, // 泛型约束\r\n loading: { type: Boolean, default: false },\r\n rowKey: { type: String, default: \"id\" },\r\n bordered: { type: Boolean, default: false },\r\n size: {\r\n type: String as PropType<SizeType>,\r\n default: \"small\"\r\n },\r\n keys: {\r\n type: Array as PropType<Key[]>,\r\n default: () => []\r\n },\r\n config: {\r\n type: Object as PropType<Config<T>>,\r\n required: true\r\n }\r\n});\r\n\r\nexport type TableProps = Partial<\r\n ExtractPropTypes<ReturnType<typeof tableProps>>\r\n>;\r\n\r\n// 分页组件默认配置\r\nconst defaultPaginationProps: PaginationProps = {\r\n defaultPageSize: 20,\r\n disabled: false,\r\n hideOnSinglePage: false,\r\n pageSize: 20,\r\n pageSizeOptions: [\"20\", \"40\", \"60\", \"80\", \"99\"],\r\n responsive: false,\r\n showLessItems: false,\r\n showQuickJumper: true,\r\n showSizeChanger: true, // 默认展示切换器\r\n showTotal: total => `总共 ${total} 条数据`,\r\n simple: false,\r\n size: \"default\",\r\n total: 0\r\n};\r\n\r\n// 表格默认配置\r\nconst defaultConfig: Config = {\r\n columns: [],\r\n pagination: undefined,\r\n paginationConfig: defaultPaginationProps,\r\n activeRowClass: \"\",\r\n selection: \"N\",\r\n keepSelected: false\r\n};\r\n\r\nconst paginationStyle = css`\r\n display: flex;\r\n justify-content: center;\r\n padding-top: 6px;\r\n`;\r\n\r\n// 定义泛型组件\r\nconst DTable = defineComponent({\r\n name: \"DTable\",\r\n props: tableProps(), // 初始泛型设置为 `unknown`\r\n emits: [\"update:keys\"],\r\n setup(props, { emit, slots, attrs }) {\r\n // 保存选中的唯一id\r\n const selectedRowKeys = ref<Key[]>(props.keys || []);\r\n // 计算表格高度\r\n //const height = computed(() => props.height);\r\n\r\n const { columns, data, pagination } = useProps();\r\n const { tableSlots } = useSlots();\r\n const { paginationConfig, onPaginationChange } =\r\n usePagination();\r\n const { tableRef, tableHeight, antTableBodyRef } =\r\n useHeight();\r\n const rowSelection = useRowSelection();\r\n\r\n onMounted(() => {});\r\n\r\n /**\r\n * props计算属性处理\r\n */\r\n function useProps() {\r\n // 定义计算属性\r\n const _config = computed(() =>\r\n merge({}, defaultConfig, props.config)\r\n );\r\n const columns = computed(() => _config.value.columns);\r\n const data = computed(() => props.data || []);\r\n const pagination = computed(\r\n () => _config.value.pagination || false\r\n );\r\n\r\n return {\r\n columns,\r\n data,\r\n pagination\r\n };\r\n }\r\n\r\n /**\r\n * 插槽处理\r\n */\r\n /**\r\n * 插槽处理\r\n * 假设 slots 已经在外部作用域定义(如 setup(props, { slots }))\r\n */\r\n function useSlots() {\r\n const tableSlots = {\r\n // --- 单元格类 ---\r\n bodyCell: (params: any) => slots.bodyCell?.(params),\r\n headerCell: (params: any) =>\r\n slots.headerCell?.(params), // 自定义表头\r\n\r\n // --- 展开与总结 ---\r\n expandedRowRender: (params: any) =>\r\n slots.expandedRowRender?.(params), // 额外展开行内容\r\n expandIcon: (params: any) =>\r\n slots.expandIcon?.(params), // 自定义展开图标\r\n summary: () => slots.summary?.(), // 总结行\r\n\r\n // --- 筛选与搜索 ---\r\n customFilterDropdown: (params: any) =>\r\n slots.customFilterDropdown?.(params), // 自定义筛选菜单\r\n customFilterIcon: (params: any) =>\r\n slots.customFilterIcon?.(params), // 自定义筛选图标\r\n\r\n // --- 装饰类 ---\r\n title: () => slots.title?.(), // 表格顶部标题\r\n footer: () => slots.footer?.(), // 表格底部页脚\r\n emptyText: () => slots.emptyText?.() // 自定义空状态内容\r\n };\r\n\r\n return {\r\n tableSlots\r\n };\r\n }\r\n\r\n function useHeight() {\r\n const tableRef = ref();\r\n const tableHeight = ref(0);\r\n\r\n // 表格body对象\r\n const antTableBodyRef = ref<HTMLElement>();\r\n\r\n watch(\r\n () => props.height,\r\n val => {\r\n if (val > 0) {\r\n // 使用 nextTick + requestAnimationFrame 确保 DOM 完全渲染\r\n nextTick(() => {\r\n requestAnimationFrame(() => {\r\n _tableBodyHeight(val);\r\n });\r\n });\r\n }\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n function _tableBodyHeight(height: number) {\r\n const tableEl = tableRef.value?.$el as\r\n | HTMLElement\r\n | undefined;\r\n if (!tableEl) return;\r\n\r\n // 表头高度 - 增加空值检查\r\n const headerEl = tableEl.getElementsByClassName(\r\n \"ant-table-header\"\r\n )[0] as HTMLElement | undefined;\r\n const headerHeight = headerEl\r\n ? useEleHeight(headerEl)\r\n : 0;\r\n\r\n // 分页 - 增加空值检查\r\n const paginationEl = tableEl.getElementsByClassName(\r\n \"d-pagination\"\r\n )[0] as HTMLElement | undefined;\r\n let paginationHeight = 0;\r\n if (paginationEl) {\r\n paginationEl.style.marginBottom = \"0\";\r\n paginationHeight =\r\n useEleHeight(paginationEl) ?? 0;\r\n }\r\n\r\n // 总结行 - 增加空值检查\r\n const summaryEl = tableEl.getElementsByClassName(\r\n \"ant-table-summary\"\r\n )[0] as HTMLElement | undefined;\r\n const summaryHeight = summaryEl\r\n ? (useEleHeight(summaryEl) ?? 0)\r\n : 0;\r\n\r\n // 计算最终高度,确保不为负数\r\n tableHeight.value = Math.max(\r\n 0,\r\n height -\r\n paginationHeight -\r\n headerHeight -\r\n summaryHeight\r\n );\r\n\r\n antTableBodyRef.value =\r\n tableEl.getElementsByClassName(\r\n \"ant-table-body\"\r\n )[0] as HTMLElement;\r\n\r\n if (antTableBodyRef.value) {\r\n // 设置body高度\r\n antTableBodyRef.value.style.height =\r\n tableHeight.value + \"px\";\r\n }\r\n }\r\n\r\n return {\r\n tableRef,\r\n tableHeight,\r\n antTableBodyRef\r\n };\r\n }\r\n\r\n function usePagination() {\r\n const { changePagination } = props.config!;\r\n const paginationConfig =\r\n computed<TablePaginationConfig>(() => {\r\n return {\r\n position: [\"bottomCenter\"], // 符合类型的分页位置\r\n total: 0, // 确保符合要求\r\n ...defaultPaginationProps,\r\n ...pagination.value\r\n };\r\n });\r\n\r\n const onPaginationChange = (\r\n page: number,\r\n pageSize: number\r\n ) => {\r\n const { selection, keepSelected } = props.config!;\r\n changePagination?.(page, pageSize);\r\n // 切换分页的时候,表体滚动到顶部\r\n antTableBodyRef.value!.scrollTop = 0;\r\n\r\n // 如果当前为单选或未开启分页保留数据选中的数据都会被清除\r\n // 清空历史选中数据\r\n if (selection === \"S\" || !keepSelected) {\r\n // 只有selectedRowKeys被清空时,这里才触发update;\r\n // 不加判断,会出现执行update后,父组件监听的watch每次都会触发\r\n if (selectedRowKeys.value.length > 0) {\r\n selectedRowKeys.value = [];\r\n emit(\"update:keys\", selectedRowKeys.value);\r\n }\r\n }\r\n };\r\n\r\n return {\r\n paginationConfig,\r\n onPaginationChange\r\n };\r\n }\r\n\r\n function useCustomRow() {\r\n return (record: never, index: number) => {\r\n // 用于存储 在某个事件内双击两次 则取消单击事件业务\r\n let clickTimeout: number = 0;\r\n const {\r\n rowKey,\r\n config: {\r\n click,\r\n dbClick,\r\n selection,\r\n getCheckboxProps\r\n } = {} as Config\r\n } = props;\r\n\r\n // 当前点击行的唯一ID,通过rowKey从record中取值\r\n const id = record[rowKey];\r\n\r\n /**\r\n * 处理单击事件业务\r\n * @param record 当前点击行数据\r\n */\r\n const onClick = () => {\r\n // 获取getCheckboxProps方法,如果不等于undefined,则执行方法获取disabled的值\r\n // 否则checkEnable为false\r\n const checkEnable =\r\n getCheckboxProps === undefined\r\n ? false\r\n : getCheckboxProps(record)?.disabled;\r\n\r\n if (selection === \"N\" || checkEnable) {\r\n // 1. 未开启复选框 则不处理数据选中操作\r\n // 2. 如果当前点击的行 包含在禁用的数据项目里面 则不进行选中操作\r\n // 3. checkEnable 用来判断复选框属性的值,如果当前的数据满足getCheckboxProps这个\r\n // 方法返回的disabled为true就不执行\r\n // 复选框选中的操作\r\n return;\r\n }\r\n const haveState = selectedRowKeys.value.some(\r\n (key: Key) => key === id\r\n );\r\n if (haveState) {\r\n //如果 当前点击行的ID 已存在 那么直接过滤掉当前的id\r\n selectedRowKeys.value =\r\n selectedRowKeys.value.filter(\r\n (key: Key) => key !== id\r\n );\r\n } else {\r\n if (selection === \"S\") {\r\n //单选的时候 清空选中的数据 再赋值新的ID\r\n selectedRowKeys.value = [];\r\n selectedRowKeys.value.push(id);\r\n } else {\r\n //多选直接追加ID\r\n selectedRowKeys.value.push(id);\r\n }\r\n }\r\n emit(\"update:keys\", selectedRowKeys.value);\r\n };\r\n\r\n function activeRowBackground(event: Event) {\r\n const { activeRowClass } = props.config!;\r\n if (!activeRowClass) return;\r\n const curEl = event.target;\r\n if (curEl instanceof HTMLElement) {\r\n const parentElement =\r\n curEl.parentNode as HTMLElement;\r\n if (\r\n parentElement &&\r\n parentElement.classList.contains(\r\n activeRowClass\r\n )\r\n ) {\r\n parentElement.classList.remove(\r\n activeRowClass\r\n );\r\n } else {\r\n parentElement?.classList.add(activeRowClass);\r\n }\r\n }\r\n }\r\n\r\n return {\r\n onClick: (event: Event) => {\r\n clearTimeout(clickTimeout);\r\n clickTimeout = window.setTimeout(() => {\r\n // 处理背景激活逻辑\r\n activeRowBackground(event);\r\n // 处理单击事件业务\r\n onClick();\r\n // 回传数据 自定义单击后的业务\r\n click?.(record, index);\r\n }, 200);\r\n }, // 点击行\r\n onDblclick: () => {\r\n clearTimeout(clickTimeout);\r\n // 回传数据 自定义单击后的业务\r\n dbClick?.(record, index);\r\n }\r\n };\r\n };\r\n }\r\n\r\n function useRowSelection() {\r\n const rowSelection = ref<\r\n TableRowSelection<unknown> | undefined\r\n >(undefined);\r\n\r\n const {\r\n rowKey,\r\n config: { getCheckboxProps, selection } = {}\r\n } = props;\r\n\r\n const onSelect: SelectionSelectFn<unknown> = (\r\n record,\r\n selected\r\n ) => {\r\n const data = record as Record<string, never>;\r\n if (selection === \"S\") {\r\n selectedRowKeys.value = [];\r\n selectedRowKeys.value = selected\r\n ? [data[rowKey]]\r\n : [];\r\n } else {\r\n selectedRowKeys.value = selected\r\n ? selectedRowKeys.value.concat(data[rowKey])\r\n : selectedRowKeys.value.filter(\r\n (key: Key) => key !== data[rowKey]\r\n );\r\n }\r\n emit(\"update:keys\", selectedRowKeys.value);\r\n };\r\n\r\n const onSelectAll = (\r\n selected: boolean,\r\n selectedRows: unknown[],\r\n changeRows: unknown[]\r\n ) => {\r\n const _ids = changeRows.map(\r\n (record: unknown) =>\r\n (record as { [key: string]: never })[rowKey]\r\n );\r\n selectedRowKeys.value = selected\r\n ? selectedRowKeys.value.concat(_ids)\r\n : selectedRowKeys.value.filter(\r\n (key: Key) => !_ids.includes(key as never)\r\n );\r\n\r\n emit(\"update:keys\", selectedRowKeys.value);\r\n };\r\n\r\n //TODO 这个方法在单选的时候 会出现异常bug,暂时不知道怎么解决\r\n const onChange = (\r\n rowKeys: Key[],\r\n selectedRows: unknown[]\r\n ) => {\r\n // 显式转换 selectedRows 的类型为 Record<string, never>[]\r\n const data = selectedRows as Record<\r\n string,\r\n never\r\n >[];\r\n // 等于0 说明是取消全选,反之\r\n const selected = data.length !== 0;\r\n // 显式转换 _ids 的类型为 Key[]\r\n const _ids: Key[] = props.data.map(\r\n record =>\r\n (record as Record<string, unknown>)[\r\n rowKey\r\n ] as Key\r\n );\r\n\r\n // 更新 selectedRowKeys\r\n // selected 为true,说明是全选,那么rowKeys是权限后的数组ID,需要过滤掉selectedRowKeys里的不在id才进行添加,\r\n // 否则会出现,比如一开始选择了两条数据,然后再进行全选的话 会多出两个重复ID\r\n // selected 为false,说明是取消全选,那么需要从selectedRowKeys过滤掉 _ids的id\r\n selectedRowKeys.value = selected\r\n ? selectedRowKeys.value.concat(\r\n rowKeys.filter(\r\n (key: Key) =>\r\n !selectedRowKeys.value.includes(key)\r\n )\r\n )\r\n : selectedRowKeys.value.filter(\r\n (key: Key) => !_ids.includes(key)\r\n );\r\n emit(\"update:keys\", selectedRowKeys.value);\r\n };\r\n\r\n // 监听父组件手动改变keys 重新赋值给 表格选中变量selectedRowKeys\r\n // 否则父组件 改变keys后当前selectedRowKeys还是原来的值\r\n watch(\r\n () => props.keys,\r\n val => {\r\n selectedRowKeys.value = val;\r\n },\r\n {\r\n deep: true,\r\n immediate: true\r\n }\r\n );\r\n\r\n watch(\r\n () => props.config?.selection,\r\n val => {\r\n if (val !== \"N\") {\r\n rowSelection.value = {\r\n selectedRowKeys: selectedRowKeys as never,\r\n onSelect,\r\n onSelectAll,\r\n fixed: true,\r\n columnTitle:\r\n selection === \"S\" ? \"选择\" : null,\r\n columnWidth: selection === \"S\" ? 60 : 40,\r\n getCheckboxProps: getCheckboxProps as never\r\n };\r\n } else {\r\n rowSelection.value = undefined;\r\n }\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n return rowSelection;\r\n }\r\n\r\n return () => (\r\n <Flex vertical={true} ref={tableRef}>\r\n <Table\r\n {...attrs}\r\n loading={props.loading}\r\n size={props.size}\r\n bordered={props.bordered}\r\n dataSource={data.value}\r\n columns={columns.value}\r\n rowSelection={rowSelection.value}\r\n customRow={useCustomRow() as never}\r\n pagination={false}\r\n rowKey={props.rowKey}\r\n v-slots={tableSlots}\r\n scroll={{\r\n y: tableHeight.value,\r\n x: \"100%\",\r\n scrollToFirstRowOnChange: true\r\n }}\r\n />\r\n {pagination.value && (\r\n <div class={[paginationStyle, \"d-pagination\"]}>\r\n {\r\n <Pagination\r\n v-model:current={\r\n paginationConfig.value.current\r\n }\r\n v-model:pageSize={\r\n paginationConfig.value.pageSize\r\n }\r\n total={paginationConfig.value.total}\r\n disabled={props.loading}\r\n show-size-changer\r\n size={\"default\"}\r\n hide-on-single-page={\r\n paginationConfig.value.hideOnSinglePage\r\n }\r\n show-quick-jumper={\r\n paginationConfig.value.showQuickJumper\r\n }\r\n default-page-size={\r\n paginationConfig.value.defaultPageSize\r\n }\r\n page-size-options={\r\n paginationConfig.value.pageSizeOptions\r\n }\r\n show-total={\r\n paginationConfig.value.showTotal\r\n }\r\n onChange={onPaginationChange}\r\n showLessItems={true}\r\n ></Pagination>\r\n }\r\n </div>\r\n )}\r\n </Flex>\r\n );\r\n }\r\n});\r\n\r\nexport const useEleHeight = (\r\n node: Element | undefined | null\r\n): number => {\r\n if (!node) return 0;\r\n\r\n const list = [\r\n \"margin-top\",\r\n \"margin-bottom\",\r\n \"border-top\",\r\n \"border-bottom\",\r\n \"padding-top\",\r\n \"padding-bottom\",\r\n \"height\"\r\n ];\r\n const style = getComputedStyle(node);\r\n return list\r\n .map(k => parseInt(style.getPropertyValue(k), 10) || 0)\r\n .reduce((prev, cur) => {\r\n return prev + cur;\r\n }, 0);\r\n};\r\n\r\nexport default DTable;\r\n"],"names":["tableProps","height","type","Number","default","data","Array","loading","Boolean","rowKey","String","bordered","size","keys","config","Object","required","defaultPaginationProps","defaultPageSize","disabled","hideOnSinglePage","pageSize","pageSizeOptions","responsive","showLessItems","showQuickJumper","showSizeChanger","showTotal","total","simple","defaultConfig","columns","pagination","undefined","paginationConfig","activeRowClass","selection","keepSelected","paginationStyle","css","DTable","defineComponent","name","props","emits","setup","emit","slots","attrs","selectedRowKeys","ref","useProps","tableSlots","useSlots","onPaginationChange","usePagination","tableRef","tableHeight","antTableBodyRef","useHeight","rowSelection","useRowSelection","onMounted","_config","computed","merge","value","bodyCell","params","headerCell","expandedRowRender","expandIcon","summary","customFilterDropdown","customFilterIcon","title","footer","emptyText","watch","val","nextTick","requestAnimationFrame","_tableBodyHeight","immediate","tableEl","$el","headerEl","getElementsByClassName","headerHeight","useEleHeight","paginationEl","paginationHeight","style","marginBottom","summaryEl","summaryHeight","Math","max","changePagination","position","page","scrollTop","length","useCustomRow","record","index","clickTimeout","click","dbClick","getCheckboxProps","id","onClick","checkEnable","haveState","some","key","filter","push","activeRowBackground","event","curEl","target","HTMLElement","parentElement","parentNode","classList","contains","remove","add","clearTimeout","window","setTimeout","onDblclick","onSelect","selected","concat","onSelectAll","selectedRows","changeRows","_ids","map","includes","onChange","rowKeys","deep","fixed","columnTitle","columnWidth","_createVNode","Flex","Table","_mergeProps","y","x","scrollToFirstRowOnChange","Pagination","current","$event","node","list","getComputedStyle","k","parseInt","getPropertyValue","reduce","prev","cur"],"mappings":"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"}