fdb2 1.0.8 → 1.0.10

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 (235) hide show
  1. package/.dockerignore +21 -21
  2. package/.editorconfig +11 -11
  3. package/.eslintrc.cjs +14 -14
  4. package/.eslintrc.json +7 -7
  5. package/.prettierrc.js +3 -3
  6. package/.tpl.env +21 -21
  7. package/.vscodeignore +45 -45
  8. package/README.md +312 -312
  9. package/bin/build.sh +28 -28
  10. package/bin/deploy.sh +8 -8
  11. package/bin/dev.sh +10 -10
  12. package/bin/docker/dev-docker-compose.yml +43 -43
  13. package/bin/docker/dev.Dockerfile +24 -24
  14. package/bin/docker/prod-docker-compose.yml +17 -17
  15. package/bin/docker/prod.Dockerfile +29 -29
  16. package/bin/fdb2.js +220 -220
  17. package/dist/package.json +29 -29
  18. package/dist/pnpm-lock.yaml +1042 -354
  19. package/dist/public/explorer.css +1464 -1437
  20. package/dist/public/explorer.js +759 -223
  21. package/dist/public/index.css +1026 -1026
  22. package/dist/public/index.js +15 -9
  23. package/dist/public/layout.css +221 -221
  24. package/dist/public/layout.js +1 -1
  25. package/dist/public/vue.js +8 -2
  26. package/dist/scripts/preinstall.js +112 -112
  27. package/dist/server/index.d.ts.map +1 -1
  28. package/dist/server/index.js +8 -0
  29. package/dist/server/index.js.map +1 -1
  30. package/dist/server/index.ts +680 -671
  31. package/dist/server/model/connection.entity.ts +65 -65
  32. package/dist/server/model/database.entity.ts +245 -245
  33. package/dist/server/service/connection.service.d.ts +6 -1
  34. package/dist/server/service/connection.service.d.ts.map +1 -1
  35. package/dist/server/service/connection.service.js +18 -1
  36. package/dist/server/service/connection.service.js.map +1 -1
  37. package/dist/server/service/connection.service.ts +358 -341
  38. package/dist/server/service/database/base.service.d.ts +27 -0
  39. package/dist/server/service/database/base.service.d.ts.map +1 -1
  40. package/dist/server/service/database/base.service.js +17 -0
  41. package/dist/server/service/database/base.service.js.map +1 -1
  42. package/dist/server/service/database/base.service.ts +406 -367
  43. package/dist/server/service/database/cockroachdb.service.d.ts +16 -0
  44. package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -1
  45. package/dist/server/service/database/cockroachdb.service.js +220 -154
  46. package/dist/server/service/database/cockroachdb.service.js.map +1 -1
  47. package/dist/server/service/database/cockroachdb.service.ts +871 -782
  48. package/dist/server/service/database/database.service.d.ts +4 -0
  49. package/dist/server/service/database/database.service.d.ts.map +1 -1
  50. package/dist/server/service/database/database.service.js +123 -0
  51. package/dist/server/service/database/database.service.js.map +1 -1
  52. package/dist/server/service/database/database.service.ts +775 -638
  53. package/dist/server/service/database/index.ts +6 -6
  54. package/dist/server/service/database/mongodb.service.d.ts +16 -0
  55. package/dist/server/service/database/mongodb.service.d.ts.map +1 -1
  56. package/dist/server/service/database/mongodb.service.js +35 -0
  57. package/dist/server/service/database/mongodb.service.js.map +1 -1
  58. package/dist/server/service/database/mongodb.service.ts +39 -1
  59. package/dist/server/service/database/mssql.service.d.ts +16 -0
  60. package/dist/server/service/database/mssql.service.d.ts.map +1 -1
  61. package/dist/server/service/database/mssql.service.js +168 -96
  62. package/dist/server/service/database/mssql.service.js.map +1 -1
  63. package/dist/server/service/database/mssql.service.ts +931 -840
  64. package/dist/server/service/database/mysql.service.d.ts +16 -0
  65. package/dist/server/service/database/mysql.service.d.ts.map +1 -1
  66. package/dist/server/service/database/mysql.service.js +189 -80
  67. package/dist/server/service/database/mysql.service.js.map +1 -1
  68. package/dist/server/service/database/mysql.service.ts +1025 -890
  69. package/dist/server/service/database/oracle.service.d.ts +16 -0
  70. package/dist/server/service/database/oracle.service.d.ts.map +1 -1
  71. package/dist/server/service/database/oracle.service.js +182 -120
  72. package/dist/server/service/database/oracle.service.js.map +1 -1
  73. package/dist/server/service/database/oracle.service.ts +1035 -959
  74. package/dist/server/service/database/postgres.service.d.ts +16 -0
  75. package/dist/server/service/database/postgres.service.d.ts.map +1 -1
  76. package/dist/server/service/database/postgres.service.js +154 -88
  77. package/dist/server/service/database/postgres.service.js.map +1 -1
  78. package/dist/server/service/database/postgres.service.ts +960 -871
  79. package/dist/server/service/database/sap.service.d.ts +16 -0
  80. package/dist/server/service/database/sap.service.d.ts.map +1 -1
  81. package/dist/server/service/database/sap.service.js +66 -0
  82. package/dist/server/service/database/sap.service.js.map +1 -1
  83. package/dist/server/service/database/sap.service.ts +89 -0
  84. package/dist/server/service/database/sqlite.service.d.ts +17 -1
  85. package/dist/server/service/database/sqlite.service.d.ts.map +1 -1
  86. package/dist/server/service/database/sqlite.service.js +78 -19
  87. package/dist/server/service/database/sqlite.service.js.map +1 -1
  88. package/dist/server/service/database/sqlite.service.ts +787 -708
  89. package/dist/server/service/session.service.ts +158 -158
  90. package/dist/view/index.html +38 -38
  91. package/env.d.ts +1 -1
  92. package/package.json +7 -2
  93. package/packages/vscode/.vscodeignore +44 -44
  94. package/packages/vscode/README.md +62 -62
  95. package/packages/vscode/out/database-services/cockroachdb.service.js +154 -154
  96. package/packages/vscode/out/database-services/mssql.service.js +96 -96
  97. package/packages/vscode/out/database-services/mysql.service.js +80 -80
  98. package/packages/vscode/out/database-services/oracle.service.js +120 -120
  99. package/packages/vscode/out/database-services/postgres.service.js +88 -88
  100. package/packages/vscode/out/database-services/sqlite.service.js +18 -18
  101. package/packages/vscode/out/provider/WebViewProvider.js +32 -32
  102. package/packages/vscode/package.json +142 -142
  103. package/packages/vscode/resources/icon.svg +5 -5
  104. package/packages/vscode/resources/webview/connection.css +41 -41
  105. package/packages/vscode/resources/webview/database.css +163 -163
  106. package/packages/vscode/resources/webview/index.html +9 -9
  107. package/packages/vscode/resources/webview/modules/header.tpl +13 -13
  108. package/packages/vscode/resources/webview/modules/initial_state.tpl +54 -54
  109. package/packages/vscode/resources/webview/query.css +104 -104
  110. package/packages/vscode/src/database-services/base.service.ts +362 -362
  111. package/packages/vscode/src/database-services/cockroachdb.service.ts +659 -659
  112. package/packages/vscode/src/database-services/connection.service.ts +340 -340
  113. package/packages/vscode/src/database-services/database.service.ts +629 -629
  114. package/packages/vscode/src/database-services/index.ts +6 -6
  115. package/packages/vscode/src/database-services/model/connection.entity.ts +65 -65
  116. package/packages/vscode/src/database-services/model/database.entity.ts +245 -245
  117. package/packages/vscode/src/database-services/mssql.service.ts +722 -722
  118. package/packages/vscode/src/database-services/mysql.service.ts +760 -760
  119. package/packages/vscode/src/database-services/oracle.service.ts +831 -831
  120. package/packages/vscode/src/database-services/postgres.service.ts +740 -740
  121. package/packages/vscode/src/database-services/sqlite.service.ts +558 -558
  122. package/packages/vscode/src/extension.ts +76 -76
  123. package/packages/vscode/src/provider/DatabaseTreeProvider.ts +167 -167
  124. package/packages/vscode/src/provider/WebViewProvider.ts +277 -277
  125. package/packages/vscode/src/service/DatabaseServiceBridge.ts +414 -414
  126. package/packages/vscode/src/typings/connection.ts +90 -90
  127. package/packages/vscode/tsconfig.json +21 -21
  128. package/public/index.html +9 -9
  129. package/public/modules/header.tpl +13 -13
  130. package/public/modules/initial_state.tpl +54 -54
  131. package/scripts/preinstall.js +112 -112
  132. package/server/index.ts +680 -671
  133. package/server/model/connection.entity.ts +65 -65
  134. package/server/model/database.entity.ts +245 -245
  135. package/server/service/connection.service.ts +358 -341
  136. package/server/service/database/base.service.ts +406 -367
  137. package/server/service/database/cockroachdb.service.ts +871 -782
  138. package/server/service/database/database.service.ts +775 -638
  139. package/server/service/database/index.ts +6 -6
  140. package/server/service/database/mongodb.service.ts +39 -1
  141. package/server/service/database/mssql.service.ts +931 -840
  142. package/server/service/database/mysql.service.ts +1025 -890
  143. package/server/service/database/oracle.service.ts +1035 -959
  144. package/server/service/database/postgres.service.ts +960 -871
  145. package/server/service/database/sap.service.ts +89 -0
  146. package/server/service/database/sqlite.service.ts +787 -708
  147. package/server/service/session.service.ts +158 -158
  148. package/server/tsconfig.json +20 -20
  149. package/server.js +149 -149
  150. package/server.pid +1 -0
  151. package/src/adapter/ajax.ts +135 -135
  152. package/src/assets/base.css +1 -1
  153. package/src/assets/database.css +949 -949
  154. package/src/assets/images/svg/illustrations/illustration-1.svg +1 -1
  155. package/src/assets/images/svg/illustrations/illustration-2.svg +2 -2
  156. package/src/assets/images/svg/illustrations/illustration-3.svg +50 -50
  157. package/src/assets/images/svg/illustrations/illustration-4.svg +1 -1
  158. package/src/assets/images/svg/illustrations/illustration-5.svg +73 -73
  159. package/src/assets/images/svg/illustrations/illustration-6.svg +89 -89
  160. package/src/assets/images/svg/illustrations/illustration-7.svg +39 -39
  161. package/src/assets/images/svg/separators/curve-2.svg +3 -3
  162. package/src/assets/images/svg/separators/curve.svg +3 -3
  163. package/src/assets/images/svg/separators/line.svg +3 -3
  164. package/src/assets/logo.svg +73 -73
  165. package/src/assets/main.css +1 -1
  166. package/src/base/config.ts +20 -20
  167. package/src/base/detect.ts +134 -134
  168. package/src/base/entity.ts +92 -92
  169. package/src/base/eventBus.ts +36 -36
  170. package/src/components/connection-editor/index.vue +588 -588
  171. package/src/components/dataGrid/index.vue +104 -104
  172. package/src/components/dataGrid/pagination.vue +105 -105
  173. package/src/components/loading/index.vue +42 -42
  174. package/src/components/modal/index.ts +180 -180
  175. package/src/components/modal/index.vue +560 -560
  176. package/src/components/toast/index.ts +43 -43
  177. package/src/components/toast/toast.vue +57 -57
  178. package/src/components/user/name.vue +103 -103
  179. package/src/components/user/selector.vue +416 -416
  180. package/src/domain/SysConfig.ts +74 -74
  181. package/src/platform/App.vue +7 -7
  182. package/src/platform/database/components/connection-detail.vue +1153 -1154
  183. package/src/platform/database/components/data-editor.vue +477 -477
  184. package/src/platform/database/components/database-detail.vue +1173 -1172
  185. package/src/platform/database/components/database-monitor.vue +1085 -1085
  186. package/src/platform/database/components/db-tools.vue +1264 -816
  187. package/src/platform/database/components/query-history.vue +1348 -1348
  188. package/src/platform/database/components/sql-executor.vue +737 -737
  189. package/src/platform/database/components/sql-query-editor.vue +1045 -1045
  190. package/src/platform/database/components/table-detail.vue +1375 -1376
  191. package/src/platform/database/components/table-editor.vue +916 -916
  192. package/src/platform/database/explorer.vue +1839 -1839
  193. package/src/platform/database/index.vue +1192 -1192
  194. package/src/platform/database/layout.vue +366 -366
  195. package/src/platform/database/router.ts +36 -36
  196. package/src/platform/database/styles/common.scss +601 -601
  197. package/src/platform/database/types/common.ts +444 -444
  198. package/src/platform/database/utils/export.ts +231 -231
  199. package/src/platform/database/utils/helpers.ts +436 -436
  200. package/src/platform/index.ts +32 -32
  201. package/src/platform/router.ts +40 -40
  202. package/src/platform/vscode/bridge.ts +121 -121
  203. package/src/platform/vscode/components/ConnectionPanel.vue +272 -272
  204. package/src/platform/vscode/components/DatabasePanel.vue +532 -532
  205. package/src/platform/vscode/components/QueryPanel.vue +371 -371
  206. package/src/platform/vscode/entry/connection.ts +13 -13
  207. package/src/platform/vscode/entry/database.ts +13 -13
  208. package/src/platform/vscode/entry/query.ts +13 -13
  209. package/src/platform/vscode/index.ts +5 -5
  210. package/src/service/base.ts +133 -127
  211. package/src/service/database.ts +505 -495
  212. package/src/service/login.ts +120 -120
  213. package/src/shims-vue.d.ts +6 -6
  214. package/src/stores/connection.ts +266 -266
  215. package/src/stores/session.ts +87 -87
  216. package/src/typings/database-types.ts +412 -412
  217. package/src/typings/database.ts +363 -363
  218. package/src/typings/global.d.ts +58 -58
  219. package/src/typings/pinia.d.ts +7 -7
  220. package/src/utils/clipboard.ts +29 -29
  221. package/src/utils/database-types.ts +242 -242
  222. package/src/utils/modal.ts +123 -123
  223. package/src/utils/request.ts +55 -55
  224. package/src/utils/sleep.ts +3 -3
  225. package/src/utils/toast.ts +73 -73
  226. package/src/utils/util.ts +171 -171
  227. package/src/utils/xlsx.ts +228 -228
  228. package/tsconfig.json +33 -33
  229. package/view/index.html +9 -9
  230. package/view/modules/header.tpl +13 -13
  231. package/view/modules/initial_state.tpl +19 -19
  232. package/vite.config.ts +424 -424
  233. package/vite.config.vscode.ts +47 -47
  234. package/fdb2.server.pid +0 -1
  235. package/server/backups/db_ai_breakout_2026-03-11T08-38-48-677Z.sql +0 -0
@@ -1,4 +1,4 @@
1
- import { s as defineComponent, w as watch, o as openBlock, v as createElementBlock, F as Fragment, J as createVNode, N as withCtx, a as ref, z as createBaseVNode, L as withModifiers, H as createTextVNode, O as withDirectives, P as vModelText, x as renderList, A as toDisplayString, Q as vModelSelect, B as createCommentVNode, R as vModelCheckbox, G as onMounted, y as normalizeClass, S as vShow, l as computed, T as useRouter, K as normalizeStyle, n as nextTick, U as withKeys, c as createBlock, V as useRoute } from "./vue.js";
1
+ import { s as defineComponent, w as watch, o as openBlock, v as createElementBlock, F as Fragment, J as createVNode, N as withCtx, a as ref, z as createBaseVNode, L as withModifiers, H as createTextVNode, O as withDirectives, P as vModelText, x as renderList, A as toDisplayString, Q as vModelSelect, B as createCommentVNode, R as vModelCheckbox, G as onMounted, y as normalizeClass, S as vShow, l as computed, T as useRouter, U as createStaticVNode, K as normalizeStyle, n as nextTick, V as withKeys, c as createBlock, W as useRoute } from "./vue.js";
2
2
  import { r as request, M as Modal, _ as _export_sfc, s as showAlert, a as showConfirm, g as getModalInstance, d as defineStore, t as toast, c as commonjsGlobal, T as Toast } from "./index.js";
3
3
  import "./bootstrap.js";
4
4
  class ConnectionService {
@@ -352,6 +352,15 @@ class DatabaseService {
352
352
  database: databaseName
353
353
  });
354
354
  }
355
+ /**
356
+ * 同步表结构和数据到其他数据库
357
+ */
358
+ async syncTable(connectionId, syncConfig) {
359
+ return request("/api/database/syncTable", {
360
+ id: connectionId,
361
+ syncConfig
362
+ });
363
+ }
355
364
  }
356
365
  const _hoisted_1$8 = { class: "form-section" };
357
366
  const _hoisted_2$8 = { class: "section-content" };
@@ -377,16 +386,16 @@ const _hoisted_15$8 = { class: "section-content" };
377
386
  const _hoisted_16$7 = { class: "form-grid" };
378
387
  const _hoisted_17$7 = { class: "form-group-modern" };
379
388
  const _hoisted_18$7 = { class: "form-section" };
380
- const _hoisted_19$6 = { class: "section-content" };
381
- const _hoisted_20$6 = { class: "form-grid" };
382
- const _hoisted_21$6 = { class: "form-group-modern" };
383
- const _hoisted_22$6 = { class: "form-group-modern" };
384
- const _hoisted_23$6 = { class: "form-section" };
385
- const _hoisted_24$6 = { class: "section-content" };
386
- const _hoisted_25$6 = { class: "form-group-modern" };
387
- const _hoisted_26$6 = { class: "form-check-modern" };
388
- const _hoisted_27$6 = { class: "error-content" };
389
- const _hoisted_28$6 = { class: "error-message" };
389
+ const _hoisted_19$7 = { class: "section-content" };
390
+ const _hoisted_20$7 = { class: "form-grid" };
391
+ const _hoisted_21$7 = { class: "form-group-modern" };
392
+ const _hoisted_22$7 = { class: "form-group-modern" };
393
+ const _hoisted_23$7 = { class: "form-section" };
394
+ const _hoisted_24$7 = { class: "section-content" };
395
+ const _hoisted_25$7 = { class: "form-group-modern" };
396
+ const _hoisted_26$7 = { class: "form-check-modern" };
397
+ const _hoisted_27$7 = { class: "error-content" };
398
+ const _hoisted_28$7 = { class: "error-message" };
390
399
  const _sfc_main$8 = /* @__PURE__ */ defineComponent({
391
400
  __name: "index",
392
401
  props: {
@@ -796,9 +805,9 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
796
805
  ]),
797
806
  createBaseVNode("h3", { class: "section-title" }, "认证信息")
798
807
  ], -1)),
799
- createBaseVNode("div", _hoisted_19$6, [
800
- createBaseVNode("div", _hoisted_20$6, [
801
- createBaseVNode("div", _hoisted_21$6, [
808
+ createBaseVNode("div", _hoisted_19$7, [
809
+ createBaseVNode("div", _hoisted_20$7, [
810
+ createBaseVNode("div", _hoisted_21$7, [
802
811
  _cache[22] || (_cache[22] = createBaseVNode("label", { class: "form-label-modern" }, [
803
812
  createBaseVNode("i", { class: "bi bi-person me-2" }),
804
813
  createTextVNode("用户名 ")
@@ -812,7 +821,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
812
821
  [vModelText, connectionForm.value.username]
813
822
  ])
814
823
  ]),
815
- createBaseVNode("div", _hoisted_22$6, [
824
+ createBaseVNode("div", _hoisted_22$7, [
816
825
  _cache[23] || (_cache[23] = createBaseVNode("label", { class: "form-label-modern" }, [
817
826
  createBaseVNode("i", { class: "bi bi-key me-2" }),
818
827
  createTextVNode("密码 ")
@@ -829,20 +838,20 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
829
838
  ])
830
839
  ])
831
840
  ]),
832
- createBaseVNode("div", _hoisted_23$6, [
841
+ createBaseVNode("div", _hoisted_23$7, [
833
842
  _cache[27] || (_cache[27] = createBaseVNode("div", { class: "section-header" }, [
834
843
  createBaseVNode("div", { class: "section-icon" }, [
835
844
  createBaseVNode("i", { class: "bi bi-gear" })
836
845
  ]),
837
846
  createBaseVNode("h3", { class: "section-title" }, "其他选项")
838
847
  ], -1)),
839
- createBaseVNode("div", _hoisted_24$6, [
840
- createBaseVNode("div", _hoisted_25$6, [
848
+ createBaseVNode("div", _hoisted_24$7, [
849
+ createBaseVNode("div", _hoisted_25$7, [
841
850
  _cache[26] || (_cache[26] = createBaseVNode("label", { class: "form-label-modern" }, [
842
851
  createBaseVNode("i", { class: "bi bi-toggle-on me-2" }),
843
852
  createTextVNode("连接状态 ")
844
853
  ], -1)),
845
- createBaseVNode("div", _hoisted_26$6, [
854
+ createBaseVNode("div", _hoisted_26$7, [
846
855
  withDirectives(createBaseVNode("input", {
847
856
  class: "form-check-input-modern",
848
857
  type: "checkbox",
@@ -876,11 +885,11 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
876
885
  style: { maxWidth: "400px!important", width: "100%" }
877
886
  }, {
878
887
  default: withCtx(() => [
879
- createBaseVNode("div", _hoisted_27$6, [
888
+ createBaseVNode("div", _hoisted_27$7, [
880
889
  _cache[32] || (_cache[32] = createBaseVNode("div", { class: "error-icon" }, [
881
890
  createBaseVNode("i", { class: "bi bi-exclamation-triangle" })
882
891
  ], -1)),
883
- createBaseVNode("div", _hoisted_28$6, toDisplayString(errorMessage.value), 1)
892
+ createBaseVNode("div", _hoisted_28$7, toDisplayString(errorMessage.value), 1)
884
893
  ])
885
894
  ]),
886
895
  _: 1
@@ -889,7 +898,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
889
898
  };
890
899
  }
891
900
  });
892
- const ConnectionEditor = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-144c6980"]]);
901
+ const ConnectionEditor = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-60ee1360"]]);
893
902
  class ModalHelper {
894
903
  /**
895
904
  * 获取全局modal实例
@@ -44160,7 +44169,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
44160
44169
  };
44161
44170
  }
44162
44171
  });
44163
- const SqlExecutor = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-ac4aced1"]]);
44172
+ const SqlExecutor = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-82959a5b"]]);
44164
44173
  const _hoisted_1$6 = { class: "connection-detail" };
44165
44174
  const _hoisted_2$6 = { class: "connection-header" };
44166
44175
  const _hoisted_3$6 = { class: "connection-info" };
@@ -44182,68 +44191,68 @@ const _hoisted_15$6 = { class: "info-grid" };
44182
44191
  const _hoisted_16$6 = { class: "info-item" };
44183
44192
  const _hoisted_17$6 = { class: "info-value" };
44184
44193
  const _hoisted_18$6 = { class: "info-item" };
44185
- const _hoisted_19$5 = { class: "info-value" };
44186
- const _hoisted_20$5 = { class: "info-item" };
44187
- const _hoisted_21$5 = { class: "info-value" };
44188
- const _hoisted_22$5 = { class: "info-item" };
44189
- const _hoisted_23$5 = { class: "info-value" };
44190
- const _hoisted_24$5 = { class: "col-md-6" };
44191
- const _hoisted_25$5 = { class: "stats-grid" };
44192
- const _hoisted_26$5 = { class: "stat-item" };
44193
- const _hoisted_27$5 = { class: "stat-value" };
44194
- const _hoisted_28$5 = { class: "stat-item" };
44195
- const _hoisted_29$4 = { class: "stat-value" };
44196
- const _hoisted_30$4 = { class: "stat-item" };
44197
- const _hoisted_31$4 = { class: "stat-value" };
44198
- const _hoisted_32$4 = { class: "stat-item" };
44199
- const _hoisted_33$4 = { class: "stat-value" };
44200
- const _hoisted_34$4 = { class: "connection-tabs" };
44201
- const _hoisted_35$3 = { class: "nav nav-tabs" };
44202
- const _hoisted_36$3 = { class: "nav-item" };
44203
- const _hoisted_37$3 = { class: "badge bg-primary ms-1" };
44204
- const _hoisted_38$3 = { class: "nav-item" };
44205
- const _hoisted_39$3 = { class: "tab-content" };
44206
- const _hoisted_40$3 = { class: "tab-panel" };
44207
- const _hoisted_41$2 = { class: "databases-section" };
44208
- const _hoisted_42$2 = { class: "section-header" };
44209
- const _hoisted_43$2 = { class: "section-actions" };
44210
- const _hoisted_44$2 = { class: "search-box" };
44211
- const _hoisted_45$2 = ["disabled"];
44212
- const _hoisted_46$2 = {
44194
+ const _hoisted_19$6 = { class: "info-value" };
44195
+ const _hoisted_20$6 = { class: "info-item" };
44196
+ const _hoisted_21$6 = { class: "info-value" };
44197
+ const _hoisted_22$6 = { class: "info-item" };
44198
+ const _hoisted_23$6 = { class: "info-value" };
44199
+ const _hoisted_24$6 = { class: "col-md-6" };
44200
+ const _hoisted_25$6 = { class: "stats-grid" };
44201
+ const _hoisted_26$6 = { class: "stat-item" };
44202
+ const _hoisted_27$6 = { class: "stat-value" };
44203
+ const _hoisted_28$6 = { class: "stat-item" };
44204
+ const _hoisted_29$5 = { class: "stat-value" };
44205
+ const _hoisted_30$5 = { class: "stat-item" };
44206
+ const _hoisted_31$5 = { class: "stat-value" };
44207
+ const _hoisted_32$5 = { class: "stat-item" };
44208
+ const _hoisted_33$5 = { class: "stat-value" };
44209
+ const _hoisted_34$5 = { class: "connection-tabs" };
44210
+ const _hoisted_35$4 = { class: "nav nav-tabs" };
44211
+ const _hoisted_36$4 = { class: "nav-item" };
44212
+ const _hoisted_37$4 = { class: "badge bg-primary ms-1" };
44213
+ const _hoisted_38$4 = { class: "nav-item" };
44214
+ const _hoisted_39$4 = { class: "tab-content" };
44215
+ const _hoisted_40$4 = { class: "tab-panel" };
44216
+ const _hoisted_41$3 = { class: "databases-section" };
44217
+ const _hoisted_42$3 = { class: "section-header" };
44218
+ const _hoisted_43$3 = { class: "section-actions" };
44219
+ const _hoisted_44$3 = { class: "search-box" };
44220
+ const _hoisted_45$3 = ["disabled"];
44221
+ const _hoisted_46$3 = {
44213
44222
  key: 0,
44214
44223
  class: "spinner-border spinner-border-sm me-1"
44215
44224
  };
44216
- const _hoisted_47$2 = { class: "databases-list" };
44217
- const _hoisted_48$2 = {
44225
+ const _hoisted_47$3 = { class: "databases-list" };
44226
+ const _hoisted_48$3 = {
44218
44227
  key: 0,
44219
44228
  class: "loading-state"
44220
44229
  };
44221
- const _hoisted_49$2 = {
44230
+ const _hoisted_49$3 = {
44222
44231
  key: 1,
44223
44232
  class: "empty-state"
44224
44233
  };
44225
- const _hoisted_50$2 = {
44234
+ const _hoisted_50$3 = {
44226
44235
  key: 2,
44227
44236
  class: "databases-list-simple"
44228
44237
  };
44229
- const _hoisted_51$2 = ["onClick"];
44230
- const _hoisted_52$2 = { class: "database-item-name" };
44231
- const _hoisted_53$2 = { class: "database-item-actions" };
44232
- const _hoisted_54$2 = { class: "tab-panel" };
44233
- const _hoisted_55$2 = { class: "sql-section" };
44234
- const _hoisted_56$2 = { class: "sql-header" };
44235
- const _hoisted_57$2 = {
44238
+ const _hoisted_51$3 = ["onClick"];
44239
+ const _hoisted_52$3 = { class: "database-item-name" };
44240
+ const _hoisted_53$3 = { class: "database-item-actions" };
44241
+ const _hoisted_54$3 = { class: "tab-panel" };
44242
+ const _hoisted_55$3 = { class: "sql-section" };
44243
+ const _hoisted_56$3 = { class: "sql-header" };
44244
+ const _hoisted_57$3 = {
44236
44245
  key: 0,
44237
44246
  class: "sql-db-info"
44238
44247
  };
44239
- const _hoisted_58$2 = { class: "badge bg-info" };
44240
- const _hoisted_59$2 = {
44248
+ const _hoisted_58$3 = { class: "badge bg-info" };
44249
+ const _hoisted_59$3 = {
44241
44250
  key: 1,
44242
44251
  class: "modal fade show d-block",
44243
44252
  style: { "background": "rgba(0,0,0,0.5)" }
44244
44253
  };
44245
- const _hoisted_60$2 = { class: "modal-dialog" };
44246
- const _hoisted_61$2 = { class: "modal-content" };
44254
+ const _hoisted_60$3 = { class: "modal-dialog" };
44255
+ const _hoisted_61$3 = { class: "modal-content" };
44247
44256
  const _hoisted_62$2 = { class: "modal-header" };
44248
44257
  const _hoisted_63$2 = { class: "modal-body" };
44249
44258
  const _hoisted_64$2 = { class: "mb-3" };
@@ -44524,15 +44533,15 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44524
44533
  ]),
44525
44534
  createBaseVNode("div", _hoisted_18$6, [
44526
44535
  _cache[19] || (_cache[19] = createBaseVNode("label", { class: "info-label" }, "端口", -1)),
44527
- createBaseVNode("div", _hoisted_19$5, toDisplayString(__props.connection?.port), 1)
44536
+ createBaseVNode("div", _hoisted_19$6, toDisplayString(__props.connection?.port), 1)
44528
44537
  ]),
44529
- createBaseVNode("div", _hoisted_20$5, [
44538
+ createBaseVNode("div", _hoisted_20$6, [
44530
44539
  _cache[20] || (_cache[20] = createBaseVNode("label", { class: "info-label" }, "用户名", -1)),
44531
- createBaseVNode("div", _hoisted_21$5, toDisplayString(__props.connection?.username), 1)
44540
+ createBaseVNode("div", _hoisted_21$6, toDisplayString(__props.connection?.username), 1)
44532
44541
  ]),
44533
- createBaseVNode("div", _hoisted_22$5, [
44542
+ createBaseVNode("div", _hoisted_22$6, [
44534
44543
  _cache[21] || (_cache[21] = createBaseVNode("label", { class: "info-label" }, "数据库类型", -1)),
44535
- createBaseVNode("div", _hoisted_23$5, [
44544
+ createBaseVNode("div", _hoisted_23$6, [
44536
44545
  createBaseVNode("span", {
44537
44546
  class: normalizeClass(["db-type-badge", getDbLogoClass(__props.connection?.type)])
44538
44547
  }, toDisplayString(getDbTypeLabel(__props.connection?.type)), 3)
@@ -44540,26 +44549,26 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44540
44549
  ])
44541
44550
  ])
44542
44551
  ]),
44543
- createBaseVNode("div", _hoisted_24$5, [
44552
+ createBaseVNode("div", _hoisted_24$6, [
44544
44553
  _cache[27] || (_cache[27] = createBaseVNode("h6", { class: "section-title" }, [
44545
44554
  createBaseVNode("i", { class: "bi bi-bar-chart" }),
44546
44555
  createTextVNode(" 连接统计 ")
44547
44556
  ], -1)),
44548
- createBaseVNode("div", _hoisted_25$5, [
44549
- createBaseVNode("div", _hoisted_26$5, [
44550
- createBaseVNode("div", _hoisted_27$5, toDisplayString(connectionStats.value.databaseCount || 0), 1),
44557
+ createBaseVNode("div", _hoisted_25$6, [
44558
+ createBaseVNode("div", _hoisted_26$6, [
44559
+ createBaseVNode("div", _hoisted_27$6, toDisplayString(connectionStats.value.databaseCount || 0), 1),
44551
44560
  _cache[23] || (_cache[23] = createBaseVNode("div", { class: "stat-label" }, "数据库数量", -1))
44552
44561
  ]),
44553
- createBaseVNode("div", _hoisted_28$5, [
44554
- createBaseVNode("div", _hoisted_29$4, toDisplayString(connectionStats.value.tableCount || 0), 1),
44562
+ createBaseVNode("div", _hoisted_28$6, [
44563
+ createBaseVNode("div", _hoisted_29$5, toDisplayString(connectionStats.value.tableCount || 0), 1),
44555
44564
  _cache[24] || (_cache[24] = createBaseVNode("div", { class: "stat-label" }, "表总数", -1))
44556
44565
  ]),
44557
- createBaseVNode("div", _hoisted_30$4, [
44558
- createBaseVNode("div", _hoisted_31$4, toDisplayString(formatFileSize(connectionStats.value.totalSize || 0)), 1),
44566
+ createBaseVNode("div", _hoisted_30$5, [
44567
+ createBaseVNode("div", _hoisted_31$5, toDisplayString(formatFileSize(connectionStats.value.totalSize || 0)), 1),
44559
44568
  _cache[25] || (_cache[25] = createBaseVNode("div", { class: "stat-label" }, "总大小", -1))
44560
44569
  ]),
44561
- createBaseVNode("div", _hoisted_32$4, [
44562
- createBaseVNode("div", _hoisted_33$4, toDisplayString(connectionStats.value.lastConnected || "从未"), 1),
44570
+ createBaseVNode("div", _hoisted_32$5, [
44571
+ createBaseVNode("div", _hoisted_33$5, toDisplayString(connectionStats.value.lastConnected || "从未"), 1),
44563
44572
  _cache[26] || (_cache[26] = createBaseVNode("div", { class: "stat-label" }, "最后连接", -1))
44564
44573
  ])
44565
44574
  ])
@@ -44605,19 +44614,19 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44605
44614
  ])])
44606
44615
  ])
44607
44616
  ]),
44608
- createBaseVNode("div", _hoisted_34$4, [
44609
- createBaseVNode("ul", _hoisted_35$3, [
44610
- createBaseVNode("li", _hoisted_36$3, [
44617
+ createBaseVNode("div", _hoisted_34$5, [
44618
+ createBaseVNode("ul", _hoisted_35$4, [
44619
+ createBaseVNode("li", _hoisted_36$4, [
44611
44620
  createBaseVNode("button", {
44612
44621
  class: normalizeClass(["nav-link", { active: activeTab.value === "databases" }]),
44613
44622
  onClick: _cache[0] || (_cache[0] = ($event) => activeTab.value = "databases")
44614
44623
  }, [
44615
44624
  _cache[32] || (_cache[32] = createBaseVNode("i", { class: "bi bi-database-fill" }, null, -1)),
44616
44625
  _cache[33] || (_cache[33] = createTextVNode(" 数据库列表 ", -1)),
44617
- createBaseVNode("span", _hoisted_37$3, toDisplayString(databases.value.length), 1)
44626
+ createBaseVNode("span", _hoisted_37$4, toDisplayString(databases.value.length), 1)
44618
44627
  ], 2)
44619
44628
  ]),
44620
- createBaseVNode("li", _hoisted_38$3, [
44629
+ createBaseVNode("li", _hoisted_38$4, [
44621
44630
  createBaseVNode("button", {
44622
44631
  class: normalizeClass(["nav-link", { active: activeTab.value === "sql" }]),
44623
44632
  onClick: _cache[1] || (_cache[1] = ($event) => activeTab.value = "sql")
@@ -44627,12 +44636,12 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44627
44636
  ])], 2)
44628
44637
  ])
44629
44638
  ]),
44630
- createBaseVNode("div", _hoisted_39$3, [
44631
- withDirectives(createBaseVNode("div", _hoisted_40$3, [
44632
- createBaseVNode("div", _hoisted_41$2, [
44633
- createBaseVNode("div", _hoisted_42$2, [
44634
- createBaseVNode("div", _hoisted_43$2, [
44635
- createBaseVNode("div", _hoisted_44$2, [
44639
+ createBaseVNode("div", _hoisted_39$4, [
44640
+ withDirectives(createBaseVNode("div", _hoisted_40$4, [
44641
+ createBaseVNode("div", _hoisted_41$3, [
44642
+ createBaseVNode("div", _hoisted_42$3, [
44643
+ createBaseVNode("div", _hoisted_43$3, [
44644
+ createBaseVNode("div", _hoisted_44$3, [
44636
44645
  withDirectives(createBaseVNode("input", {
44637
44646
  type: "text",
44638
44647
  class: "form-control form-control-sm",
@@ -44648,17 +44657,17 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44648
44657
  onClick: loadDatabases,
44649
44658
  disabled: loadingDatabases.value
44650
44659
  }, [
44651
- loadingDatabases.value ? (openBlock(), createElementBlock("span", _hoisted_46$2)) : createCommentVNode("", true),
44660
+ loadingDatabases.value ? (openBlock(), createElementBlock("span", _hoisted_46$3)) : createCommentVNode("", true),
44652
44661
  _cache[35] || (_cache[35] = createBaseVNode("i", { class: "bi bi-arrow-clockwise" }, null, -1)),
44653
44662
  _cache[36] || (_cache[36] = createTextVNode(" 刷新 ", -1))
44654
- ], 8, _hoisted_45$2)
44663
+ ], 8, _hoisted_45$3)
44655
44664
  ])
44656
44665
  ]),
44657
- createBaseVNode("div", _hoisted_47$2, [
44658
- loadingDatabases.value ? (openBlock(), createElementBlock("div", _hoisted_48$2, [..._cache[37] || (_cache[37] = [
44666
+ createBaseVNode("div", _hoisted_47$3, [
44667
+ loadingDatabases.value ? (openBlock(), createElementBlock("div", _hoisted_48$3, [..._cache[37] || (_cache[37] = [
44659
44668
  createBaseVNode("div", { class: "spinner-border text-primary" }, null, -1),
44660
44669
  createBaseVNode("span", null, "加载数据库列表...", -1)
44661
- ])])) : filteredDatabases.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_49$2, [
44670
+ ])])) : filteredDatabases.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_49$3, [
44662
44671
  _cache[39] || (_cache[39] = createBaseVNode("i", { class: "bi bi-database" }, null, -1)),
44663
44672
  createBaseVNode("p", null, toDisplayString(searchKeyword.value ? "没有找到匹配的数据库" : "暂无数据库"), 1),
44664
44673
  createBaseVNode("button", {
@@ -44668,7 +44677,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44668
44677
  createBaseVNode("i", { class: "bi bi-plus" }, null, -1),
44669
44678
  createTextVNode(" 创建数据库 ", -1)
44670
44679
  ])])
44671
- ])) : (openBlock(), createElementBlock("div", _hoisted_50$2, [
44680
+ ])) : (openBlock(), createElementBlock("div", _hoisted_50$3, [
44672
44681
  (openBlock(true), createElementBlock(Fragment, null, renderList(filteredDatabases.value, (database) => {
44673
44682
  return openBlock(), createElementBlock("div", {
44674
44683
  key: database.name,
@@ -44678,8 +44687,8 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44678
44687
  _cache[41] || (_cache[41] = createBaseVNode("div", { class: "database-item-icon" }, [
44679
44688
  createBaseVNode("i", { class: "bi bi-database" })
44680
44689
  ], -1)),
44681
- createBaseVNode("div", _hoisted_52$2, toDisplayString(database.name), 1),
44682
- createBaseVNode("div", _hoisted_53$2, [
44690
+ createBaseVNode("div", _hoisted_52$3, toDisplayString(database.name), 1),
44691
+ createBaseVNode("div", _hoisted_53$3, [
44683
44692
  createBaseVNode("button", {
44684
44693
  class: "btn btn-sm btn-outline-secondary",
44685
44694
  onClick: _cache[3] || (_cache[3] = withModifiers(($event) => activeTab.value = "sql", ["stop"]))
@@ -44687,7 +44696,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44687
44696
  createBaseVNode("i", { class: "bi bi-terminal" }, null, -1)
44688
44697
  ])])
44689
44698
  ])
44690
- ], 8, _hoisted_51$2);
44699
+ ], 8, _hoisted_51$3);
44691
44700
  }), 128))
44692
44701
  ]))
44693
44702
  ])
@@ -44695,15 +44704,15 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44695
44704
  ], 512), [
44696
44705
  [vShow, activeTab.value === "databases"]
44697
44706
  ]),
44698
- withDirectives(createBaseVNode("div", _hoisted_54$2, [
44699
- createBaseVNode("div", _hoisted_55$2, [
44700
- createBaseVNode("div", _hoisted_56$2, [
44707
+ withDirectives(createBaseVNode("div", _hoisted_54$3, [
44708
+ createBaseVNode("div", _hoisted_55$3, [
44709
+ createBaseVNode("div", _hoisted_56$3, [
44701
44710
  _cache[42] || (_cache[42] = createBaseVNode("h6", { class: "sql-title" }, [
44702
44711
  createBaseVNode("i", { class: "bi bi-terminal" }),
44703
44712
  createTextVNode(" SQL查询 ")
44704
44713
  ], -1)),
44705
- props.connection ? (openBlock(), createElementBlock("div", _hoisted_57$2, [
44706
- createBaseVNode("span", _hoisted_58$2, toDisplayString(props.connection.name), 1)
44714
+ props.connection ? (openBlock(), createElementBlock("div", _hoisted_57$3, [
44715
+ createBaseVNode("span", _hoisted_58$3, toDisplayString(props.connection.name), 1)
44707
44716
  ])) : createCommentVNode("", true)
44708
44717
  ]),
44709
44718
  createVNode(SqlExecutor, {
@@ -44716,9 +44725,9 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44716
44725
  ])
44717
44726
  ])
44718
44727
  ]),
44719
- showCreateDatabase.value ? (openBlock(), createElementBlock("div", _hoisted_59$2, [
44720
- createBaseVNode("div", _hoisted_60$2, [
44721
- createBaseVNode("div", _hoisted_61$2, [
44728
+ showCreateDatabase.value ? (openBlock(), createElementBlock("div", _hoisted_59$3, [
44729
+ createBaseVNode("div", _hoisted_60$3, [
44730
+ createBaseVNode("div", _hoisted_61$3, [
44722
44731
  createBaseVNode("div", _hoisted_62$2, [
44723
44732
  _cache[43] || (_cache[43] = createBaseVNode("h5", { class: "modal-title" }, "创建数据库", -1)),
44724
44733
  createBaseVNode("button", {
@@ -44860,7 +44869,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
44860
44869
  };
44861
44870
  }
44862
44871
  });
44863
- const ConnectionDetail = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-d46cb2d8"]]);
44872
+ const ConnectionDetail = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-283b71e5"]]);
44864
44873
  var DatabaseType = /* @__PURE__ */ ((DatabaseType2) => {
44865
44874
  DatabaseType2["MYSQL"] = "mysql";
44866
44875
  DatabaseType2["POSTGRESQL"] = "postgres";
@@ -45230,28 +45239,28 @@ const _hoisted_15$5 = ["onUpdate:modelValue"];
45230
45239
  const _hoisted_16$5 = ["onUpdate:modelValue"];
45231
45240
  const _hoisted_17$5 = ["label"];
45232
45241
  const _hoisted_18$5 = ["value"];
45233
- const _hoisted_19$4 = {
45242
+ const _hoisted_19$5 = {
45234
45243
  key: 0,
45235
45244
  class: "input-group input-group-sm"
45236
45245
  };
45237
- const _hoisted_20$4 = ["onUpdate:modelValue"];
45238
- const _hoisted_21$4 = ["onUpdate:modelValue"];
45239
- const _hoisted_22$4 = ["onUpdate:modelValue"];
45240
- const _hoisted_23$4 = {
45246
+ const _hoisted_20$5 = ["onUpdate:modelValue"];
45247
+ const _hoisted_21$5 = ["onUpdate:modelValue"];
45248
+ const _hoisted_22$5 = ["onUpdate:modelValue"];
45249
+ const _hoisted_23$5 = {
45241
45250
  key: 1,
45242
45251
  class: "text-muted"
45243
45252
  };
45244
- const _hoisted_24$4 = { class: "form-check" };
45245
- const _hoisted_25$4 = ["onUpdate:modelValue"];
45246
- const _hoisted_26$4 = ["onUpdate:modelValue"];
45247
- const _hoisted_27$4 = { class: "form-check" };
45248
- const _hoisted_28$4 = ["onUpdate:modelValue", "onChange"];
45249
- const _hoisted_29$3 = { class: "form-check" };
45250
- const _hoisted_30$3 = ["onUpdate:modelValue", "disabled"];
45251
- const _hoisted_31$3 = ["onUpdate:modelValue"];
45252
- const _hoisted_32$3 = ["onClick", "disabled"];
45253
- const _hoisted_33$3 = { class: "sql-preview-section mt-4" };
45254
- const _hoisted_34$3 = { class: "sql-preview bg-light p-3 rounded" };
45253
+ const _hoisted_24$5 = { class: "form-check" };
45254
+ const _hoisted_25$5 = ["onUpdate:modelValue"];
45255
+ const _hoisted_26$5 = ["onUpdate:modelValue"];
45256
+ const _hoisted_27$5 = { class: "form-check" };
45257
+ const _hoisted_28$5 = ["onUpdate:modelValue", "onChange"];
45258
+ const _hoisted_29$4 = { class: "form-check" };
45259
+ const _hoisted_30$4 = ["onUpdate:modelValue", "disabled"];
45260
+ const _hoisted_31$4 = ["onUpdate:modelValue"];
45261
+ const _hoisted_32$4 = ["onClick", "disabled"];
45262
+ const _hoisted_33$4 = { class: "sql-preview-section mt-4" };
45263
+ const _hoisted_34$4 = { class: "sql-preview bg-light p-3 rounded" };
45255
45264
  const _sfc_main$5 = /* @__PURE__ */ defineComponent({
45256
45265
  __name: "table-editor",
45257
45266
  props: {
@@ -45871,14 +45880,14 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
45871
45880
  ])
45872
45881
  ]),
45873
45882
  createBaseVNode("td", null, [
45874
- needsLength(column) || needsPrecision(column) ? (openBlock(), createElementBlock("div", _hoisted_19$4, [
45883
+ needsLength(column) || needsPrecision(column) ? (openBlock(), createElementBlock("div", _hoisted_19$5, [
45875
45884
  needsLength(column) ? withDirectives((openBlock(), createElementBlock("input", {
45876
45885
  key: 0,
45877
45886
  "onUpdate:modelValue": ($event) => column.length = $event,
45878
45887
  type: "number",
45879
45888
  class: "form-control form-control-sm",
45880
45889
  placeholder: "长度"
45881
- }, null, 8, _hoisted_20$4)), [
45890
+ }, null, 8, _hoisted_20$5)), [
45882
45891
  [vModelText, column.length]
45883
45892
  ]) : createCommentVNode("", true),
45884
45893
  needsPrecision(column) ? withDirectives((openBlock(), createElementBlock("input", {
@@ -45887,7 +45896,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
45887
45896
  type: "number",
45888
45897
  class: "form-control form-control-sm",
45889
45898
  placeholder: "精度"
45890
- }, null, 8, _hoisted_21$4)), [
45899
+ }, null, 8, _hoisted_21$5)), [
45891
45900
  [vModelText, column.precision]
45892
45901
  ]) : createCommentVNode("", true),
45893
45902
  needsScale(column) ? withDirectives((openBlock(), createElementBlock("input", {
@@ -45896,18 +45905,18 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
45896
45905
  type: "number",
45897
45906
  class: "form-control form-control-sm",
45898
45907
  placeholder: "小数"
45899
- }, null, 8, _hoisted_22$4)), [
45908
+ }, null, 8, _hoisted_22$5)), [
45900
45909
  [vModelText, column.scale]
45901
45910
  ]) : createCommentVNode("", true)
45902
- ])) : (openBlock(), createElementBlock("span", _hoisted_23$4, "-"))
45911
+ ])) : (openBlock(), createElementBlock("span", _hoisted_23$5, "-"))
45903
45912
  ]),
45904
45913
  createBaseVNode("td", null, [
45905
- createBaseVNode("div", _hoisted_24$4, [
45914
+ createBaseVNode("div", _hoisted_24$5, [
45906
45915
  withDirectives(createBaseVNode("input", {
45907
45916
  "onUpdate:modelValue": ($event) => column.nullable = $event,
45908
45917
  type: "checkbox",
45909
45918
  class: "form-check-input"
45910
- }, null, 8, _hoisted_25$4), [
45919
+ }, null, 8, _hoisted_25$5), [
45911
45920
  [vModelCheckbox, column.nullable]
45912
45921
  ])
45913
45922
  ])
@@ -45918,30 +45927,30 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
45918
45927
  type: "text",
45919
45928
  class: "form-control form-control-sm",
45920
45929
  placeholder: "默认值"
45921
- }, null, 8, _hoisted_26$4), [
45930
+ }, null, 8, _hoisted_26$5), [
45922
45931
  [vModelText, column.defaultValue]
45923
45932
  ])
45924
45933
  ]),
45925
45934
  createBaseVNode("td", null, [
45926
- createBaseVNode("div", _hoisted_27$4, [
45935
+ createBaseVNode("div", _hoisted_27$5, [
45927
45936
  withDirectives(createBaseVNode("input", {
45928
45937
  "onUpdate:modelValue": ($event) => column.isPrimary = $event,
45929
45938
  type: "checkbox",
45930
45939
  class: "form-check-input",
45931
45940
  onChange: ($event) => onPrimaryKeyChange(column, index)
45932
- }, null, 40, _hoisted_28$4), [
45941
+ }, null, 40, _hoisted_28$5), [
45933
45942
  [vModelCheckbox, column.isPrimary]
45934
45943
  ])
45935
45944
  ])
45936
45945
  ]),
45937
45946
  createBaseVNode("td", null, [
45938
- createBaseVNode("div", _hoisted_29$3, [
45947
+ createBaseVNode("div", _hoisted_29$4, [
45939
45948
  withDirectives(createBaseVNode("input", {
45940
45949
  "onUpdate:modelValue": ($event) => column.isAutoIncrement = $event,
45941
45950
  type: "checkbox",
45942
45951
  class: "form-check-input",
45943
45952
  disabled: !column.isPrimary || !supportsAutoIncrement(column)
45944
- }, null, 8, _hoisted_30$3), [
45953
+ }, null, 8, _hoisted_30$4), [
45945
45954
  [vModelCheckbox, column.isAutoIncrement]
45946
45955
  ])
45947
45956
  ])
@@ -45952,7 +45961,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
45952
45961
  type: "text",
45953
45962
  class: "form-control form-control-sm",
45954
45963
  placeholder: "字段注释"
45955
- }, null, 8, _hoisted_31$3), [
45964
+ }, null, 8, _hoisted_31$4), [
45956
45965
  [vModelText, column.comment]
45957
45966
  ])
45958
45967
  ]),
@@ -45963,7 +45972,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
45963
45972
  disabled: formData.value.columns.length <= 1
45964
45973
  }, [..._cache[10] || (_cache[10] = [
45965
45974
  createBaseVNode("i", { class: "bi bi-trash" }, null, -1)
45966
- ])], 8, _hoisted_32$3)
45975
+ ])], 8, _hoisted_32$4)
45967
45976
  ])
45968
45977
  ]);
45969
45978
  }), 128))
@@ -45971,9 +45980,9 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
45971
45980
  ])
45972
45981
  ])
45973
45982
  ]),
45974
- createBaseVNode("div", _hoisted_33$3, [
45983
+ createBaseVNode("div", _hoisted_33$4, [
45975
45984
  _cache[12] || (_cache[12] = createBaseVNode("h6", { class: "section-title" }, "SQL预览", -1)),
45976
- createBaseVNode("pre", _hoisted_34$3, toDisplayString(generateSQL()), 1)
45985
+ createBaseVNode("pre", _hoisted_34$4, toDisplayString(generateSQL()), 1)
45977
45986
  ])
45978
45987
  ]),
45979
45988
  createBaseVNode("div", { class: "modal-footer" }, [
@@ -45994,34 +46003,89 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
45994
46003
  };
45995
46004
  }
45996
46005
  });
45997
- const TableEditor = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-dcd325b0"]]);
46006
+ const TableEditor = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-d08de09c"]]);
45998
46007
  const _hoisted_1$4 = { class: "db-tools" };
45999
- const _hoisted_2$4 = { class: "execution-results" };
46000
- const _hoisted_3$4 = {
46008
+ const _hoisted_2$4 = { class: "tools-content" };
46009
+ const _hoisted_3$4 = { class: "tool-section" };
46010
+ const _hoisted_4$4 = { class: "tool-actions" };
46011
+ const _hoisted_5$4 = {
46001
46012
  key: 0,
46002
- class: "no-results"
46013
+ class: "tool-component-area"
46003
46014
  };
46004
- const _hoisted_4$4 = ["onClick"];
46005
- const _hoisted_5$4 = { class: "result-title" };
46006
- const _hoisted_6$4 = { class: "operation-name" };
46007
- const _hoisted_7$4 = { class: "operation-time" };
46015
+ const _hoisted_6$4 = { class: "component-header" };
46016
+ const _hoisted_7$4 = { class: "component-title" };
46008
46017
  const _hoisted_8$4 = {
46018
+ key: 0,
46019
+ class: "tool-component sync-component"
46020
+ };
46021
+ const _hoisted_9$4 = { class: "mb-4" };
46022
+ const _hoisted_10$4 = { class: "row g-3" };
46023
+ const _hoisted_11$4 = { class: "col-md-6" };
46024
+ const _hoisted_12$4 = { class: "col-md-6" };
46025
+ const _hoisted_13$4 = ["value"];
46026
+ const _hoisted_14$4 = { class: "mb-4" };
46027
+ const _hoisted_15$4 = { class: "mb-3" };
46028
+ const _hoisted_16$4 = { class: "form-check form-switch" };
46029
+ const _hoisted_17$4 = {
46030
+ key: 0,
46031
+ class: "row g-3"
46032
+ };
46033
+ const _hoisted_18$4 = { class: "col-md-6" };
46034
+ const _hoisted_19$4 = ["value"];
46035
+ const _hoisted_20$4 = { class: "col-md-6" };
46036
+ const _hoisted_21$4 = ["value"];
46037
+ const _hoisted_22$4 = { class: "col-md-12" };
46038
+ const _hoisted_23$4 = {
46039
+ key: 1,
46040
+ class: "row g-3"
46041
+ };
46042
+ const _hoisted_24$4 = { class: "col-md-4" };
46043
+ const _hoisted_25$4 = { class: "col-md-4" };
46044
+ const _hoisted_26$4 = { class: "col-md-4" };
46045
+ const _hoisted_27$4 = { class: "col-md-4" };
46046
+ const _hoisted_28$4 = { class: "col-md-4" };
46047
+ const _hoisted_29$3 = { class: "col-md-4" };
46048
+ const _hoisted_30$3 = { class: "col-md-6" };
46049
+ const _hoisted_31$3 = { class: "mb-4" };
46050
+ const _hoisted_32$3 = { class: "row g-3" };
46051
+ const _hoisted_33$3 = { class: "col-md-6" };
46052
+ const _hoisted_34$3 = { class: "form-check" };
46053
+ const _hoisted_35$3 = { class: "col-md-6" };
46054
+ const _hoisted_36$3 = { class: "form-check" };
46055
+ const _hoisted_37$3 = { class: "col-md-6" };
46056
+ const _hoisted_38$3 = { class: "form-check" };
46057
+ const _hoisted_39$3 = { class: "col-md-6" };
46058
+ const _hoisted_40$3 = { class: "form-check" };
46059
+ const _hoisted_41$2 = { class: "col-md-6" };
46060
+ const _hoisted_42$2 = { class: "form-check" };
46061
+ const _hoisted_43$2 = { class: "tool-actions" };
46062
+ const _hoisted_44$2 = ["disabled"];
46063
+ const _hoisted_45$2 = { class: "execution-results" };
46064
+ const _hoisted_46$2 = {
46065
+ key: 0,
46066
+ class: "no-results"
46067
+ };
46068
+ const _hoisted_47$2 = ["onClick"];
46069
+ const _hoisted_48$2 = { class: "result-title" };
46070
+ const _hoisted_49$2 = { class: "operation-name" };
46071
+ const _hoisted_50$2 = { class: "operation-time" };
46072
+ const _hoisted_51$2 = {
46009
46073
  key: 0,
46010
46074
  class: "result-body"
46011
46075
  };
46012
- const _hoisted_9$4 = ["innerHTML"];
46013
- const _hoisted_10$4 = { class: "modal-dialog" };
46014
- const _hoisted_11$4 = { class: "modal-content" };
46015
- const _hoisted_12$4 = { class: "modal-body" };
46016
- const _hoisted_13$4 = { class: "mb-3" };
46017
- const _hoisted_14$4 = {
46076
+ const _hoisted_52$2 = ["innerHTML"];
46077
+ const _hoisted_53$2 = { class: "modal-dialog" };
46078
+ const _hoisted_54$2 = { class: "modal-content" };
46079
+ const _hoisted_55$2 = { class: "modal-body" };
46080
+ const _hoisted_56$2 = { class: "mb-3" };
46081
+ const _hoisted_57$2 = {
46018
46082
  key: 0,
46019
46083
  class: "alert alert-info"
46020
46084
  };
46021
- const _hoisted_15$4 = { class: "mb-3 form-check" };
46022
- const _hoisted_16$4 = { class: "modal-footer" };
46023
- const _hoisted_17$4 = ["disabled"];
46024
- const _hoisted_18$4 = {
46085
+ const _hoisted_58$2 = { class: "mb-3 form-check" };
46086
+ const _hoisted_59$2 = { class: "modal-footer" };
46087
+ const _hoisted_60$2 = ["disabled"];
46088
+ const _hoisted_61$2 = {
46025
46089
  key: 0,
46026
46090
  class: "spinner-border spinner-border-sm me-2"
46027
46091
  };
@@ -46033,6 +46097,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46033
46097
  },
46034
46098
  emits: ["execute-sql"],
46035
46099
  setup(__props, { emit: __emit }) {
46100
+ const connectionService2 = new ConnectionService();
46036
46101
  const props = __props;
46037
46102
  const emit = __emit;
46038
46103
  const databaseService2 = new DatabaseService();
@@ -46040,10 +46105,78 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46040
46105
  const selectedFile = ref(null);
46041
46106
  const restoring = ref(false);
46042
46107
  const resultsContentRef = ref(null);
46108
+ const selectedTool = ref(null);
46109
+ const syncing = ref(false);
46110
+ const tables = ref([]);
46111
+ const connections = ref([]);
46112
+ const databases = ref([]);
46113
+ const useExistingConnection = ref(false);
46114
+ const selectedConnectionId = ref("");
46115
+ const selectedDatabaseName = ref("");
46116
+ const syncConfig = ref({
46117
+ source: {
46118
+ database: "",
46119
+ tableName: ""
46120
+ },
46121
+ target: {
46122
+ dbType: "mysql",
46123
+ host: "localhost",
46124
+ port: 3306,
46125
+ database: "",
46126
+ username: "root",
46127
+ password: "",
46128
+ tableName: ""
46129
+ },
46130
+ options: {
46131
+ syncStructure: true,
46132
+ syncData: true,
46133
+ dropIfExists: false,
46134
+ bulkInsert: true,
46135
+ overrideExisting: false
46136
+ }
46137
+ });
46138
+ watch(() => syncConfig.value.source.tableName, (newTableName) => {
46139
+ if (newTableName) {
46140
+ syncConfig.value.target.tableName = newTableName;
46141
+ }
46142
+ });
46143
+ onMounted(() => {
46144
+ initSyncData();
46145
+ });
46146
+ async function loadDatabases(connectionId) {
46147
+ if (!connectionId) {
46148
+ databases.value = [];
46149
+ selectedDatabaseName.value = "";
46150
+ return;
46151
+ }
46152
+ try {
46153
+ const res2 = await databaseService2.getDatabases(connectionId);
46154
+ if (res2.ret === 0) {
46155
+ databases.value = res2.data || [];
46156
+ } else {
46157
+ databases.value = [];
46158
+ }
46159
+ selectedDatabaseName.value = "";
46160
+ } catch (error) {
46161
+ console.error("加载数据库列表失败:", error);
46162
+ databases.value = [];
46163
+ selectedDatabaseName.value = "";
46164
+ }
46165
+ }
46166
+ watch(selectedConnectionId, (newVal) => {
46167
+ loadDatabases(newVal);
46168
+ });
46043
46169
  const executionResults = ref([]);
46044
46170
  const restoreOptions = ref({
46045
46171
  dropExisting: false
46046
46172
  });
46173
+ const isSyncFormValid = computed(() => {
46174
+ if (useExistingConnection.value) {
46175
+ return syncConfig.value.source.tableName && selectedConnectionId.value && selectedDatabaseName.value && syncConfig.value.target.tableName && (syncConfig.value.options.syncStructure || syncConfig.value.options.syncData);
46176
+ } else {
46177
+ return syncConfig.value.source.tableName && syncConfig.value.target.host && syncConfig.value.target.port && syncConfig.value.target.database && syncConfig.value.target.username && syncConfig.value.target.tableName && (syncConfig.value.options.syncStructure || syncConfig.value.options.syncData);
46178
+ }
46179
+ });
46047
46180
  function addExecutionResult(operation, status, data) {
46048
46181
  const timestamp = (/* @__PURE__ */ new Date()).toLocaleString("zh-CN", {
46049
46182
  year: "numeric",
@@ -46224,9 +46357,6 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46224
46357
  function showImportModal() {
46225
46358
  addExecutionResult("导入数据", "info", { message: "导入数据功能开发中..." });
46226
46359
  }
46227
- function showSyncModal() {
46228
- addExecutionResult("数据同步", "info", { message: "数据同步功能开发中..." });
46229
- }
46230
46360
  async function runHealthCheck() {
46231
46361
  const operation = "健康检查";
46232
46362
  const checks = [
@@ -46300,20 +46430,124 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46300
46430
  restoring.value = false;
46301
46431
  }
46302
46432
  }
46433
+ function selectTool(toolName) {
46434
+ selectedTool.value = toolName;
46435
+ {
46436
+ initSyncData();
46437
+ }
46438
+ }
46439
+ function closeTool() {
46440
+ selectedTool.value = null;
46441
+ }
46442
+ function getToolIcon(toolName) {
46443
+ const icons = {
46444
+ "sync": "bi-arrow-repeat"
46445
+ };
46446
+ return icons[toolName] || "bi-gear";
46447
+ }
46448
+ function getToolTitle(toolName) {
46449
+ const titles = {
46450
+ "sync": "数据同步"
46451
+ };
46452
+ return titles[toolName] || "工具";
46453
+ }
46454
+ async function initSyncData() {
46455
+ try {
46456
+ const tablesRes = await databaseService2.getTables(props.connection?.id || "", props.database);
46457
+ if (tablesRes.ret === 0) {
46458
+ tables.value = tablesRes.data || [];
46459
+ }
46460
+ const connRes = await connectionService2.getAllConnections();
46461
+ if (connRes.ret === 0) {
46462
+ connections.value = connRes.data || [];
46463
+ }
46464
+ syncConfig.value.source.database = props.database;
46465
+ if (props.connection?.id) {
46466
+ useExistingConnection.value = true;
46467
+ selectedConnectionId.value = props.connection.id;
46468
+ }
46469
+ } catch (error) {
46470
+ console.error("加载表列表失败:", error);
46471
+ modal.error("加载表列表失败");
46472
+ }
46473
+ }
46474
+ async function performSync() {
46475
+ if (!isSyncFormValid.value) {
46476
+ modal.error("请填写完整的同步配置");
46477
+ return;
46478
+ }
46479
+ const operation = "数据同步";
46480
+ syncing.value = true;
46481
+ try {
46482
+ let syncData;
46483
+ if (useExistingConnection.value) {
46484
+ syncData = {
46485
+ source: {
46486
+ database: syncConfig.value.source.database,
46487
+ tableName: syncConfig.value.source.tableName
46488
+ },
46489
+ target: {
46490
+ connectionId: selectedConnectionId.value,
46491
+ database: selectedDatabaseName.value,
46492
+ tableName: syncConfig.value.target.tableName
46493
+ },
46494
+ options: syncConfig.value.options
46495
+ };
46496
+ } else {
46497
+ syncData = syncConfig.value;
46498
+ }
46499
+ addExecutionResult(operation, "info", {
46500
+ message: "开始同步数据",
46501
+ config: syncData
46502
+ });
46503
+ const res2 = await databaseService2.syncTable(
46504
+ props.connection?.id || "",
46505
+ syncData
46506
+ );
46507
+ if (res2.ret === 0) {
46508
+ const tables2 = res2.data?.tables || [];
46509
+ let successCount = 0;
46510
+ let totalRows = 0;
46511
+ tables2.forEach((table) => {
46512
+ if (table.rowsSynced > 0) {
46513
+ successCount++;
46514
+ totalRows += table.rowsSynced;
46515
+ }
46516
+ });
46517
+ addExecutionResult(operation, "success", {
46518
+ message: `数据同步成功,${successCount}/${tables2.length} 个表同步完成,共同步 ${totalRows} 行数据`,
46519
+ data: res2.data
46520
+ });
46521
+ toast.success(`数据同步成功,${successCount}/${tables2.length} 个表同步完成`);
46522
+ } else {
46523
+ addExecutionResult(operation, "error", {
46524
+ message: res2.msg || "同步失败",
46525
+ error: res2.error
46526
+ });
46527
+ toast.error(res2.msg || "同步失败");
46528
+ }
46529
+ } catch (error) {
46530
+ console.error("同步失败:", error);
46531
+ addExecutionResult(operation, "error", formatError(error));
46532
+ toast.error(error.msg || error.message || "同步失败");
46533
+ } finally {
46534
+ syncing.value = false;
46535
+ }
46536
+ }
46303
46537
  function showScheduleModal() {
46304
46538
  addExecutionResult("定时备份", "info", { message: "定时备份功能开发中..." });
46305
46539
  }
46306
46540
  return (_ctx, _cache) => {
46307
46541
  return openBlock(), createElementBlock("div", _hoisted_1$4, [
46308
- _cache[34] || (_cache[34] = createBaseVNode("div", { class: "tools-header" }, [
46542
+ _cache[82] || (_cache[82] = createBaseVNode("div", { class: "tools-header" }, [
46309
46543
  createBaseVNode("h5", { class: "tools-title" }, [
46310
46544
  createBaseVNode("i", { class: "bi bi-tools" }),
46311
46545
  createTextVNode(" 数据库管理工具 ")
46312
46546
  ])
46313
46547
  ], -1)),
46314
- createBaseVNode("div", { class: "tools-content" }, [
46548
+ createBaseVNode("div", _hoisted_2$4, [
46315
46549
  createBaseVNode("div", { class: "tool-section" }, [
46316
- _cache[5] || (_cache[5] = createBaseVNode("h6", { class: "section-title" }, [
46550
+ _cache[25] || (_cache[25] = createBaseVNode("h6", { class: "section-title" }, [
46317
46551
  createBaseVNode("i", { class: "bi bi-shield-check" }),
46318
46552
  createTextVNode(" 数据备份 ")
46319
46553
  ], -1)),
@@ -46321,28 +46555,28 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46321
46555
  createBaseVNode("button", {
46322
46556
  class: "btn btn-outline-primary btn-sm",
46323
46557
  onClick: backupDatabase
46324
- }, [..._cache[2] || (_cache[2] = [
46558
+ }, [..._cache[22] || (_cache[22] = [
46325
46559
  createBaseVNode("i", { class: "bi bi-download" }, null, -1),
46326
46560
  createTextVNode(" 备份数据库 ", -1)
46327
46561
  ])]),
46328
46562
  createBaseVNode("button", {
46329
46563
  class: "btn btn-outline-secondary btn-sm",
46330
46564
  onClick: showRestoreModal
46331
- }, [..._cache[3] || (_cache[3] = [
46565
+ }, [..._cache[23] || (_cache[23] = [
46332
46566
  createBaseVNode("i", { class: "bi bi-upload" }, null, -1),
46333
46567
  createTextVNode(" 恢复数据库 ", -1)
46334
46568
  ])]),
46335
46569
  createBaseVNode("button", {
46336
46570
  class: "btn btn-outline-info btn-sm",
46337
46571
  onClick: showScheduleModal
46338
- }, [..._cache[4] || (_cache[4] = [
46572
+ }, [..._cache[24] || (_cache[24] = [
46339
46573
  createBaseVNode("i", { class: "bi bi-clock" }, null, -1),
46340
46574
  createTextVNode(" 定时备份 ", -1)
46341
46575
  ])])
46342
46576
  ])
46343
46577
  ]),
46344
46578
  createBaseVNode("div", { class: "tool-section" }, [
46345
- _cache[9] || (_cache[9] = createBaseVNode("h6", { class: "section-title" }, [
46579
+ _cache[29] || (_cache[29] = createBaseVNode("h6", { class: "section-title" }, [
46346
46580
  createBaseVNode("i", { class: "bi bi-people" }),
46347
46581
  createTextVNode(" 用户管理 ")
46348
46582
  ], -1)),
@@ -46350,28 +46584,28 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46350
46584
  createBaseVNode("button", {
46351
46585
  class: "btn btn-outline-success btn-sm",
46352
46586
  onClick: showUsersList
46353
- }, [..._cache[6] || (_cache[6] = [
46587
+ }, [..._cache[26] || (_cache[26] = [
46354
46588
  createBaseVNode("i", { class: "bi bi-person-lines-fill" }, null, -1),
46355
46589
  createTextVNode(" 用户列表 ", -1)
46356
46590
  ])]),
46357
46591
  createBaseVNode("button", {
46358
46592
  class: "btn btn-outline-primary btn-sm",
46359
46593
  onClick: showCreateUserModal
46360
- }, [..._cache[7] || (_cache[7] = [
46594
+ }, [..._cache[27] || (_cache[27] = [
46361
46595
  createBaseVNode("i", { class: "bi bi-person-plus" }, null, -1),
46362
46596
  createTextVNode(" 创建用户 ", -1)
46363
46597
  ])]),
46364
46598
  createBaseVNode("button", {
46365
46599
  class: "btn btn-outline-warning btn-sm",
46366
46600
  onClick: showPermissionsModal
46367
- }, [..._cache[8] || (_cache[8] = [
46601
+ }, [..._cache[28] || (_cache[28] = [
46368
46602
  createBaseVNode("i", { class: "bi bi-key" }, null, -1),
46369
46603
  createTextVNode(" 权限管理 ", -1)
46370
46604
  ])])
46371
46605
  ])
46372
46606
  ]),
46373
46607
  createBaseVNode("div", { class: "tool-section" }, [
46374
- _cache[13] || (_cache[13] = createBaseVNode("h6", { class: "section-title" }, [
46608
+ _cache[33] || (_cache[33] = createBaseVNode("h6", { class: "section-title" }, [
46375
46609
  createBaseVNode("i", { class: "bi bi-speedometer2" }),
46376
46610
  createTextVNode(" 性能监控 ")
46377
46611
  ], -1)),
@@ -46379,28 +46613,28 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46379
46613
  createBaseVNode("button", {
46380
46614
  class: "btn btn-outline-info btn-sm",
46381
46615
  onClick: showProcessList
46382
- }, [..._cache[10] || (_cache[10] = [
46616
+ }, [..._cache[30] || (_cache[30] = [
46383
46617
  createBaseVNode("i", { class: "bi bi-activity" }, null, -1),
46384
46618
  createTextVNode(" 进程列表 ", -1)
46385
46619
  ])]),
46386
46620
  createBaseVNode("button", {
46387
46621
  class: "btn btn-outline-warning btn-sm",
46388
46622
  onClick: showSlowQueries
46389
- }, [..._cache[11] || (_cache[11] = [
46623
+ }, [..._cache[31] || (_cache[31] = [
46390
46624
  createBaseVNode("i", { class: "bi bi-hourglass-split" }, null, -1),
46391
46625
  createTextVNode(" 慢查询 ", -1)
46392
46626
  ])]),
46393
46627
  createBaseVNode("button", {
46394
46628
  class: "btn btn-outline-danger btn-sm",
46395
46629
  onClick: showConnectionsList
46396
- }, [..._cache[12] || (_cache[12] = [
46630
+ }, [..._cache[32] || (_cache[32] = [
46397
46631
  createBaseVNode("i", { class: "bi bi-diagram-3" }, null, -1),
46398
46632
  createTextVNode(" 连接数 ", -1)
46399
46633
  ])])
46400
46634
  ])
46401
46635
  ]),
46402
46636
  createBaseVNode("div", { class: "tool-section" }, [
46403
- _cache[18] || (_cache[18] = createBaseVNode("h6", { class: "section-title" }, [
46637
+ _cache[38] || (_cache[38] = createBaseVNode("h6", { class: "section-title" }, [
46404
46638
  createBaseVNode("i", { class: "bi bi-gear-wide-connected" }),
46405
46639
  createTextVNode(" 数据库优化 ")
46406
46640
  ], -1)),
@@ -46408,64 +46642,64 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46408
46642
  createBaseVNode("button", {
46409
46643
  class: "btn btn-outline-success btn-sm",
46410
46644
  onClick: optimizeDatabase
46411
- }, [..._cache[14] || (_cache[14] = [
46645
+ }, [..._cache[34] || (_cache[34] = [
46412
46646
  createBaseVNode("i", { class: "bi bi-lightning-charge" }, null, -1),
46413
46647
  createTextVNode(" 优化数据库 ", -1)
46414
46648
  ])]),
46415
46649
  createBaseVNode("button", {
46416
46650
  class: "btn btn-outline-primary btn-sm",
46417
46651
  onClick: analyzeTables
46418
- }, [..._cache[15] || (_cache[15] = [
46652
+ }, [..._cache[35] || (_cache[35] = [
46419
46653
  createBaseVNode("i", { class: "bi bi-search" }, null, -1),
46420
46654
  createTextVNode(" 分析表 ", -1)
46421
46655
  ])]),
46422
46656
  createBaseVNode("button", {
46423
46657
  class: "btn btn-outline-secondary btn-sm",
46424
46658
  onClick: repairTables
46425
- }, [..._cache[16] || (_cache[16] = [
46659
+ }, [..._cache[36] || (_cache[36] = [
46426
46660
  createBaseVNode("i", { class: "bi bi-tools" }, null, -1),
46427
46661
  createTextVNode(" 修复表 ", -1)
46428
46662
  ])]),
46429
46663
  createBaseVNode("button", {
46430
46664
  class: "btn btn-outline-info btn-sm",
46431
46665
  onClick: clearLogs
46432
- }, [..._cache[17] || (_cache[17] = [
46666
+ }, [..._cache[37] || (_cache[37] = [
46433
46667
  createBaseVNode("i", { class: "bi bi-trash" }, null, -1),
46434
46668
  createTextVNode(" 清理日志 ", -1)
46435
46669
  ])])
46436
46670
  ])
46437
46671
  ]),
46438
- createBaseVNode("div", { class: "tool-section" }, [
46439
- _cache[22] || (_cache[22] = createBaseVNode("h6", { class: "section-title" }, [
46672
+ createBaseVNode("div", _hoisted_3$4, [
46673
+ _cache[42] || (_cache[42] = createBaseVNode("h6", { class: "section-title" }, [
46440
46674
  createBaseVNode("i", { class: "bi bi-arrow-left-right" }),
46441
46675
  createTextVNode(" 数据迁移 ")
46442
46676
  ], -1)),
46443
- createBaseVNode("div", { class: "tool-actions" }, [
46677
+ createBaseVNode("div", _hoisted_4$4, [
46444
46678
  createBaseVNode("button", {
46445
46679
  class: "btn btn-outline-primary btn-sm",
46446
46680
  onClick: showExportModal
46447
- }, [..._cache[19] || (_cache[19] = [
46681
+ }, [..._cache[39] || (_cache[39] = [
46448
46682
  createBaseVNode("i", { class: "bi bi-box-arrow-up-right" }, null, -1),
46449
46683
  createTextVNode(" 导出结构 ", -1)
46450
46684
  ])]),
46451
46685
  createBaseVNode("button", {
46452
46686
  class: "btn btn-outline-success btn-sm",
46453
46687
  onClick: showImportModal
46454
- }, [..._cache[20] || (_cache[20] = [
46688
+ }, [..._cache[40] || (_cache[40] = [
46455
46689
  createBaseVNode("i", { class: "bi bi-box-arrow-in-down" }, null, -1),
46456
46690
  createTextVNode(" 导入数据 ", -1)
46457
46691
  ])]),
46458
46692
  createBaseVNode("button", {
46459
46693
  class: "btn btn-outline-warning btn-sm",
46460
- onClick: showSyncModal
46461
- }, [..._cache[21] || (_cache[21] = [
46694
+ onClick: _cache[0] || (_cache[0] = ($event) => selectTool("sync"))
46695
+ }, [..._cache[41] || (_cache[41] = [
46462
46696
  createBaseVNode("i", { class: "bi bi-arrow-repeat" }, null, -1),
46463
46697
  createTextVNode(" 数据同步 ", -1)
46464
46698
  ])])
46465
46699
  ])
46466
46700
  ]),
46467
46701
  createBaseVNode("div", { class: "tool-section" }, [
46468
- _cache[26] || (_cache[26] = createBaseVNode("h6", { class: "section-title" }, [
46702
+ _cache[46] || (_cache[46] = createBaseVNode("h6", { class: "section-title" }, [
46469
46703
  createBaseVNode("i", { class: "bi bi-heart-pulse" }),
46470
46704
  createTextVNode(" 健康检查 ")
46471
46705
  ], -1)),
@@ -46473,37 +46707,339 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46473
46707
  createBaseVNode("button", {
46474
46708
  class: "btn btn-outline-info btn-sm",
46475
46709
  onClick: runHealthCheck
46476
- }, [..._cache[23] || (_cache[23] = [
46710
+ }, [..._cache[43] || (_cache[43] = [
46477
46711
  createBaseVNode("i", { class: "bi bi-clipboard-check" }, null, -1),
46478
46712
  createTextVNode(" 健康检查 ", -1)
46479
46713
  ])]),
46480
46714
  createBaseVNode("button", {
46481
46715
  class: "btn btn-outline-secondary btn-sm",
46482
46716
  onClick: showStatistics
46483
- }, [..._cache[24] || (_cache[24] = [
46717
+ }, [..._cache[44] || (_cache[44] = [
46484
46718
  createBaseVNode("i", { class: "bi bi-bar-chart" }, null, -1),
46485
46719
  createTextVNode(" 数据统计 ", -1)
46486
46720
  ])]),
46487
46721
  createBaseVNode("button", {
46488
46722
  class: "btn btn-outline-warning btn-sm",
46489
46723
  onClick: showAuditLog
46490
- }, [..._cache[25] || (_cache[25] = [
46724
+ }, [..._cache[45] || (_cache[45] = [
46491
46725
  createBaseVNode("i", { class: "bi bi-journal-text" }, null, -1),
46492
46726
  createTextVNode(" 审计日志 ", -1)
46493
46727
  ])])
46494
46728
  ])
46495
46729
  ])
46496
46730
  ]),
46497
- createBaseVNode("div", _hoisted_2$4, [
46731
+ selectedTool.value ? (openBlock(), createElementBlock("div", _hoisted_5$4, [
46732
+ createBaseVNode("div", _hoisted_6$4, [
46733
+ createBaseVNode("h6", _hoisted_7$4, [
46734
+ createBaseVNode("i", {
46735
+ class: normalizeClass(getToolIcon(selectedTool.value))
46736
+ }, null, 2),
46737
+ createTextVNode(" " + toDisplayString(getToolTitle(selectedTool.value)), 1)
46738
+ ]),
46739
+ createBaseVNode("button", {
46740
+ class: "btn btn-outline-secondary btn-sm",
46741
+ onClick: closeTool
46742
+ }, [..._cache[47] || (_cache[47] = [
46743
+ createBaseVNode("i", { class: "bi bi-x" }, null, -1),
46744
+ createTextVNode(" 关闭 ", -1)
46745
+ ])])
46746
+ ]),
46747
+ selectedTool.value === "sync" ? (openBlock(), createElementBlock("div", _hoisted_8$4, [
46748
+ createBaseVNode("div", _hoisted_9$4, [
46749
+ _cache[51] || (_cache[51] = createBaseVNode("h6", { class: "text-primary mb-2" }, [
46750
+ createBaseVNode("i", { class: "bi bi-database" }),
46751
+ createTextVNode(" 源数据库")
46752
+ ], -1)),
46753
+ createBaseVNode("div", _hoisted_10$4, [
46754
+ createBaseVNode("div", _hoisted_11$4, [
46755
+ _cache[48] || (_cache[48] = createBaseVNode("label", { class: "form-label" }, "数据库名称", -1)),
46756
+ withDirectives(createBaseVNode("input", {
46757
+ type: "text",
46758
+ class: "form-control",
46759
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => syncConfig.value.source.database = $event),
46760
+ readonly: ""
46761
+ }, null, 512), [
46762
+ [vModelText, syncConfig.value.source.database]
46763
+ ])
46764
+ ]),
46765
+ createBaseVNode("div", _hoisted_12$4, [
46766
+ _cache[50] || (_cache[50] = createBaseVNode("label", { class: "form-label" }, "选择表", -1)),
46767
+ withDirectives(createBaseVNode("select", {
46768
+ class: "form-select",
46769
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => syncConfig.value.source.tableName = $event)
46770
+ }, [
46771
+ _cache[49] || (_cache[49] = createBaseVNode("option", { value: "" }, "请选择表", -1)),
46772
+ (openBlock(true), createElementBlock(Fragment, null, renderList(tables.value, (table) => {
46773
+ return openBlock(), createElementBlock("option", {
46774
+ key: table.name,
46775
+ value: table.name
46776
+ }, toDisplayString(table.name), 9, _hoisted_13$4);
46777
+ }), 128))
46778
+ ], 512), [
46779
+ [vModelSelect, syncConfig.value.source.tableName]
46780
+ ])
46781
+ ])
46782
+ ])
46783
+ ]),
46784
+ createBaseVNode("div", _hoisted_14$4, [
46785
+ _cache[66] || (_cache[66] = createBaseVNode("h6", { class: "text-primary mb-2" }, [
46786
+ createBaseVNode("i", { class: "bi bi-database" }),
46787
+ createTextVNode(" 目标数据库")
46788
+ ], -1)),
46789
+ createBaseVNode("div", _hoisted_15$4, [
46790
+ createBaseVNode("div", _hoisted_16$4, [
46791
+ withDirectives(createBaseVNode("input", {
46792
+ class: "form-check-input",
46793
+ type: "checkbox",
46794
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => useExistingConnection.value = $event),
46795
+ id: "useExistingConnection"
46796
+ }, null, 512), [
46797
+ [vModelCheckbox, useExistingConnection.value]
46798
+ ]),
46799
+ _cache[52] || (_cache[52] = createBaseVNode("label", {
46800
+ class: "form-check-label",
46801
+ for: "useExistingConnection"
46802
+ }, "使用已配置的数据库连接", -1))
46803
+ ])
46804
+ ]),
46805
+ useExistingConnection.value ? (openBlock(), createElementBlock("div", _hoisted_17$4, [
46806
+ createBaseVNode("div", _hoisted_18$4, [
46807
+ _cache[54] || (_cache[54] = createBaseVNode("label", { class: "form-label" }, "选择数据库连接", -1)),
46808
+ withDirectives(createBaseVNode("select", {
46809
+ class: "form-select",
46810
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => selectedConnectionId.value = $event)
46811
+ }, [
46812
+ _cache[53] || (_cache[53] = createBaseVNode("option", { value: "" }, "请选择连接", -1)),
46813
+ (openBlock(true), createElementBlock(Fragment, null, renderList(connections.value, (conn) => {
46814
+ return openBlock(), createElementBlock("option", {
46815
+ key: conn.id,
46816
+ value: conn.id
46817
+ }, toDisplayString(conn.name) + " (" + toDisplayString(conn.type) + ")", 9, _hoisted_19$4);
46818
+ }), 128))
46819
+ ], 512), [
46820
+ [vModelSelect, selectedConnectionId.value]
46821
+ ])
46822
+ ]),
46823
+ createBaseVNode("div", _hoisted_20$4, [
46824
+ _cache[56] || (_cache[56] = createBaseVNode("label", { class: "form-label" }, "选择数据库", -1)),
46825
+ withDirectives(createBaseVNode("select", {
46826
+ class: "form-select",
46827
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => selectedDatabaseName.value = $event)
46828
+ }, [
46829
+ _cache[55] || (_cache[55] = createBaseVNode("option", { value: "" }, "请选择数据库", -1)),
46830
+ (openBlock(true), createElementBlock(Fragment, null, renderList(databases.value, (db) => {
46831
+ return openBlock(), createElementBlock("option", {
46832
+ key: db,
46833
+ value: db
46834
+ }, toDisplayString(db), 9, _hoisted_21$4);
46835
+ }), 128))
46836
+ ], 512), [
46837
+ [vModelSelect, selectedDatabaseName.value]
46838
+ ])
46839
+ ]),
46840
+ createBaseVNode("div", _hoisted_22$4, [
46841
+ _cache[57] || (_cache[57] = createBaseVNode("label", { class: "form-label" }, "目标表名", -1)),
46842
+ withDirectives(createBaseVNode("input", {
46843
+ type: "text",
46844
+ class: "form-control",
46845
+ "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => syncConfig.value.target.tableName = $event)
46846
+ }, null, 512), [
46847
+ [vModelText, syncConfig.value.target.tableName]
46848
+ ])
46849
+ ])
46850
+ ])) : (openBlock(), createElementBlock("div", _hoisted_23$4, [
46851
+ createBaseVNode("div", _hoisted_24$4, [
46852
+ _cache[59] || (_cache[59] = createBaseVNode("label", { class: "form-label" }, "数据库类型", -1)),
46853
+ withDirectives(createBaseVNode("select", {
46854
+ class: "form-select",
46855
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => syncConfig.value.target.dbType = $event)
46856
+ }, [..._cache[58] || (_cache[58] = [
46857
+ createStaticVNode('<option value="mysql" data-v-622732f3>MySQL</option><option value="postgresql" data-v-622732f3>PostgreSQL</option><option value="sqlite" data-v-622732f3>SQLite</option><option value="sqlserver" data-v-622732f3>SQL Server</option><option value="oracle" data-v-622732f3>Oracle</option>', 5)
46858
+ ])], 512), [
46859
+ [vModelSelect, syncConfig.value.target.dbType]
46860
+ ])
46861
+ ]),
46862
+ createBaseVNode("div", _hoisted_25$4, [
46863
+ _cache[60] || (_cache[60] = createBaseVNode("label", { class: "form-label" }, "主机", -1)),
46864
+ withDirectives(createBaseVNode("input", {
46865
+ type: "text",
46866
+ class: "form-control",
46867
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => syncConfig.value.target.host = $event)
46868
+ }, null, 512), [
46869
+ [vModelText, syncConfig.value.target.host]
46870
+ ])
46871
+ ]),
46872
+ createBaseVNode("div", _hoisted_26$4, [
46873
+ _cache[61] || (_cache[61] = createBaseVNode("label", { class: "form-label" }, "端口", -1)),
46874
+ withDirectives(createBaseVNode("input", {
46875
+ type: "number",
46876
+ class: "form-control",
46877
+ "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => syncConfig.value.target.port = $event)
46878
+ }, null, 512), [
46879
+ [vModelText, syncConfig.value.target.port]
46880
+ ])
46881
+ ]),
46882
+ createBaseVNode("div", _hoisted_27$4, [
46883
+ _cache[62] || (_cache[62] = createBaseVNode("label", { class: "form-label" }, "数据库名", -1)),
46884
+ withDirectives(createBaseVNode("input", {
46885
+ type: "text",
46886
+ class: "form-control",
46887
+ "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => syncConfig.value.target.database = $event)
46888
+ }, null, 512), [
46889
+ [vModelText, syncConfig.value.target.database]
46890
+ ])
46891
+ ]),
46892
+ createBaseVNode("div", _hoisted_28$4, [
46893
+ _cache[63] || (_cache[63] = createBaseVNode("label", { class: "form-label" }, "用户名", -1)),
46894
+ withDirectives(createBaseVNode("input", {
46895
+ type: "text",
46896
+ class: "form-control",
46897
+ "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => syncConfig.value.target.username = $event)
46898
+ }, null, 512), [
46899
+ [vModelText, syncConfig.value.target.username]
46900
+ ])
46901
+ ]),
46902
+ createBaseVNode("div", _hoisted_29$3, [
46903
+ _cache[64] || (_cache[64] = createBaseVNode("label", { class: "form-label" }, "密码", -1)),
46904
+ withDirectives(createBaseVNode("input", {
46905
+ type: "password",
46906
+ class: "form-control",
46907
+ "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => syncConfig.value.target.password = $event)
46908
+ }, null, 512), [
46909
+ [vModelText, syncConfig.value.target.password]
46910
+ ])
46911
+ ]),
46912
+ createBaseVNode("div", _hoisted_30$3, [
46913
+ _cache[65] || (_cache[65] = createBaseVNode("label", { class: "form-label" }, "目标表名", -1)),
46914
+ withDirectives(createBaseVNode("input", {
46915
+ type: "text",
46916
+ class: "form-control",
46917
+ "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => syncConfig.value.target.tableName = $event)
46918
+ }, null, 512), [
46919
+ [vModelText, syncConfig.value.target.tableName]
46920
+ ])
46921
+ ])
46922
+ ]))
46923
+ ]),
46924
+ createBaseVNode("div", _hoisted_31$3, [
46925
+ _cache[72] || (_cache[72] = createBaseVNode("h6", { class: "text-primary mb-2" }, [
46926
+ createBaseVNode("i", { class: "bi bi-sliders" }),
46927
+ createTextVNode(" 同步选项")
46928
+ ], -1)),
46929
+ createBaseVNode("div", _hoisted_32$3, [
46930
+ createBaseVNode("div", _hoisted_33$3, [
46931
+ createBaseVNode("div", _hoisted_34$3, [
46932
+ withDirectives(createBaseVNode("input", {
46933
+ type: "checkbox",
46934
+ class: "form-check-input",
46935
+ "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => syncConfig.value.options.syncStructure = $event),
46936
+ id: "syncStructure"
46937
+ }, null, 512), [
46938
+ [vModelCheckbox, syncConfig.value.options.syncStructure]
46939
+ ]),
46940
+ _cache[67] || (_cache[67] = createBaseVNode("label", {
46941
+ class: "form-check-label",
46942
+ for: "syncStructure"
46943
+ }, "同步表结构", -1))
46944
+ ])
46945
+ ]),
46946
+ createBaseVNode("div", _hoisted_35$3, [
46947
+ createBaseVNode("div", _hoisted_36$3, [
46948
+ withDirectives(createBaseVNode("input", {
46949
+ type: "checkbox",
46950
+ class: "form-check-input",
46951
+ "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => syncConfig.value.options.syncData = $event),
46952
+ id: "syncData"
46953
+ }, null, 512), [
46954
+ [vModelCheckbox, syncConfig.value.options.syncData]
46955
+ ]),
46956
+ _cache[68] || (_cache[68] = createBaseVNode("label", {
46957
+ class: "form-check-label",
46958
+ for: "syncData"
46959
+ }, "同步表数据", -1))
46960
+ ])
46961
+ ]),
46962
+ createBaseVNode("div", _hoisted_37$3, [
46963
+ createBaseVNode("div", _hoisted_38$3, [
46964
+ withDirectives(createBaseVNode("input", {
46965
+ type: "checkbox",
46966
+ class: "form-check-input",
46967
+ "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => syncConfig.value.options.dropIfExists = $event),
46968
+ id: "dropIfExists"
46969
+ }, null, 512), [
46970
+ [vModelCheckbox, syncConfig.value.options.dropIfExists]
46971
+ ]),
46972
+ _cache[69] || (_cache[69] = createBaseVNode("label", {
46973
+ class: "form-check-label",
46974
+ for: "dropIfExists"
46975
+ }, "目标表存在时删除", -1))
46976
+ ])
46977
+ ]),
46978
+ createBaseVNode("div", _hoisted_39$3, [
46979
+ createBaseVNode("div", _hoisted_40$3, [
46980
+ withDirectives(createBaseVNode("input", {
46981
+ type: "checkbox",
46982
+ class: "form-check-input",
46983
+ "onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => syncConfig.value.options.bulkInsert = $event),
46984
+ id: "bulkInsert"
46985
+ }, null, 512), [
46986
+ [vModelCheckbox, syncConfig.value.options.bulkInsert]
46987
+ ]),
46988
+ _cache[70] || (_cache[70] = createBaseVNode("label", {
46989
+ class: "form-check-label",
46990
+ for: "bulkInsert"
46991
+ }, "批量插入数据", -1))
46992
+ ])
46993
+ ]),
46994
+ createBaseVNode("div", _hoisted_41$2, [
46995
+ createBaseVNode("div", _hoisted_42$2, [
46996
+ withDirectives(createBaseVNode("input", {
46997
+ type: "checkbox",
46998
+ class: "form-check-input",
46999
+ "onUpdate:modelValue": _cache[18] || (_cache[18] = ($event) => syncConfig.value.options.overrideExisting = $event),
47000
+ id: "overrideExisting"
47001
+ }, null, 512), [
47002
+ [vModelCheckbox, syncConfig.value.options.overrideExisting]
47003
+ ]),
47004
+ _cache[71] || (_cache[71] = createBaseVNode("label", {
47005
+ class: "form-check-label",
47006
+ for: "overrideExisting"
47007
+ }, "覆盖已存在的数据", -1))
47008
+ ])
47009
+ ])
47010
+ ])
47011
+ ]),
47012
+ createBaseVNode("div", _hoisted_43$2, [
47013
+ createBaseVNode("button", {
47014
+ class: "btn btn-primary btn-sm",
47015
+ onClick: performSync,
47016
+ disabled: syncing.value || !isSyncFormValid.value
47017
+ }, [..._cache[73] || (_cache[73] = [
47018
+ createBaseVNode("i", { class: "bi bi-play-fill" }, null, -1),
47019
+ createTextVNode(" 开始同步 ", -1)
47020
+ ])], 8, _hoisted_44$2),
47021
+ syncing.value ? (openBlock(), createElementBlock("button", {
47022
+ key: 0,
47023
+ class: "btn btn-outline-danger btn-sm",
47024
+ onClick: _cache[19] || (_cache[19] = //@ts-ignore
47025
+ (...args) => _ctx.stopSync && _ctx.stopSync(...args))
47026
+ }, [..._cache[74] || (_cache[74] = [
47027
+ createBaseVNode("i", { class: "bi bi-stop-fill" }, null, -1),
47028
+ createTextVNode(" 停止同步 ", -1)
47029
+ ])])) : createCommentVNode("", true)
47030
+ ])
47031
+ ])) : createCommentVNode("", true)
47032
+ ])) : createCommentVNode("", true),
47033
+ createBaseVNode("div", _hoisted_45$2, [
46498
47034
  createBaseVNode("div", { class: "results-header" }, [
46499
- _cache[28] || (_cache[28] = createBaseVNode("h6", { class: "results-title" }, [
47035
+ _cache[76] || (_cache[76] = createBaseVNode("h6", { class: "results-title" }, [
46500
47036
  createBaseVNode("i", { class: "bi bi-terminal" }),
46501
47037
  createTextVNode(" 执行结果 ")
46502
47038
  ], -1)),
46503
47039
  createBaseVNode("button", {
46504
47040
  class: "btn btn-outline-secondary btn-sm",
46505
47041
  onClick: clearResults
46506
- }, [..._cache[27] || (_cache[27] = [
47042
+ }, [..._cache[75] || (_cache[75] = [
46507
47043
  createBaseVNode("i", { class: "bi bi-trash" }, null, -1),
46508
47044
  createTextVNode(" 清空 ", -1)
46509
47045
  ])])
@@ -46513,7 +47049,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46513
47049
  ref_key: "resultsContentRef",
46514
47050
  ref: resultsContentRef
46515
47051
  }, [
46516
- executionResults.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_3$4, [..._cache[29] || (_cache[29] = [
47052
+ executionResults.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_46$2, [..._cache[77] || (_cache[77] = [
46517
47053
  createBaseVNode("i", { class: "bi bi-inbox" }, null, -1),
46518
47054
  createBaseVNode("p", null, "暂无执行结果", -1)
46519
47055
  ])])) : createCommentVNode("", true),
@@ -46526,22 +47062,22 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46526
47062
  class: "result-header",
46527
47063
  onClick: ($event) => toggleResult(index)
46528
47064
  }, [
46529
- createBaseVNode("div", _hoisted_5$4, [
47065
+ createBaseVNode("div", _hoisted_48$2, [
46530
47066
  createBaseVNode("i", {
46531
47067
  class: normalizeClass(getResultIcon(result.status))
46532
47068
  }, null, 2),
46533
- createBaseVNode("span", _hoisted_6$4, toDisplayString(result.operation), 1),
46534
- createBaseVNode("span", _hoisted_7$4, toDisplayString(result.timestamp), 1)
47069
+ createBaseVNode("span", _hoisted_49$2, toDisplayString(result.operation), 1),
47070
+ createBaseVNode("span", _hoisted_50$2, toDisplayString(result.timestamp), 1)
46535
47071
  ]),
46536
47072
  createBaseVNode("i", {
46537
47073
  class: normalizeClass(["bi bi-chevron-down toggle-icon", { "expanded": result.expanded }])
46538
47074
  }, null, 2)
46539
- ], 8, _hoisted_4$4),
46540
- result.expanded ? (openBlock(), createElementBlock("div", _hoisted_8$4, [
47075
+ ], 8, _hoisted_47$2),
47076
+ result.expanded ? (openBlock(), createElementBlock("div", _hoisted_51$2, [
46541
47077
  createBaseVNode("pre", null, [
46542
47078
  createBaseVNode("code", {
46543
47079
  innerHTML: highlightJson(result.data)
46544
- }, null, 8, _hoisted_9$4)
47080
+ }, null, 8, _hoisted_52$2)
46545
47081
  ])
46546
47082
  ])) : createCommentVNode("", true)
46547
47083
  ], 2);
@@ -46552,44 +47088,44 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46552
47088
  class: normalizeClass(["modal fade", { show: restoreModalVisible.value }]),
46553
47089
  style: normalizeStyle({ display: restoreModalVisible.value ? "block" : "none", zIndex: 1055 })
46554
47090
  }, [
46555
- createBaseVNode("div", _hoisted_10$4, [
46556
- createBaseVNode("div", _hoisted_11$4, [
47091
+ createBaseVNode("div", _hoisted_53$2, [
47092
+ createBaseVNode("div", _hoisted_54$2, [
46557
47093
  createBaseVNode("div", { class: "modal-header" }, [
46558
- _cache[30] || (_cache[30] = createBaseVNode("h5", { class: "modal-title" }, "恢复数据库", -1)),
47094
+ _cache[78] || (_cache[78] = createBaseVNode("h5", { class: "modal-title" }, "恢复数据库", -1)),
46559
47095
  createBaseVNode("button", {
46560
47096
  type: "button",
46561
47097
  class: "btn-close",
46562
47098
  onClick: closeRestoreModal
46563
47099
  })
46564
47100
  ]),
46565
- createBaseVNode("div", _hoisted_12$4, [
46566
- _cache[32] || (_cache[32] = createBaseVNode("p", null, "请选择要恢复的备份文件:", -1)),
46567
- createBaseVNode("div", _hoisted_13$4, [
47101
+ createBaseVNode("div", _hoisted_55$2, [
47102
+ _cache[80] || (_cache[80] = createBaseVNode("p", null, "请选择要恢复的备份文件:", -1)),
47103
+ createBaseVNode("div", _hoisted_56$2, [
46568
47104
  createBaseVNode("input", {
46569
47105
  type: "file",
46570
47106
  class: "form-control",
46571
- onChange: _cache[0] || (_cache[0] = //@ts-ignore
47107
+ onChange: _cache[20] || (_cache[20] = //@ts-ignore
46572
47108
  (...args) => _ctx.handleFileChange && _ctx.handleFileChange(...args)),
46573
47109
  accept: ".sql,.bak"
46574
47110
  }, null, 32)
46575
47111
  ]),
46576
- selectedFile.value ? (openBlock(), createElementBlock("div", _hoisted_14$4, " 已选择文件:" + toDisplayString(selectedFile.value.name), 1)) : createCommentVNode("", true),
46577
- createBaseVNode("div", _hoisted_15$4, [
47112
+ selectedFile.value ? (openBlock(), createElementBlock("div", _hoisted_57$2, " 已选择文件:" + toDisplayString(selectedFile.value.name), 1)) : createCommentVNode("", true),
47113
+ createBaseVNode("div", _hoisted_58$2, [
46578
47114
  withDirectives(createBaseVNode("input", {
46579
47115
  type: "checkbox",
46580
47116
  class: "form-check-input",
46581
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => restoreOptions.value.dropExisting = $event),
47117
+ "onUpdate:modelValue": _cache[21] || (_cache[21] = ($event) => restoreOptions.value.dropExisting = $event),
46582
47118
  id: "dropExisting"
46583
47119
  }, null, 512), [
46584
47120
  [vModelCheckbox, restoreOptions.value.dropExisting]
46585
47121
  ]),
46586
- _cache[31] || (_cache[31] = createBaseVNode("label", {
47122
+ _cache[79] || (_cache[79] = createBaseVNode("label", {
46587
47123
  class: "form-check-label",
46588
47124
  for: "dropExisting"
46589
47125
  }, "删除现有表", -1))
46590
47126
  ])
46591
47127
  ]),
46592
- createBaseVNode("div", _hoisted_16$4, [
47128
+ createBaseVNode("div", _hoisted_59$2, [
46593
47129
  createBaseVNode("button", {
46594
47130
  type: "button",
46595
47131
  class: "btn btn-secondary",
@@ -46601,9 +47137,9 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46601
47137
  onClick: performRestore,
46602
47138
  disabled: !selectedFile.value
46603
47139
  }, [
46604
- restoring.value ? (openBlock(), createElementBlock("span", _hoisted_18$4)) : createCommentVNode("", true),
46605
- _cache[33] || (_cache[33] = createTextVNode(" 恢复 ", -1))
46606
- ], 8, _hoisted_17$4)
47140
+ restoring.value ? (openBlock(), createElementBlock("span", _hoisted_61$2)) : createCommentVNode("", true),
47141
+ _cache[81] || (_cache[81] = createTextVNode(" 恢复 ", -1))
47142
+ ], 8, _hoisted_60$2)
46607
47143
  ])
46608
47144
  ])
46609
47145
  ])
@@ -46612,7 +47148,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
46612
47148
  };
46613
47149
  }
46614
47150
  });
46615
- const DbTools = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-b1c1e4d6"]]);
47151
+ const DbTools = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-622732f3"]]);
46616
47152
  const _hoisted_1$3 = { class: "database-detail" };
46617
47153
  const _hoisted_2$3 = { class: "database-header" };
46618
47154
  const _hoisted_3$3 = { class: "database-header-content" };
@@ -47539,7 +48075,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
47539
48075
  };
47540
48076
  }
47541
48077
  });
47542
- const DatabaseDetail = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-fd20d470"]]);
48078
+ const DatabaseDetail = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-7ce335e1"]]);
47543
48079
  const _hoisted_1$2 = { class: "modal-dialog modal-lg" };
47544
48080
  const _hoisted_2$2 = { class: "modal-content" };
47545
48081
  const _hoisted_3$2 = {
@@ -47948,7 +48484,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
47948
48484
  };
47949
48485
  }
47950
48486
  });
47951
- const DataEditor = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-bc488007"]]);
48487
+ const DataEditor = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-dc8f434a"]]);
47952
48488
  const _hoisted_1$1 = { class: "table-detail" };
47953
48489
  const _hoisted_2$1 = { class: "table-header" };
47954
48490
  const _hoisted_3$1 = { class: "table-header-content" };
@@ -49140,7 +49676,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
49140
49676
  };
49141
49677
  }
49142
49678
  });
49143
- const TableDetail = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-131c5ea4"]]);
49679
+ const TableDetail = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-23851444"]]);
49144
49680
  const _hoisted_1 = { class: "database-explorer" };
49145
49681
  const _hoisted_2 = { class: "explorer-layout" };
49146
49682
  const _hoisted_3 = { class: "explorer-sidebar" };
@@ -50085,7 +50621,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
50085
50621
  };
50086
50622
  }
50087
50623
  });
50088
- const explorer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f2a7bdef"]]);
50624
+ const explorer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-54c47218"]]);
50089
50625
  export {
50090
50626
  explorer as default
50091
50627
  };