fdb2 1.0.36 → 1.0.37

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 (31) hide show
  1. package/dist/public/explorer.css +150 -141
  2. package/dist/public/explorer.js +470 -303
  3. package/dist/public/index.css +85 -7
  4. package/dist/public/index.js +6 -0
  5. package/dist/public/layout.js +1 -1
  6. package/dist/server/service/database/mssql.service.d.ts.map +1 -1
  7. package/dist/server/service/database/mssql.service.js +14 -45
  8. package/dist/server/service/database/mssql.service.js.map +1 -1
  9. package/dist/server/service/database/mssql.service.ts +21 -49
  10. package/dist/server/service/database/mysql.service.d.ts.map +1 -1
  11. package/dist/server/service/database/mysql.service.js +34 -52
  12. package/dist/server/service/database/mysql.service.js.map +1 -1
  13. package/dist/server/service/database/mysql.service.ts +50 -55
  14. package/dist/server/service/database/oracle.service.d.ts.map +1 -1
  15. package/dist/server/service/database/oracle.service.js +16 -53
  16. package/dist/server/service/database/oracle.service.js.map +1 -1
  17. package/dist/server/service/database/oracle.service.ts +23 -56
  18. package/dist/server/service/database/postgres.service.d.ts.map +1 -1
  19. package/dist/server/service/database/postgres.service.js +15 -53
  20. package/dist/server/service/database/postgres.service.js.map +1 -1
  21. package/dist/server/service/database/postgres.service.ts +22 -57
  22. package/dist/server/service/database/sql-type.helper.d.ts +28 -0
  23. package/dist/server/service/database/sql-type.helper.d.ts.map +1 -0
  24. package/dist/server/service/database/sql-type.helper.js +151 -0
  25. package/dist/server/service/database/sql-type.helper.js.map +1 -0
  26. package/dist/server/service/database/sql-type.helper.ts +157 -0
  27. package/dist/server/service/database/sqlite.service.d.ts.map +1 -1
  28. package/dist/server/service/database/sqlite.service.js +58 -67
  29. package/dist/server/service/database/sqlite.service.js.map +1 -1
  30. package/dist/server/service/database/sqlite.service.ts +72 -72
  31. package/package.json +1 -1
@@ -870,67 +870,76 @@ to {
870
870
  }
871
871
  }
872
872
 
873
- .section-title[data-v-0d3b1052] {
873
+ .section-title[data-v-b80d5611] {
874
874
  color: var(--db-text-body);
875
875
  font-weight: 600;
876
876
  border-bottom: 2px solid var(--db-border-soft);
877
877
  padding-bottom: 0.5rem;
878
878
  margin-bottom: 1rem;
879
879
  }
880
- .sql-preview[data-v-0d3b1052] {
881
- font-family: 'Courier New', monospace;
880
+ .sql-preview[data-v-b80d5611] {
881
+ font-family: 'Courier New', Consolas, monospace;
882
882
  font-size: 0.875rem;
883
+ line-height: 1.5;
883
884
  max-height: 200px;
884
885
  overflow-y: auto;
885
- border: 1px solid var(--db-border-lighter);
886
+ margin: 0;
887
+ padding: 0.75rem;
888
+ border-radius: var(--db-radius-sm);
889
+ /* 深色代码块:与全局 pre / SQL 编辑器一致,跟随主题令牌,不使用 Bootstrap bg-light */
890
+ background-color: var(--db-code-bg);
891
+ color: var(--db-code-fg);
892
+ border: 1px solid var(--db-border);
893
+ white-space: pre-wrap;
894
+ word-break: break-all;
886
895
  }
887
- .table th[data-v-0d3b1052] {
896
+ .table th[data-v-b80d5611] {
888
897
  font-size: 0.875rem;
889
898
  font-weight: 600;
890
899
  }
891
- .table td[data-v-0d3b1052] {
900
+ .table td[data-v-b80d5611] {
892
901
  padding: 0!important;
893
902
  }
894
- .table .form-control[data-v-0d3b1052], .table .form-select[data-v-0d3b1052] {
903
+ .table .form-control[data-v-b80d5611], .table .form-select[data-v-b80d5611] {
895
904
  border: none;
896
905
  border-radius: 0;
897
906
  box-shadow: none;
898
907
  }
899
- .form-control-sm[data-v-0d3b1052], .form-select-sm[data-v-0d3b1052] {
908
+ .form-control-sm[data-v-b80d5611], .form-select-sm[data-v-b80d5611] {
900
909
  font-size: 0.875rem;
901
910
  }
902
- .modal-content[data-v-0d3b1052] {
911
+ .modal-content[data-v-b80d5611] {
903
912
  max-height: 90vh;
904
913
  overflow-y: auto;
905
914
  }
906
- .modal-body[data-v-0d3b1052] {
915
+ .modal-body[data-v-b80d5611] {
907
916
  max-height: calc(90vh - 120px);
908
917
  overflow-y: auto;
909
918
  }
910
- .input-group-sm .form-control[data-v-0d3b1052] {
919
+ .input-group-sm .form-control[data-v-b80d5611] {
911
920
  border-radius: 0;
912
921
  }
913
- .input-group-sm .form-control[data-v-0d3b1052]:first-child {
922
+ .input-group-sm .form-control[data-v-b80d5611]:first-child {
914
923
  border-top-left-radius: 0.25rem;
915
924
  border-bottom-left-radius: 0.25rem;
916
925
  }
917
- .input-group-sm .form-control[data-v-0d3b1052]:last-child {
926
+ .input-group-sm .form-control[data-v-b80d5611]:last-child {
918
927
  border-top-right-radius: 0.25rem;
919
928
  border-bottom-right-radius: 0.25rem;
920
929
  }
921
- .text-muted[data-v-0d3b1052] {
930
+ .text-muted[data-v-b80d5611] {
922
931
  color: var(--db-text-muted) !important;
923
932
  }
924
933
 
925
- .db-tools[data-v-c49117ce] {
934
+ .db-tools[data-v-a123948c] {
926
935
  background: var(--db-surface);
927
936
  border-radius: 8px;
928
937
  }
929
- .tools-header[data-v-c49117ce] {
938
+ .tools-header[data-v-a123948c] {
930
939
  padding: 6px 12px;
931
940
  border-bottom: 1px solid var(--db-border);
932
941
  }
933
- .tools-title[data-v-c49117ce] {
942
+ .tools-title[data-v-a123948c] {
934
943
  margin: 0;
935
944
  font-size: 0.875rem;
936
945
  font-weight: 600;
@@ -939,17 +948,17 @@ to {
939
948
  align-items: center;
940
949
  gap: 0.375rem;
941
950
  }
942
- .tools-content[data-v-c49117ce] {
951
+ .tools-content[data-v-a123948c] {
943
952
  padding: 12px;
944
953
  overflow-y: auto;
945
954
  }
946
- .tool-section[data-v-c49117ce] {
955
+ .tool-section[data-v-a123948c] {
947
956
  margin-bottom: 1rem;
948
957
  }
949
- .tool-section[data-v-c49117ce]:last-child {
958
+ .tool-section[data-v-a123948c]:last-child {
950
959
  margin-bottom: 0;
951
960
  }
952
- .section-title[data-v-c49117ce] {
961
+ .section-title[data-v-a123948c] {
953
962
  font-size: 0.75rem;
954
963
  font-weight: 600;
955
964
  letter-spacing: 0.04em;
@@ -960,42 +969,42 @@ to {
960
969
  align-items: center;
961
970
  gap: 0.375rem;
962
971
  }
963
- .tool-actions[data-v-c49117ce] {
972
+ .tool-actions[data-v-a123948c] {
964
973
  display: flex;
965
974
  flex-wrap: wrap;
966
975
  gap: 0.375rem;
967
976
  }
968
- .tool-actions .btn[data-v-c49117ce] {
977
+ .tool-actions .btn[data-v-a123948c] {
969
978
  min-width: 108px;
970
979
  display: flex;
971
980
  align-items: center;
972
981
  gap: 0.375rem;
973
982
  }
974
- .modal[data-v-c49117ce] {
983
+ .modal[data-v-a123948c] {
975
984
  background-color: rgba(0, 0, 0, 0.5);
976
985
  }
977
- .modal-dialog[data-v-c49117ce] {
986
+ .modal-dialog[data-v-a123948c] {
978
987
  max-width: 600px;
979
988
  }
980
- .modal-header[data-v-c49117ce] {
989
+ .modal-header[data-v-a123948c] {
981
990
  background: var(--db-light-color);
982
991
  border-bottom: 1px solid var(--db-gray-medium);
983
992
  }
984
- .modal-title[data-v-c49117ce] {
993
+ .modal-title[data-v-a123948c] {
985
994
  color: var(--db-dark-color);
986
995
  font-weight: 600;
987
996
  }
988
- .modal-footer[data-v-c49117ce] {
997
+ .modal-footer[data-v-a123948c] {
989
998
  background: var(--db-light-color);
990
999
  border-top: 1px solid var(--db-gray-medium);
991
1000
  }
992
1001
 
993
1002
  /* 工具组件区域 */
994
- .tool-component-area[data-v-c49117ce] {
1003
+ .tool-component-area[data-v-a123948c] {
995
1004
  border-top: 1px solid var(--db-gray-medium);
996
1005
  background: var(--db-light-color);
997
1006
  }
998
- .component-header[data-v-c49117ce] {
1007
+ .component-header[data-v-a123948c] {
999
1008
  display: flex;
1000
1009
  justify-content: space-between;
1001
1010
  align-items: center;
@@ -1003,7 +1012,7 @@ to {
1003
1012
  background: var(--db-bg-soft);
1004
1013
  border-bottom: 1px solid var(--db-border);
1005
1014
  }
1006
- .component-title[data-v-c49117ce] {
1015
+ .component-title[data-v-a123948c] {
1007
1016
  margin: 0;
1008
1017
  font-size: 0.875rem;
1009
1018
  font-weight: 600;
@@ -1012,20 +1021,20 @@ to {
1012
1021
  align-items: center;
1013
1022
  gap: 0.375rem;
1014
1023
  }
1015
- .tool-component[data-v-c49117ce] {
1024
+ .tool-component[data-v-a123948c] {
1016
1025
  padding: 12px;
1017
1026
  }
1018
- .sync-component[data-v-c49117ce] {
1027
+ .sync-component[data-v-a123948c] {
1019
1028
  background: var(--db-surface);
1020
1029
  border-radius: 4px;
1021
1030
  }
1022
1031
 
1023
1032
  /* 执行结果区域 */
1024
- .execution-results[data-v-c49117ce] {
1033
+ .execution-results[data-v-a123948c] {
1025
1034
  border-top: 1px solid var(--db-border);
1026
1035
  background: var(--db-bg-soft);
1027
1036
  }
1028
- .results-header[data-v-c49117ce] {
1037
+ .results-header[data-v-a123948c] {
1029
1038
  display: flex;
1030
1039
  justify-content: space-between;
1031
1040
  align-items: center;
@@ -1033,7 +1042,7 @@ to {
1033
1042
  background: var(--db-bg-soft);
1034
1043
  border-bottom: 1px solid var(--db-border);
1035
1044
  }
1036
- .results-title[data-v-c49117ce] {
1045
+ .results-title[data-v-a123948c] {
1037
1046
  margin: 0;
1038
1047
  font-size: 0.875rem;
1039
1048
  font-weight: 600;
@@ -1042,12 +1051,12 @@ to {
1042
1051
  align-items: center;
1043
1052
  gap: 0.375rem;
1044
1053
  }
1045
- .results-content[data-v-c49117ce] {
1054
+ .results-content[data-v-a123948c] {
1046
1055
  max-height: 400px;
1047
1056
  overflow-y: auto;
1048
1057
  padding: 8px;
1049
1058
  }
1050
- .no-results[data-v-c49117ce] {
1059
+ .no-results[data-v-a123948c] {
1051
1060
  display: flex;
1052
1061
  flex-direction: column;
1053
1062
  align-items: center;
@@ -1056,16 +1065,16 @@ to {
1056
1065
  padding: 32px 16px;
1057
1066
  color: var(--db-text-muted);
1058
1067
  }
1059
- .no-results i[data-v-c49117ce] {
1068
+ .no-results i[data-v-a123948c] {
1060
1069
  font-size: 1.5rem;
1061
1070
  margin-bottom: 0;
1062
1071
  opacity: 0.5;
1063
1072
  }
1064
- .no-results p[data-v-c49117ce] {
1073
+ .no-results p[data-v-a123948c] {
1065
1074
  margin: 0;
1066
1075
  font-size: 0.8125rem;
1067
1076
  }
1068
- .result-item[data-v-c49117ce] {
1077
+ .result-item[data-v-a123948c] {
1069
1078
  margin-bottom: 0.5rem;
1070
1079
  border: 1px solid var(--db-border);
1071
1080
  border-radius: 6px;
@@ -1073,19 +1082,19 @@ to {
1073
1082
  overflow: hidden;
1074
1083
  transition: box-shadow 0.2s;
1075
1084
  }
1076
- .result-item[data-v-c49117ce]:hover {
1085
+ .result-item[data-v-a123948c]:hover {
1077
1086
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
1078
1087
  }
1079
- .result-item.result-success[data-v-c49117ce] {
1088
+ .result-item.result-success[data-v-a123948c] {
1080
1089
  border-left: 4px solid #22c55e;
1081
1090
  }
1082
- .result-item.result-error[data-v-c49117ce] {
1091
+ .result-item.result-error[data-v-a123948c] {
1083
1092
  border-left: 4px solid #ef4444;
1084
1093
  }
1085
- .result-item.result-info[data-v-c49117ce] {
1094
+ .result-item.result-info[data-v-a123948c] {
1086
1095
  border-left: 4px solid #3b82f6;
1087
1096
  }
1088
- .result-header[data-v-c49117ce] {
1097
+ .result-header[data-v-a123948c] {
1089
1098
  display: flex;
1090
1099
  justify-content: space-between;
1091
1100
  align-items: center;
@@ -1094,92 +1103,92 @@ to {
1094
1103
  background: var(--db-surface);
1095
1104
  transition: background 0.2s;
1096
1105
  }
1097
- .result-header[data-v-c49117ce]:hover {
1106
+ .result-header[data-v-a123948c]:hover {
1098
1107
  background: var(--db-light-color);
1099
1108
  }
1100
- .result-title[data-v-c49117ce] {
1109
+ .result-title[data-v-a123948c] {
1101
1110
  display: flex;
1102
1111
  align-items: center;
1103
1112
  gap: 0.75rem;
1104
1113
  flex: 1;
1105
1114
  }
1106
- .result-title i[data-v-c49117ce] {
1115
+ .result-title i[data-v-a123948c] {
1107
1116
  font-size: 1.1rem;
1108
1117
  }
1109
- .operation-name[data-v-c49117ce] {
1118
+ .operation-name[data-v-a123948c] {
1110
1119
  font-weight: 600;
1111
1120
  color: var(--db-dark-color);
1112
1121
  font-size: 0.95rem;
1113
1122
  }
1114
- .operation-time[data-v-c49117ce] {
1123
+ .operation-time[data-v-a123948c] {
1115
1124
  color: var(--db-darker-color);
1116
1125
  font-size: 0.85rem;
1117
1126
  margin-left: auto;
1118
1127
  }
1119
- .toggle-icon[data-v-c49117ce] {
1128
+ .toggle-icon[data-v-a123948c] {
1120
1129
  transition: transform 0.2s;
1121
1130
  color: var(--db-gray-dark);
1122
1131
  font-size: 0.9rem;
1123
1132
  }
1124
- .toggle-icon.expanded[data-v-c49117ce] {
1133
+ .toggle-icon.expanded[data-v-a123948c] {
1125
1134
  transform: rotate(180deg);
1126
1135
  }
1127
- .result-body[data-v-c49117ce] {
1136
+ .result-body[data-v-a123948c] {
1128
1137
  padding: 1rem;
1129
1138
  background: var(--db-bg-soft4);
1130
1139
  border-top: 1px solid var(--db-gray-medium);
1131
1140
  }
1132
- .result-body pre[data-v-c49117ce] {
1141
+ .result-body pre[data-v-a123948c] {
1133
1142
  margin: 0;
1134
1143
  font-size: 0.85rem;
1135
1144
  line-height: 1.5;
1136
1145
  max-height: 300px;
1137
1146
  overflow: auto;
1138
1147
  }
1139
- .result-body code[data-v-c49117ce] {
1148
+ .result-body code[data-v-a123948c] {
1140
1149
  font-family: 'Fira Code', 'Consolas', 'Monaco', monospace;
1141
1150
  }
1142
1151
 
1143
1152
  /* JSON 语法高亮 - 不使用 scoped 以确保 v-html 内容能应用样式 */
1144
- [data-v-c49117ce] .json-key {
1145
- color: #d04255;
1153
+ [data-v-a123948c] .json-key {
1154
+ color: var(--db-json-key);
1146
1155
  font-weight: 500;
1147
1156
  }
1148
- [data-v-c49117ce] .json-string {
1149
- color: #22863a;
1157
+ [data-v-a123948c] .json-string {
1158
+ color: var(--db-json-string);
1150
1159
  }
1151
- [data-v-c49117ce] .json-number {
1152
- color: #005cc5;
1160
+ [data-v-a123948c] .json-number {
1161
+ color: var(--db-json-number);
1153
1162
  }
1154
- [data-v-c49117ce] .json-boolean {
1155
- color: #d73a49;
1163
+ [data-v-a123948c] .json-boolean {
1164
+ color: var(--db-json-boolean);
1156
1165
  }
1157
- [data-v-c49117ce] .json-null {
1158
- color: #6f42c1;
1166
+ [data-v-a123948c] .json-null {
1167
+ color: var(--db-json-null);
1159
1168
  }
1160
1169
 
1161
1170
  /* 滚动条样式 */
1162
- .results-content[data-v-c49117ce]::-webkit-scrollbar,
1163
- .result-body pre[data-v-c49117ce]::-webkit-scrollbar {
1171
+ .results-content[data-v-a123948c]::-webkit-scrollbar,
1172
+ .result-body pre[data-v-a123948c]::-webkit-scrollbar {
1164
1173
  width: 8px;
1165
1174
  height: 8px;
1166
1175
  }
1167
- .results-content[data-v-c49117ce]::-webkit-scrollbar-track,
1168
- .result-body pre[data-v-c49117ce]::-webkit-scrollbar-track {
1176
+ .results-content[data-v-a123948c]::-webkit-scrollbar-track,
1177
+ .result-body pre[data-v-a123948c]::-webkit-scrollbar-track {
1169
1178
  background: var(--db-gray-light);
1170
1179
  border-radius: 4px;
1171
1180
  }
1172
- .results-content[data-v-c49117ce]::-webkit-scrollbar-thumb,
1173
- .result-body pre[data-v-c49117ce]::-webkit-scrollbar-thumb {
1181
+ .results-content[data-v-a123948c]::-webkit-scrollbar-thumb,
1182
+ .result-body pre[data-v-a123948c]::-webkit-scrollbar-thumb {
1174
1183
  background: var(--db-gray-medium);
1175
1184
  border-radius: 4px;
1176
1185
  }
1177
- .results-content[data-v-c49117ce]::-webkit-scrollbar-thumb:hover,
1178
- .result-body pre[data-v-c49117ce]::-webkit-scrollbar-thumb:hover {
1186
+ .results-content[data-v-a123948c]::-webkit-scrollbar-thumb:hover,
1187
+ .result-body pre[data-v-a123948c]::-webkit-scrollbar-thumb:hover {
1179
1188
  background: var(--db-text-faint);
1180
1189
  }
1181
1190
 
1182
- .database-detail[data-v-822c95b7] {
1191
+ .database-detail[data-v-a6f90f39] {
1183
1192
  width: 100%;
1184
1193
  height: 100%;
1185
1194
  display: flex;
@@ -1187,7 +1196,7 @@ to {
1187
1196
  }
1188
1197
 
1189
1198
  /* SQL 面板直接铺满 tab 内容区(内边距由 .tab-content 统一提供) */
1190
- .sql-executor-section[data-v-822c95b7] {
1199
+ .sql-executor-section[data-v-a6f90f39] {
1191
1200
  margin: 0;
1192
1201
  padding: 0;
1193
1202
  background-color: transparent;
@@ -1198,7 +1207,7 @@ to {
1198
1207
  }
1199
1208
 
1200
1209
  /* 加载状态样式 */
1201
- .loading-state[data-v-822c95b7] {
1210
+ .loading-state[data-v-a6f90f39] {
1202
1211
  display: flex;
1203
1212
  flex-direction: column;
1204
1213
  align-items: center;
@@ -1206,31 +1215,31 @@ to {
1206
1215
  padding: 24px 0;
1207
1216
  color: var(--db-text-muted);
1208
1217
  }
1209
- .loading-state .spinner-border[data-v-822c95b7] {
1218
+ .loading-state .spinner-border[data-v-a6f90f39] {
1210
1219
  margin-bottom: 10px;
1211
1220
  color: var(--db-primary-color);
1212
1221
  }
1213
- .loading-state p[data-v-822c95b7] {
1222
+ .loading-state p[data-v-a6f90f39] {
1214
1223
  margin: 0;
1215
1224
  font-size: 12px;
1216
1225
  }
1217
- .database-header[data-v-822c95b7] {
1226
+ .database-header[data-v-a6f90f39] {
1218
1227
  padding: 8px 12px;
1219
1228
  background: var(--db-bg-soft2);
1220
1229
  border-bottom: 1px solid var(--db-border);
1221
1230
  }
1222
- .database-header-content[data-v-822c95b7] {
1231
+ .database-header-content[data-v-a6f90f39] {
1223
1232
  display: flex;
1224
1233
  justify-content: space-between;
1225
1234
  align-items: center;
1226
1235
  gap: 1rem;
1227
1236
  }
1228
- .database-info[data-v-822c95b7] {
1237
+ .database-info[data-v-a6f90f39] {
1229
1238
  display: flex;
1230
1239
  align-items: center;
1231
1240
  gap: 0.625rem;
1232
1241
  }
1233
- .database-icon[data-v-822c95b7] {
1242
+ .database-icon[data-v-a6f90f39] {
1234
1243
  width: 34px;
1235
1244
  height: 34px;
1236
1245
  background: var(--db-primary-bg);
@@ -1243,19 +1252,19 @@ to {
1243
1252
  font-size: 1rem;
1244
1253
  flex-shrink: 0;
1245
1254
  }
1246
- .database-meta h4[data-v-822c95b7] {
1255
+ .database-meta h4[data-v-a6f90f39] {
1247
1256
  margin: 0 0 0.25rem 0;
1248
1257
  font-size: 0.9375rem;
1249
1258
  color: var(--db-dark-color);
1250
1259
  font-weight: 600;
1251
1260
  }
1252
- .connection-info[data-v-822c95b7] {
1261
+ .connection-info[data-v-a6f90f39] {
1253
1262
  display: flex;
1254
1263
  align-items: center;
1255
1264
  gap: 0.375rem;
1256
1265
  font-size: 0.75rem;
1257
1266
  }
1258
- .connection-info .crumb[data-v-822c95b7] {
1267
+ .connection-info .crumb[data-v-a6f90f39] {
1259
1268
  display: inline-flex;
1260
1269
  align-items: center;
1261
1270
  padding: 0;
@@ -1263,20 +1272,20 @@ to {
1263
1272
  font-size: 0.75rem;
1264
1273
  transition: color 0.15s ease;
1265
1274
  }
1266
- .connection-info .crumb-link[data-v-822c95b7] {
1275
+ .connection-info .crumb-link[data-v-a6f90f39] {
1267
1276
  cursor: pointer;
1268
1277
  background: transparent;
1269
1278
  color: var(--db-primary-color);
1270
1279
  }
1271
- .connection-info .crumb-link[data-v-822c95b7]:hover {
1280
+ .connection-info .crumb-link[data-v-a6f90f39]:hover {
1272
1281
  color: var(--db-primary-light);
1273
1282
  text-decoration: underline;
1274
1283
  }
1275
- .connection-info .crumb-current[data-v-822c95b7] {
1284
+ .connection-info .crumb-current[data-v-a6f90f39] {
1276
1285
  font-weight: 500;
1277
1286
  color: var(--db-text-muted);
1278
1287
  }
1279
- .connection-name[data-v-822c95b7] {
1288
+ .connection-name[data-v-a6f90f39] {
1280
1289
  background: transparent;
1281
1290
  color: var(--db-primary-color);
1282
1291
  padding: 0;
@@ -1284,7 +1293,7 @@ to {
1284
1293
  font-size: 0.75rem;
1285
1294
  font-weight: 500;
1286
1295
  }
1287
- .connection-type[data-v-822c95b7] {
1296
+ .connection-type[data-v-a6f90f39] {
1288
1297
  background: var(--db-primary-bg);
1289
1298
  color: var(--db-primary-color);
1290
1299
  padding: 1px 7px;
@@ -1292,39 +1301,39 @@ to {
1292
1301
  font-size: 0.6875rem;
1293
1302
  font-weight: 500;
1294
1303
  }
1295
- .database-stats[data-v-822c95b7] {
1304
+ .database-stats[data-v-a6f90f39] {
1296
1305
  display: flex;
1297
1306
  gap: 1.5rem;
1298
1307
  }
1299
- .stat-item[data-v-822c95b7] {
1308
+ .stat-item[data-v-a6f90f39] {
1300
1309
  text-align: right;
1301
1310
  }
1302
- .stat-value[data-v-822c95b7] {
1311
+ .stat-value[data-v-a6f90f39] {
1303
1312
  font-size: 1rem;
1304
1313
  font-weight: 700;
1305
1314
  line-height: 1.2;
1306
1315
  color: var(--db-dark-color);
1307
1316
  margin-bottom: 0;
1308
1317
  }
1309
- .stat-label[data-v-822c95b7] {
1318
+ .stat-label[data-v-a6f90f39] {
1310
1319
  font-size: 0.6875rem;
1311
1320
  color: var(--db-text-muted);
1312
1321
  font-weight: 400;
1313
1322
  }
1314
- .database-tabs[data-v-822c95b7] {
1323
+ .database-tabs[data-v-a6f90f39] {
1315
1324
  flex: 1;
1316
1325
  overflow: hidden;
1317
1326
  display: flex;
1318
1327
  flex-direction: column;
1319
1328
  min-height: 0;
1320
1329
  }
1321
- .nav-tabs[data-v-822c95b7] {
1330
+ .nav-tabs[data-v-a6f90f39] {
1322
1331
  background: var(--db-gray-light);
1323
1332
  border-bottom: 1px solid var(--db-border);
1324
1333
  padding: 0 0.5rem;
1325
1334
  gap: 0;
1326
1335
  }
1327
- .nav-link[data-v-822c95b7] {
1336
+ .nav-link[data-v-a6f90f39] {
1328
1337
  border: none;
1329
1338
  background: transparent;
1330
1339
  color: var(--db-text-muted);
@@ -1333,35 +1342,35 @@ to {
1333
1342
  font-weight: 500;
1334
1343
  transition: color 0.15s ease, background-color 0.15s ease;
1335
1344
  }
1336
- .nav-link[data-v-822c95b7]:hover {
1345
+ .nav-link[data-v-a6f90f39]:hover {
1337
1346
  color: var(--db-dark-color);
1338
1347
  background: var(--db-bg-soft);
1339
1348
  }
1340
- .nav-link.active[data-v-822c95b7] {
1349
+ .nav-link.active[data-v-a6f90f39] {
1341
1350
  color: var(--db-primary-color);
1342
1351
  background: transparent;
1343
1352
  border-bottom: 2px solid var(--db-primary-color);
1344
1353
  }
1345
- .tab-content[data-v-822c95b7] {
1354
+ .tab-content[data-v-a6f90f39] {
1346
1355
  overflow-y: auto;
1347
1356
  flex: 1;
1348
1357
  display: flex;
1349
1358
  flex-direction: column;
1350
1359
  min-height: 0;
1351
1360
  }
1352
- .tab-panel[data-v-822c95b7] {
1361
+ .tab-panel[data-v-a6f90f39] {
1353
1362
  flex: 1;
1354
1363
  overflow-y: auto;
1355
1364
  display: flex;
1356
1365
  flex-direction: column;
1357
1366
  min-height: 0;
1358
1367
  }
1359
- .table-grid[data-v-822c95b7] {
1368
+ .table-grid[data-v-a6f90f39] {
1360
1369
  display: grid;
1361
1370
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1362
1371
  gap: 8px;
1363
1372
  }
1364
- .table-card[data-v-822c95b7] {
1373
+ .table-card[data-v-a6f90f39] {
1365
1374
  background: var(--db-bg-soft2);
1366
1375
  border: 1px solid var(--db-border);
1367
1376
  border-radius: 6px;
@@ -1369,19 +1378,19 @@ to {
1369
1378
  transition: border-color 0.15s ease, background-color 0.15s ease;
1370
1379
  cursor: pointer;
1371
1380
  }
1372
- .table-card[data-v-822c95b7]:hover {
1381
+ .table-card[data-v-a6f90f39]:hover {
1373
1382
  border-color: var(--db-primary-color);
1374
1383
  background: var(--db-bg-soft);
1375
1384
  box-shadow: none;
1376
1385
  }
1377
- .card-header[data-v-822c95b7] {
1386
+ .card-header[data-v-a6f90f39] {
1378
1387
  background: var(--db-bg-soft);
1379
1388
  padding: 6px 8px;
1380
1389
  display: flex;
1381
1390
  align-items: center;
1382
1391
  gap: 0.5rem;
1383
1392
  }
1384
- .table-icon[data-v-822c95b7] {
1393
+ .table-icon[data-v-a6f90f39] {
1385
1394
  width: 22px;
1386
1395
  height: 22px;
1387
1396
  font-size: 0.75rem;
@@ -1393,17 +1402,17 @@ to {
1393
1402
  color: var(--db-accent-color);
1394
1403
  flex-shrink: 0;
1395
1404
  }
1396
- .table-info[data-v-822c95b7] {
1405
+ .table-info[data-v-a6f90f39] {
1397
1406
  flex: 1;
1398
1407
  min-width: 0; /* 允许子元素截断 */
1399
1408
  }
1400
- .table-name-wrapper[data-v-822c95b7] {
1409
+ .table-name-wrapper[data-v-a6f90f39] {
1401
1410
  display: flex;
1402
1411
  align-items: center;
1403
1412
  gap: 0.375rem;
1404
1413
  margin-bottom: 0;
1405
1414
  }
1406
- .table-name[data-v-822c95b7] {
1415
+ .table-name[data-v-a6f90f39] {
1407
1416
  font-size: 0.8125rem;
1408
1417
  font-weight: 500;
1409
1418
  color: var(--db-dark-color);
@@ -1412,7 +1421,7 @@ to {
1412
1421
  text-overflow: ellipsis;
1413
1422
  min-width: 0;
1414
1423
  }
1415
- .table-engine[data-v-822c95b7] {
1424
+ .table-engine[data-v-a6f90f39] {
1416
1425
  font-size: 0.625rem;
1417
1426
  color: var(--db-primary-color);
1418
1427
  background: var(--db-primary-bg);
@@ -1420,7 +1429,7 @@ to {
1420
1429
  border-radius: 999px;
1421
1430
  flex-shrink: 0;
1422
1431
  }
1423
- .table-comment-header[data-v-822c95b7] {
1432
+ .table-comment-header[data-v-a6f90f39] {
1424
1433
  font-size: 0.6875rem;
1425
1434
  color: var(--db-text-muted);
1426
1435
  white-space: nowrap;
@@ -1429,14 +1438,14 @@ to {
1429
1438
  }
1430
1439
 
1431
1440
  /* 卡片正文:标签在上、数值在下,右下角编辑按钮(对齐 VSCode 数据库插件的表格卡片) */
1432
- .card-body[data-v-822c95b7] {
1441
+ .card-body[data-v-a6f90f39] {
1433
1442
  padding: 8px;
1434
1443
  display: flex;
1435
1444
  flex-direction: column;
1436
1445
  align-items: stretch;
1437
1446
  gap: 8px;
1438
1447
  }
1439
- .table-stats[data-v-822c95b7] {
1448
+ .table-stats[data-v-a6f90f39] {
1440
1449
  display: flex;
1441
1450
  align-items: flex-start;
1442
1451
  gap: 1.25rem;
@@ -1444,7 +1453,7 @@ to {
1444
1453
  flex-wrap: wrap;
1445
1454
  min-width: 0;
1446
1455
  }
1447
- .stat[data-v-822c95b7] {
1456
+ .stat[data-v-a6f90f39] {
1448
1457
  display: flex;
1449
1458
  flex-direction: column;
1450
1459
  align-items: flex-start;
@@ -1452,28 +1461,28 @@ to {
1452
1461
  }
1453
1462
 
1454
1463
  /* 卡片内的统计字号覆盖(不影响顶部数据库统计的大号数字) */
1455
- .table-card .stat-label[data-v-822c95b7] {
1464
+ .table-card .stat-label[data-v-a6f90f39] {
1456
1465
  font-size: 0.6875rem;
1457
1466
  color: var(--db-text-muted);
1458
1467
  }
1459
- .table-card .stat-value[data-v-822c95b7] {
1468
+ .table-card .stat-value[data-v-a6f90f39] {
1460
1469
  font-size: 0.9375rem;
1461
1470
  font-weight: 600;
1462
1471
  color: var(--db-dark-color);
1463
1472
  }
1464
- .table-comment[data-v-822c95b7] {
1473
+ .table-comment[data-v-a6f90f39] {
1465
1474
  font-size: 0.8125rem;
1466
1475
  color: var(--db-text-muted);
1467
1476
  font-style: italic;
1468
1477
  margin-bottom: 0.5rem;
1469
1478
  line-height: 1.4;
1470
1479
  }
1471
- .table-actions[data-v-822c95b7] {
1480
+ .table-actions[data-v-a6f90f39] {
1472
1481
  display: flex;
1473
1482
  gap: 0.375rem;
1474
1483
  flex-shrink: 0;
1475
1484
  }
1476
- .table-actions .btn[data-v-822c95b7] {
1485
+ .table-actions .btn[data-v-a6f90f39] {
1477
1486
  width: 22px;
1478
1487
  height: 22px;
1479
1488
  padding: 0;
@@ -1487,12 +1496,12 @@ to {
1487
1496
  background: transparent;
1488
1497
  color: var(--db-primary-color);
1489
1498
  }
1490
- .table-actions .btn[data-v-822c95b7]:hover {
1499
+ .table-actions .btn[data-v-a6f90f39]:hover {
1491
1500
  background: var(--db-primary-bg);
1492
1501
  color: var(--db-primary-color);
1493
1502
  border-color: var(--db-primary-color);
1494
1503
  }
1495
- .empty-state[data-v-822c95b7] {
1504
+ .empty-state[data-v-a6f90f39] {
1496
1505
  display: flex;
1497
1506
  flex-direction: column;
1498
1507
  align-items: center;
@@ -1503,39 +1512,39 @@ to {
1503
1512
  text-align: center;
1504
1513
  font-size: 0.8125rem;
1505
1514
  }
1506
- .empty-state i[data-v-822c95b7] {
1515
+ .empty-state i[data-v-a6f90f39] {
1507
1516
  font-size: 1.5rem;
1508
1517
  margin-bottom: 0;
1509
1518
  opacity: 0.5;
1510
1519
  }
1511
1520
 
1512
1521
  /* 视图和存储过程卡片样式 */
1513
- .views-grid[data-v-822c95b7], .procedures-grid[data-v-822c95b7] {
1522
+ .views-grid[data-v-a6f90f39], .procedures-grid[data-v-a6f90f39] {
1514
1523
  display: grid;
1515
1524
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
1516
1525
  gap: 8px;
1517
1526
  }
1518
- .view-card[data-v-822c95b7], .procedure-card[data-v-822c95b7] {
1527
+ .view-card[data-v-a6f90f39], .procedure-card[data-v-a6f90f39] {
1519
1528
  background: var(--db-bg-soft2);
1520
1529
  border: 1px solid var(--db-border);
1521
1530
  border-radius: 6px;
1522
1531
  overflow: hidden;
1523
1532
  transition: border-color 0.15s ease, background-color 0.15s ease;
1524
1533
  }
1525
- .view-card[data-v-822c95b7]:hover, .procedure-card[data-v-822c95b7]:hover {
1534
+ .view-card[data-v-a6f90f39]:hover, .procedure-card[data-v-a6f90f39]:hover {
1526
1535
  border-color: var(--db-primary-color);
1527
1536
  background: var(--db-bg-soft);
1528
1537
  box-shadow: none;
1529
1538
  transform: none;
1530
1539
  }
1531
- .view-card .card-header[data-v-822c95b7], .procedure-card .card-header[data-v-822c95b7] {
1540
+ .view-card .card-header[data-v-a6f90f39], .procedure-card .card-header[data-v-a6f90f39] {
1532
1541
  background: var(--db-bg-soft);
1533
1542
  padding: 8px 10px;
1534
1543
  display: flex;
1535
1544
  align-items: center;
1536
1545
  gap: 0.5rem;
1537
1546
  }
1538
- .view-icon[data-v-822c95b7], .procedure-icon[data-v-822c95b7] {
1547
+ .view-icon[data-v-a6f90f39], .procedure-icon[data-v-a6f90f39] {
1539
1548
  width: 26px;
1540
1549
  height: 26px;
1541
1550
  font-size: 0.8125rem;
@@ -1547,37 +1556,37 @@ to {
1547
1556
  color: var(--db-info-color);
1548
1557
  flex-shrink: 0;
1549
1558
  }
1550
- .procedure-icon[data-v-822c95b7] {
1559
+ .procedure-icon[data-v-a6f90f39] {
1551
1560
  background: var(--db-warning-bg);
1552
1561
  color: var(--db-warning-color);
1553
1562
  }
1554
- .view-name[data-v-822c95b7], .procedure-name[data-v-822c95b7] {
1563
+ .view-name[data-v-a6f90f39], .procedure-name[data-v-a6f90f39] {
1555
1564
  font-size: 0.8125rem;
1556
1565
  font-weight: 500;
1557
1566
  color: var(--db-dark-color);
1558
1567
  margin-bottom: 0.125rem;
1559
1568
  }
1560
- .view-comment[data-v-822c95b7], .procedure-comment[data-v-822c95b7] {
1569
+ .view-comment[data-v-a6f90f39], .procedure-comment[data-v-a6f90f39] {
1561
1570
  font-size: 0.6875rem;
1562
1571
  color: var(--db-text-muted);
1563
1572
  margin-bottom: 0.375rem;
1564
1573
  line-height: 1.4;
1565
1574
  }
1566
- .procedure-type[data-v-822c95b7] {
1575
+ .procedure-type[data-v-a6f90f39] {
1567
1576
  display: flex;
1568
1577
  gap: 0.25rem;
1569
1578
  flex-wrap: wrap;
1570
1579
  }
1571
- .view-card .card-body[data-v-822c95b7], .procedure-card .card-body[data-v-822c95b7] {
1580
+ .view-card .card-body[data-v-a6f90f39], .procedure-card .card-body[data-v-a6f90f39] {
1572
1581
  padding: 8px 10px;
1573
1582
  }
1574
- .view-actions[data-v-822c95b7], .procedure-actions[data-v-822c95b7] {
1583
+ .view-actions[data-v-a6f90f39], .procedure-actions[data-v-a6f90f39] {
1575
1584
  display: flex;
1576
1585
  gap: 0.375rem;
1577
1586
  }
1578
1587
 
1579
1588
  /* 操作栏:无底色无边框,只是一行工具按钮(对齐 VSCode 插件的 Create Table / Refresh) */
1580
- .views-actions[data-v-822c95b7], .procedures-actions[data-v-822c95b7], .tables-actions[data-v-822c95b7] {
1589
+ .views-actions[data-v-a6f90f39], .procedures-actions[data-v-a6f90f39], .tables-actions[data-v-a6f90f39] {
1581
1590
  display: flex;
1582
1591
  gap: 0.375rem;
1583
1592
  margin-bottom: 10px;
@@ -1587,27 +1596,27 @@ to {
1587
1596
  }
1588
1597
 
1589
1598
  /* 模态框样式 */
1590
- .modal-dialog[data-v-822c95b7] {
1599
+ .modal-dialog[data-v-a6f90f39] {
1591
1600
  margin-top: 10vh;
1592
1601
  }
1593
- .modal-content[data-v-822c95b7] {
1602
+ .modal-content[data-v-a6f90f39] {
1594
1603
  border-radius: 12px;
1595
1604
  border: none;
1596
1605
  box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
1597
1606
  }
1598
- .modal-header[data-v-822c95b7] {
1607
+ .modal-header[data-v-a6f90f39] {
1599
1608
  border-bottom: 1px solid var(--db-gray-medium);
1600
1609
  padding: 1rem 1.5rem;
1601
1610
  }
1602
- .modal-title[data-v-822c95b7] {
1611
+ .modal-title[data-v-a6f90f39] {
1603
1612
  margin: 0;
1604
1613
  font-weight: 600;
1605
1614
  color: var(--db-dark-color);
1606
1615
  }
1607
- .modal-body[data-v-822c95b7] {
1616
+ .modal-body[data-v-a6f90f39] {
1608
1617
  padding: 1.5rem;
1609
1618
  }
1610
- .modal-footer[data-v-822c95b7] {
1619
+ .modal-footer[data-v-a6f90f39] {
1611
1620
  border-top: 1px solid var(--db-gray-medium);
1612
1621
  padding: 1rem 1.5rem;
1613
1622
  display: flex;