ct-component-plus 0.0.43 → 0.0.44

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 (96) hide show
  1. package/README.md +3 -3
  2. package/package.json +36 -36
  3. package/packages/components/button/index.js +8 -8
  4. package/packages/components/button/src/button.vue +171 -171
  5. package/packages/components/cascader/index.js +7 -7
  6. package/packages/components/cascader/src/cascader.vue +247 -247
  7. package/packages/components/cascader/src/ct-cascader.vue +260 -260
  8. package/packages/components/cascader/src/index.js +50 -50
  9. package/packages/components/checkbox/index.js +7 -7
  10. package/packages/components/checkbox/src/checkbox.vue +51 -51
  11. package/packages/components/checkbox/src/index.js +12 -12
  12. package/packages/components/date-picker/index.js +8 -8
  13. package/packages/components/date-picker/src/clear-icon.vue +2 -2
  14. package/packages/components/date-picker/src/date-icon.vue +2 -2
  15. package/packages/components/date-picker/src/date-picker.vue +77 -77
  16. package/packages/components/date-picker/src/index.js +33 -33
  17. package/packages/components/dialog/index.js +8 -8
  18. package/packages/components/dialog/src/dialog.vue +103 -103
  19. package/packages/components/empty/index.js +8 -8
  20. package/packages/components/empty/src/empty.vue +97 -97
  21. package/packages/components/index.js +81 -81
  22. package/packages/components/input/index.js +7 -7
  23. package/packages/components/input/src/index.js +13 -13
  24. package/packages/components/input/src/input.vue +106 -106
  25. package/packages/components/input-range/index.js +7 -7
  26. package/packages/components/input-range/src/index.js +29 -29
  27. package/packages/components/input-range/src/input-range.vue +233 -233
  28. package/packages/components/loading/index.js +7 -7
  29. package/packages/components/loading/src/CtLoading.vue +74 -74
  30. package/packages/components/loading/src/beating.vue +71 -71
  31. package/packages/components/loading/src/progress.vue +120 -120
  32. package/packages/components/loading/src/spinner.vue +38 -38
  33. package/packages/components/menu/index.js +7 -7
  34. package/packages/components/menu/src/item.vue +46 -46
  35. package/packages/components/menu/src/link.vue +28 -28
  36. package/packages/components/menu/src/logo.vue +25 -25
  37. package/packages/components/menu/src/menu-item.vue +103 -103
  38. package/packages/components/menu/src/menu.vue +191 -191
  39. package/packages/components/menu/src/utils/index.js +4 -4
  40. package/packages/components/message/icon/ErrorIcon.vue +25 -25
  41. package/packages/components/message/icon/InfoIcon.vue +25 -25
  42. package/packages/components/message/icon/SuccessIcon.vue +25 -25
  43. package/packages/components/message/icon/WarningIcon.vue +25 -25
  44. package/packages/components/message/index.js +8 -8
  45. package/packages/components/message/src/method.js +54 -54
  46. package/packages/components/message-box/index.js +7 -7
  47. package/packages/components/message-box/src/message-box.vue +107 -107
  48. package/packages/components/page/index.js +7 -7
  49. package/packages/components/page/src/modules/DownloadButton.vue +21 -21
  50. package/packages/components/page/src/modules/TableTitle.vue +151 -151
  51. package/packages/components/page/src/page.vue +382 -382
  52. package/packages/components/pagination/index.js +7 -7
  53. package/packages/components/pagination/src/pagination.vue +36 -36
  54. package/packages/components/radio/index.js +7 -7
  55. package/packages/components/radio/src/index.js +12 -12
  56. package/packages/components/radio/src/radio.vue +47 -47
  57. package/packages/components/search-box/index.js +24 -24
  58. package/packages/components/search-box/src/index.js +29 -29
  59. package/packages/components/search-box/src/search-box.vue +250 -250
  60. package/packages/components/search-box/src/slot.vue +4 -4
  61. package/packages/components/select/index.js +7 -7
  62. package/packages/components/select/src/arrow-down.vue +2 -2
  63. package/packages/components/select/src/clear-icon.vue +2 -2
  64. package/packages/components/select/src/empty.vue +13 -13
  65. package/packages/components/select/src/index.js +51 -51
  66. package/packages/components/select/src/select.vue +380 -380
  67. package/packages/components/table/index.js +7 -7
  68. package/packages/components/table/src/TableSort.vue +179 -179
  69. package/packages/components/table/src/index.js +78 -70
  70. package/packages/components/table/src/table.vue +288 -287
  71. package/packages/components/tabs/index.js +7 -7
  72. package/packages/components/tabs/src/tabs.vue +225 -225
  73. package/packages/components/year-select/index.js +7 -7
  74. package/packages/components/year-select/src/index.js +44 -44
  75. package/packages/components/year-select/src/year-select.vue +273 -273
  76. package/packages/constants/aria.ts +17 -17
  77. package/packages/constants/index.ts +1 -1
  78. package/packages/directives/click-outside/index.ts +118 -118
  79. package/packages/echarts/bar/index.js +63 -63
  80. package/packages/echarts/base.js +99 -99
  81. package/packages/echarts/line/index.js +106 -106
  82. package/packages/hooks/index.js +5 -5
  83. package/packages/hooks/use-buried/index.js +46 -46
  84. package/packages/hooks/use-checked-all/index.js +37 -37
  85. package/packages/hooks/use-echarts/index.js +1 -1
  86. package/packages/hooks/use-echarts/use-bar/index.js +72 -72
  87. package/packages/hooks/use-echarts/use-line/index.js +88 -88
  88. package/packages/hooks/use-namespace/index.js +65 -65
  89. package/packages/hooks/use-search-component/index.js +28 -28
  90. package/packages/style/element.less +725 -725
  91. package/packages/style/index.js +2 -2
  92. package/packages/style/init.less +114 -114
  93. package/packages/utils/index.js +1 -1
  94. package/packages/utils/operate.js +77 -77
  95. package/packages/utils/table.js +135 -0
  96. package/packages/utils/types.js +35 -35
@@ -1,287 +1,288 @@
1
- <template>
2
- <div :class="[ns.b()]">
3
- <div :class="[ns.e('container')]">
4
- <el-table
5
- ref="tableRef"
6
- :class="[ns.e('body')]"
7
- :data="showData"
8
- :span-method="spanMethod"
9
- @selection-change="handleSelectChange"
10
- :row-key="rowKey || 'rowKey'"
11
- v-bind="$attrs">
12
- <el-table-column
13
- v-if="isMultiSelect"
14
- type="selection"
15
- width="88"
16
- v-bind="multiSelectAttr"
17
- :reserve-selection="true"
18
- :selectable="judgeSelectable">
19
- </el-table-column>
20
- <el-table-column
21
- v-for="(column, index) in columnData"
22
- :key="column.value + '-' + column.label"
23
- :label="column.label + ''"
24
- :prop="column.value || ''"
25
- :width="judgeWidth(column, index)"
26
- :min-width="judgeMinWidth(column, index)"
27
- :sort-orders="['ascending', 'descending']"
28
- :sortable="column.sortable ? 'custom' : false"
29
- :align="getColumnAlign(column)"
30
- :fixed="column.fixed || false"
31
- :show-overflow-tooltip="showOverflowTooltip"
32
- v-bind="column.rawAttr || {}">
33
- <template #header="scope" v-if="column.slotHeader">
34
- <slot
35
- :name="column.value + 'Header'"
36
- v-bind="scope"
37
- :column="column"
38
- :label="column.label"
39
- :value="column.value">
40
- </slot>
41
- </template>
42
- <template #default="scope">
43
- <slot
44
- :name="column.value"
45
- :value="scope.row[column.value]"
46
- v-bind="scope"
47
- :column="column">
48
- <span>{{ scope.row[column.value] }}</span>
49
- </slot>
50
- <el-table-column
51
- v-for="(column1, index) in column.children"
52
- :key="column1.value + '-' + column1.label"
53
- :label="column1.label + ''"
54
- :prop="column1.value"
55
- :width="judgeWidth(column1, index)"
56
- :min-width="judgeMinWidth(column1, index)"
57
- :sort-orders="['ascending', 'descending']"
58
- :sortable="column1.sortable ? 'custom' : false"
59
- :align="getColumnAlign(column1)"
60
- :fixed="column1.fixed || false"
61
- :show-overflow-tooltip="showOverflowTooltip"
62
- v-bind="column1.rawAttr || {}">
63
- <template #default="scope">
64
- <slot
65
- :name="column1.value"
66
- :value="scope.row[column1.value]"
67
- v-bind="scope"
68
- :column="column1">
69
- <span>{{ scope.row[column1.value] }}</span>
70
- </slot>
71
- </template>
72
- </el-table-column>
73
- </template>
74
- </el-table-column>
75
- <template #empty>
76
- <slot name="empty">
77
- <component
78
- :is="tableEmptyDom"
79
- v-if="tableEmptyDom"
80
- :text="emptyText">
81
- </component>
82
- <span v-else>{{ emptyText }}</span>
83
- </slot>
84
- </template>
85
- </el-table>
86
- <ct-pagination
87
- :class="ns.e('pagination')"
88
- :pageSize="pageSize"
89
- :total="total"
90
- :current-page="pageNo"
91
- v-if="pageSize"
92
- @current-change="handleCurrentChange"></ct-pagination>
93
- </div>
94
- <Teleport :to="`#${teleportDom}`" v-if="teleportDom && teleportStatus">
95
- <table-sort v-model:sort-obj="sortObj" :sort-list="sortList"></table-sort>
96
- </Teleport>
97
- </div>
98
- </template>
99
-
100
- <script setup>
101
- import { computed, inject, onMounted, ref, watch } from "vue";
102
- import { useNamespace } from "../../../hooks";
103
- import { copyObj } from "../../../utils";
104
- import { tableEmits, tableProps } from "./index";
105
- import TableSort from "./TableSort.vue";
106
- const props = defineProps(tableProps);
107
- const emit = defineEmits(tableEmits);
108
- const tableEmptyDom = inject("$tableEmptyDom", null);
109
-
110
- const ns = useNamespace("table");
111
- const tableRef = ref(null);
112
- const total = computed(() => {
113
- return props.tableProps.tableData?.length;
114
- });
115
- const pageSize = computed(() => {
116
- return Number(props.pagination);
117
- });
118
- const pageNo = ref(1);
119
- const handleCurrentChange = (val) => {
120
- pageNo.value = val;
121
- };
122
- const showData = computed(() => {
123
- // const table = props.tableProps.tableData.map((item, index) => {
124
- // return {
125
- // ...item,
126
- // rowKey: `ct-row-${index}`,
127
- // };
128
- // });
129
- const table = props.tableProps.tableData;
130
- if (props.pagination) {
131
- return table.slice(
132
- (pageNo.value - 1) * pageSize.value,
133
- pageNo.value * pageSize.value
134
- );
135
- } else {
136
- return table || [];
137
- }
138
- });
139
- const columnData = computed(() => {
140
- return props.tableProps.columnData || [];
141
- });
142
- const getColumnAlign = (column) => {
143
- if (column.align) {
144
- return column.align;
145
- }
146
- if (props.alignLeftKeys && props.alignLeftKeys.includes(column.value)) {
147
- return "left";
148
- }
149
- if (props.alignRightKeys && props.alignRightKeys.includes(column.value)) {
150
- return "right";
151
- }
152
- return "center";
153
- };
154
- const judgeWidth = (column, index) => {
155
- // 判断处理column的width
156
- const columnWidth = props.columnWidth;
157
- return (
158
- column.fixedWidth ||
159
- (columnWidth &&
160
- typeof columnWidth[index] === "object" &&
161
- columnWidth[index].fixed) ||
162
- ""
163
- );
164
- };
165
- const judgeMinWidth = (column, index) => {
166
- // 判断处理column的min-width
167
- const columnWidth = props.columnWidth;
168
- if (column.width) {
169
- return column.width;
170
- }
171
- if (columnWidth && columnWidth[index]) {
172
- return typeof columnWidth[index] === "object"
173
- ? columnWidth[index].width
174
- : columnWidth[index];
175
- }
176
- return "auto";
177
- };
178
-
179
- let spanObj = {};
180
- watch(
181
- () => props.mergeList,
182
- (newVal, oldVal) => {
183
- /**
184
- * 将数组型的合并单元格数据转换成对象型,转换示例如下:
185
- * {row: 1, col: 1, span: [2, 2]} =>
186
- * {
187
- * 1: { 1: [2,2], 2: [0,0] },
188
- * 2: { 1: [0,0], 2: [0,0] }
189
- * }
190
- * 这里的合并数据对象的第一层的key表示对应的行,第二层的key对应的是列, 行和列都是从1开始的索引
191
- */
192
- let spanObjRes = {};
193
- if (Array.isArray(newVal)) {
194
- newVal.forEach((item) => {
195
- const { row, col, span } = item;
196
- const spanRow = span ? span[0] : 0;
197
- const spanCol = span ? span[1] : 0;
198
- // 处理一项合并单元格数据,设置对应的行和列的合并数据,以及涉及到的其他行和列都需要被合并
199
- for (let i = 1; i <= spanRow; i++) {
200
- for (let j = 1; j <= spanCol; j++) {
201
- // 除了起始行、起始列,其他行和列都是需要被合并的,即都需要设置为[0,0]
202
- let res = i === 1 && j === 1 ? span : [0, 0];
203
- const rowKey = row + i - 1;
204
- const colKey = col + j - 1;
205
- if (spanObjRes[rowKey]) {
206
- spanObjRes[rowKey][colKey] = res;
207
- } else {
208
- spanObjRes[rowKey] = {
209
- [colKey]: res,
210
- };
211
- }
212
- }
213
- }
214
- });
215
- }
216
- spanObj = spanObjRes;
217
- },
218
- { immediate: true }
219
- );
220
- const spanMethod = ({ rowIndex, columnIndex }) => {
221
- const rowKey = rowIndex + 1;
222
- const colKey = columnIndex + 1;
223
-
224
- if (spanObj[rowKey]) {
225
- if (spanObj[rowKey][colKey]) {
226
- return spanObj[rowKey][colKey];
227
- }
228
- }
229
- return [1, 1];
230
- };
231
-
232
- const selectedArr = computed({
233
- get() {
234
- return props.multiSelect || [];
235
- },
236
- set(val) {
237
- emit("update:multiSelect", val);
238
- },
239
- });
240
- watch(
241
- () => props.multiSelect,
242
- (val, oldVal) => {
243
- if (val && val.length == 0) {
244
- tableRef.value.clearSelection();
245
- }
246
- }
247
- );
248
- function handleSelectChange(val) {
249
- selectedArr.value = copyObj(val);
250
- }
251
- function judgeSelectable(row) {
252
- if (props.selectableFn) {
253
- return props.selectableFn(row);
254
- } else {
255
- return true;
256
- }
257
- }
258
-
259
- const teleportStatus = ref(false);
260
- const sortObj = computed({
261
- get() {
262
- return props.defaultSort;
263
- },
264
- set(val) {
265
- emit("update:defaultSort", val);
266
- },
267
- });
268
- const sortList = computed(() => {
269
- return columnData.value.filter((item) => item.sortable);
270
- });
271
- onMounted(() => {
272
- teleportStatus.value = true; //直到dom挂载完毕再挂载teleport组件
273
- });
274
-
275
- defineExpose({ tableRef });
276
- </script>
277
- <style lang="less" scoped>
278
- .ct-table__body {
279
- width: 100%;
280
- }
281
-
282
- .ct-table__pagination {
283
- margin-top: 24px;
284
- display: flex;
285
- justify-content: flex-end;
286
- }
287
- </style>
1
+ <template>
2
+ <div :class="[ns.b()]">
3
+ <div :class="[ns.e('container')]">
4
+ <el-table
5
+ ref="tableRef"
6
+ :class="[ns.e('body')]"
7
+ :data="showData"
8
+ :span-method="spanMethod"
9
+ @selection-change="handleSelectChange"
10
+ :row-key="rowKey || 'rowKey'"
11
+ v-bind="$attrs"
12
+ v-sticky="sticky">
13
+ <el-table-column
14
+ v-if="isMultiSelect"
15
+ type="selection"
16
+ width="88"
17
+ v-bind="multiSelectAttr"
18
+ :reserve-selection="true"
19
+ :selectable="judgeSelectable">
20
+ </el-table-column>
21
+ <el-table-column
22
+ v-for="(column, index) in columnData"
23
+ :key="column.value + '-' + column.label"
24
+ :label="column.label + ''"
25
+ :prop="column.value || ''"
26
+ :width="judgeWidth(column, index)"
27
+ :min-width="judgeMinWidth(column, index)"
28
+ :sort-orders="['ascending', 'descending']"
29
+ :sortable="column.sortable ? 'custom' : false"
30
+ :align="getColumnAlign(column)"
31
+ :fixed="column.fixed || false"
32
+ :show-overflow-tooltip="showOverflowTooltip"
33
+ v-bind="column.rawAttr || {}">
34
+ <template #header="scope" v-if="column.slotHeader">
35
+ <slot
36
+ :name="column.value + 'Header'"
37
+ v-bind="scope"
38
+ :column="column"
39
+ :label="column.label"
40
+ :value="column.value">
41
+ </slot>
42
+ </template>
43
+ <template #default="scope">
44
+ <slot
45
+ :name="column.value"
46
+ :value="scope.row[column.value]"
47
+ v-bind="scope"
48
+ :column="column">
49
+ <span>{{ scope.row[column.value] }}</span>
50
+ </slot>
51
+ <el-table-column
52
+ v-for="(column1, index) in column.children"
53
+ :key="column1.value + '-' + column1.label"
54
+ :label="column1.label + ''"
55
+ :prop="column1.value"
56
+ :width="judgeWidth(column1, index)"
57
+ :min-width="judgeMinWidth(column1, index)"
58
+ :sort-orders="['ascending', 'descending']"
59
+ :sortable="column1.sortable ? 'custom' : false"
60
+ :align="getColumnAlign(column1)"
61
+ :fixed="column1.fixed || false"
62
+ :show-overflow-tooltip="showOverflowTooltip"
63
+ v-bind="column1.rawAttr || {}">
64
+ <template #default="scope">
65
+ <slot
66
+ :name="column1.value"
67
+ :value="scope.row[column1.value]"
68
+ v-bind="scope"
69
+ :column="column1">
70
+ <span>{{ scope.row[column1.value] }}</span>
71
+ </slot>
72
+ </template>
73
+ </el-table-column>
74
+ </template>
75
+ </el-table-column>
76
+ <template #empty>
77
+ <slot name="empty">
78
+ <component
79
+ :is="tableEmptyDom"
80
+ v-if="tableEmptyDom"
81
+ :text="emptyText">
82
+ </component>
83
+ <span v-else>{{ emptyText }}</span>
84
+ </slot>
85
+ </template>
86
+ </el-table>
87
+ <ct-pagination
88
+ :class="ns.e('pagination')"
89
+ :pageSize="pageSize"
90
+ :total="total"
91
+ :current-page="pageNo"
92
+ v-if="pageSize"
93
+ @current-change="handleCurrentChange"></ct-pagination>
94
+ </div>
95
+ <Teleport :to="`#${teleportDom}`" v-if="teleportDom && teleportStatus">
96
+ <table-sort v-model:sort-obj="sortObj" :sort-list="sortList"></table-sort>
97
+ </Teleport>
98
+ </div>
99
+ </template>
100
+
101
+ <script setup>
102
+ import { computed, inject, onMounted, ref, watch } from "vue";
103
+ import { useNamespace } from "../../../hooks";
104
+ import { copyObj } from "../../../utils";
105
+ import { tableEmits, tableProps } from "./index";
106
+ import TableSort from "./TableSort.vue";
107
+ const props = defineProps(tableProps);
108
+ const emit = defineEmits(tableEmits);
109
+ const tableEmptyDom = inject("$tableEmptyDom", null);
110
+
111
+ const ns = useNamespace("table");
112
+ const tableRef = ref(null);
113
+ const total = computed(() => {
114
+ return props.tableProps.tableData?.length;
115
+ });
116
+ const pageSize = computed(() => {
117
+ return Number(props.pagination);
118
+ });
119
+ const pageNo = ref(1);
120
+ const handleCurrentChange = (val) => {
121
+ pageNo.value = val;
122
+ };
123
+ const showData = computed(() => {
124
+ // const table = props.tableProps.tableData.map((item, index) => {
125
+ // return {
126
+ // ...item,
127
+ // rowKey: `ct-row-${index}`,
128
+ // };
129
+ // });
130
+ const table = props.tableProps.tableData;
131
+ if (props.pagination) {
132
+ return table.slice(
133
+ (pageNo.value - 1) * pageSize.value,
134
+ pageNo.value * pageSize.value
135
+ );
136
+ } else {
137
+ return table || [];
138
+ }
139
+ });
140
+ const columnData = computed(() => {
141
+ return props.tableProps.columnData || [];
142
+ });
143
+ const getColumnAlign = (column) => {
144
+ if (column.align) {
145
+ return column.align;
146
+ }
147
+ if (props.alignLeftKeys && props.alignLeftKeys.includes(column.value)) {
148
+ return "left";
149
+ }
150
+ if (props.alignRightKeys && props.alignRightKeys.includes(column.value)) {
151
+ return "right";
152
+ }
153
+ return "center";
154
+ };
155
+ const judgeWidth = (column, index) => {
156
+ // 判断处理column的width
157
+ const columnWidth = props.columnWidth;
158
+ return (
159
+ column.fixedWidth ||
160
+ (columnWidth &&
161
+ typeof columnWidth[index] === "object" &&
162
+ columnWidth[index].fixed) ||
163
+ ""
164
+ );
165
+ };
166
+ const judgeMinWidth = (column, index) => {
167
+ // 判断处理column的min-width
168
+ const columnWidth = props.columnWidth;
169
+ if (column.width) {
170
+ return column.width;
171
+ }
172
+ if (columnWidth && columnWidth[index]) {
173
+ return typeof columnWidth[index] === "object"
174
+ ? columnWidth[index].width
175
+ : columnWidth[index];
176
+ }
177
+ return "auto";
178
+ };
179
+
180
+ let spanObj = {};
181
+ watch(
182
+ () => props.mergeList,
183
+ (newVal, oldVal) => {
184
+ /**
185
+ * 将数组型的合并单元格数据转换成对象型,转换示例如下:
186
+ * {row: 1, col: 1, span: [2, 2]} =>
187
+ * {
188
+ * 1: { 1: [2,2], 2: [0,0] },
189
+ * 2: { 1: [0,0], 2: [0,0] }
190
+ * }
191
+ * 这里的合并数据对象的第一层的key表示对应的行,第二层的key对应的是列, 行和列都是从1开始的索引
192
+ */
193
+ let spanObjRes = {};
194
+ if (Array.isArray(newVal)) {
195
+ newVal.forEach((item) => {
196
+ const { row, col, span } = item;
197
+ const spanRow = span ? span[0] : 0;
198
+ const spanCol = span ? span[1] : 0;
199
+ // 处理一项合并单元格数据,设置对应的行和列的合并数据,以及涉及到的其他行和列都需要被合并
200
+ for (let i = 1; i <= spanRow; i++) {
201
+ for (let j = 1; j <= spanCol; j++) {
202
+ // 除了起始行、起始列,其他行和列都是需要被合并的,即都需要设置为[0,0]
203
+ let res = i === 1 && j === 1 ? span : [0, 0];
204
+ const rowKey = row + i - 1;
205
+ const colKey = col + j - 1;
206
+ if (spanObjRes[rowKey]) {
207
+ spanObjRes[rowKey][colKey] = res;
208
+ } else {
209
+ spanObjRes[rowKey] = {
210
+ [colKey]: res,
211
+ };
212
+ }
213
+ }
214
+ }
215
+ });
216
+ }
217
+ spanObj = spanObjRes;
218
+ },
219
+ { immediate: true }
220
+ );
221
+ const spanMethod = ({ rowIndex, columnIndex }) => {
222
+ const rowKey = rowIndex + 1;
223
+ const colKey = columnIndex + 1;
224
+
225
+ if (spanObj[rowKey]) {
226
+ if (spanObj[rowKey][colKey]) {
227
+ return spanObj[rowKey][colKey];
228
+ }
229
+ }
230
+ return [1, 1];
231
+ };
232
+
233
+ const selectedArr = computed({
234
+ get() {
235
+ return props.multiSelect || [];
236
+ },
237
+ set(val) {
238
+ emit("update:multiSelect", val);
239
+ },
240
+ });
241
+ watch(
242
+ () => props.multiSelect,
243
+ (val, oldVal) => {
244
+ if (val && val.length == 0) {
245
+ tableRef.value.clearSelection();
246
+ }
247
+ }
248
+ );
249
+ function handleSelectChange(val) {
250
+ selectedArr.value = copyObj(val);
251
+ }
252
+ function judgeSelectable(row) {
253
+ if (props.selectableFn) {
254
+ return props.selectableFn(row);
255
+ } else {
256
+ return true;
257
+ }
258
+ }
259
+
260
+ const teleportStatus = ref(false);
261
+ const sortObj = computed({
262
+ get() {
263
+ return props.defaultSort;
264
+ },
265
+ set(val) {
266
+ emit("update:defaultSort", val);
267
+ },
268
+ });
269
+ const sortList = computed(() => {
270
+ return columnData.value.filter((item) => item.sortable);
271
+ });
272
+ onMounted(() => {
273
+ teleportStatus.value = true; //直到dom挂载完毕再挂载teleport组件
274
+ });
275
+
276
+ defineExpose({ tableRef });
277
+ </script>
278
+ <style lang="less" scoped>
279
+ .ct-table__body {
280
+ width: 100%;
281
+ }
282
+
283
+ .ct-table__pagination {
284
+ margin-top: 24px;
285
+ display: flex;
286
+ justify-content: flex-end;
287
+ }
288
+ </style>
@@ -1,8 +1,8 @@
1
- import CtTabs from './src/tabs.vue';
2
-
3
- /* istanbul ignore next */
4
- CtTabs.install = function (Vue) {
5
- Vue.component('CtTabs', CtTabs);
6
- };
7
-
1
+ import CtTabs from './src/tabs.vue';
2
+
3
+ /* istanbul ignore next */
4
+ CtTabs.install = function (Vue) {
5
+ Vue.component('CtTabs', CtTabs);
6
+ };
7
+
8
8
  export default CtTabs;