sohelp-eleplus 1.1.19 → 1.1.20

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