fdb2 1.0.37 → 1.0.39

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 +47 -0
  2. package/bin/fdb2.js +78 -3
  3. package/dist/public/explorer.css +517 -478
  4. package/dist/public/explorer.js +1114 -872
  5. package/dist/public/index.css +87 -27
  6. package/dist/public/index.js +97 -49
  7. package/dist/public/layout.js +2 -2
  8. package/dist/public/vue.js +1 -1
  9. package/dist/server/core/schema/__tests__/canonical.test.ts +195 -0
  10. package/dist/server/core/schema/__tests__/ddl-emitter.test.ts +456 -0
  11. package/dist/server/core/schema/__tests__/diff.test.ts +242 -0
  12. package/dist/server/core/schema/__tests__/roundtrip.property.test.ts +403 -0
  13. package/dist/server/core/schema/canonical.d.ts +50 -0
  14. package/dist/server/core/schema/canonical.d.ts.map +1 -0
  15. package/dist/server/core/schema/canonical.js +212 -0
  16. package/dist/server/core/schema/canonical.js.map +1 -0
  17. package/dist/server/core/schema/canonical.ts +223 -0
  18. package/dist/server/core/schema/ddl-emitter.d.ts +68 -0
  19. package/dist/server/core/schema/ddl-emitter.d.ts.map +1 -0
  20. package/dist/server/core/schema/ddl-emitter.js +813 -0
  21. package/dist/server/core/schema/ddl-emitter.js.map +1 -0
  22. package/dist/server/core/schema/ddl-emitter.ts +925 -0
  23. package/dist/server/core/schema/diff.d.ts +16 -0
  24. package/dist/server/core/schema/diff.d.ts.map +1 -0
  25. package/dist/server/core/schema/diff.js +115 -0
  26. package/dist/server/core/schema/diff.js.map +1 -0
  27. package/dist/server/core/schema/diff.ts +134 -0
  28. package/dist/server/core/schema/type-defaults.d.ts +27 -0
  29. package/dist/server/core/schema/type-defaults.d.ts.map +1 -0
  30. package/dist/server/core/schema/type-defaults.js +61 -0
  31. package/dist/server/core/schema/type-defaults.js.map +1 -0
  32. package/dist/server/core/schema/type-defaults.ts +79 -0
  33. package/dist/server/index.d.ts +1 -1
  34. package/dist/server/index.d.ts.map +1 -1
  35. package/dist/server/index.js +347 -124
  36. package/dist/server/index.js.map +1 -1
  37. package/dist/server/index.ts +336 -161
  38. package/dist/server/model/ddl-spec.d.ts +163 -0
  39. package/dist/server/model/ddl-spec.d.ts.map +1 -0
  40. package/dist/server/model/ddl-spec.js +32 -0
  41. package/dist/server/model/ddl-spec.js.map +1 -0
  42. package/dist/server/model/ddl-spec.ts +175 -0
  43. package/dist/server/service/connection.service.d.ts +20 -0
  44. package/dist/server/service/connection.service.d.ts.map +1 -1
  45. package/dist/server/service/connection.service.js +99 -25
  46. package/dist/server/service/connection.service.js.map +1 -1
  47. package/dist/server/service/connection.service.ts +104 -25
  48. package/dist/server/service/database/base.service.d.ts +0 -4
  49. package/dist/server/service/database/base.service.d.ts.map +1 -1
  50. package/dist/server/service/database/base.service.js.map +1 -1
  51. package/dist/server/service/database/base.service.ts +0 -5
  52. package/dist/server/service/database/clickhouse.service.d.ts +0 -5
  53. package/dist/server/service/database/clickhouse.service.d.ts.map +1 -1
  54. package/dist/server/service/database/clickhouse.service.js +0 -49
  55. package/dist/server/service/database/clickhouse.service.js.map +1 -1
  56. package/dist/server/service/database/clickhouse.service.ts +0 -52
  57. package/dist/server/service/database/cockroachdb.service.d.ts +0 -5
  58. package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -1
  59. package/dist/server/service/database/cockroachdb.service.js +11 -142
  60. package/dist/server/service/database/cockroachdb.service.js.map +1 -1
  61. package/dist/server/service/database/cockroachdb.service.ts +11 -161
  62. package/dist/server/service/database/database.service.d.ts +55 -2
  63. package/dist/server/service/database/database.service.d.ts.map +1 -1
  64. package/dist/server/service/database/database.service.js +246 -4
  65. package/dist/server/service/database/database.service.js.map +1 -1
  66. package/dist/server/service/database/database.service.ts +295 -7
  67. package/dist/server/service/database/mongodb.service.d.ts +0 -6
  68. package/dist/server/service/database/mongodb.service.d.ts.map +1 -1
  69. package/dist/server/service/database/mongodb.service.js +0 -8
  70. package/dist/server/service/database/mongodb.service.js.map +1 -1
  71. package/dist/server/service/database/mongodb.service.ts +0 -8
  72. package/dist/server/service/database/mssql.service.d.ts +8 -4
  73. package/dist/server/service/database/mssql.service.d.ts.map +1 -1
  74. package/dist/server/service/database/mssql.service.js +27 -101
  75. package/dist/server/service/database/mssql.service.js.map +1 -1
  76. package/dist/server/service/database/mssql.service.ts +28 -122
  77. package/dist/server/service/database/mysql.service.d.ts +0 -4
  78. package/dist/server/service/database/mysql.service.d.ts.map +1 -1
  79. package/dist/server/service/database/mysql.service.js +11 -137
  80. package/dist/server/service/database/mysql.service.js.map +1 -1
  81. package/dist/server/service/database/mysql.service.ts +11 -173
  82. package/dist/server/service/database/oracle.service.d.ts +0 -4
  83. package/dist/server/service/database/oracle.service.d.ts.map +1 -1
  84. package/dist/server/service/database/oracle.service.js +11 -104
  85. package/dist/server/service/database/oracle.service.js.map +1 -1
  86. package/dist/server/service/database/oracle.service.ts +11 -127
  87. package/dist/server/service/database/postgres.service.d.ts +0 -4
  88. package/dist/server/service/database/postgres.service.d.ts.map +1 -1
  89. package/dist/server/service/database/postgres.service.js +11 -112
  90. package/dist/server/service/database/postgres.service.js.map +1 -1
  91. package/dist/server/service/database/postgres.service.ts +11 -133
  92. package/dist/server/service/database/sap.service.d.ts +0 -4
  93. package/dist/server/service/database/sap.service.d.ts.map +1 -1
  94. package/dist/server/service/database/sap.service.js +11 -137
  95. package/dist/server/service/database/sap.service.js.map +1 -1
  96. package/dist/server/service/database/sap.service.ts +11 -158
  97. package/dist/server/service/database/sql-type.helper.d.ts.map +1 -1
  98. package/dist/server/service/database/sql-type.helper.js +9 -47
  99. package/dist/server/service/database/sql-type.helper.js.map +1 -1
  100. package/dist/server/service/database/sql-type.helper.ts +11 -53
  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 -147
  104. package/dist/server/service/database/sqlite.service.js.map +1 -1
  105. package/dist/server/service/database/sqlite.service.ts +11 -177
  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,53 +838,71 @@ 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-b80d5611] {
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-b80d5611] {
905
+ .sql-preview[data-v-5fb24ab7] {
881
906
  font-family: 'Courier New', Consolas, monospace;
882
907
  font-size: 0.875rem;
883
908
  line-height: 1.5;
@@ -893,53 +918,53 @@ to {
893
918
  white-space: pre-wrap;
894
919
  word-break: break-all;
895
920
  }
896
- .table th[data-v-b80d5611] {
921
+ .table th[data-v-5fb24ab7] {
897
922
  font-size: 0.875rem;
898
923
  font-weight: 600;
899
924
  }
900
- .table td[data-v-b80d5611] {
925
+ .table td[data-v-5fb24ab7] {
901
926
  padding: 0!important;
902
927
  }
903
- .table .form-control[data-v-b80d5611], .table .form-select[data-v-b80d5611] {
928
+ .table .form-control[data-v-5fb24ab7], .table .form-select[data-v-5fb24ab7] {
904
929
  border: none;
905
930
  border-radius: 0;
906
931
  box-shadow: none;
907
932
  }
908
- .form-control-sm[data-v-b80d5611], .form-select-sm[data-v-b80d5611] {
933
+ .form-control-sm[data-v-5fb24ab7], .form-select-sm[data-v-5fb24ab7] {
909
934
  font-size: 0.875rem;
910
935
  }
911
- .modal-content[data-v-b80d5611] {
936
+ .modal-content[data-v-5fb24ab7] {
912
937
  max-height: 90vh;
913
938
  overflow-y: auto;
914
939
  }
915
- .modal-body[data-v-b80d5611] {
940
+ .modal-body[data-v-5fb24ab7] {
916
941
  max-height: calc(90vh - 120px);
917
942
  overflow-y: auto;
918
943
  }
919
- .input-group-sm .form-control[data-v-b80d5611] {
944
+ .input-group-sm .form-control[data-v-5fb24ab7] {
920
945
  border-radius: 0;
921
946
  }
922
- .input-group-sm .form-control[data-v-b80d5611]:first-child {
947
+ .input-group-sm .form-control[data-v-5fb24ab7]:first-child {
923
948
  border-top-left-radius: 0.25rem;
924
949
  border-bottom-left-radius: 0.25rem;
925
950
  }
926
- .input-group-sm .form-control[data-v-b80d5611]:last-child {
951
+ .input-group-sm .form-control[data-v-5fb24ab7]:last-child {
927
952
  border-top-right-radius: 0.25rem;
928
953
  border-bottom-right-radius: 0.25rem;
929
954
  }
930
- .text-muted[data-v-b80d5611] {
955
+ .text-muted[data-v-5fb24ab7] {
931
956
  color: var(--db-text-muted) !important;
932
957
  }
933
958
 
934
- .db-tools[data-v-a123948c] {
959
+ .db-tools[data-v-4c55e089] {
935
960
  background: var(--db-surface);
936
961
  border-radius: 8px;
937
962
  }
938
- .tools-header[data-v-a123948c] {
963
+ .tools-header[data-v-4c55e089] {
939
964
  padding: 6px 12px;
940
965
  border-bottom: 1px solid var(--db-border);
941
966
  }
942
- .tools-title[data-v-a123948c] {
967
+ .tools-title[data-v-4c55e089] {
943
968
  margin: 0;
944
969
  font-size: 0.875rem;
945
970
  font-weight: 600;
@@ -948,17 +973,17 @@ to {
948
973
  align-items: center;
949
974
  gap: 0.375rem;
950
975
  }
951
- .tools-content[data-v-a123948c] {
976
+ .tools-content[data-v-4c55e089] {
952
977
  padding: 12px;
953
978
  overflow-y: auto;
954
979
  }
955
- .tool-section[data-v-a123948c] {
980
+ .tool-section[data-v-4c55e089] {
956
981
  margin-bottom: 1rem;
957
982
  }
958
- .tool-section[data-v-a123948c]:last-child {
983
+ .tool-section[data-v-4c55e089]:last-child {
959
984
  margin-bottom: 0;
960
985
  }
961
- .section-title[data-v-a123948c] {
986
+ .section-title[data-v-4c55e089] {
962
987
  font-size: 0.75rem;
963
988
  font-weight: 600;
964
989
  letter-spacing: 0.04em;
@@ -969,42 +994,42 @@ to {
969
994
  align-items: center;
970
995
  gap: 0.375rem;
971
996
  }
972
- .tool-actions[data-v-a123948c] {
997
+ .tool-actions[data-v-4c55e089] {
973
998
  display: flex;
974
999
  flex-wrap: wrap;
975
1000
  gap: 0.375rem;
976
1001
  }
977
- .tool-actions .btn[data-v-a123948c] {
1002
+ .tool-actions .btn[data-v-4c55e089] {
978
1003
  min-width: 108px;
979
1004
  display: flex;
980
1005
  align-items: center;
981
1006
  gap: 0.375rem;
982
1007
  }
983
- .modal[data-v-a123948c] {
1008
+ .modal[data-v-4c55e089] {
984
1009
  background-color: rgba(0, 0, 0, 0.5);
985
1010
  }
986
- .modal-dialog[data-v-a123948c] {
1011
+ .modal-dialog[data-v-4c55e089] {
987
1012
  max-width: 600px;
988
1013
  }
989
- .modal-header[data-v-a123948c] {
1014
+ .modal-header[data-v-4c55e089] {
990
1015
  background: var(--db-light-color);
991
1016
  border-bottom: 1px solid var(--db-gray-medium);
992
1017
  }
993
- .modal-title[data-v-a123948c] {
1018
+ .modal-title[data-v-4c55e089] {
994
1019
  color: var(--db-dark-color);
995
1020
  font-weight: 600;
996
1021
  }
997
- .modal-footer[data-v-a123948c] {
1022
+ .modal-footer[data-v-4c55e089] {
998
1023
  background: var(--db-light-color);
999
1024
  border-top: 1px solid var(--db-gray-medium);
1000
1025
  }
1001
1026
 
1002
1027
  /* 工具组件区域 */
1003
- .tool-component-area[data-v-a123948c] {
1028
+ .tool-component-area[data-v-4c55e089] {
1004
1029
  border-top: 1px solid var(--db-gray-medium);
1005
1030
  background: var(--db-light-color);
1006
1031
  }
1007
- .component-header[data-v-a123948c] {
1032
+ .component-header[data-v-4c55e089] {
1008
1033
  display: flex;
1009
1034
  justify-content: space-between;
1010
1035
  align-items: center;
@@ -1012,7 +1037,7 @@ to {
1012
1037
  background: var(--db-bg-soft);
1013
1038
  border-bottom: 1px solid var(--db-border);
1014
1039
  }
1015
- .component-title[data-v-a123948c] {
1040
+ .component-title[data-v-4c55e089] {
1016
1041
  margin: 0;
1017
1042
  font-size: 0.875rem;
1018
1043
  font-weight: 600;
@@ -1021,20 +1046,20 @@ to {
1021
1046
  align-items: center;
1022
1047
  gap: 0.375rem;
1023
1048
  }
1024
- .tool-component[data-v-a123948c] {
1049
+ .tool-component[data-v-4c55e089] {
1025
1050
  padding: 12px;
1026
1051
  }
1027
- .sync-component[data-v-a123948c] {
1052
+ .sync-component[data-v-4c55e089] {
1028
1053
  background: var(--db-surface);
1029
1054
  border-radius: 4px;
1030
1055
  }
1031
1056
 
1032
1057
  /* 执行结果区域 */
1033
- .execution-results[data-v-a123948c] {
1058
+ .execution-results[data-v-4c55e089] {
1034
1059
  border-top: 1px solid var(--db-border);
1035
1060
  background: var(--db-bg-soft);
1036
1061
  }
1037
- .results-header[data-v-a123948c] {
1062
+ .results-header[data-v-4c55e089] {
1038
1063
  display: flex;
1039
1064
  justify-content: space-between;
1040
1065
  align-items: center;
@@ -1042,7 +1067,7 @@ to {
1042
1067
  background: var(--db-bg-soft);
1043
1068
  border-bottom: 1px solid var(--db-border);
1044
1069
  }
1045
- .results-title[data-v-a123948c] {
1070
+ .results-title[data-v-4c55e089] {
1046
1071
  margin: 0;
1047
1072
  font-size: 0.875rem;
1048
1073
  font-weight: 600;
@@ -1051,12 +1076,12 @@ to {
1051
1076
  align-items: center;
1052
1077
  gap: 0.375rem;
1053
1078
  }
1054
- .results-content[data-v-a123948c] {
1079
+ .results-content[data-v-4c55e089] {
1055
1080
  max-height: 400px;
1056
1081
  overflow-y: auto;
1057
1082
  padding: 8px;
1058
1083
  }
1059
- .no-results[data-v-a123948c] {
1084
+ .no-results[data-v-4c55e089] {
1060
1085
  display: flex;
1061
1086
  flex-direction: column;
1062
1087
  align-items: center;
@@ -1065,16 +1090,16 @@ to {
1065
1090
  padding: 32px 16px;
1066
1091
  color: var(--db-text-muted);
1067
1092
  }
1068
- .no-results i[data-v-a123948c] {
1093
+ .no-results i[data-v-4c55e089] {
1069
1094
  font-size: 1.5rem;
1070
1095
  margin-bottom: 0;
1071
1096
  opacity: 0.5;
1072
1097
  }
1073
- .no-results p[data-v-a123948c] {
1098
+ .no-results p[data-v-4c55e089] {
1074
1099
  margin: 0;
1075
1100
  font-size: 0.8125rem;
1076
1101
  }
1077
- .result-item[data-v-a123948c] {
1102
+ .result-item[data-v-4c55e089] {
1078
1103
  margin-bottom: 0.5rem;
1079
1104
  border: 1px solid var(--db-border);
1080
1105
  border-radius: 6px;
@@ -1082,19 +1107,19 @@ to {
1082
1107
  overflow: hidden;
1083
1108
  transition: box-shadow 0.2s;
1084
1109
  }
1085
- .result-item[data-v-a123948c]:hover {
1110
+ .result-item[data-v-4c55e089]:hover {
1086
1111
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
1087
1112
  }
1088
- .result-item.result-success[data-v-a123948c] {
1113
+ .result-item.result-success[data-v-4c55e089] {
1089
1114
  border-left: 4px solid #22c55e;
1090
1115
  }
1091
- .result-item.result-error[data-v-a123948c] {
1116
+ .result-item.result-error[data-v-4c55e089] {
1092
1117
  border-left: 4px solid #ef4444;
1093
1118
  }
1094
- .result-item.result-info[data-v-a123948c] {
1119
+ .result-item.result-info[data-v-4c55e089] {
1095
1120
  border-left: 4px solid #3b82f6;
1096
1121
  }
1097
- .result-header[data-v-a123948c] {
1122
+ .result-header[data-v-4c55e089] {
1098
1123
  display: flex;
1099
1124
  justify-content: space-between;
1100
1125
  align-items: center;
@@ -1103,92 +1128,92 @@ to {
1103
1128
  background: var(--db-surface);
1104
1129
  transition: background 0.2s;
1105
1130
  }
1106
- .result-header[data-v-a123948c]:hover {
1131
+ .result-header[data-v-4c55e089]:hover {
1107
1132
  background: var(--db-light-color);
1108
1133
  }
1109
- .result-title[data-v-a123948c] {
1134
+ .result-title[data-v-4c55e089] {
1110
1135
  display: flex;
1111
1136
  align-items: center;
1112
1137
  gap: 0.75rem;
1113
1138
  flex: 1;
1114
1139
  }
1115
- .result-title i[data-v-a123948c] {
1140
+ .result-title i[data-v-4c55e089] {
1116
1141
  font-size: 1.1rem;
1117
1142
  }
1118
- .operation-name[data-v-a123948c] {
1143
+ .operation-name[data-v-4c55e089] {
1119
1144
  font-weight: 600;
1120
1145
  color: var(--db-dark-color);
1121
1146
  font-size: 0.95rem;
1122
1147
  }
1123
- .operation-time[data-v-a123948c] {
1148
+ .operation-time[data-v-4c55e089] {
1124
1149
  color: var(--db-darker-color);
1125
1150
  font-size: 0.85rem;
1126
1151
  margin-left: auto;
1127
1152
  }
1128
- .toggle-icon[data-v-a123948c] {
1153
+ .toggle-icon[data-v-4c55e089] {
1129
1154
  transition: transform 0.2s;
1130
1155
  color: var(--db-gray-dark);
1131
1156
  font-size: 0.9rem;
1132
1157
  }
1133
- .toggle-icon.expanded[data-v-a123948c] {
1158
+ .toggle-icon.expanded[data-v-4c55e089] {
1134
1159
  transform: rotate(180deg);
1135
1160
  }
1136
- .result-body[data-v-a123948c] {
1161
+ .result-body[data-v-4c55e089] {
1137
1162
  padding: 1rem;
1138
1163
  background: var(--db-bg-soft4);
1139
1164
  border-top: 1px solid var(--db-gray-medium);
1140
1165
  }
1141
- .result-body pre[data-v-a123948c] {
1166
+ .result-body pre[data-v-4c55e089] {
1142
1167
  margin: 0;
1143
1168
  font-size: 0.85rem;
1144
1169
  line-height: 1.5;
1145
1170
  max-height: 300px;
1146
1171
  overflow: auto;
1147
1172
  }
1148
- .result-body code[data-v-a123948c] {
1173
+ .result-body code[data-v-4c55e089] {
1149
1174
  font-family: 'Fira Code', 'Consolas', 'Monaco', monospace;
1150
1175
  }
1151
1176
 
1152
1177
  /* JSON 语法高亮 - 不使用 scoped 以确保 v-html 内容能应用样式 */
1153
- [data-v-a123948c] .json-key {
1178
+ [data-v-4c55e089] .json-key {
1154
1179
  color: var(--db-json-key);
1155
1180
  font-weight: 500;
1156
1181
  }
1157
- [data-v-a123948c] .json-string {
1182
+ [data-v-4c55e089] .json-string {
1158
1183
  color: var(--db-json-string);
1159
1184
  }
1160
- [data-v-a123948c] .json-number {
1185
+ [data-v-4c55e089] .json-number {
1161
1186
  color: var(--db-json-number);
1162
1187
  }
1163
- [data-v-a123948c] .json-boolean {
1188
+ [data-v-4c55e089] .json-boolean {
1164
1189
  color: var(--db-json-boolean);
1165
1190
  }
1166
- [data-v-a123948c] .json-null {
1191
+ [data-v-4c55e089] .json-null {
1167
1192
  color: var(--db-json-null);
1168
1193
  }
1169
1194
 
1170
1195
  /* 滚动条样式 */
1171
- .results-content[data-v-a123948c]::-webkit-scrollbar,
1172
- .result-body pre[data-v-a123948c]::-webkit-scrollbar {
1196
+ .results-content[data-v-4c55e089]::-webkit-scrollbar,
1197
+ .result-body pre[data-v-4c55e089]::-webkit-scrollbar {
1173
1198
  width: 8px;
1174
1199
  height: 8px;
1175
1200
  }
1176
- .results-content[data-v-a123948c]::-webkit-scrollbar-track,
1177
- .result-body pre[data-v-a123948c]::-webkit-scrollbar-track {
1201
+ .results-content[data-v-4c55e089]::-webkit-scrollbar-track,
1202
+ .result-body pre[data-v-4c55e089]::-webkit-scrollbar-track {
1178
1203
  background: var(--db-gray-light);
1179
1204
  border-radius: 4px;
1180
1205
  }
1181
- .results-content[data-v-a123948c]::-webkit-scrollbar-thumb,
1182
- .result-body pre[data-v-a123948c]::-webkit-scrollbar-thumb {
1206
+ .results-content[data-v-4c55e089]::-webkit-scrollbar-thumb,
1207
+ .result-body pre[data-v-4c55e089]::-webkit-scrollbar-thumb {
1183
1208
  background: var(--db-gray-medium);
1184
1209
  border-radius: 4px;
1185
1210
  }
1186
- .results-content[data-v-a123948c]::-webkit-scrollbar-thumb:hover,
1187
- .result-body pre[data-v-a123948c]::-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 {
1188
1213
  background: var(--db-text-faint);
1189
1214
  }
1190
1215
 
1191
- .database-detail[data-v-a6f90f39] {
1216
+ .database-detail[data-v-82eeefa1] {
1192
1217
  width: 100%;
1193
1218
  height: 100%;
1194
1219
  display: flex;
@@ -1196,7 +1221,7 @@ to {
1196
1221
  }
1197
1222
 
1198
1223
  /* SQL 面板直接铺满 tab 内容区(内边距由 .tab-content 统一提供) */
1199
- .sql-executor-section[data-v-a6f90f39] {
1224
+ .sql-executor-section[data-v-82eeefa1] {
1200
1225
  margin: 0;
1201
1226
  padding: 0;
1202
1227
  background-color: transparent;
@@ -1207,7 +1232,7 @@ to {
1207
1232
  }
1208
1233
 
1209
1234
  /* 加载状态样式 */
1210
- .loading-state[data-v-a6f90f39] {
1235
+ .loading-state[data-v-82eeefa1] {
1211
1236
  display: flex;
1212
1237
  flex-direction: column;
1213
1238
  align-items: center;
@@ -1215,31 +1240,31 @@ to {
1215
1240
  padding: 24px 0;
1216
1241
  color: var(--db-text-muted);
1217
1242
  }
1218
- .loading-state .spinner-border[data-v-a6f90f39] {
1243
+ .loading-state .spinner-border[data-v-82eeefa1] {
1219
1244
  margin-bottom: 10px;
1220
1245
  color: var(--db-primary-color);
1221
1246
  }
1222
- .loading-state p[data-v-a6f90f39] {
1247
+ .loading-state p[data-v-82eeefa1] {
1223
1248
  margin: 0;
1224
1249
  font-size: 12px;
1225
1250
  }
1226
- .database-header[data-v-a6f90f39] {
1251
+ .database-header[data-v-82eeefa1] {
1227
1252
  padding: 8px 12px;
1228
1253
  background: var(--db-bg-soft2);
1229
1254
  border-bottom: 1px solid var(--db-border);
1230
1255
  }
1231
- .database-header-content[data-v-a6f90f39] {
1256
+ .database-header-content[data-v-82eeefa1] {
1232
1257
  display: flex;
1233
1258
  justify-content: space-between;
1234
1259
  align-items: center;
1235
1260
  gap: 1rem;
1236
1261
  }
1237
- .database-info[data-v-a6f90f39] {
1262
+ .database-info[data-v-82eeefa1] {
1238
1263
  display: flex;
1239
1264
  align-items: center;
1240
1265
  gap: 0.625rem;
1241
1266
  }
1242
- .database-icon[data-v-a6f90f39] {
1267
+ .database-icon[data-v-82eeefa1] {
1243
1268
  width: 34px;
1244
1269
  height: 34px;
1245
1270
  background: var(--db-primary-bg);
@@ -1252,19 +1277,19 @@ to {
1252
1277
  font-size: 1rem;
1253
1278
  flex-shrink: 0;
1254
1279
  }
1255
- .database-meta h4[data-v-a6f90f39] {
1280
+ .database-meta h4[data-v-82eeefa1] {
1256
1281
  margin: 0 0 0.25rem 0;
1257
1282
  font-size: 0.9375rem;
1258
1283
  color: var(--db-dark-color);
1259
1284
  font-weight: 600;
1260
1285
  }
1261
- .connection-info[data-v-a6f90f39] {
1286
+ .connection-info[data-v-82eeefa1] {
1262
1287
  display: flex;
1263
1288
  align-items: center;
1264
1289
  gap: 0.375rem;
1265
1290
  font-size: 0.75rem;
1266
1291
  }
1267
- .connection-info .crumb[data-v-a6f90f39] {
1292
+ .connection-info .crumb[data-v-82eeefa1] {
1268
1293
  display: inline-flex;
1269
1294
  align-items: center;
1270
1295
  padding: 0;
@@ -1272,20 +1297,20 @@ to {
1272
1297
  font-size: 0.75rem;
1273
1298
  transition: color 0.15s ease;
1274
1299
  }
1275
- .connection-info .crumb-link[data-v-a6f90f39] {
1300
+ .connection-info .crumb-link[data-v-82eeefa1] {
1276
1301
  cursor: pointer;
1277
1302
  background: transparent;
1278
1303
  color: var(--db-primary-color);
1279
1304
  }
1280
- .connection-info .crumb-link[data-v-a6f90f39]:hover {
1305
+ .connection-info .crumb-link[data-v-82eeefa1]:hover {
1281
1306
  color: var(--db-primary-light);
1282
1307
  text-decoration: underline;
1283
1308
  }
1284
- .connection-info .crumb-current[data-v-a6f90f39] {
1309
+ .connection-info .crumb-current[data-v-82eeefa1] {
1285
1310
  font-weight: 500;
1286
1311
  color: var(--db-text-muted);
1287
1312
  }
1288
- .connection-name[data-v-a6f90f39] {
1313
+ .connection-name[data-v-82eeefa1] {
1289
1314
  background: transparent;
1290
1315
  color: var(--db-primary-color);
1291
1316
  padding: 0;
@@ -1293,7 +1318,7 @@ to {
1293
1318
  font-size: 0.75rem;
1294
1319
  font-weight: 500;
1295
1320
  }
1296
- .connection-type[data-v-a6f90f39] {
1321
+ .connection-type[data-v-82eeefa1] {
1297
1322
  background: var(--db-primary-bg);
1298
1323
  color: var(--db-primary-color);
1299
1324
  padding: 1px 7px;
@@ -1301,39 +1326,39 @@ to {
1301
1326
  font-size: 0.6875rem;
1302
1327
  font-weight: 500;
1303
1328
  }
1304
- .database-stats[data-v-a6f90f39] {
1329
+ .database-stats[data-v-82eeefa1] {
1305
1330
  display: flex;
1306
1331
  gap: 1.5rem;
1307
1332
  }
1308
- .stat-item[data-v-a6f90f39] {
1333
+ .stat-item[data-v-82eeefa1] {
1309
1334
  text-align: right;
1310
1335
  }
1311
- .stat-value[data-v-a6f90f39] {
1336
+ .stat-value[data-v-82eeefa1] {
1312
1337
  font-size: 1rem;
1313
1338
  font-weight: 700;
1314
1339
  line-height: 1.2;
1315
1340
  color: var(--db-dark-color);
1316
1341
  margin-bottom: 0;
1317
1342
  }
1318
- .stat-label[data-v-a6f90f39] {
1343
+ .stat-label[data-v-82eeefa1] {
1319
1344
  font-size: 0.6875rem;
1320
1345
  color: var(--db-text-muted);
1321
1346
  font-weight: 400;
1322
1347
  }
1323
- .database-tabs[data-v-a6f90f39] {
1348
+ .database-tabs[data-v-82eeefa1] {
1324
1349
  flex: 1;
1325
1350
  overflow: hidden;
1326
1351
  display: flex;
1327
1352
  flex-direction: column;
1328
1353
  min-height: 0;
1329
1354
  }
1330
- .nav-tabs[data-v-a6f90f39] {
1355
+ .nav-tabs[data-v-82eeefa1] {
1331
1356
  background: var(--db-gray-light);
1332
1357
  border-bottom: 1px solid var(--db-border);
1333
1358
  padding: 0 0.5rem;
1334
1359
  gap: 0;
1335
1360
  }
1336
- .nav-link[data-v-a6f90f39] {
1361
+ .nav-link[data-v-82eeefa1] {
1337
1362
  border: none;
1338
1363
  background: transparent;
1339
1364
  color: var(--db-text-muted);
@@ -1342,35 +1367,36 @@ to {
1342
1367
  font-weight: 500;
1343
1368
  transition: color 0.15s ease, background-color 0.15s ease;
1344
1369
  }
1345
- .nav-link[data-v-a6f90f39]:hover {
1370
+ .nav-link[data-v-82eeefa1]:hover {
1346
1371
  color: var(--db-dark-color);
1347
1372
  background: var(--db-bg-soft);
1348
1373
  }
1349
- .nav-link.active[data-v-a6f90f39] {
1374
+ .nav-link.active[data-v-82eeefa1] {
1350
1375
  color: var(--db-primary-color);
1351
1376
  background: transparent;
1352
1377
  border-bottom: 2px solid var(--db-primary-color);
1353
1378
  }
1354
- .tab-content[data-v-a6f90f39] {
1379
+ .tab-content[data-v-82eeefa1] {
1355
1380
  overflow-y: auto;
1356
1381
  flex: 1;
1357
1382
  display: flex;
1358
1383
  flex-direction: column;
1359
1384
  min-height: 0;
1360
1385
  }
1361
- .tab-panel[data-v-a6f90f39] {
1386
+ .tab-panel[data-v-82eeefa1] {
1362
1387
  flex: 1;
1363
1388
  overflow-y: auto;
1364
1389
  display: flex;
1365
1390
  flex-direction: column;
1366
1391
  min-height: 0;
1367
1392
  }
1368
- .table-grid[data-v-a6f90f39] {
1393
+ .table-grid[data-v-82eeefa1] {
1369
1394
  display: grid;
1370
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1371
- gap: 8px;
1395
+ /* 最小列宽 240px + 12px 间距:避免窄卡片把表名挤成「t_ai_agent_...」这类过度截断 */
1396
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
1397
+ gap: 12px;
1372
1398
  }
1373
- .table-card[data-v-a6f90f39] {
1399
+ .table-card[data-v-82eeefa1] {
1374
1400
  background: var(--db-bg-soft2);
1375
1401
  border: 1px solid var(--db-border);
1376
1402
  border-radius: 6px;
@@ -1378,41 +1404,48 @@ to {
1378
1404
  transition: border-color 0.15s ease, background-color 0.15s ease;
1379
1405
  cursor: pointer;
1380
1406
  }
1381
- .table-card[data-v-a6f90f39]:hover {
1407
+ .table-card[data-v-82eeefa1]:hover {
1382
1408
  border-color: var(--db-primary-color);
1383
1409
  background: var(--db-bg-soft);
1384
1410
  box-shadow: none;
1385
1411
  }
1386
- .card-header[data-v-a6f90f39] {
1412
+ .card-header[data-v-82eeefa1] {
1387
1413
  background: var(--db-bg-soft);
1388
- padding: 6px 8px;
1414
+ /* 右侧预留编辑按钮的常驻空间(约 32px):按钮绝对定位不占 flex 位,
1415
+ 用 padding 留白让表名/引擎名不会被按钮盖住,也不必为按钮压缩表名宽度 */
1416
+ padding: 6px 32px 6px 8px;
1389
1417
  display: flex;
1390
1418
  align-items: center;
1391
1419
  gap: 0.5rem;
1420
+ position: relative;
1392
1421
  }
1393
- .table-icon[data-v-a6f90f39] {
1422
+
1423
+ /* 卡片图标与引擎徽标统一收敛为中性灰:
1424
+ 密集网格里高饱和的绿/蓝会互相干扰,改为描边+浅灰后表名才是视觉主角 */
1425
+ .table-icon[data-v-82eeefa1] {
1394
1426
  width: 22px;
1395
1427
  height: 22px;
1396
1428
  font-size: 0.75rem;
1397
- background: var(--db-success-bg);
1429
+ background: transparent;
1430
+ border: 1px solid var(--db-border);
1398
1431
  border-radius: 4px;
1399
1432
  display: flex;
1400
1433
  align-items: center;
1401
1434
  justify-content: center;
1402
- color: var(--db-accent-color);
1435
+ color: var(--db-text-faint);
1403
1436
  flex-shrink: 0;
1404
1437
  }
1405
- .table-info[data-v-a6f90f39] {
1438
+ .table-info[data-v-82eeefa1] {
1406
1439
  flex: 1;
1407
1440
  min-width: 0; /* 允许子元素截断 */
1408
1441
  }
1409
- .table-name-wrapper[data-v-a6f90f39] {
1442
+ .table-name-wrapper[data-v-82eeefa1] {
1410
1443
  display: flex;
1411
1444
  align-items: center;
1412
1445
  gap: 0.375rem;
1413
1446
  margin-bottom: 0;
1414
1447
  }
1415
- .table-name[data-v-a6f90f39] {
1448
+ .table-name[data-v-82eeefa1] {
1416
1449
  font-size: 0.8125rem;
1417
1450
  font-weight: 500;
1418
1451
  color: var(--db-dark-color);
@@ -1421,15 +1454,16 @@ to {
1421
1454
  text-overflow: ellipsis;
1422
1455
  min-width: 0;
1423
1456
  }
1424
- .table-engine[data-v-a6f90f39] {
1457
+ .table-engine[data-v-82eeefa1] {
1425
1458
  font-size: 0.625rem;
1426
- color: var(--db-primary-color);
1427
- background: var(--db-primary-bg);
1428
- padding: 0 0.375rem;
1459
+ /* 引擎名是次要信息:去掉高饱和底色,仅留浅灰文字 */
1460
+ color: var(--db-text-faint);
1461
+ background: transparent;
1462
+ padding: 0;
1429
1463
  border-radius: 999px;
1430
1464
  flex-shrink: 0;
1431
1465
  }
1432
- .table-comment-header[data-v-a6f90f39] {
1466
+ .table-comment-header[data-v-82eeefa1] {
1433
1467
  font-size: 0.6875rem;
1434
1468
  color: var(--db-text-muted);
1435
1469
  white-space: nowrap;
@@ -1437,15 +1471,15 @@ to {
1437
1471
  text-overflow: ellipsis;
1438
1472
  }
1439
1473
 
1440
- /* 卡片正文:标签在上、数值在下,右下角编辑按钮(对齐 VSCode 数据库插件的表格卡片) */
1441
- .card-body[data-v-a6f90f39] {
1474
+ /* 卡片正文:标签在上、数值在下 */
1475
+ .card-body[data-v-82eeefa1] {
1442
1476
  padding: 8px;
1443
1477
  display: flex;
1444
1478
  flex-direction: column;
1445
1479
  align-items: stretch;
1446
1480
  gap: 8px;
1447
1481
  }
1448
- .table-stats[data-v-a6f90f39] {
1482
+ .table-stats[data-v-82eeefa1] {
1449
1483
  display: flex;
1450
1484
  align-items: flex-start;
1451
1485
  gap: 1.25rem;
@@ -1453,7 +1487,7 @@ to {
1453
1487
  flex-wrap: wrap;
1454
1488
  min-width: 0;
1455
1489
  }
1456
- .stat[data-v-a6f90f39] {
1490
+ .stat[data-v-82eeefa1] {
1457
1491
  display: flex;
1458
1492
  flex-direction: column;
1459
1493
  align-items: flex-start;
@@ -1461,28 +1495,33 @@ to {
1461
1495
  }
1462
1496
 
1463
1497
  /* 卡片内的统计字号覆盖(不影响顶部数据库统计的大号数字) */
1464
- .table-card .stat-label[data-v-a6f90f39] {
1498
+ .table-card .stat-label[data-v-82eeefa1] {
1465
1499
  font-size: 0.6875rem;
1466
1500
  color: var(--db-text-muted);
1467
1501
  }
1468
- .table-card .stat-value[data-v-a6f90f39] {
1502
+ .table-card .stat-value[data-v-82eeefa1] {
1469
1503
  font-size: 0.9375rem;
1470
1504
  font-weight: 600;
1471
1505
  color: var(--db-dark-color);
1472
1506
  }
1473
- .table-comment[data-v-a6f90f39] {
1507
+ .table-comment[data-v-82eeefa1] {
1474
1508
  font-size: 0.8125rem;
1475
1509
  color: var(--db-text-muted);
1476
1510
  font-style: italic;
1477
1511
  margin-bottom: 0.5rem;
1478
1512
  line-height: 1.4;
1479
1513
  }
1480
- .table-actions[data-v-a6f90f39] {
1514
+
1515
+ /* 编辑按钮常驻右上角:绝对定位,不参与 flex 排版,
1516
+ 因此不会像内联那样挤压表名(表名可用满 header 内容区宽度)。 */
1517
+ .table-actions[data-v-82eeefa1] {
1518
+ position: absolute;
1519
+ top: 4px;
1520
+ right: 4px;
1481
1521
  display: flex;
1482
1522
  gap: 0.375rem;
1483
- flex-shrink: 0;
1484
1523
  }
1485
- .table-actions .btn[data-v-a6f90f39] {
1524
+ .table-actions .btn[data-v-82eeefa1] {
1486
1525
  width: 22px;
1487
1526
  height: 22px;
1488
1527
  padding: 0;
@@ -1496,12 +1535,12 @@ to {
1496
1535
  background: transparent;
1497
1536
  color: var(--db-primary-color);
1498
1537
  }
1499
- .table-actions .btn[data-v-a6f90f39]:hover {
1538
+ .table-actions .btn[data-v-82eeefa1]:hover {
1500
1539
  background: var(--db-primary-bg);
1501
1540
  color: var(--db-primary-color);
1502
1541
  border-color: var(--db-primary-color);
1503
1542
  }
1504
- .empty-state[data-v-a6f90f39] {
1543
+ .empty-state[data-v-82eeefa1] {
1505
1544
  display: flex;
1506
1545
  flex-direction: column;
1507
1546
  align-items: center;
@@ -1512,39 +1551,39 @@ to {
1512
1551
  text-align: center;
1513
1552
  font-size: 0.8125rem;
1514
1553
  }
1515
- .empty-state i[data-v-a6f90f39] {
1554
+ .empty-state i[data-v-82eeefa1] {
1516
1555
  font-size: 1.5rem;
1517
1556
  margin-bottom: 0;
1518
1557
  opacity: 0.5;
1519
1558
  }
1520
1559
 
1521
1560
  /* 视图和存储过程卡片样式 */
1522
- .views-grid[data-v-a6f90f39], .procedures-grid[data-v-a6f90f39] {
1561
+ .views-grid[data-v-82eeefa1], .procedures-grid[data-v-82eeefa1] {
1523
1562
  display: grid;
1524
1563
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
1525
1564
  gap: 8px;
1526
1565
  }
1527
- .view-card[data-v-a6f90f39], .procedure-card[data-v-a6f90f39] {
1566
+ .view-card[data-v-82eeefa1], .procedure-card[data-v-82eeefa1] {
1528
1567
  background: var(--db-bg-soft2);
1529
1568
  border: 1px solid var(--db-border);
1530
1569
  border-radius: 6px;
1531
1570
  overflow: hidden;
1532
1571
  transition: border-color 0.15s ease, background-color 0.15s ease;
1533
1572
  }
1534
- .view-card[data-v-a6f90f39]:hover, .procedure-card[data-v-a6f90f39]:hover {
1573
+ .view-card[data-v-82eeefa1]:hover, .procedure-card[data-v-82eeefa1]:hover {
1535
1574
  border-color: var(--db-primary-color);
1536
1575
  background: var(--db-bg-soft);
1537
1576
  box-shadow: none;
1538
1577
  transform: none;
1539
1578
  }
1540
- .view-card .card-header[data-v-a6f90f39], .procedure-card .card-header[data-v-a6f90f39] {
1579
+ .view-card .card-header[data-v-82eeefa1], .procedure-card .card-header[data-v-82eeefa1] {
1541
1580
  background: var(--db-bg-soft);
1542
1581
  padding: 8px 10px;
1543
1582
  display: flex;
1544
1583
  align-items: center;
1545
1584
  gap: 0.5rem;
1546
1585
  }
1547
- .view-icon[data-v-a6f90f39], .procedure-icon[data-v-a6f90f39] {
1586
+ .view-icon[data-v-82eeefa1], .procedure-icon[data-v-82eeefa1] {
1548
1587
  width: 26px;
1549
1588
  height: 26px;
1550
1589
  font-size: 0.8125rem;
@@ -1556,37 +1595,37 @@ to {
1556
1595
  color: var(--db-info-color);
1557
1596
  flex-shrink: 0;
1558
1597
  }
1559
- .procedure-icon[data-v-a6f90f39] {
1598
+ .procedure-icon[data-v-82eeefa1] {
1560
1599
  background: var(--db-warning-bg);
1561
1600
  color: var(--db-warning-color);
1562
1601
  }
1563
- .view-name[data-v-a6f90f39], .procedure-name[data-v-a6f90f39] {
1602
+ .view-name[data-v-82eeefa1], .procedure-name[data-v-82eeefa1] {
1564
1603
  font-size: 0.8125rem;
1565
1604
  font-weight: 500;
1566
1605
  color: var(--db-dark-color);
1567
1606
  margin-bottom: 0.125rem;
1568
1607
  }
1569
- .view-comment[data-v-a6f90f39], .procedure-comment[data-v-a6f90f39] {
1608
+ .view-comment[data-v-82eeefa1], .procedure-comment[data-v-82eeefa1] {
1570
1609
  font-size: 0.6875rem;
1571
1610
  color: var(--db-text-muted);
1572
1611
  margin-bottom: 0.375rem;
1573
1612
  line-height: 1.4;
1574
1613
  }
1575
- .procedure-type[data-v-a6f90f39] {
1614
+ .procedure-type[data-v-82eeefa1] {
1576
1615
  display: flex;
1577
1616
  gap: 0.25rem;
1578
1617
  flex-wrap: wrap;
1579
1618
  }
1580
- .view-card .card-body[data-v-a6f90f39], .procedure-card .card-body[data-v-a6f90f39] {
1619
+ .view-card .card-body[data-v-82eeefa1], .procedure-card .card-body[data-v-82eeefa1] {
1581
1620
  padding: 8px 10px;
1582
1621
  }
1583
- .view-actions[data-v-a6f90f39], .procedure-actions[data-v-a6f90f39] {
1622
+ .view-actions[data-v-82eeefa1], .procedure-actions[data-v-82eeefa1] {
1584
1623
  display: flex;
1585
1624
  gap: 0.375rem;
1586
1625
  }
1587
1626
 
1588
1627
  /* 操作栏:无底色无边框,只是一行工具按钮(对齐 VSCode 插件的 Create Table / Refresh) */
1589
- .views-actions[data-v-a6f90f39], .procedures-actions[data-v-a6f90f39], .tables-actions[data-v-a6f90f39] {
1628
+ .views-actions[data-v-82eeefa1], .procedures-actions[data-v-82eeefa1], .tables-actions[data-v-82eeefa1] {
1590
1629
  display: flex;
1591
1630
  gap: 0.375rem;
1592
1631
  margin-bottom: 10px;
@@ -1596,27 +1635,27 @@ to {
1596
1635
  }
1597
1636
 
1598
1637
  /* 模态框样式 */
1599
- .modal-dialog[data-v-a6f90f39] {
1638
+ .modal-dialog[data-v-82eeefa1] {
1600
1639
  margin-top: 10vh;
1601
1640
  }
1602
- .modal-content[data-v-a6f90f39] {
1641
+ .modal-content[data-v-82eeefa1] {
1603
1642
  border-radius: 12px;
1604
1643
  border: none;
1605
1644
  box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
1606
1645
  }
1607
- .modal-header[data-v-a6f90f39] {
1646
+ .modal-header[data-v-82eeefa1] {
1608
1647
  border-bottom: 1px solid var(--db-gray-medium);
1609
1648
  padding: 1rem 1.5rem;
1610
1649
  }
1611
- .modal-title[data-v-a6f90f39] {
1650
+ .modal-title[data-v-82eeefa1] {
1612
1651
  margin: 0;
1613
1652
  font-weight: 600;
1614
1653
  color: var(--db-dark-color);
1615
1654
  }
1616
- .modal-body[data-v-a6f90f39] {
1655
+ .modal-body[data-v-82eeefa1] {
1617
1656
  padding: 1.5rem;
1618
1657
  }
1619
- .modal-footer[data-v-a6f90f39] {
1658
+ .modal-footer[data-v-82eeefa1] {
1620
1659
  border-top: 1px solid var(--db-gray-medium);
1621
1660
  padding: 1rem 1.5rem;
1622
1661
  display: flex;
@@ -1725,89 +1764,89 @@ to {
1725
1764
  margin-bottom: 0;
1726
1765
  }
1727
1766
 
1728
- .table-detail[data-v-15c7e3be] {
1767
+ .table-detail[data-v-aefb7a86] {
1729
1768
  width: 100%;
1730
1769
  height: 100%;
1731
1770
  display: flex;
1732
1771
  flex-direction: column;
1733
1772
  }
1734
- .table-header[data-v-15c7e3be] {
1773
+ .table-header[data-v-aefb7a86] {
1735
1774
  background-color: var(--db-bg-soft2);
1736
1775
  border-bottom: 1px solid var(--db-border);
1737
1776
  padding: 8px 12px;
1738
1777
  }
1739
- .table-header-content[data-v-15c7e3be] {
1778
+ .table-header-content[data-v-aefb7a86] {
1740
1779
  display: flex;
1741
1780
  justify-content: space-between;
1742
1781
  align-items: center;
1743
1782
  }
1744
- .table-info[data-v-15c7e3be] {
1783
+ .table-info[data-v-aefb7a86] {
1745
1784
  display: flex;
1746
1785
  align-items: center;
1747
1786
  gap: 10px;
1748
1787
  }
1749
- .table-icon[data-v-15c7e3be] {
1788
+ .table-icon[data-v-aefb7a86] {
1750
1789
  font-size: 20px;
1751
1790
  color: var(--db-primary-color);
1752
1791
  }
1753
- .table-meta[data-v-15c7e3be] {
1792
+ .table-meta[data-v-aefb7a86] {
1754
1793
  display: flex;
1755
1794
  flex-direction: column;
1756
1795
  gap: 2px;
1757
1796
  }
1758
- .table-name[data-v-15c7e3be] {
1797
+ .table-name[data-v-aefb7a86] {
1759
1798
  margin: 0;
1760
1799
  font-size: 0.9375rem;
1761
1800
  font-weight: 600;
1762
1801
  }
1763
- .table-breadcrumb[data-v-15c7e3be] {
1802
+ .table-breadcrumb[data-v-aefb7a86] {
1764
1803
  display: flex;
1765
1804
  align-items: center;
1766
1805
  gap: 6px;
1767
1806
  font-size: 0.75rem;
1768
1807
  color: var(--db-text-muted);
1769
1808
  }
1770
- .table-breadcrumb .crumb[data-v-15c7e3be] {
1809
+ .table-breadcrumb .crumb[data-v-aefb7a86] {
1771
1810
  display: inline-flex;
1772
1811
  align-items: center;
1773
1812
  padding: 0;
1774
1813
  border-radius: 0;
1775
1814
  transition: color 0.15s ease;
1776
1815
  }
1777
- .table-breadcrumb .crumb-link[data-v-15c7e3be] {
1816
+ .table-breadcrumb .crumb-link[data-v-aefb7a86] {
1778
1817
  cursor: pointer;
1779
1818
  color: var(--db-primary-color);
1780
1819
  }
1781
- .table-breadcrumb .crumb-link[data-v-15c7e3be]:hover {
1820
+ .table-breadcrumb .crumb-link[data-v-aefb7a86]:hover {
1782
1821
  background-color: transparent;
1783
1822
  color: var(--db-primary-light);
1784
1823
  text-decoration: underline;
1785
1824
  }
1786
- .table-breadcrumb .crumb-current[data-v-15c7e3be] {
1825
+ .table-breadcrumb .crumb-current[data-v-aefb7a86] {
1787
1826
  font-weight: 500;
1788
1827
  color: var(--db-text-muted);
1789
1828
  }
1790
- .table-stats[data-v-15c7e3be] {
1829
+ .table-stats[data-v-aefb7a86] {
1791
1830
  display: flex;
1792
1831
  gap: 14px;
1793
1832
  }
1794
- .stat-item[data-v-15c7e3be] {
1833
+ .stat-item[data-v-aefb7a86] {
1795
1834
  display: flex;
1796
1835
  flex-direction: column;
1797
1836
  align-items: flex-end;
1798
1837
  gap: 0;
1799
1838
  }
1800
- .stat-value[data-v-15c7e3be] {
1839
+ .stat-value[data-v-aefb7a86] {
1801
1840
  font-size: 0.9375rem;
1802
1841
  font-weight: 600;
1803
1842
  line-height: 1.25;
1804
1843
  color: var(--db-dark-color);
1805
1844
  }
1806
- .stat-label[data-v-15c7e3be] {
1845
+ .stat-label[data-v-aefb7a86] {
1807
1846
  font-size: 0.6875rem;
1808
1847
  color: var(--db-text-muted);
1809
1848
  }
1810
- .table-toolbar[data-v-15c7e3be] {
1849
+ .table-toolbar[data-v-aefb7a86] {
1811
1850
  display: flex;
1812
1851
  justify-content: space-between;
1813
1852
  align-items: center;
@@ -1815,29 +1854,29 @@ to {
1815
1854
  background-color: var(--db-bg-soft2);
1816
1855
  border-bottom: 1px solid var(--db-border);
1817
1856
  }
1818
- .toolbar-left[data-v-15c7e3be] {
1857
+ .toolbar-left[data-v-aefb7a86] {
1819
1858
  display: flex;
1820
1859
  gap: 6px;
1821
1860
  align-items: center;
1822
1861
  }
1823
- .toolbar-right[data-v-15c7e3be] {
1862
+ .toolbar-right[data-v-aefb7a86] {
1824
1863
  display: flex;
1825
1864
  gap: 6px;
1826
1865
  align-items: center;
1827
1866
  }
1828
- .table-tabs[data-v-15c7e3be] {
1867
+ .table-tabs[data-v-aefb7a86] {
1829
1868
  flex: 1;
1830
1869
  display: flex;
1831
1870
  flex-direction: column;
1832
1871
  overflow: hidden;
1833
1872
  }
1834
- .nav-tabs[data-v-15c7e3be] {
1873
+ .nav-tabs[data-v-aefb7a86] {
1835
1874
  border-bottom: 1px solid var(--db-border);
1836
1875
  background-color: var(--db-gray-light);
1837
1876
  flex-shrink: 0;
1838
1877
  padding: 0 6px;
1839
1878
  }
1840
- .nav-tabs .nav-link[data-v-15c7e3be] {
1879
+ .nav-tabs .nav-link[data-v-aefb7a86] {
1841
1880
  color: var(--db-text-muted);
1842
1881
  border: none;
1843
1882
  border-bottom: 2px solid transparent;
@@ -1846,17 +1885,17 @@ to {
1846
1885
  font-size: 12px;
1847
1886
  font-weight: 500;
1848
1887
  }
1849
- .nav-tabs .nav-link[data-v-15c7e3be]:hover {
1888
+ .nav-tabs .nav-link[data-v-aefb7a86]:hover {
1850
1889
  background-color: var(--db-bg-soft);
1851
1890
  border-bottom-color: var(--db-border-light);
1852
1891
  color: var(--db-dark-color);
1853
1892
  }
1854
- .nav-tabs .nav-link.active[data-v-15c7e3be] {
1893
+ .nav-tabs .nav-link.active[data-v-aefb7a86] {
1855
1894
  background-color: transparent;
1856
1895
  border-bottom-color: var(--db-primary-color);
1857
1896
  color: var(--db-primary-color);
1858
1897
  }
1859
- .tab-content[data-v-15c7e3be] {
1898
+ .tab-content[data-v-aefb7a86] {
1860
1899
  flex: 1;
1861
1900
  overflow: auto;
1862
1901
  padding: 10px 12px;
@@ -1864,43 +1903,43 @@ to {
1864
1903
  display: flex;
1865
1904
  flex-direction: column;
1866
1905
  }
1867
- .tab-panel[data-v-15c7e3be] {
1906
+ .tab-panel[data-v-aefb7a86] {
1868
1907
  flex: 1;
1869
1908
  display: flex;
1870
1909
  flex-direction: column;
1871
1910
  height: 100%;
1872
1911
  overflow: auto;
1873
1912
  }
1874
- .data-content[data-v-15c7e3be] {
1913
+ .data-content[data-v-aefb7a86] {
1875
1914
  height: 100%;
1876
1915
  display: flex;
1877
1916
  flex-direction: column;
1878
1917
  }
1879
- .data-content.loading[data-v-15c7e3be] {
1918
+ .data-content.loading[data-v-aefb7a86] {
1880
1919
  opacity: 0.7;
1881
1920
  pointer-events: none;
1882
1921
  }
1883
- .table-responsive[data-v-15c7e3be] {
1922
+ .table-responsive[data-v-aefb7a86] {
1884
1923
  flex: 1;
1885
1924
  overflow: auto;
1886
1925
  }
1887
- .column-header[data-v-15c7e3be] {
1926
+ .column-header[data-v-aefb7a86] {
1888
1927
  position: relative;
1889
1928
  }
1890
- .column-key[data-v-15c7e3be] {
1929
+ .column-key[data-v-aefb7a86] {
1891
1930
  position: absolute;
1892
1931
  top: -5px;
1893
1932
  right: -15px;
1894
1933
  color: var(--db-primary-color);
1895
1934
  font-size: 0.75rem;
1896
1935
  }
1897
- .cell-value[data-v-15c7e3be] {
1936
+ .cell-value[data-v-aefb7a86] {
1898
1937
  max-width: 200px;
1899
1938
  overflow: hidden;
1900
1939
  text-overflow: ellipsis;
1901
1940
  white-space: nowrap;
1902
1941
  }
1903
- .loading-state[data-v-15c7e3be] {
1942
+ .loading-state[data-v-aefb7a86] {
1904
1943
  display: flex;
1905
1944
  flex-direction: column;
1906
1945
  align-items: center;
@@ -1908,7 +1947,7 @@ to {
1908
1947
  height: 200px;
1909
1948
  gap: 10px;
1910
1949
  }
1911
- .empty-state[data-v-15c7e3be] {
1950
+ .empty-state[data-v-aefb7a86] {
1912
1951
  display: flex;
1913
1952
  flex-direction: column;
1914
1953
  align-items: center;
@@ -1917,86 +1956,86 @@ to {
1917
1956
  gap: 10px;
1918
1957
  color: var(--db-text-muted);
1919
1958
  }
1920
- .empty-state i[data-v-15c7e3be] {
1959
+ .empty-state i[data-v-aefb7a86] {
1921
1960
  font-size: 28px;
1922
1961
  opacity: 0.5;
1923
1962
  }
1924
- .pagination-nav[data-v-15c7e3be] {
1963
+ .pagination-nav[data-v-aefb7a86] {
1925
1964
  margin-top: 10px;
1926
1965
  border-top: 1px solid var(--db-border);
1927
1966
  padding-top: 10px;
1928
1967
  }
1929
- .pagination-container[data-v-15c7e3be] {
1968
+ .pagination-container[data-v-aefb7a86] {
1930
1969
  display: flex;
1931
1970
  align-items: center;
1932
1971
  justify-content: space-between;
1933
1972
  flex-wrap: wrap;
1934
1973
  gap: 10px;
1935
1974
  }
1936
- .pagination-info[data-v-15c7e3be] {
1975
+ .pagination-info[data-v-aefb7a86] {
1937
1976
  font-size: 0.75rem;
1938
1977
  color: var(--db-text-muted);
1939
1978
  }
1940
- .page-size-selector[data-v-15c7e3be] {
1979
+ .page-size-selector[data-v-aefb7a86] {
1941
1980
  display: flex;
1942
1981
  align-items: center;
1943
1982
  gap: 5px;
1944
1983
  }
1945
- .page-jump[data-v-15c7e3be] {
1984
+ .page-jump[data-v-aefb7a86] {
1946
1985
  display: flex;
1947
1986
  align-items: center;
1948
1987
  gap: 5px;
1949
1988
  }
1950
- .structure-actions[data-v-15c7e3be] {
1989
+ .structure-actions[data-v-aefb7a86] {
1951
1990
  display: flex;
1952
1991
  gap: 6px;
1953
1992
  margin-bottom: 10px;
1954
1993
  }
1955
- .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] {
1956
1995
  overflow: auto;
1957
1996
  }
1958
- .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] {
1959
1998
  width: 100%;
1960
1999
  }
1961
- .sql-section[data-v-15c7e3be] {
2000
+ .sql-section[data-v-aefb7a86] {
1962
2001
  height: 100%;
1963
2002
  }
1964
2003
 
1965
2004
  /* 响应式设计 */
1966
2005
  @media (max-width: 768px) {
1967
- .table-header-content[data-v-15c7e3be] {
2006
+ .table-header-content[data-v-aefb7a86] {
1968
2007
  flex-direction: column;
1969
2008
  align-items: flex-start;
1970
2009
  gap: 15px;
1971
2010
  }
1972
- .table-stats[data-v-15c7e3be] {
2011
+ .table-stats[data-v-aefb7a86] {
1973
2012
  width: 100%;
1974
2013
  justify-content: space-around;
1975
2014
  }
1976
- .table-toolbar[data-v-15c7e3be] {
2015
+ .table-toolbar[data-v-aefb7a86] {
1977
2016
  flex-direction: column;
1978
2017
  align-items: stretch;
1979
2018
  gap: 10px;
1980
2019
  }
1981
- .toolbar-left[data-v-15c7e3be], .toolbar-right[data-v-15c7e3be] {
2020
+ .toolbar-left[data-v-aefb7a86], .toolbar-right[data-v-aefb7a86] {
1982
2021
  justify-content: center;
1983
2022
  }
1984
- .pagination-container[data-v-15c7e3be] {
2023
+ .pagination-container[data-v-aefb7a86] {
1985
2024
  flex-direction: column;
1986
2025
  align-items: flex-start;
1987
2026
  gap: 15px;
1988
2027
  }
1989
- .pagination[data-v-15c7e3be] {
2028
+ .pagination[data-v-aefb7a86] {
1990
2029
  width: 100%;
1991
2030
  justify-content: center;
1992
2031
  }
1993
2032
  }
1994
2033
 
1995
- .database-explorer[data-v-50189218] {
2034
+ .database-explorer[data-v-e2c2b105] {
1996
2035
  height: 100vh;
1997
2036
  min-height: 600px;
1998
2037
  }
1999
- .explorer-layout[data-v-50189218] {
2038
+ .explorer-layout[data-v-e2c2b105] {
2000
2039
  display: flex;
2001
2040
  height: 100%;
2002
2041
  background: var(--db-surface);
@@ -2004,7 +2043,7 @@ to {
2004
2043
  }
2005
2044
 
2006
2045
  /* 左侧边栏 */
2007
- .explorer-sidebar[data-v-50189218] {
2046
+ .explorer-sidebar[data-v-e2c2b105] {
2008
2047
  width: 264px;
2009
2048
  flex-shrink: 0;
2010
2049
  border-right: 1px solid var(--db-border);
@@ -2012,19 +2051,19 @@ to {
2012
2051
  flex-direction: column;
2013
2052
  background: var(--db-gray-light);
2014
2053
  }
2015
- .sidebar-content[data-v-50189218] {
2054
+ .sidebar-content[data-v-e2c2b105] {
2016
2055
  flex: 1;
2017
2056
  overflow-y: auto;
2018
2057
  padding: 0.5rem 0;
2019
2058
  display: flex;
2020
2059
  flex-direction: column;
2021
2060
  }
2022
- .tree-container[data-v-50189218] {
2061
+ .tree-container[data-v-e2c2b105] {
2023
2062
  flex: 1;
2024
2063
  }
2025
2064
 
2026
2065
  /* 工具信息样式 - 固定在左下角 */
2027
- .sidebar-tool-info[data-v-50189218] {
2066
+ .sidebar-tool-info[data-v-e2c2b105] {
2028
2067
  padding: 0.5rem 0.625rem;
2029
2068
  border-top: 1px solid var(--db-border);
2030
2069
  background: transparent;
@@ -2034,10 +2073,10 @@ to {
2034
2073
  cursor: pointer;
2035
2074
  transition: background-color 0.15s ease;
2036
2075
  }
2037
- .sidebar-tool-info[data-v-50189218]:hover {
2076
+ .sidebar-tool-info[data-v-e2c2b105]:hover {
2038
2077
  background: var(--db-bg-soft);
2039
2078
  }
2040
- .tool-logo[data-v-50189218] {
2079
+ .tool-logo[data-v-e2c2b105] {
2041
2080
  width: 24px;
2042
2081
  height: 24px;
2043
2082
  border-radius: 4px;
@@ -2049,22 +2088,22 @@ to {
2049
2088
  font-size: 0.8125rem;
2050
2089
  flex-shrink: 0;
2051
2090
  }
2052
- .tool-details[data-v-50189218] {
2091
+ .tool-details[data-v-e2c2b105] {
2053
2092
  flex: 1;
2054
2093
  display: flex;
2055
2094
  flex-direction: column;
2056
2095
  gap: 0.125rem;
2057
2096
  }
2058
- .tool-name[data-v-50189218] {
2097
+ .tool-name[data-v-e2c2b105] {
2059
2098
  font-size: 0.875rem;
2060
2099
  font-weight: 600;
2061
2100
  color: var(--db-black);
2062
2101
  }
2063
- .tool-description[data-v-50189218] {
2102
+ .tool-description[data-v-e2c2b105] {
2064
2103
  font-size: 0.75rem;
2065
2104
  color: var(--db-darker-color);
2066
2105
  }
2067
- .sidebar-header[data-v-50189218] {
2106
+ .sidebar-header[data-v-e2c2b105] {
2068
2107
  padding: 0.5rem 0.625rem;
2069
2108
  border-bottom: 1px solid var(--db-border);
2070
2109
  background: transparent;
@@ -2072,7 +2111,7 @@ to {
2072
2111
  justify-content: space-between;
2073
2112
  align-items: center;
2074
2113
  }
2075
- .sidebar-title[data-v-50189218] {
2114
+ .sidebar-title[data-v-e2c2b105] {
2076
2115
  margin: 0;
2077
2116
  font-size: 0.6875rem;
2078
2117
  font-weight: 600;
@@ -2083,14 +2122,14 @@ to {
2083
2122
  align-items: center;
2084
2123
  gap: 0.375rem;
2085
2124
  }
2086
- .sidebar-title i[data-v-50189218] {
2125
+ .sidebar-title i[data-v-e2c2b105] {
2087
2126
  color: var(--db-text-muted);
2088
2127
  }
2089
- .sidebar-actions[data-v-50189218] {
2128
+ .sidebar-actions[data-v-e2c2b105] {
2090
2129
  display: flex;
2091
2130
  gap: 0.25rem;
2092
2131
  }
2093
- .sidebar-actions .btn[data-v-50189218] {
2132
+ .sidebar-actions .btn[data-v-e2c2b105] {
2094
2133
  padding: 0.15rem 0.4rem;
2095
2134
  font-size: 0.75rem;
2096
2135
  border: 1px solid var(--db-border);
@@ -2099,49 +2138,49 @@ to {
2099
2138
  border-radius: 4px;
2100
2139
  transition: all 0.15s ease;
2101
2140
  }
2102
- .sidebar-actions .btn[data-v-50189218]:hover {
2141
+ .sidebar-actions .btn[data-v-e2c2b105]:hover {
2103
2142
  background-color: var(--db-bg-soft);
2104
2143
  border-color: var(--db-border-light);
2105
2144
  color: var(--db-dark-color);
2106
2145
  }
2107
- .sidebar-actions .btn-outline-primary[data-v-50189218] {
2146
+ .sidebar-actions .btn-outline-primary[data-v-e2c2b105] {
2108
2147
  border-color: var(--db-border);
2109
2148
  color: var(--db-text-muted);
2110
2149
  }
2111
- .sidebar-actions .btn-outline-primary[data-v-50189218]:hover {
2150
+ .sidebar-actions .btn-outline-primary[data-v-e2c2b105]:hover {
2112
2151
  background-color: var(--db-primary-bg);
2113
2152
  border-color: var(--db-primary-color);
2114
2153
  color: var(--db-primary-color);
2115
2154
  }
2116
- .sidebar-actions .btn-outline-success[data-v-50189218] {
2155
+ .sidebar-actions .btn-outline-success[data-v-e2c2b105] {
2117
2156
  border-color: var(--db-border);
2118
2157
  color: var(--db-text-muted);
2119
2158
  }
2120
- .sidebar-actions .btn-outline-success[data-v-50189218]:hover {
2159
+ .sidebar-actions .btn-outline-success[data-v-e2c2b105]:hover {
2121
2160
  background-color: var(--db-success-bg);
2122
2161
  border-color: var(--db-accent-color);
2123
2162
  color: var(--db-accent-color);
2124
2163
  }
2125
- .sidebar-content[data-v-50189218] {
2164
+ .sidebar-content[data-v-e2c2b105] {
2126
2165
  flex: 1;
2127
2166
  overflow-y: auto;
2128
2167
  padding: 0.25rem 0;
2129
2168
  }
2130
2169
 
2131
2170
  /* 树形结构 */
2132
- .tree-container[data-v-50189218] {
2171
+ .tree-container[data-v-e2c2b105] {
2133
2172
  font-size: 0.8125rem;
2134
2173
  user-select: none;
2135
2174
  }
2136
- .tree-node[data-v-50189218] {
2175
+ .tree-node[data-v-e2c2b105] {
2137
2176
  margin-bottom: 0;
2138
2177
  }
2139
- .tree-children[data-v-50189218] {
2178
+ .tree-children[data-v-e2c2b105] {
2140
2179
  margin-left: 0.5rem;
2141
2180
  border-left: 1px solid var(--db-border);
2142
2181
  padding-left: 0.375rem;
2143
2182
  }
2144
- .node-content[data-v-50189218] {
2183
+ .node-content[data-v-e2c2b105] {
2145
2184
  display: flex;
2146
2185
  align-items: center;
2147
2186
  padding: 0.175rem 0.5rem;
@@ -2152,7 +2191,7 @@ to {
2152
2191
  border-radius: 4px;
2153
2192
  gap: 0.125rem;
2154
2193
  }
2155
- .node-expand[data-v-50189218] {
2194
+ .node-expand[data-v-e2c2b105] {
2156
2195
  width: 14px;
2157
2196
  height: 14px;
2158
2197
  display: flex;
@@ -2161,29 +2200,29 @@ to {
2161
2200
  flex-shrink: 0;
2162
2201
  margin-right: 0.125rem;
2163
2202
  }
2164
- .node-expand i[data-v-50189218] {
2203
+ .node-expand i[data-v-e2c2b105] {
2165
2204
  font-size: 0.625rem;
2166
2205
  color: var(--db-text-muted);
2167
2206
  transition: transform 0.15s ease;
2168
2207
  }
2169
- .node-expand i.expanded[data-v-50189218] {
2208
+ .node-expand i.expanded[data-v-e2c2b105] {
2170
2209
  transform: rotate(90deg);
2171
2210
  }
2172
- .node-main[data-v-50189218] {
2211
+ .node-main[data-v-e2c2b105] {
2173
2212
  display: flex;
2174
2213
  align-items: center;
2175
2214
  flex: 1;
2176
2215
  min-width: 0;
2177
2216
  }
2178
- .node-content[data-v-50189218]:hover {
2217
+ .node-content[data-v-e2c2b105]:hover {
2179
2218
  background-color: var(--db-bg-soft);
2180
2219
  }
2181
- .tree-node.selected .node-content[data-v-50189218] {
2220
+ .tree-node.selected .node-content[data-v-e2c2b105] {
2182
2221
  background-color: var(--db-primary-bg);
2183
2222
  color: var(--db-dark-color);
2184
2223
  box-shadow: none;
2185
2224
  }
2186
- .tree-node.selected .node-content[data-v-50189218]::before {
2225
+ .tree-node.selected .node-content[data-v-e2c2b105]::before {
2187
2226
  content: '';
2188
2227
  position: absolute;
2189
2228
  left: 0;
@@ -2193,42 +2232,42 @@ to {
2193
2232
  background: var(--db-primary-color);
2194
2233
  border-radius: 2px 0 0 2px;
2195
2234
  }
2196
- .node-icon[data-v-50189218] {
2235
+ .node-icon[data-v-e2c2b105] {
2197
2236
  width: 16px;
2198
2237
  display: flex;
2199
2238
  justify-content: center;
2200
2239
  flex-shrink: 0;
2201
2240
  margin-right: 0.375rem;
2202
2241
  }
2203
- .node-icon i[data-v-50189218] {
2242
+ .node-icon i[data-v-e2c2b105] {
2204
2243
  font-size: 0.8125rem;
2205
2244
  color: var(--db-text-muted);
2206
2245
  }
2207
- .node-label[data-v-50189218] {
2246
+ .node-label[data-v-e2c2b105] {
2208
2247
  flex: 1;
2209
2248
  display: flex;
2210
2249
  align-items: center;
2211
2250
  gap: 0.375rem;
2212
2251
  min-width: 0;
2213
2252
  }
2214
- .connection-name[data-v-50189218],
2215
- .database-name[data-v-50189218],
2216
- .table-name[data-v-50189218] {
2253
+ .connection-name[data-v-e2c2b105],
2254
+ .database-name[data-v-e2c2b105],
2255
+ .table-name[data-v-e2c2b105] {
2217
2256
  font-weight: 400;
2218
2257
  white-space: nowrap;
2219
2258
  overflow: hidden;
2220
2259
  text-overflow: ellipsis;
2221
2260
  line-height: 1.4;
2222
2261
  }
2223
- .tree-node.selected .connection-name[data-v-50189218],
2224
- .tree-node.selected .database-name[data-v-50189218],
2225
- .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] {
2226
2265
  font-weight: 500;
2227
2266
  }
2228
2267
 
2229
2268
  /* 类型 / 行数说明:走 VSCode 树的「描述文字」样式,浅灰无底色,减少噪声 */
2230
- .connection-type[data-v-50189218],
2231
- .table-info[data-v-50189218] {
2269
+ .connection-type[data-v-e2c2b105],
2270
+ .table-info[data-v-e2c2b105] {
2232
2271
  font-size: 0.6875rem;
2233
2272
  color: var(--db-text-faint);
2234
2273
  background-color: transparent;
@@ -2237,21 +2276,21 @@ to {
2237
2276
  font-weight: 400;
2238
2277
  white-space: nowrap;
2239
2278
  }
2240
- .tree-node.selected .connection-type[data-v-50189218],
2241
- .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] {
2242
2281
  background-color: transparent;
2243
2282
  color: var(--db-text-muted);
2244
2283
  }
2245
- .node-actions[data-v-50189218] {
2284
+ .node-actions[data-v-e2c2b105] {
2246
2285
  display: flex;
2247
2286
  gap: 0.125rem;
2248
2287
  opacity: 0;
2249
2288
  transition: opacity 0.15s ease;
2250
2289
  }
2251
- .node-content:hover .node-actions[data-v-50189218] {
2290
+ .node-content:hover .node-actions[data-v-e2c2b105] {
2252
2291
  opacity: 1;
2253
2292
  }
2254
- .btn-icon[data-v-50189218] {
2293
+ .btn-icon[data-v-e2c2b105] {
2255
2294
  padding: 0;
2256
2295
  background: transparent;
2257
2296
  border: none;
@@ -2263,138 +2302,138 @@ to {
2263
2302
  width: 18px;
2264
2303
  height: 18px;
2265
2304
  }
2266
- .btn-icon[data-v-50189218]:hover {
2305
+ .btn-icon[data-v-e2c2b105]:hover {
2267
2306
  background-color: var(--db-bg-soft);
2268
2307
  }
2269
- .btn-icon i[data-v-50189218] {
2308
+ .btn-icon i[data-v-e2c2b105] {
2270
2309
  font-size: 0.6875rem;
2271
2310
  color: var(--db-text-muted);
2272
2311
  }
2273
- .tree-node.selected .btn-icon[data-v-50189218]:hover {
2312
+ .tree-node.selected .btn-icon[data-v-e2c2b105]:hover {
2274
2313
  background-color: var(--db-bg-soft);
2275
2314
  }
2276
- .tree-node.selected .btn-icon i[data-v-50189218] {
2315
+ .tree-node.selected .btn-icon i[data-v-e2c2b105] {
2277
2316
  color: var(--db-text-muted);
2278
2317
  }
2279
- .tree-node.selected .btn-icon:hover i[data-v-50189218] {
2318
+ .tree-node.selected .btn-icon:hover i[data-v-e2c2b105] {
2280
2319
  color: var(--db-dark-color);
2281
2320
  }
2282
- .btn-icon-danger[data-v-50189218]:hover {
2321
+ .btn-icon-danger[data-v-e2c2b105]:hover {
2283
2322
  background-color: var(--db-danger-bg);
2284
2323
  }
2285
- .btn-icon-danger:hover i[data-v-50189218] {
2324
+ .btn-icon-danger:hover i[data-v-e2c2b105] {
2286
2325
  color: #dc2626;
2287
2326
  }
2288
- .node-spinner[data-v-50189218] {
2327
+ .node-spinner[data-v-e2c2b105] {
2289
2328
  display: flex;
2290
2329
  align-items: center;
2291
2330
  justify-content: center;
2292
2331
  }
2293
- .spinner-border-sm[data-v-50189218] {
2332
+ .spinner-border-sm[data-v-e2c2b105] {
2294
2333
  width: 1rem;
2295
2334
  height: 1rem;
2296
2335
  border-width: 0.15em;
2297
2336
  }
2298
2337
 
2299
2338
  /* 连接节点样式 */
2300
- .connection-content[data-v-50189218] {
2339
+ .connection-content[data-v-e2c2b105] {
2301
2340
  font-weight: 500;
2302
2341
  color: var(--db-text-body);
2303
2342
  }
2304
- .connection-content[data-v-50189218]:hover {
2343
+ .connection-content[data-v-e2c2b105]:hover {
2305
2344
  background-color: var(--db-bg-soft);
2306
2345
  }
2307
- .tree-node.selected .connection-content[data-v-50189218] {
2346
+ .tree-node.selected .connection-content[data-v-e2c2b105] {
2308
2347
  background-color: var(--db-primary-bg);
2309
2348
  color: var(--db-dark-color);
2310
2349
  }
2311
2350
 
2312
2351
  /* 数据库节点样式 */
2313
- .database-content[data-v-50189218] {
2352
+ .database-content[data-v-e2c2b105] {
2314
2353
  color: var(--db-text-body);
2315
2354
  }
2316
- .database-content[data-v-50189218]:hover {
2355
+ .database-content[data-v-e2c2b105]:hover {
2317
2356
  background-color: var(--db-bg-soft);
2318
2357
  }
2319
- .tree-node.selected .database-content[data-v-50189218] {
2358
+ .tree-node.selected .database-content[data-v-e2c2b105] {
2320
2359
  background-color: var(--db-primary-bg);
2321
2360
  color: var(--db-dark-color);
2322
2361
  }
2323
2362
 
2324
2363
  /* 表节点样式 */
2325
- .table-content[data-v-50189218] {
2364
+ .table-content[data-v-e2c2b105] {
2326
2365
  color: var(--db-text-body);
2327
2366
  }
2328
- .table-content[data-v-50189218]:hover {
2367
+ .table-content[data-v-e2c2b105]:hover {
2329
2368
  background-color: var(--db-bg-soft);
2330
2369
  }
2331
- .tree-node.selected .table-content[data-v-50189218] {
2370
+ .tree-node.selected .table-content[data-v-e2c2b105] {
2332
2371
  background-color: var(--db-primary-bg);
2333
2372
  color: var(--db-dark-color);
2334
2373
  }
2335
2374
 
2336
2375
  /* 数据库品牌色彩 */
2337
- .db-mysql[data-v-50189218] {
2376
+ .db-mysql[data-v-e2c2b105] {
2338
2377
  color: #00758f !important;
2339
2378
  background: #00758f;
2340
2379
  -webkit-background-clip: text;
2341
2380
  -webkit-text-fill-color: transparent;
2342
2381
  }
2343
- .db-mysql-bg[data-v-50189218] { background: #00758f;
2382
+ .db-mysql-bg[data-v-e2c2b105] { background: #00758f;
2344
2383
  }
2345
- .db-postgres[data-v-50189218] {
2384
+ .db-postgres[data-v-e2c2b105] {
2346
2385
  color: #336791 !important;
2347
2386
  background: #336791;
2348
2387
  -webkit-background-clip: text;
2349
2388
  -webkit-text-fill-color: transparent;
2350
2389
  }
2351
- .db-postgres-bg[data-v-50189218] { background: #336791;
2390
+ .db-postgres-bg[data-v-e2c2b105] { background: #336791;
2352
2391
  }
2353
- .db-sqlite[data-v-50189218] {
2392
+ .db-sqlite[data-v-e2c2b105] {
2354
2393
  color: #003b57 !important;
2355
2394
  background: #003b57;
2356
2395
  -webkit-background-clip: text;
2357
2396
  -webkit-text-fill-color: transparent;
2358
2397
  }
2359
- .db-sqlite-bg[data-v-50189218] { background: #003b57;
2398
+ .db-sqlite-bg[data-v-e2c2b105] { background: #003b57;
2360
2399
  }
2361
- .db-mssql[data-v-50189218] {
2400
+ .db-mssql[data-v-e2c2b105] {
2362
2401
  color: #cc2927 !important;
2363
2402
  background: #cc2927;
2364
2403
  -webkit-background-clip: text;
2365
2404
  -webkit-text-fill-color: transparent;
2366
2405
  }
2367
- .db-mssql-bg[data-v-50189218] { background: #cc2927;
2406
+ .db-mssql-bg[data-v-e2c2b105] { background: #cc2927;
2368
2407
  }
2369
- .db-oracle[data-v-50189218] {
2408
+ .db-oracle[data-v-e2c2b105] {
2370
2409
  color: #f80000 !important;
2371
2410
  background: #f80000;
2372
2411
  -webkit-background-clip: text;
2373
2412
  -webkit-text-fill-color: transparent;
2374
2413
  }
2375
- .db-oracle-bg[data-v-50189218] { background: #f80000;
2414
+ .db-oracle-bg[data-v-e2c2b105] { background: #f80000;
2376
2415
  }
2377
- .db-default[data-v-50189218] {
2416
+ .db-default[data-v-e2c2b105] {
2378
2417
  color: var(--db-text-muted) !important;
2379
2418
  background: linear-gradient(135deg, var(--db-text-muted), var(--db-gray-dark));
2380
2419
  -webkit-background-clip: text;
2381
2420
  -webkit-text-fill-color: transparent;
2382
2421
  }
2383
- .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));
2384
2423
  }
2385
- .tree-node.selected .db-mysql[data-v-50189218],
2386
- .tree-node.selected .db-postgres[data-v-50189218],
2387
- .tree-node.selected .db-sqlite[data-v-50189218],
2388
- .tree-node.selected .db-mssql[data-v-50189218],
2389
- .tree-node.selected .db-oracle[data-v-50189218],
2390
- .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] {
2391
2430
  color: var(--db-on-accent) !important;
2392
2431
  background: none;
2393
2432
  -webkit-text-fill-color: var(--db-on-accent);
2394
2433
  }
2395
2434
 
2396
2435
  /* 数据库Logo图标 */
2397
- .db-logo[data-v-50189218] {
2436
+ .db-logo[data-v-e2c2b105] {
2398
2437
  width: 16px;
2399
2438
  height: 16px;
2400
2439
  border-radius: 3px;
@@ -2406,33 +2445,33 @@ to {
2406
2445
  line-height: 1;
2407
2446
  color: var(--db-on-accent);
2408
2447
  }
2409
- .db-logo-mysql[data-v-50189218] {
2448
+ .db-logo-mysql[data-v-e2c2b105] {
2410
2449
  background: #00758f;
2411
2450
  border: 1px solid #004d61;
2412
2451
  }
2413
- .db-logo-postgres[data-v-50189218] {
2452
+ .db-logo-postgres[data-v-e2c2b105] {
2414
2453
  background: #336791;
2415
2454
  border: 1px solid #244566;
2416
2455
  }
2417
- .db-logo-sqlite[data-v-50189218] {
2456
+ .db-logo-sqlite[data-v-e2c2b105] {
2418
2457
  background: #003b57;
2419
2458
  border: 1px solid #002939;
2420
2459
  }
2421
- .db-logo-mssql[data-v-50189218] {
2460
+ .db-logo-mssql[data-v-e2c2b105] {
2422
2461
  background: #cc2927;
2423
2462
  border: 1px solid #8b1f1d;
2424
2463
  }
2425
- .db-logo-oracle[data-v-50189218] {
2464
+ .db-logo-oracle[data-v-e2c2b105] {
2426
2465
  background: #f80000;
2427
2466
  border: 1px solid #b30000;
2428
2467
  }
2429
- .db-logo-default[data-v-50189218] {
2468
+ .db-logo-default[data-v-e2c2b105] {
2430
2469
  background: linear-gradient(135deg, var(--db-text-muted), var(--db-gray-dark));
2431
2470
  border: 1px solid var(--db-darker-color);
2432
2471
  }
2433
2472
 
2434
2473
  /* 右侧主内容 */
2435
- .explorer-main[data-v-50189218] {
2474
+ .explorer-main[data-v-e2c2b105] {
2436
2475
  flex: 1;
2437
2476
  display: flex;
2438
2477
  flex-direction: column;
@@ -2441,24 +2480,24 @@ to {
2441
2480
  }
2442
2481
 
2443
2482
  /* 详情组件容器 */
2444
- .explorer-main[data-v-50189218] > * {
2483
+ .explorer-main[data-v-e2c2b105] > * {
2445
2484
  flex: 1;
2446
2485
  display: flex;
2447
2486
  flex-direction: column;
2448
2487
  height: 100%;
2449
2488
  }
2450
- .content-tabs[data-v-50189218] {
2489
+ .content-tabs[data-v-e2c2b105] {
2451
2490
  flex: 1;
2452
2491
  display: flex;
2453
2492
  flex-direction: column;
2454
2493
  height: 100%;
2455
2494
  }
2456
- .nav-tabs[data-v-50189218] {
2495
+ .nav-tabs[data-v-e2c2b105] {
2457
2496
  background: var(--db-light-color);
2458
2497
  border-bottom: 1px solid var(--db-gray-medium);
2459
2498
  padding: 0 1rem;
2460
2499
  }
2461
- .nav-link[data-v-50189218] {
2500
+ .nav-link[data-v-e2c2b105] {
2462
2501
  border: none;
2463
2502
  background: transparent;
2464
2503
  color: var(--db-darker-color);
@@ -2466,16 +2505,16 @@ to {
2466
2505
  font-weight: 500;
2467
2506
  transition: all 0.2s ease;
2468
2507
  }
2469
- .nav-link[data-v-50189218]:hover {
2508
+ .nav-link[data-v-e2c2b105]:hover {
2470
2509
  color: #667eea;
2471
2510
  background: rgba(102, 126, 234, 0.1);
2472
2511
  }
2473
- .nav-link.active[data-v-50189218] {
2512
+ .nav-link.active[data-v-e2c2b105] {
2474
2513
  color: #667eea;
2475
2514
  background: var(--db-surface);
2476
2515
  border-bottom: 2px solid #667eea;
2477
2516
  }
2478
- .tab-content[data-v-50189218] {
2517
+ .tab-content[data-v-e2c2b105] {
2479
2518
  flex: 1;
2480
2519
  overflow-y: auto;
2481
2520
  padding: 1.25rem;
@@ -2483,15 +2522,15 @@ to {
2483
2522
  }
2484
2523
 
2485
2524
  /* 概览样式 */
2486
- .overview-section[data-v-50189218] {
2525
+ .overview-section[data-v-e2c2b105] {
2487
2526
  padding: 1rem 0;
2488
2527
  }
2489
- .info-cards[data-v-50189218] {
2528
+ .info-cards[data-v-e2c2b105] {
2490
2529
  display: grid;
2491
2530
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2492
2531
  gap: 0.75rem;
2493
2532
  }
2494
- .info-card[data-v-50189218] {
2533
+ .info-card[data-v-e2c2b105] {
2495
2534
  background: linear-gradient(135deg, var(--db-light-color) 0%, var(--db-border) 100%);
2496
2535
  border-radius: 8px;
2497
2536
  padding: 0.875rem;
@@ -2500,7 +2539,7 @@ to {
2500
2539
  gap: 0.75rem;
2501
2540
  border: 1px solid var(--db-gray-medium);
2502
2541
  }
2503
- .card-icon[data-v-50189218] {
2542
+ .card-icon[data-v-e2c2b105] {
2504
2543
  width: 36px;
2505
2544
  height: 36px;
2506
2545
  background: var(--db-primary-color);
@@ -2511,13 +2550,13 @@ to {
2511
2550
  color: var(--db-on-accent);
2512
2551
  font-size: 1rem;
2513
2552
  }
2514
- .card-content h6[data-v-50189218] {
2553
+ .card-content h6[data-v-e2c2b105] {
2515
2554
  margin: 0 0 0.25rem 0;
2516
2555
  color: var(--db-darker-color);
2517
2556
  font-size: 0.8125rem;
2518
2557
  font-weight: 500;
2519
2558
  }
2520
- .card-value[data-v-50189218] {
2559
+ .card-value[data-v-e2c2b105] {
2521
2560
  margin: 0;
2522
2561
  color: var(--db-dark-color);
2523
2562
  font-weight: 600;
@@ -2525,12 +2564,12 @@ to {
2525
2564
  }
2526
2565
 
2527
2566
  /* 表格网格 */
2528
- .table-grid[data-v-50189218] {
2567
+ .table-grid[data-v-e2c2b105] {
2529
2568
  display: grid;
2530
2569
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
2531
2570
  gap: 0.75rem;
2532
2571
  }
2533
- .table-card[data-v-50189218] {
2572
+ .table-card[data-v-e2c2b105] {
2534
2573
  background: var(--db-surface);
2535
2574
  border: 1px solid var(--db-gray-medium);
2536
2575
  border-radius: 8px;
@@ -2538,18 +2577,18 @@ to {
2538
2577
  cursor: pointer;
2539
2578
  transition: all 0.2s ease;
2540
2579
  }
2541
- .table-card[data-v-50189218]:hover {
2580
+ .table-card[data-v-e2c2b105]:hover {
2542
2581
  border-color: var(--db-primary-color);
2543
2582
  box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
2544
2583
  transform: translateY(-2px);
2545
2584
  }
2546
- .table-card .card-header[data-v-50189218] {
2585
+ .table-card .card-header[data-v-e2c2b105] {
2547
2586
  display: flex;
2548
2587
  align-items: center;
2549
2588
  gap: 0.5rem;
2550
2589
  margin-bottom: 0.5rem;
2551
2590
  }
2552
- .table-icon[data-v-50189218] {
2591
+ .table-icon[data-v-e2c2b105] {
2553
2592
  width: 28px;
2554
2593
  height: 28px;
2555
2594
  background: var(--db-accent-color);
@@ -2559,37 +2598,37 @@ to {
2559
2598
  justify-content: center;
2560
2599
  color: var(--db-on-accent);
2561
2600
  }
2562
- .table-name[data-v-50189218] {
2601
+ .table-name[data-v-e2c2b105] {
2563
2602
  font-weight: 600;
2564
2603
  color: var(--db-dark-color);
2565
2604
  }
2566
- .table-stats[data-v-50189218] {
2605
+ .table-stats[data-v-e2c2b105] {
2567
2606
  display: flex;
2568
2607
  gap: 0.75rem;
2569
2608
  margin-bottom: 0.5rem;
2570
2609
  }
2571
- .stat[data-v-50189218] {
2610
+ .stat[data-v-e2c2b105] {
2572
2611
  display: flex;
2573
2612
  flex-direction: column;
2574
2613
  gap: 0.25rem;
2575
2614
  }
2576
- .stat-label[data-v-50189218] {
2615
+ .stat-label[data-v-e2c2b105] {
2577
2616
  font-size: 0.75rem;
2578
2617
  color: var(--db-darker-color);
2579
2618
  }
2580
- .stat-value[data-v-50189218] {
2619
+ .stat-value[data-v-e2c2b105] {
2581
2620
  font-size: 0.875rem;
2582
2621
  font-weight: 600;
2583
2622
  color: var(--db-black);
2584
2623
  }
2585
- .table-comment[data-v-50189218] {
2624
+ .table-comment[data-v-e2c2b105] {
2586
2625
  font-size: 0.75rem;
2587
2626
  color: var(--db-darker-color);
2588
2627
  font-style: italic;
2589
2628
  }
2590
2629
 
2591
2630
  /* 数据工具栏 */
2592
- .data-toolbar[data-v-50189218] {
2631
+ .data-toolbar[data-v-e2c2b105] {
2593
2632
  display: flex;
2594
2633
  justify-content: space-between;
2595
2634
  align-items: center;
@@ -2598,16 +2637,16 @@ to {
2598
2637
  background: var(--db-light-color);
2599
2638
  border-radius: 8px;
2600
2639
  }
2601
- .toolbar-left[data-v-50189218],
2602
- .toolbar-right[data-v-50189218] {
2640
+ .toolbar-left[data-v-e2c2b105],
2641
+ .toolbar-right[data-v-e2c2b105] {
2603
2642
  display: flex;
2604
2643
  gap: 0.5rem;
2605
2644
  align-items: center;
2606
2645
  }
2607
2646
 
2608
2647
  /* 空状态 */
2609
- .empty-state[data-v-50189218],
2610
- .default-state[data-v-50189218] {
2648
+ .empty-state[data-v-e2c2b105],
2649
+ .default-state[data-v-e2c2b105] {
2611
2650
  display: flex;
2612
2651
  flex-direction: column;
2613
2652
  align-items: center;
@@ -2616,33 +2655,33 @@ to {
2616
2655
  color: var(--db-darker-color);
2617
2656
  text-align: center;
2618
2657
  }
2619
- .empty-icon[data-v-50189218],
2620
- .default-icon[data-v-50189218] {
2658
+ .empty-icon[data-v-e2c2b105],
2659
+ .default-icon[data-v-e2c2b105] {
2621
2660
  font-size: 1.75rem;
2622
2661
  margin-bottom: 0.5rem;
2623
2662
  opacity: 0.4;
2624
2663
  }
2625
- .empty-text h5[data-v-50189218],
2626
- .default-content h5[data-v-50189218] {
2664
+ .empty-text h5[data-v-e2c2b105],
2665
+ .default-content h5[data-v-e2c2b105] {
2627
2666
  color: var(--db-dark-color);
2628
2667
  margin-bottom: 0.5rem;
2629
2668
  }
2630
2669
 
2631
2670
  /* 响应式 */
2632
2671
  @media (max-width: 768px) {
2633
- .explorer-layout[data-v-50189218] {
2672
+ .explorer-layout[data-v-e2c2b105] {
2634
2673
  flex-direction: column;
2635
2674
  }
2636
- .explorer-sidebar[data-v-50189218] {
2675
+ .explorer-sidebar[data-v-e2c2b105] {
2637
2676
  width: 100%;
2638
2677
  height: 40vh;
2639
2678
  border-right: none;
2640
2679
  border-bottom: 1px solid var(--db-gray-medium);
2641
2680
  }
2642
- .info-cards[data-v-50189218] {
2681
+ .info-cards[data-v-e2c2b105] {
2643
2682
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
2644
2683
  }
2645
- .table-grid[data-v-50189218] {
2684
+ .table-grid[data-v-e2c2b105] {
2646
2685
  grid-template-columns: 1fr;
2647
2686
  }
2648
2687
  }