sohelp-eleplus 1.1.19 → 1.1.21

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.
@@ -6,6 +6,7 @@
6
6
  @page-change="pageChangeEvent"
7
7
  ref="sohelpVxeGridRef"
8
8
  @menuClick="menuEvents"
9
+ :id="getId()"
9
10
  @toolbarButtonClick="onToolbarButtonClick"
10
11
  @checkboxChange="onCheckboxChange"
11
12
  @checkboxAll="onCheckboxAllChange"
@@ -47,401 +48,409 @@
47
48
  </template>
48
49
 
49
50
  <script setup>
50
- import { EleMessage } from "@/components/ele-admin-plus/components";
51
- import { DragOutlined } from "../sohelp-icon-select/icons";
52
- import { nextTick, onMounted, reactive, ref, watch } from "vue";
53
- import { merge,cloneDeep } from "lodash-es"; // 正确导入
54
- import DefaultProps from "./DefaultProps";
55
- import { Search } from "@element-plus/icons-vue";
56
- import DefaultGridOptions from "./DefaultGridOptions";
57
-
58
- /**判断配置是否初始化完毕*/
59
- const emit = defineEmits([
60
- "filter",
61
- "reset",
62
- "pageChange",
63
- "checkboxAll",
64
- "checkboxChange",
65
- "toolbarButtonClick",
66
- "menuClick",
67
- "cellClick",
68
- "pageChange",
69
- "refresh",
70
- "radioChange",
71
- "update:value",
72
- "update:value"
73
- ]);
74
-
75
- const isPage = ref(false);
76
- const selectedValue = ref([]);
77
- const selectedData = ref([]);
78
- const keywords = ref("");
79
- const props = defineProps(cloneDeep(DefaultProps));
80
-
81
- /**列表实例*/
82
- const sohelpVxeGridRef = ref(null);
83
-
84
- const gridOptions = reactive(cloneDeep(DefaultGridOptions));
85
- if (props.gridOptions) {
86
- merge(gridOptions, props.gridOptions);
87
- }
88
-
89
- /**根据URL动态加载数据**/
90
- if (props.url) {
91
- merge(gridOptions, {
92
- proxyConfig: {
93
- response: {
94
- result: "result",
95
- total: "page.total"
96
- },
97
- ajax: {
98
- query: () => {
51
+ import { EleMessage } from '@/components/ele-admin-plus/components';
52
+ import { DragOutlined } from '../sohelp-icon-select/icons';
53
+ import { nextTick, onMounted, reactive, ref, watch } from 'vue';
54
+ import { merge, cloneDeep } from 'lodash-es'; // 正确导入
55
+ import DefaultProps from './DefaultProps';
56
+ import { Search } from '@element-plus/icons-vue';
57
+ import { uuid } from '../utils/core.js';
58
+ import DefaultGridOptions from './DefaultGridOptions';
59
+
60
+ /**判断配置是否初始化完毕*/
61
+ const emit = defineEmits([
62
+ 'filter',
63
+ 'reset',
64
+ 'pageChange',
65
+ 'checkboxAll',
66
+ 'checkboxChange',
67
+ 'toolbarButtonClick',
68
+ 'menuClick',
69
+ 'cellClick',
70
+ 'pageChange',
71
+ 'refresh',
72
+ 'radioChange',
73
+ 'update:value',
74
+ 'update:value'
75
+ ]);
76
+
77
+ const isPage = ref(false);
78
+ const selectedValue = ref([]);
79
+ const selectedData = ref([]);
80
+ const keywords = ref('');
81
+ const props = defineProps(cloneDeep(DefaultProps));
82
+
83
+ /** 自动生成ID */
84
+ const getId = () => {
85
+ return 'sohelp-grid-' + uuid();
86
+ };
87
+
88
+ /**列表实例*/
89
+ const sohelpVxeGridRef = ref(null);
90
+
91
+ const gridOptions = reactive(cloneDeep(DefaultGridOptions));
92
+ if (props.gridOptions) {
93
+ merge(gridOptions, props.gridOptions);
94
+ }
95
+
96
+ if (props.gridOptions) {
97
+ merge(gridOptions, props.gridOptions);
98
+ }
99
+
100
+ /**根据URL动态加载数据**/
101
+ if (props.url) {
102
+ merge(gridOptions, {
103
+ proxyConfig: {
104
+ response: {
105
+ result: 'result',
106
+ total: 'page.total'
107
+ },
108
+ ajax: {
109
+ query: () => {
110
+ refresh();
111
+ }
99
112
  }
100
113
  }
114
+ });
115
+ }
116
+
117
+ /**根据参数加载数据*/
118
+ const reload = async (param = {}) => {
119
+ emit('filter', param);
120
+ gridOptions.loading = true;
121
+ gridOptions.params = param;
122
+ //配置初始化完毕后,才可以执行刷新
123
+
124
+ const url = props.url;
125
+ if (!url) {
126
+ gridOptions.loading = false;
127
+ return { results: [], total: 0 };
101
128
  }
102
- });
103
- }
104
129
 
130
+ let pageConfig = {};
131
+ // 是否分页
132
+ if (gridOptions.pagerConfig?.enabled) {
133
+ pageConfig.page = gridOptions.pagerConfig?.currentPage ?? 1;
134
+ pageConfig.limit = gridOptions.pagerConfig?.pageSize ?? 50;
135
+ }
105
136
 
106
- /**根据参数加载数据*/
107
- const reload = async (param = {}) => {
108
- emit("filter", param);
109
- gridOptions.loading = true;
110
- gridOptions.params = param;
111
- //配置初始化完毕后,才可以执行刷新
137
+ const res = await SohelpHttp.get(url, {
138
+ ...param,
139
+ keywords: keywords.value,
140
+ ...pageConfig
141
+ }).catch((e) => {
142
+ gridOptions.loading = false;
143
+ EleMessage.error(e);
144
+ });
112
145
 
113
- const url = props.url;
114
- if (!url) {
115
146
  gridOptions.loading = false;
116
- return { results: [], total: 0 };
117
- }
118
-
119
- let pageConfig = {};
120
- // 是否分页
121
- if (gridOptions.pagerConfig?.enabled) {
122
- pageConfig.page = gridOptions.pagerConfig?.currentPage ?? 1;
123
- pageConfig.limit = gridOptions.pagerConfig?.pageSize ?? 50;
124
- }
147
+ if (!res.meta.success) {
148
+ EleMessage.error(res.meta.message);
149
+ return { results: [], total: 0 };
150
+ }
151
+ const $grid = sohelpVxeGridRef.value;
152
+ $grid.loadData(res.data.results || res.data);
153
+ if (gridOptions?.pagerConfig?.enabled) {
154
+ gridOptions.pagerConfig.total = res.data.total;
155
+ }
125
156
 
126
- const res = await SohelpHttp.get(url, {
127
- ...param,
128
- keywords: keywords.value,
129
- ...pageConfig
130
- }).catch((e) => {
131
157
  gridOptions.loading = false;
132
- EleMessage.error(e);
133
- });
134
-
135
- gridOptions.loading = false;
136
- if (!res.meta.success) {
137
- EleMessage.error(res.meta.message);
138
- return { results: [], total: 0 };
139
- }
140
- const $grid = sohelpVxeGridRef.value;
141
- $grid.loadData(res.data.results || res.data);
142
- if (gridOptions?.pagerConfig?.enabled) {
143
- gridOptions.pagerConfig.total = res.data.total;
144
- }
145
-
146
- gridOptions.loading = false;
147
- initValue();
148
- };
149
-
150
-
151
- /**实现分页事件*/
152
- const pageChangeEvent = (page) => {
153
- isPage.value = true;
154
- gridOptions.pagerConfig.currentPage = page.currentPage;
155
- gridOptions.pagerConfig.pageSize = page.pageSize;
156
- emit("pageChange", page);
157
- };
158
-
159
- /**刷新数据*/
160
- const refresh = () => {
161
- if (!isPage.value) {
162
- keywords.value = "";
163
- if (gridOptions.pagerConfig && gridOptions.pagerConfig.enabled) {
164
- gridOptions.pagerConfig.currentPage = 1;
165
- } else {
166
- gridOptions.pagerConfig = {
167
- currentPage: 1
168
- };
158
+ initValue();
159
+ };
160
+
161
+ /**实现分页事件*/
162
+ const pageChangeEvent = (page) => {
163
+ isPage.value = true;
164
+ gridOptions.pagerConfig.currentPage = page.currentPage;
165
+ gridOptions.pagerConfig.pageSize = page.pageSize;
166
+ emit('pageChange', page);
167
+ };
168
+
169
+ /**刷新数据*/
170
+ const refresh = () => {
171
+ if (!isPage.value) {
172
+ keywords.value = '';
173
+ if (gridOptions.pagerConfig && gridOptions.pagerConfig.enabled) {
174
+ gridOptions.pagerConfig.currentPage = 1;
175
+ } else {
176
+ gridOptions.pagerConfig = {
177
+ currentPage: 1
178
+ };
179
+ }
180
+ //清空选中
181
+ selectedValue.value = [];
182
+ sohelpVxeGridRef.value?.clearCheckboxRow();
183
+ emit('refresh');
169
184
  }
170
- //清空选中
171
- selectedValue.value = [];
172
- sohelpVxeGridRef.value?.clearCheckboxRow();
173
- emit("refresh");
174
- }
175
- isPage.value = false;
176
- reload({ ...gridOptions.params });
177
- };
178
-
179
- /**
180
- * grid事件
181
- * @param param0
182
- */
183
- const menuEvents = async ({ menu, row, column, rowIndex }) => {
184
- const $grid = sohelpVxeGridRef.value;
185
- if ($grid) {
186
- $grid.setCurrentRow(row);
187
- }
188
- };
189
-
190
- /**
191
- * 工具栏点击事件
192
- * @param params
193
- */
194
- const onToolbarButtonClick = (params) => {
195
- emit("toolbarButtonClick", params);
196
- };
197
-
198
- /**
199
- * checkbox 点击
200
- * @param params
201
- */
202
- const onCheckboxChange = (params) => {
203
- emit("checkboxChange", params);
204
- if (props.multiple) {
205
- setSelectedValue(params.row);
206
- updateData();
207
- }
208
- };
209
-
210
- /**
211
- * 获取表格当前页数据
212
- */
213
- const getTableData = () => {
214
- return JSON.parse(JSON.stringify(sohelpVxeGridRef.value?.getTableData().tableData));
215
- };
216
-
217
- /**
218
- * 全选、取消全选 更新value,data值
219
- * @param param0
220
- */
221
- const onCheckboxAllChange = (params) => {
222
- const data = getTableData();
223
- const ids = data.map((item) => item.id);
224
- if (params.checked) {
225
- selectedValue.value = [...new Set([...selectedValue.value, ...ids])];
226
- selectedData.value = Array.from(
227
- [...selectedData.value, ...data].reduce((map, item) => map.set(item.id, item), new Map()).values()
228
- );
229
- } else {
230
- selectedValue.value = selectedValue.value.filter((item) => !ids.includes(item));
231
- }
232
-
233
- emit("checkboxAll", params);
234
- updateData();
235
- };
236
-
237
- /**
238
- * checkbox row click selectValue, selectedData设置是否选中
239
- * @param row
240
- */
241
- const setSelectedValue = (row) => {
242
- let idx = selectedValue.value.findIndex((id) => id === row.id);
243
- if (idx != -1) {
244
- selectedValue.value.splice(idx, 1);
245
- } else {
246
- selectedValue.value.push(row.id);
247
- let _idx = selectedData.value.findIndex((item) => item.id === row.id);
248
- if (_idx === -1) {
249
- selectedData.value.push({ ...row });
185
+ isPage.value = false;
186
+ reload({ ...gridOptions.params });
187
+ };
188
+
189
+ /**
190
+ * grid事件
191
+ * @param param0
192
+ */
193
+ const menuEvents = async ({ menu, row, column, rowIndex }) => {
194
+ const $grid = sohelpVxeGridRef.value;
195
+ if ($grid) {
196
+ $grid.setCurrentRow(row);
250
197
  }
251
- }
252
- };
253
-
254
- /**
255
- * 行点击
256
- * @param params
257
- */
258
- const onCellClick = (params) => {
259
- emit("cellClick", params);
260
- };
261
-
262
- /**
263
- *
264
- * @param params 单选框点击
265
- */
266
- const onRadioChange = (params) => {
267
- emit("radioChange", params);
268
- if (!props.multiple) {
269
- clear();
270
- const row = sohelpVxeGridRef.value?.getRadioRecord();
271
- if (row) {
272
- selectedValue.value = [row.id];
198
+ };
199
+
200
+ /**
201
+ * 工具栏点击事件
202
+ * @param params
203
+ */
204
+ const onToolbarButtonClick = (params) => {
205
+ emit('toolbarButtonClick', params);
206
+ };
207
+
208
+ /**
209
+ * checkbox 点击
210
+ * @param params
211
+ */
212
+ const onCheckboxChange = (params) => {
213
+ emit('checkboxChange', params);
214
+ if (props.multiple) {
215
+ setSelectedValue(params.row);
216
+ updateData();
217
+ }
218
+ };
219
+
220
+ /**
221
+ * 获取表格当前页数据
222
+ */
223
+ const getTableData = () => {
224
+ return JSON.parse(JSON.stringify(sohelpVxeGridRef.value?.getTableData().tableData));
225
+ };
226
+
227
+ /**
228
+ * 全选、取消全选 更新value,data值
229
+ * @param param0
230
+ */
231
+ const onCheckboxAllChange = (params) => {
232
+ const data = getTableData();
233
+ const ids = data.map((item) => item.id);
234
+ if (params.checked) {
235
+ selectedValue.value = [...new Set([...selectedValue.value, ...ids])];
273
236
  selectedData.value = Array.from(
274
- new Map([row, ...selectedData.value].map((item) => [item.id, item])).values()
237
+ [...selectedData.value, ...data].reduce((map, item) => map.set(item.id, item), new Map()).values()
275
238
  );
276
239
  } else {
277
- selectedData.value = props.data;
278
- selectedValue.value = [];
240
+ selectedValue.value = selectedValue.value.filter((item) => !ids.includes(item));
279
241
  }
280
242
 
243
+ emit('checkboxAll', params);
281
244
  updateData();
282
- }
283
- };
284
-
285
- /**
286
- * 更新value,data
287
- */
288
- const updateData = () => {
289
- emit("update:value", [...selectedValue.value]);
290
- emit("update:data", [...selectedData.value]);
291
- };
292
-
293
- /**grid 事件处理 */
294
- const gridEvents = {
295
- cellMenu({ row, rowIndex }) {
296
- const $grid = sohelpVxeGridRef.value;
297
- if ($grid) {
298
- $grid.setCurrentRow(row);
245
+ };
246
+
247
+ /**
248
+ * checkbox row click selectValue, selectedData设置是否选中
249
+ * @param row
250
+ */
251
+ const setSelectedValue = (row) => {
252
+ let idx = selectedValue.value.findIndex((id) => id === row.id);
253
+ if (idx != -1) {
254
+ selectedValue.value.splice(idx, 1);
255
+ } else {
256
+ selectedValue.value.push(row.id);
257
+ let _idx = selectedData.value.findIndex((item) => item.id === row.id);
258
+ if (_idx === -1) {
259
+ selectedData.value.push({ ...row });
260
+ }
299
261
  }
300
- },
301
- menuClick({ menu, column, row, rowIndex }) {
302
- const $grid = sohelpVxeGridRef.value;
303
- if ($grid) {
304
- switch (menu.code) {
305
- case "insert":
306
- // $grid.insert();
307
- $grid.insertAt({}, rowIndex);
308
-
309
- let _table = $grid.getTableData();
262
+ };
263
+
264
+ /**
265
+ * 行点击
266
+ * @param params
267
+ */
268
+ const onCellClick = (params) => {
269
+ emit('cellClick', params);
270
+ };
271
+
272
+ /**
273
+ *
274
+ * @param params 单选框点击
275
+ */
276
+ const onRadioChange = (params) => {
277
+ emit('radioChange', params);
278
+ if (!props.multiple) {
279
+ clear();
280
+ const row = sohelpVxeGridRef.value?.getRadioRecord();
281
+ if (row) {
282
+ selectedValue.value = [row.id];
283
+ selectedData.value = Array.from(new Map([row, ...selectedData.value].map((item) => [item.id, item])).values());
284
+ } else {
285
+ selectedData.value = props.data;
286
+ selectedValue.value = [];
287
+ }
310
288
 
311
- break;
312
- case "copy":
313
- break;
289
+ updateData();
290
+ }
291
+ };
292
+
293
+ /**
294
+ * 更新value,data
295
+ */
296
+ const updateData = () => {
297
+ emit('update:value', [...selectedValue.value]);
298
+ emit('update:data', [...selectedData.value]);
299
+ };
300
+
301
+ /**grid 事件处理 */
302
+ const gridEvents = {
303
+ cellMenu({ row, rowIndex }) {
304
+ const $grid = sohelpVxeGridRef.value;
305
+ if ($grid) {
306
+ $grid.setCurrentRow(row);
314
307
  }
308
+ },
309
+ menuClick({ menu, column, row, rowIndex }) {
310
+ const $grid = sohelpVxeGridRef.value;
311
+ if ($grid) {
312
+ switch (menu.code) {
313
+ case 'insert':
314
+ // $grid.insert();
315
+ $grid.insertAt({}, rowIndex);
316
+
317
+ let _table = $grid.getTableData();
318
+
319
+ break;
320
+ case 'copy':
321
+ break;
322
+ }
315
323
 
316
- emit("menuClick", $grid, code);
324
+ emit('menuClick', $grid, code);
325
+ }
317
326
  }
318
- }
319
- };
320
-
321
- const loadData = (data) => {
322
- const $grid = sohelpVxeGridRef.value;
323
- $grid.loadData(data);
324
- };
325
-
326
- /**
327
- * 数据回显
328
- */
329
- const initValue = () => {
330
- nextTick(() => {
327
+ };
328
+
329
+ const loadData = (data) => {
331
330
  const $grid = sohelpVxeGridRef.value;
332
- if ($grid && selectedValue.value.length) {
333
- setTimeout(() => {
334
- $grid.setCheckboxRowKey(selectedValue.value, true);
335
- }, 100);
331
+ $grid.loadData(data);
332
+ };
333
+
334
+ /**
335
+ * 数据回显
336
+ */
337
+ const initValue = () => {
338
+ nextTick(() => {
339
+ const $grid = sohelpVxeGridRef.value;
340
+ if ($grid && selectedValue.value.length) {
341
+ setTimeout(() => {
342
+ $grid.setCheckboxRowKey(selectedValue.value, true);
343
+ }, 100);
344
+ }
345
+ });
346
+ };
347
+
348
+ onMounted(() => {
349
+ if (props.autoLoad) {
350
+ // reload({});
336
351
  }
337
352
  });
338
- };
339
353
 
340
- onMounted(() => {
341
- if (props.autoLoad) {
342
- reload({});
343
- }
344
- });
345
-
346
- /**
347
- * 清空
348
- */
349
- const clear = () => {
350
- const $grid = sohelpVxeGridRef.value;
351
- $grid?.clearCheckboxReserve();
352
- $grid?.clearCheckboxRow();
353
- $grid.clearSelected();
354
- };
355
-
356
- const getSelection = () => {
357
- return sohelpVxeGridRef.value?.getCheckboxRecords() || [];
358
- };
359
-
360
- watch(
361
- () => props.value,
362
- (val) => {
363
- let arr = Array.isArray(val) ? val : val ? [val] : [];
364
- selectedValue.value = props.multiple ? [...arr] : [arr[0]];
365
- if (props.data && props.data?.length > 0) {
366
- selectedData.value = [...props.data];
354
+ /**
355
+ * 清空
356
+ */
357
+ const clear = () => {
358
+ const $grid = sohelpVxeGridRef.value;
359
+ $grid?.clearCheckboxReserve();
360
+ $grid?.clearCheckboxRow();
361
+ $grid.clearSelected();
362
+ };
363
+
364
+ const getSelection = () => {
365
+ return sohelpVxeGridRef.value?.getCheckboxRecords() || [];
366
+ };
367
+
368
+ watch(
369
+ () => props.value,
370
+ (val) => {
371
+ let arr = Array.isArray(val) ? val : val ? [val] : [];
372
+ selectedValue.value = props.multiple ? [...arr] : [arr[0]];
373
+ if (props.data && props.data?.length > 0) {
374
+ selectedData.value = [...props.data];
375
+ }
376
+ },
377
+ {
378
+ immediate: true
367
379
  }
368
- },
369
- {
370
- immediate: true
371
- }
372
- );
373
-
374
- defineExpose({
375
- $grid: sohelpVxeGridRef,
376
- getSelection,
377
- gridOptions,
378
- loadData,
379
- refresh,
380
- reload,
381
- pageChangeEvent,
382
- gridEvents,
383
- menuEvents,
384
- onToolbarButtonClick,
385
- onCheckboxChange,
386
- onCellClick,
387
- onCheckboxAllChange,
388
- onRadioChange,
389
- selectedData,
390
- selectedValue,
391
- updateData,
392
- initValue,
393
- clear,
394
- getTableData,
395
- keywords,
396
- clearRadioRow: () => {
397
- sohelpVxeGridRef.value.clearRadioRow();
398
- }
399
- });
380
+ );
381
+
382
+ defineExpose({
383
+ $grid: sohelpVxeGridRef,
384
+ getSelection,
385
+ gridOptions,
386
+ loadData,
387
+ refresh,
388
+ reload,
389
+ pageChangeEvent,
390
+ gridEvents,
391
+ menuEvents,
392
+ onToolbarButtonClick,
393
+ onCheckboxChange,
394
+ onCellClick,
395
+ onCheckboxAllChange,
396
+ onRadioChange,
397
+ selectedData,
398
+ selectedValue,
399
+ updateData,
400
+ initValue,
401
+ clear,
402
+ getTableData,
403
+ keywords,
404
+ clearRadioRow: () => {
405
+ sohelpVxeGridRef.value.clearRadioRow();
406
+ }
407
+ });
400
408
  </script>
401
409
  <script>
402
- export default {
403
- name: "SohelpVxeGrid"
404
- };
410
+ export default {
411
+ name: 'SohelpVxeGrid'
412
+ };
405
413
  </script>
406
414
 
407
415
  <style lang="scss" scoped>
408
- .sohelp-vxe-grid {
409
- width: 100%;
410
- height: 100%;
411
- box-sizing: border-box;
412
-
413
- :deep(.vxe-grid) {
414
- height: 100%;
416
+ .sohelp-vxe-grid {
415
417
  width: 100%;
416
- min-width: 100px;
418
+ height: 100%;
419
+ box-sizing: border-box;
417
420
 
418
- .vxe-grid--layout-body-content-wrapper {
419
- display: flex;
420
- flex-direction: column;
421
+ :deep(.vxe-grid) {
422
+ height: 100%;
423
+ width: 100%;
424
+ min-width: 100px;
421
425
 
422
- .vxe-grid--toolbar-wrapper {
423
- .vxe-toolbar {
424
- box-sizing: border-box;
425
- padding: 0 5px 5px 5px;
426
- }
427
- }
426
+ .vxe-grid--layout-body-content-wrapper {
427
+ display: flex;
428
+ flex-direction: column;
428
429
 
429
- .vxe-grid--table-container {
430
- flex: 1;
431
- height: 100%;
430
+ .vxe-grid--toolbar-wrapper {
431
+ .vxe-toolbar {
432
+ box-sizing: border-box;
433
+ padding: 0 5px 5px 5px;
434
+ }
435
+ }
432
436
 
433
- .vxe-table {
437
+ .vxe-grid--table-container {
438
+ flex: 1;
434
439
  height: 100%;
435
440
 
436
- .vxe-table--render-wrapper {
441
+ .vxe-table {
437
442
  height: 100%;
438
443
 
439
- .vxe-table--layout-wrapper {
440
- height: calc(100% - 10px);
444
+ .vxe-table--render-wrapper {
445
+ height: 100%;
446
+
447
+ .vxe-table--layout-wrapper {
448
+ height: calc(100% - 10px);
441
449
 
442
- .col--selected {
443
- //去除单元格选中效果
444
- box-shadow: none;
450
+ .col--selected {
451
+ //去除单元格选中效果
452
+ box-shadow: none;
453
+ }
445
454
  }
446
455
  }
447
456
  }
@@ -449,27 +458,26 @@ export default {
449
458
  }
450
459
  }
451
460
  }
452
- }
453
-
454
- .drag-btn {
455
- cursor: move;
456
- font-size: 12px;
457
- }
458
-
459
- .vxe-body--row.sortable-ghost,
460
- .vxe-body--row.sortable-chosen {
461
- background-color: #dfecfb;
462
- }
463
-
464
- .search-wrap {
465
- display: flex;
466
- align-items: center;
467
- justify-content: flex-start;
468
- gap: 10px;
469
- margin-right: 10px;
470
-
471
- .search-box {
472
- width: 200px;
461
+
462
+ .drag-btn {
463
+ cursor: move;
464
+ font-size: 12px;
465
+ }
466
+
467
+ .vxe-body--row.sortable-ghost,
468
+ .vxe-body--row.sortable-chosen {
469
+ background-color: #dfecfb;
470
+ }
471
+
472
+ .search-wrap {
473
+ display: flex;
474
+ align-items: center;
475
+ justify-content: flex-start;
476
+ gap: 10px;
477
+ margin-right: 10px;
478
+
479
+ .search-box {
480
+ width: 200px;
481
+ }
473
482
  }
474
- }
475
483
  </style>