fdb2 1.0.17 → 1.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/package.json +139 -0
  2. package/dist/pnpm-lock.yaml +7332 -0
  3. package/dist/public/.vite/manifest.json +129 -0
  4. package/dist/public/_plugin-vue_export-helper.js +12 -0
  5. package/dist/public/bootstrap-icons.woff +0 -0
  6. package/dist/public/bootstrap-icons.woff2 +0 -0
  7. package/dist/public/bootstrap.css +14152 -0
  8. package/dist/public/bootstrap.js +4717 -0
  9. package/dist/public/explorer.css +2542 -0
  10. package/dist/public/explorer.js +59004 -0
  11. package/dist/public/favicon.ico +0 -0
  12. package/dist/public/index.css +950 -0
  13. package/dist/public/index.js +614 -0
  14. package/dist/public/layout.css +318 -0
  15. package/dist/public/layout.js +35 -0
  16. package/dist/public/modal.css +150 -0
  17. package/dist/public/modal.js +4873 -0
  18. package/dist/public/rolldown-runtime.js +38 -0
  19. package/dist/public/vconsole.min.js +10355 -0
  20. package/dist/public/vue.js +6526 -0
  21. package/dist/scripts/nw-build.js +136 -0
  22. package/dist/scripts/nw-dev.js +67 -0
  23. package/dist/scripts/preinstall.js +112 -0
  24. package/dist/server/index.d.ts +2 -0
  25. package/dist/server/index.d.ts.map +1 -0
  26. package/dist/server/index.js +607 -0
  27. package/dist/server/index.js.map +1 -0
  28. package/dist/server/index.ts +685 -0
  29. package/dist/server/model/connection.entity.d.ts +55 -0
  30. package/dist/server/model/connection.entity.d.ts.map +1 -0
  31. package/dist/server/model/connection.entity.js +59 -0
  32. package/dist/server/model/connection.entity.js.map +1 -0
  33. package/dist/server/model/connection.entity.ts +66 -0
  34. package/dist/server/model/database.entity.d.ts +203 -0
  35. package/dist/server/model/database.entity.d.ts.map +1 -0
  36. package/dist/server/model/database.entity.js +211 -0
  37. package/dist/server/model/database.entity.js.map +1 -0
  38. package/dist/server/model/database.entity.ts +246 -0
  39. package/dist/server/service/connection.service.d.ts +84 -0
  40. package/dist/server/service/connection.service.d.ts.map +1 -0
  41. package/dist/server/service/connection.service.js +369 -0
  42. package/dist/server/service/connection.service.js.map +1 -0
  43. package/dist/server/service/connection.service.ts +359 -0
  44. package/dist/server/service/database/base.service.d.ts +183 -0
  45. package/dist/server/service/database/base.service.d.ts.map +1 -0
  46. package/dist/server/service/database/base.service.js +253 -0
  47. package/dist/server/service/database/base.service.js.map +1 -0
  48. package/dist/server/service/database/base.service.ts +407 -0
  49. package/dist/server/service/database/cockroachdb.service.d.ts +116 -0
  50. package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -0
  51. package/dist/server/service/database/cockroachdb.service.js +812 -0
  52. package/dist/server/service/database/cockroachdb.service.js.map +1 -0
  53. package/dist/server/service/database/cockroachdb.service.ts +871 -0
  54. package/dist/server/service/database/database.service.d.ts +495 -0
  55. package/dist/server/service/database/database.service.d.ts.map +1 -0
  56. package/dist/server/service/database/database.service.js +711 -0
  57. package/dist/server/service/database/database.service.js.map +1 -0
  58. package/dist/server/service/database/database.service.ts +776 -0
  59. package/dist/server/service/database/index.d.ts +8 -0
  60. package/dist/server/service/database/index.d.ts.map +1 -0
  61. package/dist/server/service/database/index.js +18 -0
  62. package/dist/server/service/database/index.js.map +1 -0
  63. package/dist/server/service/database/index.ts +7 -0
  64. package/dist/server/service/database/mongodb.service.d.ts +121 -0
  65. package/dist/server/service/database/mongodb.service.d.ts.map +1 -0
  66. package/dist/server/service/database/mongodb.service.js +502 -0
  67. package/dist/server/service/database/mongodb.service.js.map +1 -0
  68. package/dist/server/service/database/mongodb.service.ts +501 -0
  69. package/dist/server/service/database/mssql.service.d.ts +118 -0
  70. package/dist/server/service/database/mssql.service.d.ts.map +1 -0
  71. package/dist/server/service/database/mssql.service.js +871 -0
  72. package/dist/server/service/database/mssql.service.js.map +1 -0
  73. package/dist/server/service/database/mssql.service.ts +932 -0
  74. package/dist/server/service/database/mysql.service.d.ts +114 -0
  75. package/dist/server/service/database/mysql.service.d.ts.map +1 -0
  76. package/dist/server/service/database/mysql.service.js +960 -0
  77. package/dist/server/service/database/mysql.service.js.map +1 -0
  78. package/dist/server/service/database/mysql.service.ts +1026 -0
  79. package/dist/server/service/database/oracle.service.d.ts +126 -0
  80. package/dist/server/service/database/oracle.service.d.ts.map +1 -0
  81. package/dist/server/service/database/oracle.service.js +963 -0
  82. package/dist/server/service/database/oracle.service.js.map +1 -0
  83. package/dist/server/service/database/oracle.service.ts +1036 -0
  84. package/dist/server/service/database/postgres.service.d.ts +122 -0
  85. package/dist/server/service/database/postgres.service.d.ts.map +1 -0
  86. package/dist/server/service/database/postgres.service.js +882 -0
  87. package/dist/server/service/database/postgres.service.js.map +1 -0
  88. package/dist/server/service/database/postgres.service.ts +961 -0
  89. package/dist/server/service/database/sap.service.d.ts +115 -0
  90. package/dist/server/service/database/sap.service.d.ts.map +1 -0
  91. package/dist/server/service/database/sap.service.js +868 -0
  92. package/dist/server/service/database/sap.service.js.map +1 -0
  93. package/dist/server/service/database/sap.service.ts +922 -0
  94. package/dist/server/service/database/sqlite.service.d.ts +112 -0
  95. package/dist/server/service/database/sqlite.service.d.ts.map +1 -0
  96. package/dist/server/service/database/sqlite.service.js +723 -0
  97. package/dist/server/service/database/sqlite.service.js.map +1 -0
  98. package/dist/server/service/database/sqlite.service.ts +787 -0
  99. package/dist/server/service/session.service.ts +158 -0
  100. package/dist/view/index.html +48 -0
  101. package/package.json +2 -1
@@ -0,0 +1,318 @@
1
+
2
+ /* 主布局样式 */
3
+ .database-layout[data-v-e9cb9298] {
4
+ height: 100vh;
5
+ display: flex;
6
+ flex-direction: column;
7
+ background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
8
+ }
9
+
10
+ /* 现代导航栏样式 */
11
+ .navbar-modern[data-v-e9cb9298] {
12
+ background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
13
+ border-bottom: 1px solid #e2e8f0;
14
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
15
+ padding: 0.75rem 0;
16
+ position: sticky;
17
+ top: 0;
18
+ z-index: 1030;
19
+ backdrop-filter: blur(10px);
20
+ }
21
+
22
+ /* 品牌区域 */
23
+ .navbar-brand-wrapper[data-v-e9cb9298] {
24
+ margin-right: 2rem;
25
+ }
26
+ .navbar-brand-modern[data-v-e9cb9298] {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: 1rem;
30
+ text-decoration: none;
31
+ color: #1e293b;
32
+ transition: all 0.3s ease;
33
+ }
34
+ .navbar-brand-modern[data-v-e9cb9298]:hover {
35
+ color: #667eea;
36
+ transform: translateX(2px);
37
+ }
38
+ .brand-icon[data-v-e9cb9298] {
39
+ width: 45px;
40
+ height: 45px;
41
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
42
+ border-radius: 12px;
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ color: white;
47
+ font-size: 1.5rem;
48
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
49
+ transition: all 0.3s ease;
50
+ }
51
+ .brand-icon[data-v-e9cb9298]:hover {
52
+ transform: rotate(5deg) scale(1.05);
53
+ box-shadow: 0 6px 16px rgba(102, 126, 234, 0.4);
54
+ }
55
+ .brand-text[data-v-e9cb9298] {
56
+ display: flex;
57
+ flex-direction: column;
58
+ gap: 2px;
59
+ }
60
+ .brand-name[data-v-e9cb9298] {
61
+ font-size: 1.25rem;
62
+ font-weight: 700;
63
+ color: #1e293b;
64
+ letter-spacing: -0.025em;
65
+ }
66
+ .brand-subtitle[data-v-e9cb9298] {
67
+ font-size: 0.75rem;
68
+ color: #64748b;
69
+ font-weight: 500;
70
+ letter-spacing: 0.05em;
71
+ text-transform: uppercase;
72
+ }
73
+
74
+ /* 移动端切换按钮 */
75
+ .navbar-toggler-modern[data-v-e9cb9298] {
76
+ background: none;
77
+ border: none;
78
+ padding: 0.5rem;
79
+ cursor: pointer;
80
+ display: none;
81
+ flex-direction: column;
82
+ gap: 4px;
83
+ }
84
+ .navbar-toggler-line[data-v-e9cb9298] {
85
+ width: 25px;
86
+ height: 3px;
87
+ background: linear-gradient(90deg, #667eea, #764ba2);
88
+ border-radius: 2px;
89
+ transition: all 0.3s ease;
90
+ }
91
+
92
+ /* 导航折叠区域 */
93
+ .navbar-collapse-modern[data-v-e9cb9298] {
94
+ background: transparent;
95
+ }
96
+
97
+ /* 主导航样式 */
98
+ .navbar-nav-modern[data-v-e9cb9298] {
99
+ display: flex;
100
+ align-items: center;
101
+ gap: 0.5rem;
102
+ }
103
+ .nav-item-modern[data-v-e9cb9298] {
104
+ position: relative;
105
+ }
106
+ .nav-link-modern[data-v-e9cb9298] {
107
+ display: flex;
108
+ align-items: center;
109
+ gap: 0.75rem;
110
+ padding: 0.75rem 1.25rem;
111
+ border-radius: 12px;
112
+ color: #64748b;
113
+ text-decoration: none;
114
+ font-weight: 500;
115
+ transition: all 0.3s ease;
116
+ position: relative;
117
+ overflow: hidden;
118
+ }
119
+ .nav-link-modern[data-v-e9cb9298]:hover {
120
+ background: rgba(102, 126, 234, 0.1);
121
+ color: #667eea;
122
+ transform: translateY(-1px);
123
+ }
124
+ .nav-link-modern.active[data-v-e9cb9298] {
125
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
126
+ color: white;
127
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
128
+ }
129
+ .nav-icon[data-v-e9cb9298] {
130
+ font-size: 1.25rem;
131
+ display: flex;
132
+ align-items: center;
133
+ justify-content: center;
134
+ min-width: 24px;
135
+ }
136
+ .nav-text[data-v-e9cb9298] {
137
+ font-size: 0.95rem;
138
+ font-weight: 600;
139
+ letter-spacing: 0.025em;
140
+ }
141
+ .nav-indicator[data-v-e9cb9298] {
142
+ position: absolute;
143
+ bottom: 0;
144
+ left: 50%;
145
+ transform: translateX(-50%);
146
+ width: 4px;
147
+ height: 4px;
148
+ background: white;
149
+ border-radius: 50%;
150
+ opacity: 0;
151
+ transition: all 0.3s ease;
152
+ }
153
+ .nav-link-modern.active .nav-indicator[data-v-e9cb9298] {
154
+ opacity: 1;
155
+ }
156
+
157
+ /* 用户菜单样式 */
158
+ .nav-icon-only[data-v-e9cb9298] {
159
+ padding: 0.75rem;
160
+ min-width: auto;
161
+ }
162
+ .notification-dot[data-v-e9cb9298] {
163
+ position: absolute;
164
+ top: 8px;
165
+ right: 8px;
166
+ width: 8px;
167
+ height: 8px;
168
+ background: #ef4444;
169
+ border-radius: 50%;
170
+ border: 2px solid white;
171
+ animation: pulse-e9cb9298 2s ease-in-out infinite;
172
+ }
173
+ .user-menu-toggle[data-v-e9cb9298] {
174
+ display: flex;
175
+ align-items: center;
176
+ gap: 0.75rem;
177
+ padding: 0.5rem;
178
+ border-radius: 12px;
179
+ transition: all 0.3s ease;
180
+ }
181
+ .user-menu-toggle[data-v-e9cb9298]:hover {
182
+ background: rgba(102, 126, 234, 0.1);
183
+ }
184
+ .user-avatar[data-v-e9cb9298] {
185
+ width: 40px;
186
+ height: 40px;
187
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
188
+ border-radius: 50%;
189
+ display: flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ color: white;
193
+ font-size: 1.25rem;
194
+ box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
195
+ }
196
+ .user-info[data-v-e9cb9298] {
197
+ display: flex;
198
+ flex-direction: column;
199
+ gap: 2px;
200
+ }
201
+ .user-name[data-v-e9cb9298] {
202
+ font-size: 0.9rem;
203
+ font-weight: 600;
204
+ color: #1e293b;
205
+ }
206
+ .user-role[data-v-e9cb9298] {
207
+ font-size: 0.75rem;
208
+ color: #64748b;
209
+ font-weight: 500;
210
+ }
211
+ .dropdown-arrow[data-v-e9cb9298] {
212
+ color: #94a3b8;
213
+ font-size: 0.75rem;
214
+ transition: all 0.3s ease;
215
+ }
216
+ .user-menu-toggle:hover .dropdown-arrow[data-v-e9cb9298] {
217
+ color: #667eea;
218
+ transform: translateY(1px);
219
+ }
220
+
221
+ /* 现代下拉菜单样式 */
222
+ .dropdown-menu-modern[data-v-e9cb9298] {
223
+ background: white;
224
+ border: 1px solid #e2e8f0;
225
+ border-radius: 16px;
226
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1), 0 4px 10px rgba(0, 0, 0, 0.05);
227
+ padding: 0.75rem;
228
+ min-width: 280px;
229
+ backdrop-filter: blur(10px);
230
+ margin-top: 0.75rem;
231
+ }
232
+ .dropdown-header[data-v-e9cb9298] {
233
+ padding: 0.5rem 0.75rem;
234
+ font-size: 0.75rem;
235
+ font-weight: 700;
236
+ color: #94a3b8;
237
+ text-transform: uppercase;
238
+ letter-spacing: 0.05em;
239
+ border-bottom: 1px solid #f1f5f9;
240
+ margin-bottom: 0.5rem;
241
+ }
242
+ .dropdown-item-modern[data-v-e9cb9298] {
243
+ display: flex;
244
+ align-items: center;
245
+ gap: 0.75rem;
246
+ padding: 0.75rem;
247
+ border-radius: 8px;
248
+ color: #374151;
249
+ text-decoration: none;
250
+ transition: all 0.2s ease;
251
+ margin-bottom: 2px;
252
+ }
253
+ .dropdown-item-modern[data-v-e9cb9298]:hover {
254
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
255
+ color: #667eea;
256
+ transform: translateX(4px);
257
+ }
258
+ .dropdown-item-modern.text-danger[data-v-e9cb9298]:hover {
259
+ background: linear-gradient(135deg, #fef2f2 0%, #fee2e2 100%);
260
+ color: #dc2626;
261
+ }
262
+ .dropdown-item-content[data-v-e9cb9298] {
263
+ display: flex;
264
+ flex-direction: column;
265
+ gap: 2px;
266
+ }
267
+ .dropdown-item-title[data-v-e9cb9298] {
268
+ font-size: 0.9rem;
269
+ font-weight: 600;
270
+ color: inherit;
271
+ }
272
+ .dropdown-item-desc[data-v-e9cb9298] {
273
+ font-size: 0.75rem;
274
+ color: #94a3b8;
275
+ }
276
+ .dropdown-divider-modern[data-v-e9cb9298] {
277
+ margin: 0.75rem -0.75rem;
278
+ border: none;
279
+ border-top: 1px solid #f1f5f9;
280
+ }
281
+
282
+ /* 主要内容区域 */
283
+ .main-content-modern[data-v-e9cb9298] {
284
+ flex: 1;
285
+ display: flex;
286
+ flex-direction: column;
287
+ background: transparent;
288
+ overflow: hidden;
289
+ }
290
+ .content-wrapper[data-v-e9cb9298] {
291
+ flex: 1;
292
+ background: rgba(255, 255, 255, 0.3);
293
+ backdrop-filter: blur(8px);
294
+ overflow-y: auto;
295
+ height: 100%;
296
+ }
297
+
298
+
299
+
300
+ /* 动画效果 */
301
+ @keyframes pulse-e9cb9298 {
302
+ 0%, 100% { opacity: 1; transform: scale(1);
303
+ }
304
+ 50% { opacity: 0.6; transform: scale(1.2);
305
+ }
306
+ }
307
+
308
+ /* 响应式设计 */
309
+ @media (max-width: 768px) {
310
+ .content-wrapper[data-v-e9cb9298] {
311
+ padding: 0.5rem;
312
+ }
313
+ }
314
+ @media (max-width: 480px) {
315
+ .content-wrapper[data-v-e9cb9298] {
316
+ padding: 0.25rem;
317
+ }
318
+ }
@@ -0,0 +1,35 @@
1
+ import { n as __esmMin } from "./rolldown-runtime.js";
2
+ import { I as resolveComponent, N as openBlock, T as defineComponent, _ as createBaseVNode, b as createElementBlock, c as init_vue_runtime_esm_bundler, w as createVNode } from "./vue.js";
3
+ import { n as init__plugin_vue_export_helper, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
4
+ //#region src/platform/database/layout.vue?vue&type=script&setup=true&lang.ts
5
+ var _hoisted_1, _hoisted_2, _hoisted_3, layout_vue_vue_type_script_setup_true_lang_default;
6
+ var init_layout_vue_vue_type_script_setup_true_lang = __esmMin((() => {
7
+ init_vue_runtime_esm_bundler();
8
+ _hoisted_1 = { class: "database-layout" };
9
+ _hoisted_2 = { class: "main-content-modern" };
10
+ _hoisted_3 = { class: "content-wrapper" };
11
+ layout_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
12
+ __name: "layout",
13
+ setup(__props) {
14
+ return (_ctx, _cache) => {
15
+ const _component_router_view = resolveComponent("router-view");
16
+ return openBlock(), createElementBlock("div", _hoisted_1, [createBaseVNode("main", _hoisted_2, [createBaseVNode("div", _hoisted_3, [createVNode(_component_router_view)])])]);
17
+ };
18
+ }
19
+ });
20
+ }));
21
+ //#endregion
22
+ //#region src/platform/database/layout.vue?vue&type=style&index=0&scoped=e9cb9298&lang.css
23
+ var init_layout_vue_vue_type_style_index_0_scoped_e9cb9298_lang = __esmMin((() => {}));
24
+ //#endregion
25
+ //#region src/platform/database/layout.vue
26
+ var layout_default;
27
+ //#endregion
28
+ __esmMin((() => {
29
+ init_layout_vue_vue_type_script_setup_true_lang();
30
+ init_layout_vue_vue_type_script_setup_true_lang();
31
+ init_layout_vue_vue_type_style_index_0_scoped_e9cb9298_lang();
32
+ init__plugin_vue_export_helper();
33
+ layout_default = /* @__PURE__ */ _plugin_vue_export_helper_default(layout_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-e9cb9298"]]);
34
+ }))();
35
+ export { layout_default as default };
@@ -0,0 +1,150 @@
1
+
2
+ /* 覆盖Bootstrap默认样式 */
3
+ .toast-container[data-v-7d639c44] {
4
+ z-index: 1100;
5
+ }
6
+ .fade-out[data-v-7d639c44] {
7
+ animation: fadeOut-7d639c44 1s forwards;
8
+ }
9
+ @keyframes fadeOut-7d639c44 {
10
+ 0% { opacity: 1; transform: translateY(0);
11
+ }
12
+ 100% { opacity: 0; transform: translateY(-120%);}
13
+ }
14
+
15
+ .loading-overlay[data-v-d5892680] {
16
+ position: absolute;
17
+ top: 0;
18
+ left: 0;
19
+ width: 100%;
20
+ height: 100%;
21
+ background-color: rgba(0, 0, 0, 0.3);
22
+ display: flex;
23
+ justify-content: center;
24
+ align-items: center;
25
+ z-index: 1050;
26
+ }
27
+ .loading-spinner[data-v-d5892680] {
28
+ text-align: center;
29
+ }
30
+
31
+ .modal-dialog[data-v-6653cff9] {
32
+ z-index: var(--bs-modal-zindex);
33
+ max-width:none !important;
34
+ }
35
+ .modal-success .modal-header[data-v-6653cff9] {
36
+ background-color: var(--bs-success);
37
+ color: white;
38
+ }
39
+ .modal-error .modal-header[data-v-6653cff9] {
40
+ background-color: var(--bs-danger);
41
+ color: white;
42
+ }
43
+ .modal-warning .modal-header[data-v-6653cff9] {
44
+ background-color: var(--bs-warning);
45
+ color: var(--bs-dark);
46
+ }
47
+ .modal-info .modal-header[data-v-6653cff9] {
48
+ background-color: var(--bs-info);
49
+ color: white;
50
+ }
51
+ .modal-body[data-v-6653cff9] {
52
+ min-height: 80px;
53
+ display: flex;
54
+ flex-direction: column;
55
+ align-items: stretch;
56
+ }
57
+ .error-details[data-v-6653cff9] {
58
+ width: 100%;
59
+ margin-top: 1rem;
60
+ }
61
+ .error-content[data-v-6653cff9] {
62
+ background-color: #f8f9fa;
63
+ border: 1px solid #e9ecef;
64
+ border-radius: 0.375rem;
65
+ padding: 1rem;
66
+ margin: 0;
67
+ max-height: 200px;
68
+ overflow-y: auto;
69
+ white-space: pre-wrap;
70
+ word-break: break-word;
71
+ font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
72
+ font-size: 0.875rem;
73
+ line-height: 1.5;
74
+ }
75
+ .error-details-toggle[data-v-6653cff9] {
76
+ width: 100%;
77
+ }
78
+ .error-details-content[data-v-6653cff9] {
79
+ background-color: #f8f9fa;
80
+ border: 1px solid #e9ecef;
81
+ border-radius: 0.375rem;
82
+ padding: 1rem;
83
+ margin-top: 0.5rem;
84
+ }
85
+ .error-json[data-v-6653cff9] {
86
+ background-color: #212529;
87
+ color: #f8f9fa;
88
+ border-radius: 0.25rem;
89
+ padding: 0.75rem;
90
+ font-size: 0.8rem;
91
+ line-height: 1.4;
92
+ max-height: 300px;
93
+ overflow-y: auto;
94
+ white-space: pre-wrap;
95
+ word-break: break-word;
96
+ }
97
+ .error-meta[data-v-6653cff9] {
98
+ border-bottom: 1px solid #dee2e6;
99
+ padding-bottom: 0.5rem;
100
+ margin-bottom: 0.5rem;
101
+ }
102
+ .modal-body .fs-1[data-v-6653cff9] {
103
+ font-size: 2.5rem;
104
+ margin-bottom: 1rem;
105
+ }
106
+
107
+ /* 响应式调整 */
108
+ @media (max-width: 576px) {
109
+ .error-content[data-v-6653cff9],
110
+ .error-json[data-v-6653cff9] {
111
+ font-size: 0.75rem;
112
+ max-height: 150px;
113
+ }
114
+ }
115
+
116
+ .datagrid-container[data-v-ae552d25] {
117
+ display: flex;
118
+ flex-direction: column;
119
+ height: 100%;
120
+ }
121
+ .datagrid-inner[data-v-ae552d25] {
122
+ flex: 1;
123
+ overflow: auto;
124
+ margin-bottom: 10px;
125
+ }
126
+ .datagrid-th[data-v-ae552d25] {
127
+ min-width: 80px;
128
+ white-space: nowrap;
129
+ position: sticky;
130
+ top: 0;
131
+ z-index: 10;
132
+ background-color: #f8f9fa;
133
+ }
134
+ .datagrid-th.sortable[data-v-ae552d25] {
135
+ cursor: pointer;
136
+ user-select: none;
137
+ }
138
+ .datagrid-th.sortable[data-v-ae552d25]:hover {
139
+ background-color: #e9ecef;
140
+ }
141
+ .header-content[data-v-ae552d25] {
142
+ display: flex;
143
+ align-items: center;
144
+ gap: 0.5rem;
145
+ }
146
+ .sort-icon[data-v-ae552d25] {
147
+ display: flex;
148
+ align-items: center;
149
+ font-size: 0.75rem;
150
+ }