fdb2 1.0.36 → 1.0.38

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