fdb2 1.0.16 → 1.0.18

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 (104) hide show
  1. package/dist/package.json +139 -0
  2. package/dist/pnpm-lock.yaml +7332 -0
  3. package/dist/public/.vite/manifest.json +129 -0
  4. package/dist/public/_plugin-vue_export-helper.js +12 -0
  5. package/dist/public/bootstrap-icons.woff +0 -0
  6. package/dist/public/bootstrap-icons.woff2 +0 -0
  7. package/dist/public/bootstrap.css +14152 -0
  8. package/dist/public/bootstrap.js +4717 -0
  9. package/dist/public/explorer.css +2542 -0
  10. package/dist/public/explorer.js +59004 -0
  11. package/dist/public/favicon.ico +0 -0
  12. package/dist/public/index.css +950 -0
  13. package/dist/public/index.js +614 -0
  14. package/dist/public/layout.css +318 -0
  15. package/dist/public/layout.js +35 -0
  16. package/dist/public/modal.css +150 -0
  17. package/dist/public/modal.js +4873 -0
  18. package/dist/public/rolldown-runtime.js +38 -0
  19. package/dist/public/vconsole.min.js +10355 -0
  20. package/dist/public/vue.js +6526 -0
  21. package/dist/scripts/nw-build.js +136 -0
  22. package/dist/scripts/nw-dev.js +67 -0
  23. package/dist/scripts/preinstall.js +112 -0
  24. package/dist/server/index.d.ts +2 -0
  25. package/dist/server/index.d.ts.map +1 -0
  26. package/dist/server/index.js +607 -0
  27. package/dist/server/index.js.map +1 -0
  28. package/dist/server/index.ts +685 -0
  29. package/dist/server/model/connection.entity.d.ts +55 -0
  30. package/dist/server/model/connection.entity.d.ts.map +1 -0
  31. package/dist/server/model/connection.entity.js +59 -0
  32. package/dist/server/model/connection.entity.js.map +1 -0
  33. package/dist/server/model/connection.entity.ts +66 -0
  34. package/dist/server/model/database.entity.d.ts +203 -0
  35. package/dist/server/model/database.entity.d.ts.map +1 -0
  36. package/dist/server/model/database.entity.js +211 -0
  37. package/dist/server/model/database.entity.js.map +1 -0
  38. package/dist/server/model/database.entity.ts +246 -0
  39. package/dist/server/service/connection.service.d.ts +84 -0
  40. package/dist/server/service/connection.service.d.ts.map +1 -0
  41. package/dist/server/service/connection.service.js +369 -0
  42. package/dist/server/service/connection.service.js.map +1 -0
  43. package/dist/server/service/connection.service.ts +359 -0
  44. package/dist/server/service/database/base.service.d.ts +183 -0
  45. package/dist/server/service/database/base.service.d.ts.map +1 -0
  46. package/dist/server/service/database/base.service.js +253 -0
  47. package/dist/server/service/database/base.service.js.map +1 -0
  48. package/dist/server/service/database/base.service.ts +407 -0
  49. package/dist/server/service/database/cockroachdb.service.d.ts +116 -0
  50. package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -0
  51. package/dist/server/service/database/cockroachdb.service.js +812 -0
  52. package/dist/server/service/database/cockroachdb.service.js.map +1 -0
  53. package/dist/server/service/database/cockroachdb.service.ts +871 -0
  54. package/dist/server/service/database/database.service.d.ts +495 -0
  55. package/dist/server/service/database/database.service.d.ts.map +1 -0
  56. package/dist/server/service/database/database.service.js +711 -0
  57. package/dist/server/service/database/database.service.js.map +1 -0
  58. package/dist/server/service/database/database.service.ts +776 -0
  59. package/dist/server/service/database/index.d.ts +8 -0
  60. package/dist/server/service/database/index.d.ts.map +1 -0
  61. package/dist/server/service/database/index.js +18 -0
  62. package/dist/server/service/database/index.js.map +1 -0
  63. package/dist/server/service/database/index.ts +7 -0
  64. package/dist/server/service/database/mongodb.service.d.ts +121 -0
  65. package/dist/server/service/database/mongodb.service.d.ts.map +1 -0
  66. package/dist/server/service/database/mongodb.service.js +502 -0
  67. package/dist/server/service/database/mongodb.service.js.map +1 -0
  68. package/dist/server/service/database/mongodb.service.ts +501 -0
  69. package/dist/server/service/database/mssql.service.d.ts +118 -0
  70. package/dist/server/service/database/mssql.service.d.ts.map +1 -0
  71. package/dist/server/service/database/mssql.service.js +871 -0
  72. package/dist/server/service/database/mssql.service.js.map +1 -0
  73. package/dist/server/service/database/mssql.service.ts +932 -0
  74. package/dist/server/service/database/mysql.service.d.ts +114 -0
  75. package/dist/server/service/database/mysql.service.d.ts.map +1 -0
  76. package/dist/server/service/database/mysql.service.js +960 -0
  77. package/dist/server/service/database/mysql.service.js.map +1 -0
  78. package/dist/server/service/database/mysql.service.ts +1026 -0
  79. package/dist/server/service/database/oracle.service.d.ts +126 -0
  80. package/dist/server/service/database/oracle.service.d.ts.map +1 -0
  81. package/dist/server/service/database/oracle.service.js +963 -0
  82. package/dist/server/service/database/oracle.service.js.map +1 -0
  83. package/dist/server/service/database/oracle.service.ts +1036 -0
  84. package/dist/server/service/database/postgres.service.d.ts +122 -0
  85. package/dist/server/service/database/postgres.service.d.ts.map +1 -0
  86. package/dist/server/service/database/postgres.service.js +882 -0
  87. package/dist/server/service/database/postgres.service.js.map +1 -0
  88. package/dist/server/service/database/postgres.service.ts +961 -0
  89. package/dist/server/service/database/sap.service.d.ts +115 -0
  90. package/dist/server/service/database/sap.service.d.ts.map +1 -0
  91. package/dist/server/service/database/sap.service.js +868 -0
  92. package/dist/server/service/database/sap.service.js.map +1 -0
  93. package/dist/server/service/database/sap.service.ts +922 -0
  94. package/dist/server/service/database/sqlite.service.d.ts +112 -0
  95. package/dist/server/service/database/sqlite.service.d.ts.map +1 -0
  96. package/dist/server/service/database/sqlite.service.js +723 -0
  97. package/dist/server/service/database/sqlite.service.js.map +1 -0
  98. package/dist/server/service/database/sqlite.service.ts +787 -0
  99. package/dist/server/service/session.service.ts +158 -0
  100. package/dist/view/index.html +48 -0
  101. package/package.json +3 -2
  102. package/scripts/nw-build.js +136 -0
  103. package/scripts/nw-dev.js +67 -0
  104. package/scripts/preinstall.js +112 -0
@@ -0,0 +1,2542 @@
1
+
2
+ /* 继承原有的样式,这里可以添加组件特定的样式 */
3
+ .connection-form-modern[data-v-60ee1360] {
4
+ padding: 0;
5
+ }
6
+ .form-section[data-v-60ee1360] {
7
+ margin-bottom: 2rem;
8
+ }
9
+ .section-header[data-v-60ee1360] {
10
+ display: flex;
11
+ align-items: center;
12
+ margin-bottom: 1.5rem;
13
+ padding-bottom: 0.75rem;
14
+ border-bottom: 2px solid #f0f0f0;
15
+ }
16
+ .section-icon[data-v-60ee1360] {
17
+ width: 40px;
18
+ height: 40px;
19
+ border-radius: 8px;
20
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ color: white;
25
+ margin-right: 1rem;
26
+ }
27
+ .section-title[data-v-60ee1360] {
28
+ font-size: 1.1rem;
29
+ font-weight: 600;
30
+ margin: 0;
31
+ color: #333;
32
+ }
33
+ .section-content[data-v-60ee1360] {
34
+ padding-left: 56px;
35
+ }
36
+ .form-grid[data-v-60ee1360] {
37
+ display: grid;
38
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
39
+ gap: 1.5rem;
40
+ }
41
+ .form-group-modern[data-v-60ee1360] {
42
+ margin-bottom: 1rem;
43
+ }
44
+ .form-label-modern[data-v-60ee1360] {
45
+ display: flex;
46
+ align-items: center;
47
+ font-weight: 500;
48
+ color: #555;
49
+ margin-bottom: 0.5rem;
50
+ font-size: 0.9rem;
51
+ }
52
+ .form-control-modern[data-v-60ee1360],
53
+ .form-select-modern[data-v-60ee1360] {
54
+ width: 100%;
55
+ padding: 0.75rem;
56
+ border: 2px solid #e9ecef;
57
+ border-radius: 8px;
58
+ font-size: 0.95rem;
59
+ transition: all 0.3s ease;
60
+ }
61
+ .form-control-modern[data-v-60ee1360]:focus,
62
+ .form-select-modern[data-v-60ee1360]:focus {
63
+ outline: none;
64
+ border-color: #667eea;
65
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
66
+ }
67
+ .form-check-modern[data-v-60ee1360] {
68
+ display: flex;
69
+ align-items: flex-start;
70
+ padding: 0;
71
+ }
72
+ .form-check-input-modern[data-v-60ee1360] {
73
+ margin-right: 0.75rem;
74
+ margin-top: 0.25rem;
75
+ }
76
+ .form-check-label-modern[data-v-60ee1360] {
77
+ display: flex;
78
+ flex-direction: column;
79
+ cursor: pointer;
80
+ }
81
+ .check-text[data-v-60ee1360] {
82
+ font-weight: 500;
83
+ color: #333;
84
+ margin-bottom: 0.25rem;
85
+ }
86
+ .check-description[data-v-60ee1360] {
87
+ font-size: 0.85rem;
88
+ color: #666;
89
+ }
90
+ .required[data-v-60ee1360] {
91
+ color: #dc3545;
92
+ margin-left: 0.25rem;
93
+ }
94
+ .error-content[data-v-60ee1360] {
95
+ display: flex;
96
+ align-items: center;
97
+ padding: 1.5rem;
98
+ gap: 1rem;
99
+ }
100
+ .error-icon[data-v-60ee1360] {
101
+ width: 48px;
102
+ height: 48px;
103
+ border-radius: 50%;
104
+ background: linear-gradient(135deg, #dc3545 0%, #ff6b6b 100%);
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: center;
108
+ color: white;
109
+ font-size: 1.5rem;
110
+ flex-shrink: 0;
111
+ }
112
+ .error-message[data-v-60ee1360] {
113
+ flex: 1;
114
+ color: #333;
115
+ font-size: 0.95rem;
116
+ line-height: 1.6;
117
+ }
118
+
119
+ .sql-executor[data-v-82959a5b] {
120
+ width: 100%;
121
+ flex: 1;
122
+ display: flex;
123
+ flex-direction: column;
124
+ gap: 10px;
125
+ }
126
+ .sql-toolbar[data-v-82959a5b] {
127
+ display: flex;
128
+ justify-content: space-between;
129
+ align-items: center;
130
+ margin-bottom: 10px;
131
+ padding: 10px;
132
+ background-color: #f8f9fa;
133
+ border-radius: 4px;
134
+ }
135
+ .toolbar-left[data-v-82959a5b],
136
+ .toolbar-right[data-v-82959a5b] {
137
+ display: flex;
138
+ gap: 8px;
139
+ }
140
+ .sql-container[data-v-82959a5b] {
141
+ position: relative;
142
+ border: 1px solid #dee2e6;
143
+ border-radius: 4px;
144
+ overflow: hidden;
145
+ flex: 1;
146
+ display: flex;
147
+ flex-direction: column;
148
+ }
149
+ .sql-editor[data-v-82959a5b] {
150
+ position: relative;
151
+ overflow: auto;
152
+ flex: 0 1 300px;
153
+ min-height: 200px;
154
+ }
155
+ .sql-result[data-v-82959a5b] {
156
+ position: relative;
157
+ overflow: auto;
158
+ border-top: 1px solid #dee2e6;
159
+ flex: 1;
160
+ }
161
+ .codemirror-editor[data-v-82959a5b] {
162
+ height: 100%;
163
+ width: 100%;
164
+ }
165
+ .resizer[data-v-82959a5b] {
166
+ height: 8px;
167
+ background-color: #e9ecef;
168
+ cursor: ns-resize;
169
+ display: flex;
170
+ align-items: center;
171
+ justify-content: center;
172
+ }
173
+ .resizer[data-v-82959a5b]:hover {
174
+ background-color: #dee2e6;
175
+ }
176
+ .resizer[data-v-82959a5b]::before {
177
+ content: '';
178
+ width: 40px;
179
+ height: 2px;
180
+ background-color: #adb5bd;
181
+ border-radius: 1px;
182
+ }
183
+ .resizer.resizing[data-v-82959a5b] {
184
+ background-color: #dee2e6;
185
+ }
186
+ .resizer.resizing[data-v-82959a5b]::before {
187
+ background-color: #6c757d;
188
+ }
189
+ .sql-result[data-v-82959a5b] {
190
+ position: relative;
191
+ overflow: auto;
192
+ border-top: 1px solid #dee2e6;
193
+ }
194
+ .result-content[data-v-82959a5b] {
195
+ height: 100%;
196
+ display: flex;
197
+ flex-direction: column;
198
+ }
199
+ .result-header[data-v-82959a5b] {
200
+ display: flex;
201
+ justify-content: space-between;
202
+ align-items: center;
203
+ padding: 12px;
204
+ background-color: #f8f9fa;
205
+ border-bottom: 1px solid #dee2e6;
206
+ }
207
+ .result-title[data-v-82959a5b] {
208
+ margin: 0;
209
+ font-size: 14px;
210
+ font-weight: 600;
211
+ display: flex;
212
+ align-items: center;
213
+ gap: 8px;
214
+ }
215
+ .sql-loading[data-v-82959a5b] {
216
+ display: flex;
217
+ align-items: center;
218
+ gap: 8px;
219
+ }
220
+ .result-stats[data-v-82959a5b] {
221
+ display: flex;
222
+ gap: 8px;
223
+ }
224
+ .result-info[data-v-82959a5b] {
225
+ display: flex;
226
+ justify-content: space-between;
227
+ align-items: center;
228
+ padding: 10px 12px;
229
+ background-color: #f8f9fa;
230
+ border-bottom: 1px solid #dee2e6;
231
+ }
232
+ .result-actions[data-v-82959a5b] {
233
+ display: flex;
234
+ gap: 8px;
235
+ }
236
+ .result-table-container[data-v-82959a5b] {
237
+ flex: 1;
238
+ overflow: auto;
239
+ }
240
+
241
+ /* 对象结果样式 */
242
+ .result-object[data-v-82959a5b] {
243
+ display: flex;
244
+ flex-direction: column;
245
+ height: 100%;
246
+ }
247
+ .object-container[data-v-82959a5b] {
248
+ flex: 1;
249
+ overflow: auto;
250
+ }
251
+ .object-container table[data-v-82959a5b] {
252
+ width: 100%;
253
+ }
254
+ .object-container th[data-v-82959a5b]:first-child {
255
+ width: 20%;
256
+ min-width: 100px;
257
+ }
258
+ .object-container td[data-v-82959a5b]:first-child {
259
+ font-weight: 500;
260
+ background-color: #f8f9fa;
261
+ }
262
+ .sql-loading-state[data-v-82959a5b] {
263
+ display: flex;
264
+ align-items: center;
265
+ justify-content: center;
266
+ height: 100%;
267
+ flex: 1;
268
+ }
269
+ .sql-empty-result[data-v-82959a5b],
270
+ .sql-error[data-v-82959a5b] {
271
+ padding: 12px;
272
+ flex: 1;
273
+ }
274
+ .result-empty[data-v-82959a5b] {
275
+ display: flex;
276
+ flex-direction: column;
277
+ align-items: center;
278
+ justify-content: center;
279
+ height: 100%;
280
+ color: #6c757d;
281
+ gap: 10px;
282
+ }
283
+ .result-empty i[data-v-82959a5b] {
284
+ font-size: 48px;
285
+ opacity: 0.5;
286
+ }
287
+ .json-result[data-v-82959a5b] {
288
+ flex: 1;
289
+ overflow: hidden;
290
+ }
291
+ .json-result .codemirror-editor[data-v-82959a5b] {
292
+ height: 100%;
293
+ width: 100%;
294
+ }
295
+
296
+ /* 响应式设计 */
297
+ @media (max-width: 768px) {
298
+ .sql-toolbar[data-v-82959a5b] {
299
+ flex-direction: column;
300
+ align-items: stretch;
301
+ gap: 8px;
302
+ }
303
+ .toolbar-left[data-v-82959a5b],
304
+ .toolbar-right[data-v-82959a5b] {
305
+ justify-content: center;
306
+ }
307
+ }
308
+
309
+ .connection-detail[data-v-c886542c] {
310
+ padding: 20px;
311
+ display: flex;
312
+ flex-direction: column;
313
+ height: 100%;
314
+ gap: 20px;
315
+ }
316
+ .connection-header[data-v-c886542c] {
317
+ display: flex;
318
+ justify-content: space-between;
319
+ align-items: center;
320
+ margin-bottom: 20px;
321
+ padding: 20px;
322
+ background-color: #f8f9fa;
323
+ border-radius: 8px;
324
+ }
325
+ .connection-info[data-v-c886542c] {
326
+ display: flex;
327
+ align-items: center;
328
+ gap: 16px;
329
+ }
330
+ .connection-avatar[data-v-c886542c] {
331
+ width: 60px;
332
+ height: 60px;
333
+ display: flex;
334
+ align-items: center;
335
+ justify-content: center;
336
+ border-radius: 8px;
337
+ background-color: #e9ecef;
338
+ }
339
+ .db-logo[data-v-c886542c] {
340
+ font-size: 24px;
341
+ font-weight: bold;
342
+ color: #6c757d;
343
+ }
344
+ .db-mysql[data-v-c886542c] {
345
+ background-color: #4CAF50;
346
+ color: white;
347
+ }
348
+ .db-postgres[data-v-c886542c] {
349
+ background-color: #336791;
350
+ color: white;
351
+ }
352
+ .db-mssql[data-v-c886542c] {
353
+ background-color: #0078d4;
354
+ color: white;
355
+ }
356
+ .db-sqlite[data-v-c886542c] {
357
+ background-color: #003B57;
358
+ color: white;
359
+ }
360
+ .db-oracle[data-v-c886542c] {
361
+ background-color: #F80000;
362
+ color: white;
363
+ }
364
+ .connection-meta[data-v-c886542c] {
365
+ display: flex;
366
+ flex-direction: column;
367
+ gap: 4px;
368
+ }
369
+ .connection-name[data-v-c886542c] {
370
+ margin: 0;
371
+ font-size: 20px;
372
+ font-weight: 600;
373
+ }
374
+ .connection-type-info[data-v-c886542c] {
375
+ display: flex;
376
+ align-items: center;
377
+ gap: 12px;
378
+ }
379
+ .db-type[data-v-c886542c] {
380
+ padding: 4px 12px;
381
+ border-radius: 12px;
382
+ background-color: #e9ecef;
383
+ font-size: 12px;
384
+ font-weight: 500;
385
+ }
386
+ .connection-status[data-v-c886542c] {
387
+ display: flex;
388
+ align-items: center;
389
+ gap: 6px;
390
+ font-size: 14px;
391
+ }
392
+ .status-dot[data-v-c886542c] {
393
+ width: 8px;
394
+ height: 8px;
395
+ border-radius: 50%;
396
+ background-color: #6c757d;
397
+ }
398
+ .status-online .status-dot[data-v-c886542c] {
399
+ background-color: #28a745;
400
+ }
401
+ .status-offline .status-dot[data-v-c886542c] {
402
+ background-color: #dc3545;
403
+ }
404
+ .status-testing .status-dot[data-v-c886542c] {
405
+ background-color: #ffc107;
406
+ animation: pulse-c886542c 1s infinite;
407
+ }
408
+ @keyframes pulse-c886542c {
409
+ 0%, 100% {
410
+ opacity: 1;
411
+ }
412
+ 50% {
413
+ opacity: 0.5;
414
+ }
415
+ }
416
+ .connection-actions[data-v-c886542c] {
417
+ display: flex;
418
+ gap: 8px;
419
+ }
420
+ .connection-details-panel[data-v-c886542c] {
421
+ margin-bottom: 30px;
422
+ animation: fadeIn-c886542c 0.3s ease;
423
+ }
424
+ .section-title[data-v-c886542c] {
425
+ margin: 0 0 16px 0;
426
+ font-size: 16px;
427
+ font-weight: 600;
428
+ display: flex;
429
+ align-items: center;
430
+ gap: 8px;
431
+ color: #343a40;
432
+ padding-bottom: 8px;
433
+ border-bottom: 1px solid #e9ecef;
434
+ }
435
+ @keyframes fadeIn-c886542c {
436
+ from {
437
+ opacity: 0;
438
+ transform: translateY(-10px);
439
+ }
440
+ to {
441
+ opacity: 1;
442
+ transform: translateY(0);
443
+ }
444
+ }
445
+ .detail-card[data-v-c886542c] {
446
+ border: 1px solid #dee2e6;
447
+ border-radius: 8px;
448
+ overflow: hidden;
449
+ }
450
+ .card-header[data-v-c886542c] {
451
+ padding: 16px;
452
+ background-color: #f8f9fa;
453
+ border-bottom: 1px solid #dee2e6;
454
+ }
455
+ .card-title[data-v-c886542c] {
456
+ margin: 0;
457
+ font-size: 16px;
458
+ font-weight: 600;
459
+ display: flex;
460
+ align-items: center;
461
+ gap: 8px;
462
+ }
463
+ .card-body[data-v-c886542c] {
464
+ padding: 16px;
465
+ }
466
+ .info-grid[data-v-c886542c] {
467
+ display: grid;
468
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
469
+ gap: 16px;
470
+ margin-bottom: 10px;
471
+ }
472
+ .info-item[data-v-c886542c] {
473
+ display: flex;
474
+ flex-direction: column;
475
+ gap: 4px;
476
+ padding: 10px;
477
+ background-color: #f8f9fa;
478
+ border-radius: 6px;
479
+ transition: all 0.2s ease;
480
+ }
481
+ .info-item[data-v-c886542c]:hover {
482
+ background-color: #e9ecef;
483
+ transform: translateY(-1px);
484
+ }
485
+ .info-label[data-v-c886542c] {
486
+ font-size: 12px;
487
+ font-weight: 500;
488
+ color: #6c757d;
489
+ text-transform: uppercase;
490
+ letter-spacing: 0.5px;
491
+ }
492
+ .info-value[data-v-c886542c] {
493
+ font-size: 14px;
494
+ font-weight: 500;
495
+ color: #343a40;
496
+ }
497
+ .db-type-badge[data-v-c886542c] {
498
+ padding: 4px 10px;
499
+ border-radius: 12px;
500
+ font-size: 12px;
501
+ font-weight: 500;
502
+ }
503
+ .stats-grid[data-v-c886542c] {
504
+ display: grid;
505
+ grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
506
+ gap: 16px;
507
+ }
508
+ .stat-item[data-v-c886542c] {
509
+ text-align: center;
510
+ padding: 12px;
511
+ background-color: #f8f9fa;
512
+ border-radius: 6px;
513
+ transition: all 0.2s ease;
514
+ }
515
+ .stat-item[data-v-c886542c]:hover {
516
+ background-color: #e9ecef;
517
+ transform: translateY(-1px);
518
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
519
+ }
520
+ .stat-value[data-v-c886542c] {
521
+ font-size: 20px;
522
+ font-weight: 600;
523
+ color: #343a40;
524
+ }
525
+ .stat-label[data-v-c886542c] {
526
+ font-size: 12px;
527
+ color: #6c757d;
528
+ margin-top: 4px;
529
+ }
530
+ .quick-actions[data-v-c886542c] {
531
+ margin-bottom: 30px;
532
+ padding: 20px;
533
+ background-color: #f8f9fa;
534
+ border-radius: 8px;
535
+ }
536
+ .actions-header[data-v-c886542c] {
537
+ margin-bottom: 16px;
538
+ }
539
+ .actions-title[data-v-c886542c] {
540
+ margin: 0;
541
+ font-size: 16px;
542
+ font-weight: 600;
543
+ display: flex;
544
+ align-items: center;
545
+ gap: 8px;
546
+ }
547
+ .actions-grid[data-v-c886542c] {
548
+ display: grid;
549
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
550
+ gap: 16px;
551
+ }
552
+ .action-btn[data-v-c886542c] {
553
+ display: flex;
554
+ flex-direction: column;
555
+ align-items: center;
556
+ gap: 8px;
557
+ padding: 16px;
558
+ background-color: white;
559
+ border: 1px solid #dee2e6;
560
+ border-radius: 8px;
561
+ cursor: pointer;
562
+ transition: all 0.2s ease;
563
+ }
564
+ .action-btn[data-v-c886542c]:hover {
565
+ background-color: #e9ecef;
566
+ transform: translateY(-2px);
567
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
568
+ }
569
+ .action-icon[data-v-c886542c] {
570
+ font-size: 24px;
571
+ color: #6c757d;
572
+ }
573
+ .action-text[data-v-c886542c] {
574
+ font-size: 14px;
575
+ font-weight: 500;
576
+ color: #343a40;
577
+ }
578
+ .connection-tabs[data-v-c886542c] {
579
+ border: 1px solid #dee2e6;
580
+ border-radius: 8px;
581
+ flex: 1;
582
+ display: flex;
583
+ flex-direction: column;
584
+ }
585
+ .nav-tabs[data-v-c886542c] {
586
+ border-bottom: 1px solid #dee2e6;
587
+ background-color: #f8f9fa;
588
+ }
589
+ .nav-link[data-v-c886542c] {
590
+ border: none;
591
+ border-radius: 0;
592
+ padding: 12px 20px;
593
+ font-size: 14px;
594
+ font-weight: 500;
595
+ transition: all 0.2s ease;
596
+ }
597
+ .nav-link[data-v-c886542c]:hover {
598
+ background-color: #e9ecef;
599
+ }
600
+ .nav-link.active[data-v-c886542c] {
601
+ background-color: white;
602
+ border-bottom: 2px solid #0d6efd;
603
+ }
604
+ .tab-content[data-v-c886542c] {
605
+ flex: 1;
606
+ display: flex;
607
+ flex-direction: column;
608
+ overflow: hidden;
609
+ }
610
+ .tab-panel[data-v-c886542c] {
611
+ padding: 20px;
612
+ flex: 1;
613
+ display: flex;
614
+ flex-direction: column;
615
+ overflow: hidden;
616
+ }
617
+ .databases-section[data-v-c886542c] {
618
+ display: flex;
619
+ flex-direction: column;
620
+ gap: 16px;
621
+ flex: 1;
622
+ overflow: hidden;
623
+ }
624
+ .section-header[data-v-c886542c] {
625
+ display: flex;
626
+ justify-content: flex-end;
627
+ align-items: center;
628
+ }
629
+ .section-actions[data-v-c886542c] {
630
+ display: flex;
631
+ align-items: center;
632
+ gap: 8px;
633
+ }
634
+ .databases-list[data-v-c886542c] {
635
+ min-height: 300px;
636
+ height: 100%;
637
+ overflow-y: auto;
638
+ padding-right: 8px;
639
+ }
640
+ .loading-state[data-v-c886542c] {
641
+ display: flex;
642
+ flex-direction: column;
643
+ align-items: center;
644
+ justify-content: center;
645
+ padding: 60px 20px;
646
+ gap: 16px;
647
+ }
648
+ .empty-state[data-v-c886542c] {
649
+ display: flex;
650
+ flex-direction: column;
651
+ align-items: center;
652
+ justify-content: center;
653
+ padding: 60px 20px;
654
+ gap: 16px;
655
+ text-align: center;
656
+ }
657
+ .empty-state i[data-v-c886542c] {
658
+ font-size: 48px;
659
+ color: #ced4da;
660
+ }
661
+ .empty-state p[data-v-c886542c] {
662
+ margin: 0;
663
+ color: #6c757d;
664
+ font-size: 16px;
665
+ }
666
+ .databases-list-simple[data-v-c886542c] {
667
+ display: grid;
668
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
669
+ gap: 12px;
670
+ }
671
+ .database-item[data-v-c886542c] {
672
+ display: flex;
673
+ flex-direction: column;
674
+ align-items: center;
675
+ gap: 8px;
676
+ padding: 16px;
677
+ border: 1px solid #dee2e6;
678
+ border-radius: 6px;
679
+ cursor: pointer;
680
+ transition: all 0.2s ease;
681
+ text-align: center;
682
+ min-height: 100px;
683
+ }
684
+ .database-item[data-v-c886542c]:hover {
685
+ border-color: #0d6efd;
686
+ background-color: #f8f9fa;
687
+ transform: translateY(-2px);
688
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
689
+ }
690
+ .database-item-icon[data-v-c886542c] {
691
+ font-size: 32px;
692
+ color: #6c757d;
693
+ }
694
+ .database-item-name[data-v-c886542c] {
695
+ font-size: 14px;
696
+ font-weight: 500;
697
+ color: #343a40;
698
+ overflow: hidden;
699
+ text-overflow: ellipsis;
700
+ white-space: nowrap;
701
+ max-width: 100%;
702
+ }
703
+ .database-item-actions[data-v-c886542c] {
704
+ display: flex;
705
+ gap: 4px;
706
+ margin-top: auto;
707
+ }
708
+ .sql-section[data-v-c886542c] {
709
+ display: flex;
710
+ flex-direction: column;
711
+ gap: 16px;
712
+ flex: 1;
713
+ overflow: hidden;
714
+ }
715
+ .sql-header[data-v-c886542c] {
716
+ display: flex;
717
+ justify-content: space-between;
718
+ align-items: center;
719
+ }
720
+ .sql-title[data-v-c886542c] {
721
+ margin: 0;
722
+ font-size: 16px;
723
+ font-weight: 600;
724
+ display: flex;
725
+ align-items: center;
726
+ gap: 8px;
727
+ }
728
+ .sql-db-info[data-v-c886542c] {
729
+ display: flex;
730
+ align-items: center;
731
+ gap: 8px;
732
+ }
733
+
734
+ /* 响应式设计 */
735
+ @media (max-width: 768px) {
736
+ .connection-header[data-v-c886542c] {
737
+ flex-direction: column;
738
+ align-items: flex-start;
739
+ gap: 16px;
740
+ }
741
+ .connection-actions[data-v-c886542c] {
742
+ align-self: flex-end;
743
+ }
744
+ .connection-cards[data-v-c886542c] {
745
+ grid-template-columns: 1fr;
746
+ }
747
+ .info-grid[data-v-c886542c] {
748
+ grid-template-columns: 1fr;
749
+ }
750
+ .stats-grid[data-v-c886542c] {
751
+ grid-template-columns: repeat(2, 1fr);
752
+ }
753
+ .actions-grid[data-v-c886542c] {
754
+ grid-template-columns: repeat(2, 1fr);
755
+ }
756
+ .databases-list-simple[data-v-c886542c] {
757
+ grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
758
+ gap: 10px;
759
+ }
760
+ .database-item[data-v-c886542c] {
761
+ padding: 12px;
762
+ min-height: 80px;
763
+ }
764
+ .database-item-icon[data-v-c886542c] {
765
+ font-size: 24px;
766
+ }
767
+ .database-item-name[data-v-c886542c] {
768
+ font-size: 12px;
769
+ }
770
+ .nav-link[data-v-c886542c] {
771
+ padding: 10px 16px;
772
+ font-size: 13px;
773
+ }
774
+ }
775
+
776
+ .section-title[data-v-d08de09c] {
777
+ color: #495057;
778
+ font-weight: 600;
779
+ border-bottom: 2px solid #e9ecef;
780
+ padding-bottom: 0.5rem;
781
+ margin-bottom: 1rem;
782
+ }
783
+ .sql-preview[data-v-d08de09c] {
784
+ font-family: 'Courier New', monospace;
785
+ font-size: 0.875rem;
786
+ max-height: 200px;
787
+ overflow-y: auto;
788
+ border: 1px solid #dee2e6;
789
+ }
790
+ .table th[data-v-d08de09c] {
791
+ font-size: 0.875rem;
792
+ font-weight: 600;
793
+ }
794
+ .table td[data-v-d08de09c] {
795
+ padding: 0!important;
796
+ }
797
+ .table .form-control[data-v-d08de09c], .table .form-select[data-v-d08de09c] {
798
+ border: none;
799
+ border-radius: 0;
800
+ box-shadow: none;
801
+ }
802
+ .form-control-sm[data-v-d08de09c], .form-select-sm[data-v-d08de09c] {
803
+ font-size: 0.875rem;
804
+ }
805
+ .modal-content[data-v-d08de09c] {
806
+ max-height: 90vh;
807
+ overflow-y: auto;
808
+ }
809
+ .modal-body[data-v-d08de09c] {
810
+ max-height: calc(90vh - 120px);
811
+ overflow-y: auto;
812
+ }
813
+ .input-group-sm .form-control[data-v-d08de09c] {
814
+ border-radius: 0;
815
+ }
816
+ .input-group-sm .form-control[data-v-d08de09c]:first-child {
817
+ border-top-left-radius: 0.25rem;
818
+ border-bottom-left-radius: 0.25rem;
819
+ }
820
+ .input-group-sm .form-control[data-v-d08de09c]:last-child {
821
+ border-top-right-radius: 0.25rem;
822
+ border-bottom-right-radius: 0.25rem;
823
+ }
824
+ .text-muted[data-v-d08de09c] {
825
+ color: #6c757d !important;
826
+ }
827
+
828
+ .db-tools[data-v-622732f3] {
829
+ background: white;
830
+ border-radius: 12px;
831
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
832
+ }
833
+ .tools-header[data-v-622732f3] {
834
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
835
+ color: white;
836
+ padding: 1rem 1.5rem;
837
+ border-bottom: 1px solid #e2e8f0;
838
+ }
839
+ .tools-title[data-v-622732f3] {
840
+ margin: 0;
841
+ font-size: 1.1rem;
842
+ font-weight: 600;
843
+ display: flex;
844
+ align-items: center;
845
+ gap: 0.5rem;
846
+ }
847
+ .tools-content[data-v-622732f3] {
848
+ padding: 1.5rem;
849
+ overflow-y: auto;
850
+ }
851
+ .tool-section[data-v-622732f3] {
852
+ margin-bottom: 2rem;
853
+ }
854
+ .section-title[data-v-622732f3] {
855
+ font-size: 0.9rem;
856
+ font-weight: 600;
857
+ color: #374151;
858
+ margin-bottom: 1rem;
859
+ display: flex;
860
+ align-items: center;
861
+ gap: 0.5rem;
862
+ }
863
+ .tool-actions[data-v-622732f3] {
864
+ display: flex;
865
+ flex-wrap: wrap;
866
+ gap: 0.5rem;
867
+ }
868
+ .tool-actions .btn[data-v-622732f3] {
869
+ min-width: 120px;
870
+ display: flex;
871
+ align-items: center;
872
+ gap: 0.5rem;
873
+ }
874
+ .modal[data-v-622732f3] {
875
+ background-color: rgba(0, 0, 0, 0.5);
876
+ }
877
+ .modal-dialog[data-v-622732f3] {
878
+ max-width: 600px;
879
+ }
880
+ .modal-header[data-v-622732f3] {
881
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
882
+ border-bottom: 1px solid #e2e8f0;
883
+ }
884
+ .modal-title[data-v-622732f3] {
885
+ color: #1e293b;
886
+ font-weight: 600;
887
+ }
888
+ .modal-footer[data-v-622732f3] {
889
+ background: #f8fafc;
890
+ border-top: 1px solid #e2e8f0;
891
+ }
892
+
893
+ /* 工具组件区域 */
894
+ .tool-component-area[data-v-622732f3] {
895
+ border-top: 1px solid #e2e8f0;
896
+ background: #f8fafc;
897
+ }
898
+ .component-header[data-v-622732f3] {
899
+ display: flex;
900
+ justify-content: space-between;
901
+ align-items: center;
902
+ padding: 1rem 1.5rem;
903
+ background: linear-gradient(135deg, #f1f5f9 0%, #f8fafc 100%);
904
+ border-bottom: 1px solid #e2e8f0;
905
+ }
906
+ .component-title[data-v-622732f3] {
907
+ margin: 0;
908
+ font-size: 1rem;
909
+ font-weight: 600;
910
+ color: #1e293b;
911
+ display: flex;
912
+ align-items: center;
913
+ gap: 0.5rem;
914
+ }
915
+ .tool-component[data-v-622732f3] {
916
+ padding: 1.5rem;
917
+ }
918
+ .sync-component[data-v-622732f3] {
919
+ background: white;
920
+ border-radius: 0.375rem;
921
+ }
922
+
923
+ /* 执行结果区域 */
924
+ .execution-results[data-v-622732f3] {
925
+ border-top: 1px solid #e2e8f0;
926
+ background: #f8fafc;
927
+ }
928
+ .results-header[data-v-622732f3] {
929
+ display: flex;
930
+ justify-content: space-between;
931
+ align-items: center;
932
+ padding: 1rem 1.5rem;
933
+ background: linear-gradient(135deg, #f1f5f9 0%, #f8fafc 100%);
934
+ border-bottom: 1px solid #e2e8f0;
935
+ }
936
+ .results-title[data-v-622732f3] {
937
+ margin: 0;
938
+ font-size: 1rem;
939
+ font-weight: 600;
940
+ color: #1e293b;
941
+ display: flex;
942
+ align-items: center;
943
+ gap: 0.5rem;
944
+ }
945
+ .results-content[data-v-622732f3] {
946
+ max-height: 400px;
947
+ overflow-y: auto;
948
+ padding: 1rem;
949
+ }
950
+ .no-results[data-v-622732f3] {
951
+ display: flex;
952
+ flex-direction: column;
953
+ align-items: center;
954
+ justify-content: center;
955
+ padding: 3rem 1rem;
956
+ color: #94a3b8;
957
+ }
958
+ .no-results i[data-v-622732f3] {
959
+ font-size: 3rem;
960
+ margin-bottom: 1rem;
961
+ }
962
+ .no-results p[data-v-622732f3] {
963
+ margin: 0;
964
+ font-size: 1rem;
965
+ }
966
+ .result-item[data-v-622732f3] {
967
+ margin-bottom: 0.75rem;
968
+ border: 1px solid #e2e8f0;
969
+ border-radius: 8px;
970
+ background: white;
971
+ overflow: hidden;
972
+ transition: box-shadow 0.2s;
973
+ }
974
+ .result-item[data-v-622732f3]:hover {
975
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
976
+ }
977
+ .result-item.result-success[data-v-622732f3] {
978
+ border-left: 4px solid #22c55e;
979
+ }
980
+ .result-item.result-error[data-v-622732f3] {
981
+ border-left: 4px solid #ef4444;
982
+ }
983
+ .result-item.result-info[data-v-622732f3] {
984
+ border-left: 4px solid #3b82f6;
985
+ }
986
+ .result-header[data-v-622732f3] {
987
+ display: flex;
988
+ justify-content: space-between;
989
+ align-items: center;
990
+ padding: 0.75rem 1rem;
991
+ cursor: pointer;
992
+ background: white;
993
+ transition: background 0.2s;
994
+ }
995
+ .result-header[data-v-622732f3]:hover {
996
+ background: #f8fafc;
997
+ }
998
+ .result-title[data-v-622732f3] {
999
+ display: flex;
1000
+ align-items: center;
1001
+ gap: 0.75rem;
1002
+ flex: 1;
1003
+ }
1004
+ .result-title i[data-v-622732f3] {
1005
+ font-size: 1.1rem;
1006
+ }
1007
+ .operation-name[data-v-622732f3] {
1008
+ font-weight: 600;
1009
+ color: #1e293b;
1010
+ font-size: 0.95rem;
1011
+ }
1012
+ .operation-time[data-v-622732f3] {
1013
+ color: #64748b;
1014
+ font-size: 0.85rem;
1015
+ margin-left: auto;
1016
+ }
1017
+ .toggle-icon[data-v-622732f3] {
1018
+ transition: transform 0.2s;
1019
+ color: #94a3b8;
1020
+ font-size: 0.9rem;
1021
+ }
1022
+ .toggle-icon.expanded[data-v-622732f3] {
1023
+ transform: rotate(180deg);
1024
+ }
1025
+ .result-body[data-v-622732f3] {
1026
+ padding: 1rem;
1027
+ background: #fafafa;
1028
+ border-top: 1px solid #e2e8f0;
1029
+ }
1030
+ .result-body pre[data-v-622732f3] {
1031
+ margin: 0;
1032
+ font-size: 0.85rem;
1033
+ line-height: 1.5;
1034
+ max-height: 300px;
1035
+ overflow: auto;
1036
+ }
1037
+ .result-body code[data-v-622732f3] {
1038
+ font-family: 'Fira Code', 'Consolas', 'Monaco', monospace;
1039
+ }
1040
+
1041
+ /* JSON 语法高亮 - 不使用 scoped 以确保 v-html 内容能应用样式 */
1042
+ [data-v-622732f3] .json-key {
1043
+ color: #d04255;
1044
+ font-weight: 500;
1045
+ }
1046
+ [data-v-622732f3] .json-string {
1047
+ color: #22863a;
1048
+ }
1049
+ [data-v-622732f3] .json-number {
1050
+ color: #005cc5;
1051
+ }
1052
+ [data-v-622732f3] .json-boolean {
1053
+ color: #d73a49;
1054
+ }
1055
+ [data-v-622732f3] .json-null {
1056
+ color: #6f42c1;
1057
+ }
1058
+
1059
+ /* 滚动条样式 */
1060
+ .results-content[data-v-622732f3]::-webkit-scrollbar,
1061
+ .result-body pre[data-v-622732f3]::-webkit-scrollbar {
1062
+ width: 8px;
1063
+ height: 8px;
1064
+ }
1065
+ .results-content[data-v-622732f3]::-webkit-scrollbar-track,
1066
+ .result-body pre[data-v-622732f3]::-webkit-scrollbar-track {
1067
+ background: #f1f5f9;
1068
+ border-radius: 4px;
1069
+ }
1070
+ .results-content[data-v-622732f3]::-webkit-scrollbar-thumb,
1071
+ .result-body pre[data-v-622732f3]::-webkit-scrollbar-thumb {
1072
+ background: #cbd5e1;
1073
+ border-radius: 4px;
1074
+ }
1075
+ .results-content[data-v-622732f3]::-webkit-scrollbar-thumb:hover,
1076
+ .result-body pre[data-v-622732f3]::-webkit-scrollbar-thumb:hover {
1077
+ background: #94a3b8;
1078
+ }
1079
+
1080
+ .database-detail[data-v-608988e0] {
1081
+ width: 100%;
1082
+ height: 100%;
1083
+ display: flex;
1084
+ flex-direction: column;
1085
+ }
1086
+ .sql-executor-section[data-v-608988e0] {
1087
+ margin: 15px 0;
1088
+ padding: 15px;
1089
+ background-color: #f8f9fa;
1090
+ border-radius: 4px;
1091
+ border: 1px solid #dee2e6;
1092
+ flex: 1;
1093
+ display: flex;
1094
+ }
1095
+
1096
+ /* 加载状态样式 */
1097
+ .loading-state[data-v-608988e0] {
1098
+ display: flex;
1099
+ flex-direction: column;
1100
+ align-items: center;
1101
+ justify-content: center;
1102
+ padding: 40px 0;
1103
+ color: #6c757d;
1104
+ }
1105
+ .loading-state .spinner-border[data-v-608988e0] {
1106
+ margin-bottom: 15px;
1107
+ color: #0d6efd;
1108
+ }
1109
+ .loading-state p[data-v-608988e0] {
1110
+ margin: 0;
1111
+ font-size: 14px;
1112
+ }
1113
+ .database-header[data-v-608988e0] {
1114
+ padding: 1rem;
1115
+ background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
1116
+ border-bottom: 1px solid #e2e8f0;
1117
+ }
1118
+ .database-header-content[data-v-608988e0] {
1119
+ display: flex;
1120
+ justify-content: space-between;
1121
+ align-items: center;
1122
+ gap: 2rem;
1123
+ }
1124
+ .database-info[data-v-608988e0] {
1125
+ display: flex;
1126
+ align-items: center;
1127
+ gap: 1rem;
1128
+ }
1129
+ .database-icon[data-v-608988e0] {
1130
+ width: 60px;
1131
+ height: 60px;
1132
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1133
+ border-radius: 12px;
1134
+ display: flex;
1135
+ align-items: center;
1136
+ justify-content: center;
1137
+ color: white;
1138
+ font-size: 1.5rem;
1139
+ }
1140
+ .database-meta h4[data-v-608988e0] {
1141
+ margin: 0 0 0.5rem 0;
1142
+ color: #1e293b;
1143
+ font-weight: 600;
1144
+ }
1145
+ .connection-info[data-v-608988e0] {
1146
+ display: flex;
1147
+ gap: 0.75rem;
1148
+ }
1149
+ .connection-name[data-v-608988e0] {
1150
+ background: rgba(102, 126, 234, 0.1);
1151
+ color: #667eea;
1152
+ padding: 0.25rem 0.5rem;
1153
+ border-radius: 12px;
1154
+ font-size: 0.875rem;
1155
+ font-weight: 500;
1156
+ }
1157
+ .connection-type[data-v-608988e0] {
1158
+ background: #f1f5f9;
1159
+ color: #64748b;
1160
+ padding: 0.25rem 0.5rem;
1161
+ border-radius: 12px;
1162
+ font-size: 0.875rem;
1163
+ font-weight: 500;
1164
+ }
1165
+ .database-stats[data-v-608988e0] {
1166
+ display: flex;
1167
+ gap: 2rem;
1168
+ }
1169
+ .stat-item[data-v-608988e0] {
1170
+ text-align: center;
1171
+ }
1172
+ .stat-value[data-v-608988e0] {
1173
+ font-size: 1.5rem;
1174
+ font-weight: 700;
1175
+ color: #1e293b;
1176
+ margin-bottom: 0.25rem;
1177
+ }
1178
+ .stat-label[data-v-608988e0] {
1179
+ font-size: 0.875rem;
1180
+ color: #64748b;
1181
+ font-weight: 500;
1182
+ }
1183
+ .database-tabs[data-v-608988e0] {
1184
+ flex: 1;
1185
+ overflow: hidden;
1186
+ display: flex;
1187
+ flex-direction: column;
1188
+ }
1189
+ .nav-tabs[data-v-608988e0] {
1190
+ background: #f8fafc;
1191
+ border-bottom: 1px solid #e2e8f0;
1192
+ padding: 0 1.5rem;
1193
+ }
1194
+ .nav-link[data-v-608988e0] {
1195
+ border: none;
1196
+ background: transparent;
1197
+ color: #64748b;
1198
+ padding: 1rem 1.5rem;
1199
+ font-weight: 500;
1200
+ transition: all 0.2s ease;
1201
+ }
1202
+ .nav-link[data-v-608988e0]:hover {
1203
+ color: #667eea;
1204
+ background: rgba(102, 126, 234, 0.1);
1205
+ }
1206
+ .nav-link.active[data-v-608988e0] {
1207
+ color: #667eea;
1208
+ background: white;
1209
+ border-bottom: 2px solid #667eea;
1210
+ }
1211
+ .tab-content[data-v-608988e0] {
1212
+ overflow-y: auto;
1213
+ flex: 1;
1214
+ display: flex;
1215
+ flex-direction: column;
1216
+ height: 100%;
1217
+ }
1218
+ .tab-panel[data-v-608988e0] {
1219
+ flex: 1;
1220
+ overflow-y: auto;
1221
+ display: flex;
1222
+ flex-direction: column;
1223
+ height: 100%;
1224
+ }
1225
+ .table-grid[data-v-608988e0] {
1226
+ display: grid;
1227
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
1228
+ gap: 1rem;
1229
+ }
1230
+ .table-card[data-v-608988e0] {
1231
+ background: white;
1232
+ border: 1px solid #e2e8f0;
1233
+ border-radius: 12px;
1234
+ overflow: hidden;
1235
+ transition: all 0.2s ease;
1236
+ cursor: pointer;
1237
+ }
1238
+ .table-card[data-v-608988e0]:hover {
1239
+ border-color: #667eea;
1240
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
1241
+ transform: translateY(-2px);
1242
+ }
1243
+ .card-header[data-v-608988e0] {
1244
+ background: #f8fafc;
1245
+ padding: 1rem;
1246
+ display: flex;
1247
+ align-items: center;
1248
+ gap: 0.75rem;
1249
+ }
1250
+ .table-icon[data-v-608988e0] {
1251
+ width: 40px;
1252
+ height: 40px;
1253
+ background: linear-gradient(135deg, #10b981 0%, #059669 100%);
1254
+ border-radius: 8px;
1255
+ display: flex;
1256
+ align-items: center;
1257
+ justify-content: center;
1258
+ color: white;
1259
+ }
1260
+ .table-info[data-v-608988e0] {
1261
+ flex: 1;
1262
+ min-width: 0; /* 允许子元素截断 */
1263
+ }
1264
+ .table-name-wrapper[data-v-608988e0] {
1265
+ display: flex;
1266
+ align-items: center;
1267
+ gap: 0.5rem;
1268
+ margin-bottom: 0.25rem;
1269
+ }
1270
+ .table-name[data-v-608988e0] {
1271
+ font-weight: 600;
1272
+ color: #1e293b;
1273
+ white-space: nowrap;
1274
+ overflow: hidden;
1275
+ text-overflow: ellipsis;
1276
+ }
1277
+ .table-engine[data-v-608988e0] {
1278
+ font-size: 0.75rem;
1279
+ color: #64748b;
1280
+ background: #f1f5f9;
1281
+ padding: 0.125rem 0.375rem;
1282
+ border-radius: 8px;
1283
+ flex-shrink: 0;
1284
+ }
1285
+ .table-comment-header[data-v-608988e0] {
1286
+ font-size: 0.75rem;
1287
+ color: #64748b;
1288
+ white-space: nowrap;
1289
+ overflow: hidden;
1290
+ text-overflow: ellipsis;
1291
+ }
1292
+ .card-body[data-v-608988e0] {
1293
+ padding: 1rem;
1294
+ }
1295
+ .table-stats[data-v-608988e0] {
1296
+ display: flex;
1297
+ gap: 1rem;
1298
+ margin-bottom: 0.75rem;
1299
+ }
1300
+ .stat[data-v-608988e0] {
1301
+ display: flex;
1302
+ flex-direction: column;
1303
+ gap: 0.25rem;
1304
+ }
1305
+ .table-comment[data-v-608988e0] {
1306
+ font-size: 0.875rem;
1307
+ color: #64748b;
1308
+ font-style: italic;
1309
+ margin-bottom: 0.75rem;
1310
+ line-height: 1.4;
1311
+ }
1312
+ .table-actions[data-v-608988e0] {
1313
+ display: flex;
1314
+ gap: 0.5rem;
1315
+ }
1316
+ .empty-state[data-v-608988e0] {
1317
+ display: flex;
1318
+ flex-direction: column;
1319
+ align-items: center;
1320
+ justify-content: center;
1321
+ height: 200px;
1322
+ color: #64748b;
1323
+ text-align: center;
1324
+ font-size: 1.5rem;
1325
+ }
1326
+ .empty-state i[data-v-608988e0] {
1327
+ margin-bottom: 1rem;
1328
+ opacity: 0.5;
1329
+ }
1330
+
1331
+ /* 视图和存储过程卡片样式 */
1332
+ .views-grid[data-v-608988e0], .procedures-grid[data-v-608988e0] {
1333
+ display: grid;
1334
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
1335
+ gap: 1rem;
1336
+ }
1337
+ .view-card[data-v-608988e0], .procedure-card[data-v-608988e0] {
1338
+ background: white;
1339
+ border: 1px solid #e2e8f0;
1340
+ border-radius: 12px;
1341
+ overflow: hidden;
1342
+ transition: all 0.2s ease;
1343
+ }
1344
+ .view-card[data-v-608988e0]:hover, .procedure-card[data-v-608988e0]:hover {
1345
+ border-color: #667eea;
1346
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
1347
+ transform: translateY(-2px);
1348
+ }
1349
+ .view-card .card-header[data-v-608988e0], .procedure-card .card-header[data-v-608988e0] {
1350
+ background: #f8fafc;
1351
+ padding: 1rem;
1352
+ display: flex;
1353
+ align-items: center;
1354
+ gap: 0.75rem;
1355
+ }
1356
+ .view-icon[data-v-608988e0], .procedure-icon[data-v-608988e0] {
1357
+ width: 40px;
1358
+ height: 40px;
1359
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
1360
+ border-radius: 8px;
1361
+ display: flex;
1362
+ align-items: center;
1363
+ justify-content: center;
1364
+ color: white;
1365
+ }
1366
+ .procedure-icon[data-v-608988e0] {
1367
+ background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
1368
+ }
1369
+ .view-name[data-v-608988e0], .procedure-name[data-v-608988e0] {
1370
+ font-weight: 600;
1371
+ color: #1e293b;
1372
+ margin-bottom: 0.25rem;
1373
+ }
1374
+ .view-comment[data-v-608988e0], .procedure-comment[data-v-608988e0] {
1375
+ font-size: 0.75rem;
1376
+ color: #64748b;
1377
+ margin-bottom: 0.5rem;
1378
+ line-height: 1.4;
1379
+ }
1380
+ .procedure-type[data-v-608988e0] {
1381
+ display: flex;
1382
+ gap: 0.25rem;
1383
+ flex-wrap: wrap;
1384
+ }
1385
+ .view-card .card-body[data-v-608988e0], .procedure-card .card-body[data-v-608988e0] {
1386
+ padding: 1rem;
1387
+ }
1388
+ .view-actions[data-v-608988e0], .procedure-actions[data-v-608988e0] {
1389
+ display: flex;
1390
+ gap: 0.5rem;
1391
+ }
1392
+ .views-actions[data-v-608988e0], .procedures-actions[data-v-608988e0], .tables-actions[data-v-608988e0] {
1393
+ display: flex;
1394
+ gap: 0.5rem;
1395
+ margin-bottom: 1rem;
1396
+ padding: 0.75rem 1rem;
1397
+ background: #f8fafc;
1398
+ border-radius: 8px;
1399
+ }
1400
+
1401
+ /* 模态框样式 */
1402
+ .modal-dialog[data-v-608988e0] {
1403
+ margin-top: 10vh;
1404
+ }
1405
+ .modal-content[data-v-608988e0] {
1406
+ border-radius: 12px;
1407
+ border: none;
1408
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
1409
+ }
1410
+ .modal-header[data-v-608988e0] {
1411
+ border-bottom: 1px solid #e2e8f0;
1412
+ padding: 1rem 1.5rem;
1413
+ }
1414
+ .modal-title[data-v-608988e0] {
1415
+ margin: 0;
1416
+ font-weight: 600;
1417
+ color: #1e293b;
1418
+ }
1419
+ .modal-body[data-v-608988e0] {
1420
+ padding: 1.5rem;
1421
+ }
1422
+ .modal-footer[data-v-608988e0] {
1423
+ border-top: 1px solid #e2e8f0;
1424
+ padding: 1rem 1.5rem;
1425
+ display: flex;
1426
+ justify-content: flex-end;
1427
+ gap: 0.5rem;
1428
+ }
1429
+
1430
+ .modal[data-v-c290380d] {
1431
+ background-color: rgba(0, 0, 0, 0.5);
1432
+ }
1433
+ .modal-dialog[data-v-c290380d] {
1434
+ max-width: 800px;
1435
+ }
1436
+ .form-label[data-v-c290380d] {
1437
+ font-weight: 500;
1438
+ color: #374151;
1439
+ }
1440
+ .form-control[data-v-c290380d], .form-select[data-v-c290380d] {
1441
+ border: 1px solid #d1d5db;
1442
+ border-radius: 6px;
1443
+ }
1444
+ .form-control[data-v-c290380d]:focus, .form-select[data-v-c290380d]:focus {
1445
+ border-color: #3b82f6;
1446
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
1447
+ }
1448
+ .modal-header[data-v-c290380d] {
1449
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
1450
+ border-bottom: 1px solid #e2e8f0;
1451
+ }
1452
+ .modal-title[data-v-c290380d] {
1453
+ color: #1e293b;
1454
+ font-weight: 600;
1455
+ }
1456
+ .modal-footer[data-v-c290380d] {
1457
+ background: #f8fafc;
1458
+ border-top: 1px solid #e2e8f0;
1459
+ }
1460
+ .text-danger[data-v-c290380d] {
1461
+ color: #ef4444;
1462
+ }
1463
+ .text-muted[data-v-c290380d] {
1464
+ color: #6b7280;
1465
+ font-size: 0.875rem;
1466
+ }
1467
+ .json-editor .text-muted[data-v-c290380d] {
1468
+ font-size: 0.75rem;
1469
+ }
1470
+ .json-editor[data-v-c290380d] .cm-editor {
1471
+ height: 100%;
1472
+ }
1473
+
1474
+ .table-data-grid[data-v-19b40cd6] {
1475
+ display: flex;
1476
+ flex-direction: column;
1477
+ height: 100%;
1478
+ }
1479
+ .data-grid-wrapper[data-v-19b40cd6] {
1480
+ flex: 1;
1481
+ overflow: hidden;
1482
+ }
1483
+ .column-header-custom[data-v-19b40cd6] {
1484
+ display: flex;
1485
+ flex-direction: column;
1486
+ cursor: pointer;
1487
+ user-select: none;
1488
+ }
1489
+ .header-main[data-v-19b40cd6] {
1490
+ display: flex;
1491
+ align-items: center;
1492
+ }
1493
+ .column-name[data-v-19b40cd6] {
1494
+ font-weight: 600;
1495
+ }
1496
+ .header-sub[data-v-19b40cd6] {
1497
+ display: flex;
1498
+ align-items: center;
1499
+ margin-top: 2px;
1500
+ max-width: 150px; /* 限制子标题区域的最大宽度 */
1501
+ }
1502
+ .column-type[data-v-19b40cd6] {
1503
+ font-size: 0.7rem;
1504
+ line-height: 1;
1505
+ flex-shrink: 0; /* 防止类型被压缩 */
1506
+ }
1507
+ .column-comment[data-v-19b40cd6] {
1508
+ font-size: 0.7rem;
1509
+ line-height: 1;
1510
+ opacity: 0.8;
1511
+ white-space: nowrap;
1512
+ overflow: hidden;
1513
+ text-overflow: ellipsis;
1514
+ flex: 1; /* 允许注释占据剩余空间并截断 */
1515
+ }
1516
+ .cell-value[data-v-19b40cd6] {
1517
+ max-width: 300px;
1518
+ overflow: hidden;
1519
+ text-overflow: ellipsis;
1520
+ white-space: nowrap;
1521
+ }
1522
+ .grid-footer-bar[data-v-19b40cd6] {
1523
+ background: #f8f9fa;
1524
+ border-top: 1px solid #dee2e6;
1525
+ padding: 8px 16px;
1526
+ }
1527
+
1528
+ .table-detail[data-v-5c9e0782] {
1529
+ width: 100%;
1530
+ height: 100%;
1531
+ display: flex;
1532
+ flex-direction: column;
1533
+ }
1534
+ .table-header[data-v-5c9e0782] {
1535
+ background-color: #f8f9fa;
1536
+ border-bottom: 1px solid #dee2e6;
1537
+ padding: 15px 20px;
1538
+ }
1539
+ .table-header-content[data-v-5c9e0782] {
1540
+ display: flex;
1541
+ justify-content: space-between;
1542
+ align-items: center;
1543
+ }
1544
+ .table-info[data-v-5c9e0782] {
1545
+ display: flex;
1546
+ align-items: center;
1547
+ gap: 15px;
1548
+ }
1549
+ .table-icon[data-v-5c9e0782] {
1550
+ font-size: 32px;
1551
+ color: #495057;
1552
+ }
1553
+ .table-meta[data-v-5c9e0782] {
1554
+ display: flex;
1555
+ flex-direction: column;
1556
+ gap: 5px;
1557
+ }
1558
+ .table-name[data-v-5c9e0782] {
1559
+ margin: 0;
1560
+ font-size: 1.25rem;
1561
+ font-weight: 600;
1562
+ }
1563
+ .table-breadcrumb[data-v-5c9e0782] {
1564
+ display: flex;
1565
+ align-items: center;
1566
+ gap: 8px;
1567
+ font-size: 0.875rem;
1568
+ color: #6c757d;
1569
+ }
1570
+ .table-stats[data-v-5c9e0782] {
1571
+ display: flex;
1572
+ gap: 20px;
1573
+ }
1574
+ .stat-item[data-v-5c9e0782] {
1575
+ display: flex;
1576
+ flex-direction: column;
1577
+ align-items: center;
1578
+ gap: 2px;
1579
+ }
1580
+ .stat-value[data-v-5c9e0782] {
1581
+ font-size: 1.125rem;
1582
+ font-weight: 600;
1583
+ color: #495057;
1584
+ }
1585
+ .stat-label[data-v-5c9e0782] {
1586
+ font-size: 0.75rem;
1587
+ color: #6c757d;
1588
+ }
1589
+ .table-toolbar[data-v-5c9e0782] {
1590
+ display: flex;
1591
+ justify-content: space-between;
1592
+ align-items: center;
1593
+ padding: 10px 20px;
1594
+ background-color: #f8f9fa;
1595
+ border-bottom: 1px solid #dee2e6;
1596
+ }
1597
+ .toolbar-left[data-v-5c9e0782] {
1598
+ display: flex;
1599
+ gap: 10px;
1600
+ align-items: center;
1601
+ }
1602
+ .toolbar-right[data-v-5c9e0782] {
1603
+ display: flex;
1604
+ gap: 10px;
1605
+ align-items: center;
1606
+ }
1607
+ .table-tabs[data-v-5c9e0782] {
1608
+ flex: 1;
1609
+ display: flex;
1610
+ flex-direction: column;
1611
+ overflow: hidden;
1612
+ }
1613
+ .nav-tabs[data-v-5c9e0782] {
1614
+ border-bottom: 1px solid #dee2e6;
1615
+ background-color: #f8f9fa;
1616
+ flex-shrink: 0;
1617
+ }
1618
+ .nav-tabs .nav-link[data-v-5c9e0782] {
1619
+ color: #495057;
1620
+ border: none;
1621
+ border-bottom: 3px solid transparent;
1622
+ border-radius: 0;
1623
+ padding: 10px 15px;
1624
+ font-weight: 500;
1625
+ }
1626
+ .nav-tabs .nav-link[data-v-5c9e0782]:hover {
1627
+ background-color: #e9ecef;
1628
+ border-bottom-color: #adb5bd;
1629
+ }
1630
+ .nav-tabs .nav-link.active[data-v-5c9e0782] {
1631
+ background-color: #fff;
1632
+ border-bottom-color: #0d6efd;
1633
+ color: #0d6efd;
1634
+ }
1635
+ .tab-content[data-v-5c9e0782] {
1636
+ flex: 1;
1637
+ overflow: auto;
1638
+ padding: 20px;
1639
+ background-color: #fff;
1640
+ display: flex;
1641
+ flex-direction: column;
1642
+ }
1643
+ .tab-panel[data-v-5c9e0782] {
1644
+ flex: 1;
1645
+ display: flex;
1646
+ flex-direction: column;
1647
+ height: 100%;
1648
+ overflow: auto;
1649
+ }
1650
+ .data-content[data-v-5c9e0782] {
1651
+ height: 100%;
1652
+ display: flex;
1653
+ flex-direction: column;
1654
+ }
1655
+ .data-content.loading[data-v-5c9e0782] {
1656
+ opacity: 0.7;
1657
+ pointer-events: none;
1658
+ }
1659
+ .table-responsive[data-v-5c9e0782] {
1660
+ flex: 1;
1661
+ overflow: auto;
1662
+ }
1663
+ .column-header[data-v-5c9e0782] {
1664
+ position: relative;
1665
+ }
1666
+ .column-key[data-v-5c9e0782] {
1667
+ position: absolute;
1668
+ top: -5px;
1669
+ right: -15px;
1670
+ color: #0d6efd;
1671
+ font-size: 0.75rem;
1672
+ }
1673
+ .cell-value[data-v-5c9e0782] {
1674
+ max-width: 200px;
1675
+ overflow: hidden;
1676
+ text-overflow: ellipsis;
1677
+ white-space: nowrap;
1678
+ }
1679
+ .loading-state[data-v-5c9e0782] {
1680
+ display: flex;
1681
+ flex-direction: column;
1682
+ align-items: center;
1683
+ justify-content: center;
1684
+ height: 300px;
1685
+ gap: 15px;
1686
+ }
1687
+ .empty-state[data-v-5c9e0782] {
1688
+ display: flex;
1689
+ flex-direction: column;
1690
+ align-items: center;
1691
+ justify-content: center;
1692
+ height: 300px;
1693
+ gap: 15px;
1694
+ color: #6c757d;
1695
+ }
1696
+ .empty-state i[data-v-5c9e0782] {
1697
+ font-size: 48px;
1698
+ opacity: 0.5;
1699
+ }
1700
+ .pagination-nav[data-v-5c9e0782] {
1701
+ margin-top: 20px;
1702
+ border-top: 1px solid #dee2e6;
1703
+ padding-top: 15px;
1704
+ }
1705
+ .pagination-container[data-v-5c9e0782] {
1706
+ display: flex;
1707
+ align-items: center;
1708
+ justify-content: space-between;
1709
+ flex-wrap: wrap;
1710
+ gap: 10px;
1711
+ }
1712
+ .pagination-info[data-v-5c9e0782] {
1713
+ font-size: 0.875rem;
1714
+ color: #6c757d;
1715
+ }
1716
+ .page-size-selector[data-v-5c9e0782] {
1717
+ display: flex;
1718
+ align-items: center;
1719
+ gap: 5px;
1720
+ }
1721
+ .page-jump[data-v-5c9e0782] {
1722
+ display: flex;
1723
+ align-items: center;
1724
+ gap: 5px;
1725
+ }
1726
+ .structure-actions[data-v-5c9e0782] {
1727
+ display: flex;
1728
+ gap: 10px;
1729
+ margin-bottom: 15px;
1730
+ }
1731
+ .structure-table[data-v-5c9e0782], .indexes-table[data-v-5c9e0782], .relations-table[data-v-5c9e0782] {
1732
+ overflow: auto;
1733
+ }
1734
+ .structure-table table[data-v-5c9e0782], .indexes-table table[data-v-5c9e0782], .relations-table table[data-v-5c9e0782] {
1735
+ width: 100%;
1736
+ }
1737
+ .sql-section[data-v-5c9e0782] {
1738
+ height: 100%;
1739
+ }
1740
+
1741
+ /* 响应式设计 */
1742
+ @media (max-width: 768px) {
1743
+ .table-header-content[data-v-5c9e0782] {
1744
+ flex-direction: column;
1745
+ align-items: flex-start;
1746
+ gap: 15px;
1747
+ }
1748
+ .table-stats[data-v-5c9e0782] {
1749
+ width: 100%;
1750
+ justify-content: space-around;
1751
+ }
1752
+ .table-toolbar[data-v-5c9e0782] {
1753
+ flex-direction: column;
1754
+ align-items: stretch;
1755
+ gap: 10px;
1756
+ }
1757
+ .toolbar-left[data-v-5c9e0782], .toolbar-right[data-v-5c9e0782] {
1758
+ justify-content: center;
1759
+ }
1760
+ .pagination-container[data-v-5c9e0782] {
1761
+ flex-direction: column;
1762
+ align-items: flex-start;
1763
+ gap: 15px;
1764
+ }
1765
+ .pagination[data-v-5c9e0782] {
1766
+ width: 100%;
1767
+ justify-content: center;
1768
+ }
1769
+ }
1770
+
1771
+ .about-page[data-v-16b501ef] {
1772
+ padding: 2rem;
1773
+ max-width: 800px;
1774
+ margin: 0 auto;
1775
+ }
1776
+ .about-header[data-v-16b501ef] {
1777
+ display: flex;
1778
+ align-items: center;
1779
+ gap: 1rem;
1780
+ margin-bottom: 2rem;
1781
+ padding-bottom: 1rem;
1782
+ border-bottom: 1px solid #e2e8f0;
1783
+ }
1784
+ .about-logo[data-v-16b501ef] {
1785
+ width: 60px;
1786
+ height: 60px;
1787
+ border-radius: 12px;
1788
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1789
+ display: flex;
1790
+ align-items: center;
1791
+ justify-content: center;
1792
+ color: white;
1793
+ font-size: 2rem;
1794
+ }
1795
+ .about-title h2[data-v-16b501ef] {
1796
+ margin: 0;
1797
+ font-size: 2rem;
1798
+ font-weight: 700;
1799
+ color: #1e293b;
1800
+ }
1801
+ .about-title p[data-v-16b501ef] {
1802
+ margin: 0.25rem 0 0 0;
1803
+ color: #64748b;
1804
+ font-size: 1.125rem;
1805
+ }
1806
+ .about-content[data-v-16b501ef] {
1807
+ display: flex;
1808
+ flex-direction: column;
1809
+ gap: 2rem;
1810
+ }
1811
+ .about-section[data-v-16b501ef] {
1812
+ background: white;
1813
+ padding: 1.5rem;
1814
+ border-radius: 12px;
1815
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
1816
+ }
1817
+ .about-section h3[data-v-16b501ef] {
1818
+ margin: 0 0 1rem 0;
1819
+ font-size: 1.25rem;
1820
+ font-weight: 600;
1821
+ color: #1e293b;
1822
+ }
1823
+ .about-section p[data-v-16b501ef] {
1824
+ margin: 0 0 1rem 0;
1825
+ color: #64748b;
1826
+ line-height: 1.6;
1827
+ }
1828
+ .feature-list[data-v-16b501ef] {
1829
+ list-style: none;
1830
+ padding: 0;
1831
+ margin: 0;
1832
+ }
1833
+ .feature-list li[data-v-16b501ef] {
1834
+ display: flex;
1835
+ align-items: flex-start;
1836
+ gap: 0.75rem;
1837
+ margin-bottom: 0.75rem;
1838
+ color: #64748b;
1839
+ }
1840
+ .feature-list li i[data-v-16b501ef] {
1841
+ color: #10b981;
1842
+ margin-top: 0.25rem;
1843
+ flex-shrink: 0;
1844
+ }
1845
+ .database-types[data-v-16b501ef] {
1846
+ display: grid;
1847
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1848
+ gap: 0.5rem;
1849
+ }
1850
+ .db-type[data-v-16b501ef] {
1851
+ display: flex;
1852
+ justify-content: space-between;
1853
+ align-items: center;
1854
+ padding: 0.5rem;
1855
+ background: #f8fafc;
1856
+ border-radius: 6px;
1857
+ }
1858
+ .db-name[data-v-16b501ef] {
1859
+ font-weight: 500;
1860
+ color: #374151;
1861
+ }
1862
+ .db-port[data-v-16b501ef] {
1863
+ color: #6b7280;
1864
+ font-size: 0.875rem;
1865
+ }
1866
+ .about-links[data-v-16b501ef] {
1867
+ display: flex;
1868
+ flex-direction: column;
1869
+ gap: 0.75rem;
1870
+ }
1871
+ .about-link[data-v-16b501ef] {
1872
+ display: flex;
1873
+ align-items: center;
1874
+ gap: 0.75rem;
1875
+ padding: 0.75rem;
1876
+ background: #f8fafc;
1877
+ border-radius: 8px;
1878
+ color: #667eea;
1879
+ text-decoration: none;
1880
+ font-weight: 500;
1881
+ transition: all 0.3s ease;
1882
+ }
1883
+ .about-link[data-v-16b501ef]:hover {
1884
+ background: #e0e7ff;
1885
+ transform: translateX(4px);
1886
+ }
1887
+ .about-link i[data-v-16b501ef] {
1888
+ flex-shrink: 0;
1889
+ }
1890
+
1891
+ .database-explorer[data-v-0bf6b46f] {
1892
+ height: 100vh;
1893
+ min-height: 600px;
1894
+ }
1895
+ .explorer-layout[data-v-0bf6b46f] {
1896
+ display: flex;
1897
+ height: 100%;
1898
+ background: white;
1899
+ border-radius: 12px;
1900
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
1901
+ overflow: hidden;
1902
+ }
1903
+
1904
+ /* 左侧边栏 */
1905
+ .explorer-sidebar[data-v-0bf6b46f] {
1906
+ width: 350px;
1907
+ flex-shrink: 0;
1908
+ border-right: 1px solid #e1e5e9;
1909
+ display: flex;
1910
+ flex-direction: column;
1911
+ background: #ffffff;
1912
+ }
1913
+ .sidebar-content[data-v-0bf6b46f] {
1914
+ flex: 1;
1915
+ overflow-y: auto;
1916
+ padding: 0.5rem 0;
1917
+ display: flex;
1918
+ flex-direction: column;
1919
+ }
1920
+ .tree-container[data-v-0bf6b46f] {
1921
+ flex: 1;
1922
+ }
1923
+
1924
+ /* 工具信息样式 - 固定在左下角 */
1925
+ .sidebar-tool-info[data-v-0bf6b46f] {
1926
+ padding: 0.75rem;
1927
+ border-top: 1px solid #e1e5e9;
1928
+ background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
1929
+ display: flex;
1930
+ align-items: center;
1931
+ gap: 0.75rem;
1932
+ cursor: pointer;
1933
+ transition: all 0.3s ease;
1934
+ }
1935
+ .sidebar-tool-info[data-v-0bf6b46f]:hover {
1936
+ background: linear-gradient(135deg, #e0e7ff 0%, #ddd6fe 100%);
1937
+ transform: translateY(-1px);
1938
+ }
1939
+ .tool-logo[data-v-0bf6b46f] {
1940
+ width: 32px;
1941
+ height: 32px;
1942
+ border-radius: 6px;
1943
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1944
+ display: flex;
1945
+ align-items: center;
1946
+ justify-content: center;
1947
+ color: white;
1948
+ font-size: 1rem;
1949
+ flex-shrink: 0;
1950
+ }
1951
+ .tool-details[data-v-0bf6b46f] {
1952
+ flex: 1;
1953
+ display: flex;
1954
+ flex-direction: column;
1955
+ gap: 0.125rem;
1956
+ }
1957
+ .tool-name[data-v-0bf6b46f] {
1958
+ font-size: 0.875rem;
1959
+ font-weight: 600;
1960
+ color: #1e293b;
1961
+ }
1962
+ .tool-description[data-v-0bf6b46f] {
1963
+ font-size: 0.75rem;
1964
+ color: #64748b;
1965
+ }
1966
+ .sidebar-header[data-v-0bf6b46f] {
1967
+ padding: 1rem 0.875rem;
1968
+ border-bottom: 1px solid #e1e5e9;
1969
+ background: #f8f9fa;
1970
+ display: flex;
1971
+ justify-content: space-between;
1972
+ align-items: center;
1973
+ }
1974
+ .sidebar-title[data-v-0bf6b46f] {
1975
+ margin: 0;
1976
+ font-size: 0.9375rem;
1977
+ font-weight: 600;
1978
+ color: #24292f;
1979
+ display: flex;
1980
+ align-items: center;
1981
+ gap: 0.5rem;
1982
+ }
1983
+ .sidebar-title i[data-v-0bf6b46f] {
1984
+ color: #656d76;
1985
+ }
1986
+ .sidebar-actions[data-v-0bf6b46f] {
1987
+ display: flex;
1988
+ gap: 0.25rem;
1989
+ }
1990
+ .sidebar-actions .btn[data-v-0bf6b46f] {
1991
+ padding: 0.375rem 0.625rem;
1992
+ font-size: 0.75rem;
1993
+ border: 1px solid #d0d7de;
1994
+ background-color: #ffffff;
1995
+ color: #24292f;
1996
+ border-radius: 6px;
1997
+ transition: all 0.15s ease;
1998
+ }
1999
+ .sidebar-actions .btn[data-v-0bf6b46f]:hover {
2000
+ background-color: #f3f4f6;
2001
+ border-color: #d0d7de;
2002
+ }
2003
+ .sidebar-actions .btn-outline-primary[data-v-0bf6b46f] {
2004
+ border-color: #0969da;
2005
+ color: #0969da;
2006
+ }
2007
+ .sidebar-actions .btn-outline-primary[data-v-0bf6b46f]:hover {
2008
+ background-color: #0969da;
2009
+ border-color: #0969da;
2010
+ color: #ffffff;
2011
+ }
2012
+ .sidebar-actions .btn-outline-success[data-v-0bf6b46f] {
2013
+ border-color: #1a7f37;
2014
+ color: #1a7f37;
2015
+ }
2016
+ .sidebar-actions .btn-outline-success[data-v-0bf6b46f]:hover {
2017
+ background-color: #1a7f37;
2018
+ border-color: #1a7f37;
2019
+ color: #ffffff;
2020
+ }
2021
+ .sidebar-content[data-v-0bf6b46f] {
2022
+ flex: 1;
2023
+ overflow-y: auto;
2024
+ padding: 0.5rem 0;
2025
+ }
2026
+
2027
+ /* 树形结构 */
2028
+ .tree-container[data-v-0bf6b46f] {
2029
+ font-size: 0.875rem;
2030
+ user-select: none;
2031
+ }
2032
+ .tree-node[data-v-0bf6b46f] {
2033
+ margin-bottom: 0;
2034
+ }
2035
+ .tree-children[data-v-0bf6b46f] {
2036
+ margin-left: 0.75rem;
2037
+ border-left: 1px solid #e1e5e9;
2038
+ padding-left: 0.5rem;
2039
+ }
2040
+ .node-content[data-v-0bf6b46f] {
2041
+ display: flex;
2042
+ align-items: center;
2043
+ padding: 0.375rem 0.75rem;
2044
+ cursor: pointer;
2045
+ transition: background-color 0.15s ease;
2046
+ position: relative;
2047
+ margin-right: 0.5rem;
2048
+ border-radius: 6px;
2049
+ gap: 0.25rem;
2050
+ }
2051
+ .node-expand[data-v-0bf6b46f] {
2052
+ width: 16px;
2053
+ height: 16px;
2054
+ display: flex;
2055
+ align-items: center;
2056
+ justify-content: center;
2057
+ flex-shrink: 0;
2058
+ margin-right: 0.25rem;
2059
+ }
2060
+ .node-expand i[data-v-0bf6b46f] {
2061
+ font-size: 0.6875rem;
2062
+ color: #656d76;
2063
+ transition: transform 0.15s ease;
2064
+ }
2065
+ .node-expand i.expanded[data-v-0bf6b46f] {
2066
+ transform: rotate(90deg);
2067
+ }
2068
+ .node-main[data-v-0bf6b46f] {
2069
+ display: flex;
2070
+ align-items: center;
2071
+ flex: 1;
2072
+ min-width: 0;
2073
+ }
2074
+ .node-content[data-v-0bf6b46f]:hover {
2075
+ background-color: #f3f4f6;
2076
+ }
2077
+ .tree-node.selected .node-content[data-v-0bf6b46f] {
2078
+ background-color: #eff1ff;
2079
+ color: #0969da;
2080
+ font-weight: 500;
2081
+ box-shadow: 0 2px 8px rgba(9, 105, 218, 0.15);
2082
+ }
2083
+ .tree-node.selected .node-content[data-v-0bf6b46f]::before {
2084
+ content: '';
2085
+ position: absolute;
2086
+ left: 0;
2087
+ top: 0;
2088
+ bottom: 0;
2089
+ width: 3px;
2090
+ background: linear-gradient(135deg, #0969da, #0550ae);
2091
+ border-radius: 3px 0 0 3px;
2092
+ }
2093
+ .node-icon[data-v-0bf6b46f] {
2094
+ width: 20px;
2095
+ display: flex;
2096
+ justify-content: center;
2097
+ flex-shrink: 0;
2098
+ margin-right: 0.5rem;
2099
+ }
2100
+ .node-icon i[data-v-0bf6b46f] {
2101
+ font-size: 0.875rem;
2102
+ }
2103
+ .node-label[data-v-0bf6b46f] {
2104
+ flex: 1;
2105
+ display: flex;
2106
+ align-items: center;
2107
+ gap: 0.375rem;
2108
+ min-width: 0;
2109
+ }
2110
+ .connection-name[data-v-0bf6b46f],
2111
+ .database-name[data-v-0bf6b46f],
2112
+ .table-name[data-v-0bf6b46f] {
2113
+ font-weight: 500;
2114
+ white-space: nowrap;
2115
+ overflow: hidden;
2116
+ text-overflow: ellipsis;
2117
+ line-height: 1.25;
2118
+ }
2119
+ .tree-node.selected .connection-name[data-v-0bf6b46f],
2120
+ .tree-node.selected .database-name[data-v-0bf6b46f],
2121
+ .tree-node.selected .table-name[data-v-0bf6b46f] {
2122
+ font-weight: 600;
2123
+ }
2124
+ .connection-type[data-v-0bf6b46f],
2125
+ .table-info[data-v-0bf6b46f] {
2126
+ font-size: 0.75rem;
2127
+ color: #656d76;
2128
+ background-color: #f6f8fa;
2129
+ padding: 0.125rem 0.375rem;
2130
+ border-radius: 12px;
2131
+ font-weight: 500;
2132
+ white-space: nowrap;
2133
+ }
2134
+ .tree-node.selected .connection-type[data-v-0bf6b46f],
2135
+ .tree-node.selected .table-info[data-v-0bf6b46f] {
2136
+ background-color: rgba(9, 105, 218, 0.1);
2137
+ color: #0969da;
2138
+ }
2139
+ .node-actions[data-v-0bf6b46f] {
2140
+ display: flex;
2141
+ gap: 0.125rem;
2142
+ opacity: 0;
2143
+ transition: opacity 0.15s ease;
2144
+ }
2145
+ .node-content:hover .node-actions[data-v-0bf6b46f] {
2146
+ opacity: 1;
2147
+ }
2148
+ .btn-icon[data-v-0bf6b46f] {
2149
+ padding: 0.25rem;
2150
+ background: transparent;
2151
+ border: none;
2152
+ border-radius: 4px;
2153
+ transition: background-color 0.15s ease;
2154
+ display: flex;
2155
+ align-items: center;
2156
+ justify-content: center;
2157
+ width: 20px;
2158
+ height: 20px;
2159
+ }
2160
+ .btn-icon[data-v-0bf6b46f]:hover {
2161
+ background-color: #e1e4e8;
2162
+ }
2163
+ .btn-icon i[data-v-0bf6b46f] {
2164
+ font-size: 0.6875rem;
2165
+ color: #656d76;
2166
+ }
2167
+ .tree-node.selected .btn-icon[data-v-0bf6b46f]:hover {
2168
+ background-color: rgba(9, 105, 218, 0.1);
2169
+ }
2170
+ .tree-node.selected .btn-icon i[data-v-0bf6b46f] {
2171
+ color: #656d76;
2172
+ }
2173
+ .tree-node.selected .btn-icon:hover i[data-v-0bf6b46f] {
2174
+ color: #0969da;
2175
+ }
2176
+ .btn-icon-danger[data-v-0bf6b46f]:hover {
2177
+ background-color: #fee2e2;
2178
+ }
2179
+ .btn-icon-danger:hover i[data-v-0bf6b46f] {
2180
+ color: #dc2626;
2181
+ }
2182
+ .node-spinner[data-v-0bf6b46f] {
2183
+ display: flex;
2184
+ align-items: center;
2185
+ justify-content: center;
2186
+ }
2187
+ .spinner-border-sm[data-v-0bf6b46f] {
2188
+ width: 1rem;
2189
+ height: 1rem;
2190
+ border-width: 0.15em;
2191
+ }
2192
+
2193
+ /* 连接节点样式 */
2194
+ .connection-content[data-v-0bf6b46f] {
2195
+ font-weight: 500;
2196
+ color: #24292f;
2197
+ }
2198
+ .connection-content[data-v-0bf6b46f]:hover {
2199
+ background-color: #f3f4f6;
2200
+ }
2201
+ .tree-node.selected .connection-content[data-v-0bf6b46f] {
2202
+ background-color: #eff1ff;
2203
+ color: #0969da;
2204
+ }
2205
+
2206
+ /* 数据库节点样式 */
2207
+ .database-content[data-v-0bf6b46f] {
2208
+ color: #24292f;
2209
+ }
2210
+ .database-content[data-v-0bf6b46f]:hover {
2211
+ background-color: #f6f8fa;
2212
+ }
2213
+ .tree-node.selected .database-content[data-v-0bf6b46f] {
2214
+ background-color: #eff1ff;
2215
+ color: #0969da;
2216
+ }
2217
+
2218
+ /* 表节点样式 */
2219
+ .table-content[data-v-0bf6b46f] {
2220
+ color: #24292f;
2221
+ }
2222
+ .table-content[data-v-0bf6b46f]:hover {
2223
+ background-color: #f6f8fa;
2224
+ }
2225
+ .tree-node.selected .table-content[data-v-0bf6b46f] {
2226
+ background-color: #eff1ff;
2227
+ color: #0969da;
2228
+ }
2229
+
2230
+ /* 数据库品牌色彩 */
2231
+ .db-mysql[data-v-0bf6b46f] {
2232
+ color: #00758f !important;
2233
+ background: linear-gradient(135deg, #00758f, #005a70);
2234
+ -webkit-background-clip: text;
2235
+ -webkit-text-fill-color: transparent;
2236
+ }
2237
+ .db-mysql-bg[data-v-0bf6b46f] { background: linear-gradient(135deg, #00758f, #005a70);
2238
+ }
2239
+ .db-postgres[data-v-0bf6b46f] {
2240
+ color: #336791 !important;
2241
+ background: linear-gradient(135deg, #336791, #2a5278);
2242
+ -webkit-background-clip: text;
2243
+ -webkit-text-fill-color: transparent;
2244
+ }
2245
+ .db-postgres-bg[data-v-0bf6b46f] { background: linear-gradient(135deg, #336791, #2a5278);
2246
+ }
2247
+ .db-sqlite[data-v-0bf6b46f] {
2248
+ color: #003b57 !important;
2249
+ background: linear-gradient(135deg, #003b57, #002d42);
2250
+ -webkit-background-clip: text;
2251
+ -webkit-text-fill-color: transparent;
2252
+ }
2253
+ .db-sqlite-bg[data-v-0bf6b46f] { background: linear-gradient(135deg, #003b57, #002d42);
2254
+ }
2255
+ .db-mssql[data-v-0bf6b46f] {
2256
+ color: #cc2927 !important;
2257
+ background: linear-gradient(135deg, #cc2927, #a62220);
2258
+ -webkit-background-clip: text;
2259
+ -webkit-text-fill-color: transparent;
2260
+ }
2261
+ .db-mssql-bg[data-v-0bf6b46f] { background: linear-gradient(135deg, #cc2927, #a62220);
2262
+ }
2263
+ .db-oracle[data-v-0bf6b46f] {
2264
+ color: #f80000 !important;
2265
+ background: linear-gradient(135deg, #f80000, #d40000);
2266
+ -webkit-background-clip: text;
2267
+ -webkit-text-fill-color: transparent;
2268
+ }
2269
+ .db-oracle-bg[data-v-0bf6b46f] { background: linear-gradient(135deg, #f80000, #d40000);
2270
+ }
2271
+ .db-default[data-v-0bf6b46f] {
2272
+ color: #64748b !important;
2273
+ background: linear-gradient(135deg, #64748b, #475569);
2274
+ -webkit-background-clip: text;
2275
+ -webkit-text-fill-color: transparent;
2276
+ }
2277
+ .db-default-bg[data-v-0bf6b46f] { background: linear-gradient(135deg, #64748b, #475569);
2278
+ }
2279
+ .tree-node.selected .db-mysql[data-v-0bf6b46f],
2280
+ .tree-node.selected .db-postgres[data-v-0bf6b46f],
2281
+ .tree-node.selected .db-sqlite[data-v-0bf6b46f],
2282
+ .tree-node.selected .db-mssql[data-v-0bf6b46f],
2283
+ .tree-node.selected .db-oracle[data-v-0bf6b46f],
2284
+ .tree-node.selected .db-default[data-v-0bf6b46f] {
2285
+ color: white !important;
2286
+ background: none;
2287
+ -webkit-text-fill-color: white;
2288
+ }
2289
+
2290
+ /* 数据库Logo图标 */
2291
+ .db-logo[data-v-0bf6b46f] {
2292
+ width: 20px;
2293
+ height: 20px;
2294
+ border-radius: 4px;
2295
+ display: flex;
2296
+ align-items: center;
2297
+ justify-content: center;
2298
+ font-weight: 700;
2299
+ font-size: 0.75rem;
2300
+ color: white;
2301
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
2302
+ }
2303
+ .db-logo-mysql[data-v-0bf6b46f] {
2304
+ background: linear-gradient(135deg, #00758f, #005a70);
2305
+ border: 1px solid #004d61;
2306
+ }
2307
+ .db-logo-postgres[data-v-0bf6b46f] {
2308
+ background: linear-gradient(135deg, #336791, #2a5278);
2309
+ border: 1px solid #244566;
2310
+ }
2311
+ .db-logo-sqlite[data-v-0bf6b46f] {
2312
+ background: linear-gradient(135deg, #003b57, #002d42);
2313
+ border: 1px solid #002939;
2314
+ }
2315
+ .db-logo-mssql[data-v-0bf6b46f] {
2316
+ background: linear-gradient(135deg, #cc2927, #a62220);
2317
+ border: 1px solid #8b1f1d;
2318
+ }
2319
+ .db-logo-oracle[data-v-0bf6b46f] {
2320
+ background: linear-gradient(135deg, #f80000, #d40000);
2321
+ border: 1px solid #b30000;
2322
+ }
2323
+ .db-logo-default[data-v-0bf6b46f] {
2324
+ background: linear-gradient(135deg, #64748b, #475569);
2325
+ border: 1px solid #334155;
2326
+ }
2327
+
2328
+ /* 右侧主内容 */
2329
+ .explorer-main[data-v-0bf6b46f] {
2330
+ flex: 1;
2331
+ display: flex;
2332
+ flex-direction: column;
2333
+ overflow: hidden;
2334
+ height: 100%;
2335
+ }
2336
+
2337
+ /* 详情组件容器 */
2338
+ .explorer-main[data-v-0bf6b46f] > * {
2339
+ flex: 1;
2340
+ display: flex;
2341
+ flex-direction: column;
2342
+ height: 100%;
2343
+ }
2344
+ .content-tabs[data-v-0bf6b46f] {
2345
+ flex: 1;
2346
+ display: flex;
2347
+ flex-direction: column;
2348
+ height: 100%;
2349
+ }
2350
+ .nav-tabs[data-v-0bf6b46f] {
2351
+ background: #f8fafc;
2352
+ border-bottom: 1px solid #e2e8f0;
2353
+ padding: 0 1rem;
2354
+ }
2355
+ .nav-link[data-v-0bf6b46f] {
2356
+ border: none;
2357
+ background: transparent;
2358
+ color: #64748b;
2359
+ padding: 1rem 1.5rem;
2360
+ font-weight: 500;
2361
+ transition: all 0.2s ease;
2362
+ }
2363
+ .nav-link[data-v-0bf6b46f]:hover {
2364
+ color: #667eea;
2365
+ background: rgba(102, 126, 234, 0.1);
2366
+ }
2367
+ .nav-link.active[data-v-0bf6b46f] {
2368
+ color: #667eea;
2369
+ background: white;
2370
+ border-bottom: 2px solid #667eea;
2371
+ }
2372
+ .tab-content[data-v-0bf6b46f] {
2373
+ flex: 1;
2374
+ overflow-y: auto;
2375
+ padding: 1.5rem;
2376
+ height: calc(100% - 60px); /* 减去导航栏高度 */
2377
+ }
2378
+
2379
+ /* 概览样式 */
2380
+ .overview-section[data-v-0bf6b46f] {
2381
+ padding: 1rem 0;
2382
+ }
2383
+ .info-cards[data-v-0bf6b46f] {
2384
+ display: grid;
2385
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2386
+ gap: 1rem;
2387
+ }
2388
+ .info-card[data-v-0bf6b46f] {
2389
+ background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
2390
+ border-radius: 12px;
2391
+ padding: 1.5rem;
2392
+ display: flex;
2393
+ align-items: center;
2394
+ gap: 1rem;
2395
+ border: 1px solid #e2e8f0;
2396
+ }
2397
+ .card-icon[data-v-0bf6b46f] {
2398
+ width: 48px;
2399
+ height: 48px;
2400
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
2401
+ border-radius: 12px;
2402
+ display: flex;
2403
+ align-items: center;
2404
+ justify-content: center;
2405
+ color: white;
2406
+ font-size: 1.25rem;
2407
+ }
2408
+ .card-content h6[data-v-0bf6b46f] {
2409
+ margin: 0 0 0.25rem 0;
2410
+ color: #64748b;
2411
+ font-size: 0.875rem;
2412
+ font-weight: 500;
2413
+ }
2414
+ .card-value[data-v-0bf6b46f] {
2415
+ margin: 0;
2416
+ color: #1e293b;
2417
+ font-weight: 600;
2418
+ font-size: 1.1rem;
2419
+ }
2420
+
2421
+ /* 表格网格 */
2422
+ .table-grid[data-v-0bf6b46f] {
2423
+ display: grid;
2424
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
2425
+ gap: 1rem;
2426
+ }
2427
+ .table-card[data-v-0bf6b46f] {
2428
+ background: white;
2429
+ border: 1px solid #e2e8f0;
2430
+ border-radius: 12px;
2431
+ padding: 1rem;
2432
+ cursor: pointer;
2433
+ transition: all 0.2s ease;
2434
+ }
2435
+ .table-card[data-v-0bf6b46f]:hover {
2436
+ border-color: #667eea;
2437
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
2438
+ transform: translateY(-2px);
2439
+ }
2440
+ .table-card .card-header[data-v-0bf6b46f] {
2441
+ display: flex;
2442
+ align-items: center;
2443
+ gap: 0.75rem;
2444
+ margin-bottom: 0.75rem;
2445
+ }
2446
+ .table-icon[data-v-0bf6b46f] {
2447
+ width: 32px;
2448
+ height: 32px;
2449
+ background: linear-gradient(135deg, #10b981 0%, #059669 100%);
2450
+ border-radius: 8px;
2451
+ display: flex;
2452
+ align-items: center;
2453
+ justify-content: center;
2454
+ color: white;
2455
+ }
2456
+ .table-name[data-v-0bf6b46f] {
2457
+ font-weight: 600;
2458
+ color: #1e293b;
2459
+ }
2460
+ .table-stats[data-v-0bf6b46f] {
2461
+ display: flex;
2462
+ gap: 1rem;
2463
+ margin-bottom: 0.5rem;
2464
+ }
2465
+ .stat[data-v-0bf6b46f] {
2466
+ display: flex;
2467
+ flex-direction: column;
2468
+ gap: 0.25rem;
2469
+ }
2470
+ .stat-label[data-v-0bf6b46f] {
2471
+ font-size: 0.75rem;
2472
+ color: #64748b;
2473
+ }
2474
+ .stat-value[data-v-0bf6b46f] {
2475
+ font-size: 0.875rem;
2476
+ font-weight: 600;
2477
+ color: #1e293b;
2478
+ }
2479
+ .table-comment[data-v-0bf6b46f] {
2480
+ font-size: 0.75rem;
2481
+ color: #64748b;
2482
+ font-style: italic;
2483
+ }
2484
+
2485
+ /* 数据工具栏 */
2486
+ .data-toolbar[data-v-0bf6b46f] {
2487
+ display: flex;
2488
+ justify-content: space-between;
2489
+ align-items: center;
2490
+ margin-bottom: 1rem;
2491
+ padding: 0.75rem;
2492
+ background: #f8fafc;
2493
+ border-radius: 8px;
2494
+ }
2495
+ .toolbar-left[data-v-0bf6b46f],
2496
+ .toolbar-right[data-v-0bf6b46f] {
2497
+ display: flex;
2498
+ gap: 0.5rem;
2499
+ align-items: center;
2500
+ }
2501
+
2502
+ /* 空状态 */
2503
+ .empty-state[data-v-0bf6b46f],
2504
+ .default-state[data-v-0bf6b46f] {
2505
+ display: flex;
2506
+ flex-direction: column;
2507
+ align-items: center;
2508
+ justify-content: center;
2509
+ height: 100%;
2510
+ color: #64748b;
2511
+ text-align: center;
2512
+ }
2513
+ .empty-icon[data-v-0bf6b46f],
2514
+ .default-icon[data-v-0bf6b46f] {
2515
+ font-size: 3rem;
2516
+ margin-bottom: 1rem;
2517
+ opacity: 0.5;
2518
+ }
2519
+ .empty-text h5[data-v-0bf6b46f],
2520
+ .default-content h5[data-v-0bf6b46f] {
2521
+ color: #64748b;
2522
+ margin-bottom: 0.5rem;
2523
+ }
2524
+
2525
+ /* 响应式 */
2526
+ @media (max-width: 768px) {
2527
+ .explorer-layout[data-v-0bf6b46f] {
2528
+ flex-direction: column;
2529
+ }
2530
+ .explorer-sidebar[data-v-0bf6b46f] {
2531
+ width: 100%;
2532
+ height: 40vh;
2533
+ border-right: none;
2534
+ border-bottom: 1px solid #e2e8f0;
2535
+ }
2536
+ .info-cards[data-v-0bf6b46f] {
2537
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
2538
+ }
2539
+ .table-grid[data-v-0bf6b46f] {
2540
+ grid-template-columns: 1fr;
2541
+ }
2542
+ }