Browse Source

上传当前版本

main
liwei1dao 3 months ago
parent
commit
1d25322437
  1. 2
      apps/admin/.nuxt/components.d.ts
  2. 2
      apps/admin/.nuxt/imports.d.ts
  3. 2
      apps/admin/.nuxt/manifest/latest.json
  4. 1
      apps/admin/.nuxt/manifest/meta/1a398374-98c8-4def-95d3-61ae1c7c5483.json
  5. 2
      apps/admin/.nuxt/manifest/meta/dev.json
  6. 6
      apps/admin/.nuxt/nitro.json
  7. 2
      apps/admin/.nuxt/nuxt.d.ts
  8. 9
      apps/admin/.nuxt/nuxt.lock
  9. 2
      apps/admin/.nuxt/nuxt.node.d.ts
  10. 2
      apps/admin/.nuxt/tailwind/postcss.mjs
  11. 4
      apps/admin/.nuxt/tsconfig.app.json
  12. 2
      apps/admin/.nuxt/tsconfig.json
  13. 2
      apps/admin/.nuxt/tsconfig.shared.json
  14. 2
      apps/admin/.nuxt/types/build.d.ts
  15. 2
      apps/admin/.nuxt/types/components.d.ts
  16. 9
      apps/admin/.nuxt/types/imports.d.ts
  17. 9
      apps/admin/.nuxt/types/plugins.d.ts
  18. 2
      apps/admin/.output/nitro.json
  19. 1
      apps/admin/.output/public/_nuxt/0ubqzWuP.js
  20. 2
      apps/admin/.output/public/_nuxt/1YPtusTp.js
  21. 1
      apps/admin/.output/public/_nuxt/6n4fu-B8.js
  22. 1
      apps/admin/.output/public/_nuxt/9B2ftqmN.js
  23. 1
      apps/admin/.output/public/_nuxt/B3ns_poC.js
  24. 1
      apps/admin/.output/public/_nuxt/BIBu1qhq.js
  25. 1
      apps/admin/.output/public/_nuxt/BL6E8nSe.js
  26. 1
      apps/admin/.output/public/_nuxt/BMr4oSI7.js
  27. 1
      apps/admin/.output/public/_nuxt/BVGGsVu4.js
  28. 1
      apps/admin/.output/public/_nuxt/B_JvM6BO.js
  29. 1
      apps/admin/.output/public/_nuxt/BbMitk9t.js
  30. 1
      apps/admin/.output/public/_nuxt/BeU4EYjt.js
  31. 4
      apps/admin/.output/public/_nuxt/Bi5c3E0c.js
  32. 2
      apps/admin/.output/public/_nuxt/BroHRKpP.js
  33. 1
      apps/admin/.output/public/_nuxt/Bxcdr2qc.js
  34. 1
      apps/admin/.output/public/_nuxt/C2sLAWj2.js
  35. 4
      apps/admin/.output/public/_nuxt/CACbmIlS.js
  36. 1
      apps/admin/.output/public/_nuxt/CF8arGVK.js
  37. 6
      apps/admin/.output/public/_nuxt/CTAruH_8.js
  38. 1
      apps/admin/.output/public/_nuxt/CVUxyiJx.js
  39. 1
      apps/admin/.output/public/_nuxt/CZnZfJ5f.js
  40. 1
      apps/admin/.output/public/_nuxt/CnkSDgVO.js
  41. 2
      apps/admin/.output/public/_nuxt/CnuHOwQV.js
  42. 1
      apps/admin/.output/public/_nuxt/Cx-e2Cok.js
  43. 8
      apps/admin/.output/public/_nuxt/Cy8zKM7T.js
  44. 1
      apps/admin/.output/public/_nuxt/D9HxoMhB.js
  45. 1
      apps/admin/.output/public/_nuxt/DGXiXcCA.js
  46. 1
      apps/admin/.output/public/_nuxt/DN5T-G_F.js
  47. 1
      apps/admin/.output/public/_nuxt/DNKl-FHZ.js
  48. 1
      apps/admin/.output/public/_nuxt/Do83zqYq.js
  49. 2
      apps/admin/.output/public/_nuxt/DpWhlKu2.js
  50. 1
      apps/admin/.output/public/_nuxt/Dqy3UYuS.js
  51. 1
      apps/admin/.output/public/_nuxt/Dw5yL0ut.js
  52. 1
      apps/admin/.output/public/_nuxt/EIJPD_ga.js
  53. 1
      apps/admin/.output/public/_nuxt/FZLr1rN5.js
  54. 1
      apps/admin/.output/public/_nuxt/GZxzc1Rc.js
  55. 1
      apps/admin/.output/public/_nuxt/KP2C5FJ6.js
  56. 2
      apps/admin/.output/public/_nuxt/P2ZWRt51.js
  57. 1
      apps/admin/.output/public/_nuxt/UoJ1COMF.js
  58. 1
      apps/admin/.output/public/_nuxt/appconfig.j94fgYL_.css
  59. 1
      apps/admin/.output/public/_nuxt/apps.B7hnJBQU.css
  60. 2
      apps/admin/.output/public/_nuxt/builds/latest.json
  61. 1
      apps/admin/.output/public/_nuxt/builds/meta/1539df2f-ed1e-4567-85ef-b3b4ac8648ab.json
  62. 1
      apps/admin/.output/public/_nuxt/builds/meta/ec4737f4-4bc1-4016-bf94-c7164a1b5e0d.json
  63. 1
      apps/admin/.output/public/_nuxt/dashboard.DGy90zSJ.css
  64. 1
      apps/admin/.output/public/_nuxt/dashboard.bI0rfjl_.css
  65. 1
      apps/admin/.output/public/_nuxt/default.miyQHb0v.css
  66. 1
      apps/admin/.output/public/_nuxt/dltdoXck.js
  67. 1
      apps/admin/.output/public/_nuxt/entry.BUc396Qi.css
  68. 1
      apps/admin/.output/public/_nuxt/entry.DS97S_sV.css
  69. 1
      apps/admin/.output/public/_nuxt/lLLegusN.js
  70. 1
      apps/admin/.output/public/_nuxt/p0Tfj-xC.js
  71. 1
      apps/admin/.output/public/_nuxt/serviceconfig.Io3AqtMK.css
  72. 1
      apps/admin/.output/public/_nuxt/serviceconfig.htjoqj-Q.css
  73. 1
      apps/admin/.output/public/_nuxt/systemconfig.DaWusDMu.css
  74. 1
      apps/admin/.output/public/_nuxt/uwVesjjP.js
  75. 4
      apps/admin/.output/public/_nuxt/v5y5DMRc.js
  76. 7
      apps/admin/.output/public/_nuxt/vesedpp3.js
  77. 1
      apps/admin/.output/public/_nuxt/yUUyh6cG.js
  78. 8
      apps/admin/.output/server/chunks/build/LangSelect-styles.C7_U3Izz.mjs
  79. 1
      apps/admin/.output/server/chunks/build/LangSelect-styles.C7_U3Izz.mjs.map
  80. 8
      apps/admin/.output/server/chunks/build/accounts-BlBS367g.mjs
  81. 1
      apps/admin/.output/server/chunks/build/accounts-BlBS367g.mjs.map
  82. 1
      apps/admin/.output/server/chunks/build/accounts-Bou39dJh.mjs.map
  83. 192
      apps/admin/.output/server/chunks/build/appconfig-b7qb0UVr.mjs
  84. 1
      apps/admin/.output/server/chunks/build/appconfig-b7qb0UVr.mjs.map
  85. 8
      apps/admin/.output/server/chunks/build/appconfig-styles.C960WaXM.mjs
  86. 1
      apps/admin/.output/server/chunks/build/appconfig-styles.C960WaXM.mjs.map
  87. 140
      apps/admin/.output/server/chunks/build/apps-DL1E6wot.mjs
  88. 1
      apps/admin/.output/server/chunks/build/apps-DL1E6wot.mjs.map
  89. 273
      apps/admin/.output/server/chunks/build/apps-DkgvJNjV.mjs
  90. 1
      apps/admin/.output/server/chunks/build/apps-DkgvJNjV.mjs.map
  91. 8
      apps/admin/.output/server/chunks/build/apps-styles._bNp0Sh6.mjs
  92. 1
      apps/admin/.output/server/chunks/build/apps-styles._bNp0Sh6.mjs.map
  93. 8
      apps/admin/.output/server/chunks/build/calltranslate-B1hhAqN7.mjs
  94. 1
      apps/admin/.output/server/chunks/build/calltranslate-B1hhAqN7.mjs.map
  95. 1
      apps/admin/.output/server/chunks/build/calltranslate-C6glzS4R.mjs.map
  96. 2
      apps/admin/.output/server/chunks/build/client.precomputed.mjs
  97. 8
      apps/admin/.output/server/chunks/build/code-BQgGcfFH.mjs
  98. 1
      apps/admin/.output/server/chunks/build/code-BQgGcfFH.mjs.map
  99. 1
      apps/admin/.output/server/chunks/build/code-Bi0p3nMD.mjs.map
  100. 50
      apps/admin/.output/server/chunks/build/dashboard-BeG8w5Q7.mjs

2
apps/admin/.nuxt/components.d.ts

@ -16,6 +16,7 @@ type LazyComponent<T> = DefineComponent<HydrationStrategies, {}, {}, {}, {}, {},
export const AppLoading: typeof import("../app/components/AppLoading.vue")['default']
export const AppToast: typeof import("../app/components/AppToast.vue")['default']
export const LangSelect: typeof import("../app/components/LangSelect.vue")['default']
export const NuxtWelcome: typeof import("../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/welcome.vue")['default']
export const NuxtLayout: typeof import("../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/nuxt-layout")['default']
export const NuxtErrorBoundary: typeof import("../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default']
@ -42,6 +43,7 @@ export const Body: typeof import("../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin
export const NuxtIsland: typeof import("../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/nuxt-island")['default']
export const LazyAppLoading: LazyComponent<typeof import("../app/components/AppLoading.vue")['default']>
export const LazyAppToast: LazyComponent<typeof import("../app/components/AppToast.vue")['default']>
export const LazyLangSelect: LazyComponent<typeof import("../app/components/LangSelect.vue")['default']>
export const LazyNuxtWelcome: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/welcome.vue")['default']>
export const LazyNuxtLayout: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/nuxt-layout")['default']>
export const LazyNuxtErrorBoundary: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default']>

2
apps/admin/.nuxt/imports.d.ts

@ -32,8 +32,8 @@ export { setInterval } from '#app/compat/interval';
export { definePageMeta, PageMeta } from '#app/composables/pages';
export { defineLazyHydrationComponent } from '#app/composables/lazy-hydration';
export { useApi } from '../app/composables/useApi';
export { LANG_OPTIONS, langName, LangOption } from '../app/composables/useLangOptions';
export { useLoading } from '../app/composables/useLoading';
export { useToast, ToastType, Toast } from '../app/composables/useToast';
export { IDENTITY_LABELS, useAuthStore } from '../app/stores/auth';
export { defineStore, acceptHMRUpdate, usePinia, storeToRefs } from '../node_modules/.pnpm/@pinia+nuxt@0.11.3_magicast@0.5.3_pinia@3.0.4_typescript@5.9.3_vue@3.5.38_typescript@5.9.3__/node_modules/@pinia/nuxt/dist/runtime/composables';
export { useNuxtDevTools } from '../node_modules/.pnpm/@nuxt+devtools@3.2.4_vite@7.3.5_jiti@2.7.0_terser@5.48.0_yaml@2.9.0__vue@3.5.38_typescript@5.9.3_/node_modules/@nuxt/devtools/dist/runtime/use-nuxt-devtools';

2
apps/admin/.nuxt/manifest/latest.json

@ -1 +1 @@
{"id":"dev","timestamp":1782719244117}
{"id":"dev","timestamp":1782957264073}

1
apps/admin/.nuxt/manifest/meta/1a398374-98c8-4def-95d3-61ae1c7c5483.json

@ -0,0 +1 @@
{}

2
apps/admin/.nuxt/manifest/meta/dev.json

@ -1 +1 @@
{"id":"dev","timestamp":1782719244117,"prerendered":[]}
{"id":"dev","timestamp":1782957264073,"prerendered":[]}

6
apps/admin/.nuxt/nitro.json

@ -1,5 +1,5 @@
{
"date": "2026-06-29T07:47:25.178Z",
"date": "2026-07-02T01:54:25.086Z",
"preset": "nitro-dev",
"framework": {
"name": "nuxt",
@ -9,9 +9,9 @@
"nitro": "2.13.4"
},
"dev": {
"pid": 9287,
"pid": 58824,
"workerAddress": {
"socketPath": "/var/folders/1w/40ft_rjj7qx8xn21kb1lj51r0000gn/T/nitro-worker-9287-1-1-5267.sock"
"socketPath": "/var/folders/1w/40ft_rjj7qx8xn21kb1lj51r0000gn/T/nitro-worker-58824-1-1-597.sock"
}
}
}

2
apps/admin/.nuxt/nuxt.d.ts

@ -1,5 +1,5 @@
/// <reference types="@pinia/nuxt" />
/// <reference types="@nuxtjs/tailwindcss" />
/// <reference types="@pinia/nuxt" />
/// <reference types="@nuxt/devtools" />
/// <reference types="@nuxt/telemetry" />
/// <reference path="types/nitro-layouts.d.ts" />

9
apps/admin/.nuxt/nuxt.lock

@ -1,9 +0,0 @@
{
"pid": 9287,
"startedAt": 1782719243662,
"command": "dev",
"cwd": "/Users/liwei/work/go/yunyan/yunyan-sas/apps/admin",
"port": 3000,
"hostname": "::1",
"url": "http://[::1]:3000"
}

2
apps/admin/.nuxt/nuxt.node.d.ts

@ -1,5 +1,5 @@
/// <reference types="@pinia/nuxt" />
/// <reference types="@nuxtjs/tailwindcss" />
/// <reference types="@pinia/nuxt" />
/// <reference types="@nuxt/devtools" />
/// <reference types="@nuxt/telemetry" />
/// <reference path="types/nitro-layouts.d.ts" />

2
apps/admin/.nuxt/tailwind/postcss.mjs

@ -1,4 +1,4 @@
// generated by the @nuxtjs/tailwindcss <https://github.com/nuxt-modules/tailwindcss> module at 6/29/2026, 5:27:44 PM
// generated by the @nuxtjs/tailwindcss <https://github.com/nuxt-modules/tailwindcss> module at 7/2/2026, 8:24:14 PM
import "@nuxtjs/tailwindcss/config-ctx"
import configMerger from "@nuxtjs/tailwindcss/merger";

4
apps/admin/.nuxt/tsconfig.app.json

@ -107,7 +107,7 @@
"./imports"
],
"#app-manifest": [
"./manifest/meta/dev.json"
"./manifest/meta/1a398374-98c8-4def-95d3-61ae1c7c5483.json"
],
"#components": [
"./components"
@ -197,7 +197,7 @@
"../node_modules/.pnpm/@nuxt+telemetry@2.8.0_@nuxt+kit@4.4.8_magicast@0.5.3_/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxt+telemetry@2.8.0_@nuxt+kit@4.4.8_magicast@0.5.3_/node_modules/*.*",
"../node_modules/.pnpm/@nuxt+telemetry@2.8.0_@nuxt+kit@4.4.8_magicast@0.5.3_/node_modules/dist/*.*",
"dev",
"../.output",
"../server"
],
"vueCompilerOptions": {

2
apps/admin/.nuxt/tsconfig.json

@ -107,7 +107,7 @@
"./imports"
],
"#app-manifest": [
"./manifest/meta/dev.json"
"./manifest/meta/1a398374-98c8-4def-95d3-61ae1c7c5483.json"
],
"#components": [
"./components"

2
apps/admin/.nuxt/tsconfig.shared.json

@ -107,7 +107,7 @@
"./imports"
],
"#app-manifest": [
"./manifest/meta/dev.json"
"./manifest/meta/1a398374-98c8-4def-95d3-61ae1c7c5483.json"
],
"#build": [
"."

2
apps/admin/.nuxt/types/build.d.ts

@ -12,8 +12,6 @@ declare module "#build/paths.mjs";
declare module "#build/root-component.mjs";
declare module "#build/plugins.server.mjs";
declare module "#build/test-component-wrapper.mjs";
declare module "#build/devtools/settings.mjs";
declare module "#build/runtime.vue-devtools-client.8eTWAfLgVpINiZM922q1ozAHX8JlyUM2pBnpX1z932g.js";
declare module "#build/routes.mjs";
declare module "#build/pages.mjs";
declare module "#build/router.options.mjs";

2
apps/admin/.nuxt/types/components.d.ts

@ -16,6 +16,7 @@ type LazyComponent<T> = DefineComponent<HydrationStrategies, {}, {}, {}, {}, {},
interface _GlobalComponents {
AppLoading: typeof import("../../app/components/AppLoading.vue")['default']
AppToast: typeof import("../../app/components/AppToast.vue")['default']
LangSelect: typeof import("../../app/components/LangSelect.vue")['default']
NuxtWelcome: typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/welcome.vue")['default']
NuxtLayout: typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/nuxt-layout")['default']
NuxtErrorBoundary: typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default']
@ -42,6 +43,7 @@ interface _GlobalComponents {
NuxtIsland: typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/nuxt-island")['default']
LazyAppLoading: LazyComponent<typeof import("../../app/components/AppLoading.vue")['default']>
LazyAppToast: LazyComponent<typeof import("../../app/components/AppToast.vue")['default']>
LazyLangSelect: LazyComponent<typeof import("../../app/components/LangSelect.vue")['default']>
LazyNuxtWelcome: LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/welcome.vue")['default']>
LazyNuxtLayout: LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/nuxt-layout")['default']>
LazyNuxtErrorBoundary: LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default']>

9
apps/admin/.nuxt/types/imports.d.ts

@ -2,6 +2,7 @@
export {}
declare global {
const IDENTITY_LABELS: typeof import('../../app/stores/auth').IDENTITY_LABELS
const LANG_OPTIONS: typeof import('../../app/composables/useLangOptions').LANG_OPTIONS
const abortNavigation: typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/router').abortNavigation
const acceptHMRUpdate: typeof import('../../node_modules/.pnpm/@pinia+nuxt@0.11.3_magicast@0.5.3_pinia@3.0.4_typescript@5.9.3_vue@3.5.38_typescript@5.9.3__/node_modules/@pinia/nuxt/dist/runtime/composables').acceptHMRUpdate
const addRouteMiddleware: typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/router').addRouteMiddleware
@ -47,6 +48,7 @@ declare global {
const isShallow: typeof import('vue').isShallow
const isVue2: typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/compat/vue-demi').isVue2
const isVue3: typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/compat/vue-demi').isVue3
const langName: typeof import('../../app/composables/useLangOptions').langName
const loadPayload: typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/payload').loadPayload
const markRaw: typeof import('vue').markRaw
const navigateTo: typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/router').navigateTo
@ -123,7 +125,6 @@ declare global {
const useModel: typeof import('vue').useModel
const useNuxtApp: typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/nuxt').useNuxtApp
const useNuxtData: typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/asyncData').useNuxtData
const useNuxtDevTools: typeof import('../../node_modules/.pnpm/@nuxt+devtools@3.2.4_vite@7.3.5_jiti@2.7.0_terser@5.48.0_yaml@2.9.0__vue@3.5.38_typescript@5.9.3_/node_modules/@nuxt/devtools/dist/runtime/use-nuxt-devtools').useNuxtDevTools
const usePinia: typeof import('../../node_modules/.pnpm/@pinia+nuxt@0.11.3_magicast@0.5.3_pinia@3.0.4_typescript@5.9.3_vue@3.5.38_typescript@5.9.3__/node_modules/@pinia/nuxt/dist/runtime/composables').usePinia
const usePreviewMode: typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/preview').usePreviewMode
const useRequestEvent: typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/ssr').useRequestEvent
@ -210,6 +211,9 @@ declare global {
export type { PageMeta } from '../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/pages'
import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/pages')
// @ts-ignore
export type { LangOption } from '../../app/composables/useLangOptions'
import('../../app/composables/useLangOptions')
// @ts-ignore
export type { ToastType, Toast } from '../../app/composables/useToast'
import('../../app/composables/useToast')
}
@ -218,6 +222,7 @@ import { UnwrapRef } from 'vue'
declare module 'vue' {
interface ComponentCustomProperties {
readonly IDENTITY_LABELS: UnwrapRef<typeof import('../../app/stores/auth')['IDENTITY_LABELS']>
readonly LANG_OPTIONS: UnwrapRef<typeof import('../../app/composables/useLangOptions')['LANG_OPTIONS']>
readonly abortNavigation: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/router')['abortNavigation']>
readonly acceptHMRUpdate: UnwrapRef<typeof import('../../node_modules/.pnpm/@pinia+nuxt@0.11.3_magicast@0.5.3_pinia@3.0.4_typescript@5.9.3_vue@3.5.38_typescript@5.9.3__/node_modules/@pinia/nuxt/dist/runtime/composables')['acceptHMRUpdate']>
readonly addRouteMiddleware: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/router')['addRouteMiddleware']>
@ -263,6 +268,7 @@ declare module 'vue' {
readonly isShallow: UnwrapRef<typeof import('vue')['isShallow']>
readonly isVue2: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/compat/vue-demi')['isVue2']>
readonly isVue3: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/compat/vue-demi')['isVue3']>
readonly langName: UnwrapRef<typeof import('../../app/composables/useLangOptions')['langName']>
readonly loadPayload: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/payload')['loadPayload']>
readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
readonly navigateTo: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/router')['navigateTo']>
@ -339,7 +345,6 @@ declare module 'vue' {
readonly useModel: UnwrapRef<typeof import('vue')['useModel']>
readonly useNuxtApp: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/nuxt')['useNuxtApp']>
readonly useNuxtData: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/asyncData')['useNuxtData']>
readonly useNuxtDevTools: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxt+devtools@3.2.4_vite@7.3.5_jiti@2.7.0_terser@5.48.0_yaml@2.9.0__vue@3.5.38_typescript@5.9.3_/node_modules/@nuxt/devtools/dist/runtime/use-nuxt-devtools')['useNuxtDevTools']>
readonly usePinia: UnwrapRef<typeof import('../../node_modules/.pnpm/@pinia+nuxt@0.11.3_magicast@0.5.3_pinia@3.0.4_typescript@5.9.3_vue@3.5.38_typescript@5.9.3__/node_modules/@pinia/nuxt/dist/runtime/composables')['usePinia']>
readonly usePreviewMode: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/preview')['usePreviewMode']>
readonly useRequestEvent: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/composables/ssr')['useRequestEvent']>

9
apps/admin/.nuxt/types/plugins.d.ts

@ -10,27 +10,20 @@ type NuxtAppInjections =
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/plugins/revive-payload.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/head/runtime/plugins/unhead.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/pages/runtime/plugins/router.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/plugins/browser-devtools-timing.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/plugins/payload.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/plugins/dev-server-logs.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/plugins/navigation-repaint.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/plugins/check-outdated-build.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/plugins/revive-payload.server.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/plugins/chunk-reload.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/@pinia+nuxt@0.11.3_magicast@0.5.3_pinia@3.0.4_typescript@5.9.3_vue@3.5.38_typescript@5.9.3__/node_modules/@pinia/nuxt/dist/runtime/plugin.vue3.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/pages/runtime/plugins/prefetch.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/pages/runtime/plugins/check-if-page-unused.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/@nuxt+devtools@3.2.4_vite@7.3.5_jiti@2.7.0_terser@5.48.0_yaml@2.9.0__vue@3.5.38_typescript@5.9.3_/node_modules/@nuxt/devtools/dist/runtime/plugins/devtools.server.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/@nuxt+devtools@3.2.4_vite@7.3.5_jiti@2.7.0_terser@5.48.0_yaml@2.9.0__vue@3.5.38_typescript@5.9.3_/node_modules/@nuxt/devtools/dist/runtime/plugins/devtools.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/plugins/warn.dev.server.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/plugins/check-if-layout-used.js")> &
InjectionType<typeof import("../../app/plugins/auth.client")>
declare module '#app' {
interface NuxtApp extends NuxtAppInjections { }
interface NuxtAppLiterals {
pluginName: 'vue-devtools-client' | 'nuxt:revive-payload:client' | 'nuxt:head' | 'nuxt:router' | 'nuxt:browser-devtools-timing' | 'nuxt:payload' | 'nuxt:revive-payload:server' | 'nuxt:chunk-reload' | 'pinia' | 'nuxt:global-components' | 'nuxt:prefetch' | 'nuxt:checkIfPageUnused' | 'nuxt:checkIfLayoutUsed'
pluginName: 'nuxt:revive-payload:client' | 'nuxt:head' | 'nuxt:router' | 'nuxt:payload' | 'nuxt:revive-payload:server' | 'nuxt:chunk-reload' | 'pinia' | 'nuxt:global-components' | 'nuxt:prefetch'
}
}

2
apps/admin/.output/nitro.json

@ -1,5 +1,5 @@
{
"date": "2026-06-25T01:39:28.611Z",
"date": "2026-07-02T12:24:29.523Z",
"preset": "node-server",
"framework": {
"name": "nuxt",

1
apps/admin/.output/public/_nuxt/0ubqzWuP.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/DrdHHbY3.js → apps/admin/.output/public/_nuxt/1YPtusTp.js

@ -1 +1 @@
import{_ as t,o,c as s,I as c}from"./96IDI_OR.js";const r={},a={class:"min-h-screen","data-theme":"corporate"};function n(e,_){return o(),s("div",a,[c(e.$slots,"default")])}const l=t(r,[["render",n]]);export{l as default};
import{_ as t,o,c as s,L as c}from"./CTAruH_8.js";const r={},a={class:"min-h-screen","data-theme":"corporate"};function n(e,_){return o(),s("div",a,[c(e.$slots,"default")])}const l=t(r,[["render",n]]);export{l as default};

1
apps/admin/.output/public/_nuxt/6n4fu-B8.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/9B2ftqmN.js

@ -0,0 +1 @@
import{C as l,z as d}from"./CTAruH_8.js";import{u as h}from"./D9HxoMhB.js";async function c(n,a,i){const e=l(),u=d(),s={"Content-Type":"application/json"};e.token&&(s.Authorization=e.token),i&&Object.assign(s,i);const t=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(a)});if(!t.ok)throw new Error(`HTTP error: ${t.status}`);const o=await t.json();if(o.code===18)throw e.logout(),u.push("/"),new Error(o.msg||"Unauthorized");if(o.code!==0)throw new Error(o.msg||"Unknown error");return o.data}const w=/^(get|list|load|query|fetch|search|count|stat|export|check)/i;function y(n){return!w.test(n)}function k(){const n=l(),{begin:a,end:i}=h();async function e(t,o){const r={};if(n.currentAppId&&(r["X-App-Id"]=String(n.currentAppId)),!y(t))return c(`/web/api/api_${t}`,o??{},r);a();try{return await c(`/web/api/api_${t}`,o??{},r)}finally{i()}}async function u(t,o){return c(`/console/api/${t}`,o??{})}async function s(t,o){const r=await e("getcostoken",{path:o}),p=r.upload_url||r.url||"",f=await fetch(p,{method:"PUT",headers:{"Content-Type":t.type||"application/octet-stream"},body:t});if(!f.ok)throw new Error(`Upload failed: ${f.status}`);return p.split("?")[0]}return{webApi:e,consoleApi:u,uploadFile:s}}export{k as u};

1
apps/admin/.output/public/_nuxt/B3ns_poC.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/BIBu1qhq.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/BL6E8nSe.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/BMr4oSI7.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/BVGGsVu4.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/B_JvM6BO.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/BbMitk9t.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/BeU4EYjt.js

File diff suppressed because one or more lines are too long

4
apps/admin/.output/public/_nuxt/Bi5c3E0c.js

@ -0,0 +1,4 @@
import{g as z,j as G,K as P,c as a,a as e,d as u,k as x,p as U,F as f,r as B,m as Y,q as Z,t as n,s as i,A as E,o,n as F,l as A,_ as J}from"./CTAruH_8.js";import{u as Q}from"./9B2ftqmN.js";import{u as W}from"./lLLegusN.js";import"./D9HxoMhB.js";import"./yUUyh6cG.js";const X=globalThis.setInterval,$={class:"flex items-center justify-between mb-4 flex-wrap gap-3"},tt={class:"flex items-center gap-2 flex-wrap"},et=["value"],st={class:"flex items-center gap-1 text-xs text-slate-500 cursor-pointer"},lt={class:"flex items-center gap-4 mb-3 text-xs text-slate-500"},nt={class:"text-slate-700"},at={class:"text-slate-700"},ot={class:"text-slate-700"},rt={class:"muted"},ut={class:"panel overflow-hidden"},it={id:"logBody",style:{"max-height":"calc(100vh - 230px)","overflow-y":"auto"}},ct={key:0,class:"text-center text-slate-400 py-10"},dt={key:1,class:"text-center text-red-400 py-10"},vt={key:2,class:"text-center text-slate-400 py-10"},pt={class:"t"},mt={class:"app-name"},ft={key:0,class:"unreg",title:"该应用名未在 console 注册,快照已收到但不会写入统计库"},gt={key:1,class:"muted"},xt={class:"muted"},_t={class:"muted"},yt={class:"muted"},bt={key:0,class:"muted"},ht={class:"t"},wt={key:0,class:"late"},kt=z({__name:"statlog",setup(Ct){const{webApi:I}=Q(),{success:O,error:R}=W(),j={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?j[l]||l:"-"}const c=i([]),_=i(!1),g=i(""),L=i("-"),N=i("-"),y=i(""),v=i(0),b=i(""),h=i(""),w=i(!1);let d=null;function p(l=0){const s=new Date(Date.now()+l*864e5),t=new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).format(s);return parseInt(t.replace(/-/g,""),10)}function k(l){const s=""+l;return s.length===8?s.slice(0,4)+"-"+s.slice(4,6)+"-"+s.slice(6,8):s}function C(l){if(!l)return"--";const s=new Date(l*1e3),t=r=>r<10?"0"+r:""+r;return t(s.getHours())+":"+t(s.getMinutes())+":"+t(s.getSeconds())}function S(l){return l?"0x"+(l>>>0).toString(16).toUpperCase():"全部"}const V=E(()=>[{value:p(0),label:"今天 "+k(p(0))},{value:p(-1),label:"昨天 "+k(p(-1))}]);function M(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function H(l){return!!(l.snap_ts&&l.ts&&l.ts-l.snap_ts>120)}const T=E(()=>{const l=b.value,s=h.value.trim().toLowerCase();return c.value.filter(t=>!(l&&t.level!==l||s&&((t.app||"")+" "+(t.region||"")+" "+D(t.region)+" "+(t.product_id||"")+" "+S(t.product_id)+" "+(t.stat_day||"")).toLowerCase().indexOf(s)<0))});async function m(){_.value=!0,g.value="";try{const l=await I("getstatlogs",{day:v.value||0});c.value=l?.entries||[],L.value=l?.total!=null?l.total:c.value.length,N.value=c.value.length?C(c.value[0].ts):"--"}catch(l){g.value=l?.message||"网络异常"}finally{_.value=!1}}async function K(){const l=v.value||0,s=V.value.find(r=>r.value===l),t=s?s.label:""+l;if(window.confirm("确定清空「"+t+`」的接收流水吗?
只清除本核对面板的记录,不影响已落库的统计数据。
清空后可重新触发埋点,观察是否正常进来。`))try{const r=await I("clearstatlogs",{day:l});O("已清空 "+(r&&r.cleared!=null?r.cleared:0)+" 条"),m()}catch(r){R("清空失败:"+(r?.message||"网络异常"))}}function q(){w.value?(d=X(m,15e3),y.value="· 每 15 秒自动刷新"):(d&&clearInterval(d),d=null,y.value="")}return G(()=>{v.value=p(0),m()}),P(()=>{d&&clearInterval(d)}),(l,s)=>(o(),a("div",null,[e("div",$,[s[6]||(s[6]=e("div",null,[e("h2",{class:"text-lg font-bold text-slate-700"},"统计日志"),e("p",{class:"text-xs text-slate-400 mt-0.5"},[u("console 从 NATS 收到的「当日统计快照」接收流水(最新在前,按接收时间分天存 Redis)。各业务部署每个同步周期/启动时/0点 推送一次当日绝对快照,console 收到后覆盖落库。用于核对每个部署是否在正常汇报;带 "),e("span",{class:"unreg"},"未注册"),u(" 的应用快照已收到但"),e("b",null,"不会落库"),u("(应用名需与 console 注册表完全一致)。")])],-1)),e("div",tt,[x(e("select",{"onUpdate:modelValue":s[0]||(s[0]=t=>v.value=t),class:"select select-bordered select-sm",onChange:m},[(o(!0),a(f,null,B(V.value,t=>(o(),a("option",{key:t.value,value:t.value},n(t.label),9,et))),128))],544),[[U,v.value,void 0,{number:!0}]]),x(e("select",{"onUpdate:modelValue":s[1]||(s[1]=t=>b.value=t),class:"select select-bordered select-sm"},[...s[4]||(s[4]=[e("option",{value:""},"全部级别",-1),e("option",{value:"info"},"已落库",-1),e("option",{value:"warn"},"未落库",-1),e("option",{value:"error"},"解析失败",-1)])],512),[[U,b.value]]),x(e("input",{"onUpdate:modelValue":s[2]||(s[2]=t=>h.value=t),class:"input input-bordered input-sm w-44",placeholder:"筛选 应用/区域/产品"},null,512),[[Y,h.value]]),e("label",st,[x(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>w.value=t),type:"checkbox",class:"checkbox checkbox-xs",onChange:q},null,544),[[Z,w.value]]),s[5]||(s[5]=u(" 自动刷新 ",-1))]),e("button",{class:"btn btn-primary btn-sm text-white",onClick:m},"刷新"),e("button",{class:"btn btn-outline btn-error btn-sm",title:"清空本日核对流水(不影响已落库的统计数据),清空后可重新观察埋点是否正常进来",onClick:K},"清空本日")])]),e("div",lt,[e("span",null,[s[7]||(s[7]=u("该日保留 ",-1)),e("b",nt,n(L.value),1),s[8]||(s[8]=u(" 条",-1))]),e("span",null,[s[9]||(s[9]=u("当前显示 ",-1)),e("b",at,n(T.value.length),1),s[10]||(s[10]=u(" 条",-1))]),e("span",null,[s[11]||(s[11]=u("最近接收 ",-1)),e("b",ot,n(N.value),1)]),e("span",rt,n(y.value),1)]),e("div",ut,[s[12]||(s[12]=e("div",{id:"logHead"},[e("div",null,"接收时间"),e("div",null,"级别"),e("div",null,"应用 · 区域 · 产品"),e("div",null,"统计日"),e("div",null,"指标摘要 / 说明"),e("div",null,"快照时间")],-1)),e("div",it,[_.value?(o(),a("div",ct,"加载中...")):g.value?(o(),a("div",dt,"加载失败:"+n(g.value),1)):T.value.length?(o(!0),a(f,{key:3},B(T.value,(t,r)=>(o(),a("div",{key:r,class:"logrow"},[e("div",pt,n(C(t.ts)),1),e("div",null,[e("span",{class:F(["lv",M(t.level).cls])},n(M(t.level).txt),3)]),e("div",null,[t.app?(o(),a(f,{key:0},[e("span",mt,n(t.app),1),t.registered?A("",!0):(o(),a("span",ft,"未注册"))],64)):(o(),a("span",gt,"(无应用名)")),e("span",xt," · "+n(D(t.region)),1),e("span",_t," · "+n(S(t.product_id)),1)]),e("div",yt,n(t.stat_day?k(t.stat_day):"-"),1),e("div",null,[t.msg?(o(),a(f,{key:0},[e("span",{class:F(t.level==="error"?"text-red-600":"text-amber-600")},n(t.msg),3),t.summary?(o(),a("span",bt," · "+n(t.summary),1)):A("",!0)],64)):(o(),a(f,{key:1},[u(n(t.summary||"无增量"),1)],64))]),e("div",ht,[u(n(C(t.snap_ts)),1),H(t)?(o(),a("span",wt,"迟到"+n(t.ts-t.snap_ts)+"s",1)):A("",!0)])]))),128)):(o(),a("div",vt,n(c.value.length?"无匹配记录":"该日暂无接收记录"),1))])])]))}}),Nt=J(kt,[["__scopeId","data-v-742ee359"]]);export{Nt as default};

2
apps/admin/.output/public/_nuxt/BlypHpHg.js → apps/admin/.output/public/_nuxt/BroHRKpP.js

@ -1 +1 @@
import{_ as s}from"./0ubqzWuP.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./96IDI_OR.js";import{u as f}from"./C5ETpaZb.js";const p={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},m={class:"max-w-520px text-center"},h=["textContent"],b=["textContent"],x=["textContent"],g={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:404},statusText:{type:String,default:"Page not found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(e){const r=e;return f({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,_)=>{const o=s;return i(),u("div",p,[t("div",m,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:n(e.status)},null,8,h),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:n(e.statusText)},null,8,b),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:n(e.description)},null,8,x),t("div",g,[c(o,{to:"/",class:"font-medium hover:text-[#00DC82] text-sm underline underline-offset-3"},{default:l(()=>[d(n(e.backHome),1)]),_:1})])])])}}},z=a(y,[["__scopeId","data-v-52418c85"]]);export{z as default};
import{_ as s}from"./CnkSDgVO.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./CTAruH_8.js";import{u as f}from"./DpWhlKu2.js";const p={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},m={class:"max-w-520px text-center"},h=["textContent"],b=["textContent"],x=["textContent"],g={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:404},statusText:{type:String,default:"Page not found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(e){const r=e;return f({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,_)=>{const o=s;return i(),u("div",p,[t("div",m,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:n(e.status)},null,8,h),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:n(e.statusText)},null,8,b),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:n(e.description)},null,8,x),t("div",g,[c(o,{to:"/",class:"font-medium hover:text-[#00DC82] text-sm underline underline-offset-3"},{default:l(()=>[d(n(e.backHome),1)]),_:1})])])])}}},z=a(y,[["__scopeId","data-v-52418c85"]]);export{z as default};

1
apps/admin/.output/public/_nuxt/Bxcdr2qc.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/C2sLAWj2.js

File diff suppressed because one or more lines are too long

4
apps/admin/.output/public/_nuxt/CACbmIlS.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/CF8arGVK.js

File diff suppressed because one or more lines are too long

6
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/96IDI_OR.js → apps/admin/.output/public/_nuxt/CTAruH_8.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/CVUxyiJx.js

@ -1 +0,0 @@
import{e as f,a3 as r,a4 as c}from"./96IDI_OR.js";const p="$s";function l(...o){const n=typeof o[o.length-1]=="string"?o.pop():void 0;typeof o[0]!="string"&&o.unshift(n);const[e,t]=o;if(!e||typeof e!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+e);if(t!==void 0&&typeof t!="function")throw new Error("[nuxt] [useState] init must be a function: "+t);const s=p+e,i=f(),u=r(i.payload.state,s);if(t&&(i._state[s]??={_default:t}),u.value===void 0&&t){const a=t();if(c(a))return i.payload.state[s]=a,a;u.value=a}return u}let y=0;function d(){const o=l("app:toasts",()=>[]);function n(e,t="info",s=3e3){const i=++y;o.value.push({id:i,type:t,msg:e}),s>0&&setTimeout(()=>{o.value=o.value.filter(u=>u.id!==i)},s)}return{toasts:o,toast:n,success:(e,t)=>n(e,"success",t),error:(e,t)=>n(e,"error",t),info:(e,t)=>n(e,"info",t),warn:(e,t)=>n(e,"warning",t)}}export{d as u};

1
apps/admin/.output/public/_nuxt/CZnZfJ5f.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/CnkSDgVO.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/RqmPeXlN.js → apps/admin/.output/public/_nuxt/CnuHOwQV.js

@ -1 +1 @@
import{g as h,y as x,z as w,j as y,c as r,a as e,t as d,l as b,A as _,k as v,m as g,n as k,x as A,s as u,o as p,_ as M}from"./96IDI_OR.js";const z={class:"login-bg flex items-center justify-center px-4"},B={class:"login-card"},C={class:"text-center"},S={style:{"font-size":"22px","font-weight":"700",color:"#0F172A",margin:"0 0 4px"}},T={key:0,class:"login-error show"},V={style:{width:"16px",height:"16px","flex-shrink":"0"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},j={style:{"margin-bottom":"16px"}},D={style:{"margin-bottom":"24px"}},q=h({__name:"index",setup(L){const a=x(),c=w(),o=A({account:"",password:""}),l=u(!1),n=u(""),m=u("Admin");y(async()=>{if(a.restore(),a.token){c.push("/dashboard");return}try{const t=(await $fetch("/web/api/api_getsiteinfo",{method:"POST",body:{}}))?.data?.sitename;t&&(m.value=t+" Admin",a.setSiteTitle(t))}catch{}});async function f(){l.value=!0,n.value="";try{const s=await $fetch("/web/api/api_login",{method:"POST",body:{account:o.account,password:o.password}});s.code===0&&s.data?(a.setLoginData(s.data),c.push("/dashboard")):n.value=s.msg||"登录失败"}catch{n.value="网络错误,请检查连接"}finally{l.value=!1}}return(s,t)=>(p(),r("div",z,[e("div",B,[e("div",C,[t[2]||(t[2]=e("div",{class:"logo-icon"},[e("svg",{class:"h-7 w-7 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})])],-1)),e("h1",S,d(m.value),1),t[3]||(t[3]=e("p",{style:{"font-size":"13px",color:"#94A3B8",margin:"0 0 32px"}},"管理控制台",-1))]),n.value?(p(),r("div",T,[(p(),r("svg",V,[...t[4]||(t[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])),e("span",null,d(n.value),1)])):b("",!0),e("form",{onSubmit:_(f,["prevent"])},[e("div",j,[t[5]||(t[5]=e("label",{class:"login-label"},"账号",-1)),v(e("input",{"onUpdate:modelValue":t[0]||(t[0]=i=>o.account=i),type:"text",class:"login-input",placeholder:"请输入管理员账号",autocomplete:"username",required:""},null,512),[[g,o.account]])]),e("div",D,[t[6]||(t[6]=e("label",{class:"login-label"},"密码",-1)),v(e("input",{"onUpdate:modelValue":t[1]||(t[1]=i=>o.password=i),type:"password",class:"login-input",placeholder:"请输入密码",autocomplete:"current-password",required:""},null,512),[[g,o.password]])]),e("button",{type:"submit",class:k(["login-btn",{loading:l.value}])},d(l.value?"登录中...":"登 录"),3)],32),t[7]||(t[7]=e("p",{style:{"text-align":"center","font-size":"11px",color:"#94A3B8","margin-top":"24px"}}," © 2025 Admin Console · v1.0.1 ",-1))])]))}}),O=M(q,[["__scopeId","data-v-3a3bca03"]]);export{O as default};
import{g as h,C as x,z as w,j as y,c as r,a as e,t as d,l as b,D as _,k as v,m as g,n as k,x as M,s as u,o as p,_ as z}from"./CTAruH_8.js";const A={class:"login-bg flex items-center justify-center px-4"},B={class:"login-card"},C={class:"text-center"},S={style:{"font-size":"22px","font-weight":"700",color:"#0F172A",margin:"0 0 4px"}},T={key:0,class:"login-error show"},V={style:{width:"16px",height:"16px","flex-shrink":"0"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},j={style:{"margin-bottom":"16px"}},D={style:{"margin-bottom":"24px"}},q=h({__name:"index",setup(L){const a=x(),c=w(),o=M({account:"",password:""}),l=u(!1),n=u(""),m=u("Admin");y(async()=>{if(a.restore(),a.token){c.push("/dashboard");return}try{const t=(await $fetch("/web/api/api_getsiteinfo",{method:"POST",body:{}}))?.data?.sitename;t&&(m.value=t+" Admin",a.setSiteTitle(t))}catch{}});async function f(){l.value=!0,n.value="";try{const s=await $fetch("/web/api/api_login",{method:"POST",body:{account:o.account,password:o.password}});s.code===0&&s.data?(a.setLoginData(s.data),c.push("/dashboard")):n.value=s.msg||"登录失败"}catch{n.value="网络错误,请检查连接"}finally{l.value=!1}}return(s,t)=>(p(),r("div",A,[e("div",B,[e("div",C,[t[2]||(t[2]=e("div",{class:"logo-icon"},[e("svg",{class:"h-7 w-7 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})])],-1)),e("h1",S,d(m.value),1),t[3]||(t[3]=e("p",{style:{"font-size":"13px",color:"#94A3B8",margin:"0 0 32px"}},"管理控制台",-1))]),n.value?(p(),r("div",T,[(p(),r("svg",V,[...t[4]||(t[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])),e("span",null,d(n.value),1)])):b("",!0),e("form",{onSubmit:_(f,["prevent"])},[e("div",j,[t[5]||(t[5]=e("label",{class:"login-label"},"账号",-1)),v(e("input",{"onUpdate:modelValue":t[0]||(t[0]=i=>o.account=i),type:"text",class:"login-input",placeholder:"请输入管理员账号",autocomplete:"username",required:""},null,512),[[g,o.account]])]),e("div",D,[t[6]||(t[6]=e("label",{class:"login-label"},"密码",-1)),v(e("input",{"onUpdate:modelValue":t[1]||(t[1]=i=>o.password=i),type:"password",class:"login-input",placeholder:"请输入密码",autocomplete:"current-password",required:""},null,512),[[g,o.password]])]),e("button",{type:"submit",class:k(["login-btn",{loading:l.value}])},d(l.value?"登录中...":"登 录"),3)],32),t[7]||(t[7]=e("p",{style:{"text-align":"center","font-size":"11px",color:"#94A3B8","margin-top":"24px"}}," © 2025 Admin Console · v1.0.1 ",-1))])]))}}),O=z(q,[["__scopeId","data-v-3a3bca03"]]);export{O as default};

1
apps/admin/.output/public/_nuxt/Cx-e2Cok.js

File diff suppressed because one or more lines are too long

8
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/D6jD5keW.js → apps/admin/.output/public/_nuxt/Cy8zKM7T.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/D9HxoMhB.js

@ -0,0 +1 @@
import{u}from"./yUUyh6cG.js";import{A as e}from"./CTAruH_8.js";function r(){const n=u("app:loading",()=>0),o=e(()=>n.value>0);function a(){n.value++}function t(){n.value=Math.max(0,n.value-1)}return{count:n,loading:o,begin:a,end:t}}export{r as u};

1
apps/admin/.output/public/_nuxt/DGXiXcCA.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/DN5T-G_F.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/DNKl-FHZ.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/Do83zqYq.js

@ -1 +0,0 @@
import{y as p,z as d}from"./96IDI_OR.js";async function c(s,a,i){const r=p(),n=d(),t={"Content-Type":"application/json"};r.token&&(t.Authorization=r.token),i&&Object.assign(t,i);const o=await fetch(s,{method:"POST",headers:t,body:JSON.stringify(a)});if(!o.ok)throw new Error(`HTTP error: ${o.status}`);const e=await o.json();if(e.code===18)throw r.logout(),n.push("/"),new Error(e.msg||"Unauthorized");if(e.code!==0)throw new Error(e.msg||"Unknown error");return e.data}function h(){const s=p();async function a(n,t){const o={};return s.currentAppId&&(o["X-App-Id"]=String(s.currentAppId)),c(`/web/api/api_${n}`,t??{},o)}async function i(n,t){return c(`/console/api/${n}`,t??{})}async function r(n,t){const o=await a("getcostoken",{path:t}),e=o.upload_url||o.url||"",u=await fetch(e,{method:"PUT",headers:{"Content-Type":n.type||"application/octet-stream"},body:n});if(!u.ok)throw new Error(`Upload failed: ${u.status}`);return e.split("?")[0]}return{webApi:a,consoleApi:i,uploadFile:r}}export{h as u};

2
apps/admin/.output/public/_nuxt/C5ETpaZb.js → apps/admin/.output/public/_nuxt/DpWhlKu2.js

@ -1 +1 @@
import{u as a,e as s,h as u,i as r,f as h}from"./96IDI_OR.js";function i(t){const e=t||s();return e.ssrContext?.head||e.runWithContext(()=>{if(u()){const n=r(h);if(!n)throw new Error("[nuxt] [unhead] Missing Unhead instance.");return n}})}function d(t,e={}){const n=e.head||i(e.nuxt);return a(t,{head:n,...e})}export{d as u};
import{u as a,e as s,h as u,i as r,f as h}from"./CTAruH_8.js";function i(t){const e=t||s();return e.ssrContext?.head||e.runWithContext(()=>{if(u()){const n=r(h);if(!n)throw new Error("[nuxt] [unhead] Missing Unhead instance.");return n}})}function d(t,e={}){const n=e.head||i(e.nuxt);return a(t,{head:n,...e})}export{d as u};

1
apps/admin/.output/public/_nuxt/Dqy3UYuS.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/Dw5yL0ut.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/EIJPD_ga.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/FZLr1rN5.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/GZxzc1Rc.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/KP2C5FJ6.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/BbBrUj30.js → apps/admin/.output/public/_nuxt/P2ZWRt51.js

@ -1 +1 @@
import{_ as o,o as s,c as a,a as t,t as r}from"./96IDI_OR.js";import{u as i}from"./C5ETpaZb.js";const u={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},c={class:"max-w-520px text-center"},l=["textContent"],d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:500},statusText:{type:String,default:"Internal server error"},description:{type:String,default:"This page is temporarily unavailable."},refresh:{type:String,default:"Refresh this page"}},setup(e){const n=e;return i({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(h,m)=>(s(),a("div",u,[t("div",c,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:r(e.status)},null,8,l),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:r(e.statusText)},null,8,d),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:r(e.description)},null,8,p)])]))}},x=o(f,[["__scopeId","data-v-2c2ce9e3"]]);export{x as default};
import{_ as o,o as s,c as a,a as t,t as r}from"./CTAruH_8.js";import{u as i}from"./DpWhlKu2.js";const u={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},c={class:"max-w-520px text-center"},l=["textContent"],d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:500},statusText:{type:String,default:"Internal server error"},description:{type:String,default:"This page is temporarily unavailable."},refresh:{type:String,default:"Refresh this page"}},setup(e){const n=e;return i({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(h,m)=>(s(),a("div",u,[t("div",c,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:r(e.status)},null,8,l),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:r(e.statusText)},null,8,d),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:r(e.description)},null,8,p)])]))}},x=o(f,[["__scopeId","data-v-2c2ce9e3"]]);export{x as default};

1
apps/admin/.output/public/_nuxt/UoJ1COMF.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/appconfig.j94fgYL_.css

@ -0,0 +1 @@
.app-avatar[data-v-a2d8388e]{width:48px;height:48px;border-radius:13px;background:linear-gradient(135deg,#4f46e5,#7c3aed);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:20px;flex-shrink:0;box-shadow:0 6px 18px #4f46e54d}.lock-tag[data-v-a2d8388e]{font-size:10px;font-weight:600;color:#dc2626;background:#fef2f2;padding:1px 5px;border-radius:5px}

1
apps/admin/.output/public/_nuxt/apps.B7hnJBQU.css

@ -0,0 +1 @@
.app-card[data-v-f8779360]{background:#fff;border:1px solid #eef2f7;border-radius:14px;box-shadow:0 1px 2px #00000008;overflow:hidden}.app-card.orphan[data-v-f8779360]{border-color:#fde68a}.app-head[data-v-f8779360]{display:flex;align-items:center;gap:12px;padding:13px 16px;cursor:pointer;background:linear-gradient(90deg,#f5f7ff,#fff);border-left:4px solid #6366f1;transition:background .15s}.app-card.orphan .app-head[data-v-f8779360]{background:linear-gradient(90deg,#fffbeb,#fff);border-left-color:#f59e0b}.app-head[data-v-f8779360]:hover{background:linear-gradient(90deg,#eef2ff,#fff)}.chev[data-v-f8779360]{color:#94a3b8;font-size:12px;width:16px;flex-shrink:0}.app-logo[data-v-f8779360]{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,#4f46e5,#7c3aed);color:#fff;font-weight:700;font-size:17px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.app-logo.orphan-logo[data-v-f8779360]{background:#f59e0b}.app-name[data-v-f8779360]{font-size:15px;font-weight:700;color:#1e293b}.chip-app[data-v-f8779360]{font-size:10px;padding:1px 8px;border-radius:6px;background:#eef2ff;color:#4338ca}.chip-app[data-v-f8779360],.chip-dep[data-v-f8779360]{display:inline-flex;font-weight:700}.chip-dep[data-v-f8779360]{font-size:9px;padding:1px 6px;border-radius:5px;background:#ecfeff;color:#0e7490}.chip-mono[data-v-f8779360]{color:#475569;font-family:SF Mono,Menlo,monospace}.chip-count[data-v-f8779360],.chip-mono[data-v-f8779360]{display:inline-flex;font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px;background:#f1f5f9}.chip-count[data-v-f8779360]{color:#64748b}.app-body[data-v-f8779360]{padding:4px 12px 10px;border-top:1px solid #f1f5f9;background:#fcfcfd}.dep-row td[data-v-f8779360]{vertical-align:middle}

2
apps/admin/.output/public/_nuxt/builds/latest.json

@ -1 +1 @@
{"id":"ec4737f4-4bc1-4016-bf94-c7164a1b5e0d","timestamp":1782351561646}
{"id":"1539df2f-ed1e-4567-85ef-b3b4ac8648ab","timestamp":1782995062558}

1
apps/admin/.output/public/_nuxt/builds/meta/1539df2f-ed1e-4567-85ef-b3b4ac8648ab.json

@ -0,0 +1 @@
{"id":"1539df2f-ed1e-4567-85ef-b3b4ac8648ab","timestamp":1782995062558,"prerendered":[]}

1
apps/admin/.output/public/_nuxt/builds/meta/ec4737f4-4bc1-4016-bf94-c7164a1b5e0d.json

@ -1 +0,0 @@
{"id":"ec4737f4-4bc1-4016-bf94-c7164a1b5e0d","timestamp":1782351561646,"prerendered":[]}

1
apps/admin/.output/public/_nuxt/dashboard.DGy90zSJ.css

@ -1 +0,0 @@
.panel[data-v-d169bdaa]{background:#fff;border:1px solid #f1f5f9;border-radius:16px;box-shadow:0 1px 2px #0000000a;overflow:hidden}.panel-head[data-v-d169bdaa]{padding:12px 18px;gap:10px;border-bottom:1px solid #f8fafc;flex-wrap:wrap}.panel-dot[data-v-d169bdaa],.panel-head[data-v-d169bdaa]{display:flex;align-items:center}.panel-dot[data-v-d169bdaa]{width:30px;height:30px;border-radius:9px;justify-content:center;flex-shrink:0}.stat-box[data-v-d169bdaa]{padding:10px 12px;border-radius:10px;background:#fafbfc}.stat-label[data-v-d169bdaa]{font-size:11px;color:#94a3b8;margin-bottom:3px}.stat-val[data-v-d169bdaa]{font-size:20px;font-weight:700;color:#1e293b;line-height:1.1;letter-spacing:-.02em}.sec-title[data-v-d169bdaa]{display:flex;align-items:center;gap:10px;margin:0 0 14px}.sec-title .bar[data-v-d169bdaa]{width:4px;height:18px;border-radius:3px}.sec-title h2[data-v-d169bdaa]{font-size:15px;font-weight:700;color:#0f172a;letter-spacing:-.01em}.sec-title .sub[data-v-d169bdaa]{font-size:12px;color:#94a3b8}.sec-title .tag[data-v-d169bdaa]{font-size:11px;font-weight:600;padding:2px 9px;border-radius:999px}.sec-title.muted .bar[data-v-d169bdaa]{height:14px;opacity:.6}.sec-title.muted h2[data-v-d169bdaa]{font-size:13px;font-weight:600;color:#94a3b8}.sec-title.hero .bar[data-v-d169bdaa]{width:5px;height:22px}.sec-title.hero h2[data-v-d169bdaa]{font-size:18px;font-weight:800;color:#0f172a}.cum-card[data-v-d169bdaa]{gap:11px;background:#f8fafc;border:1px solid #eef2f7;border-radius:12px;padding:10px 13px}.cum-card[data-v-d169bdaa],.cum-card .ico[data-v-d169bdaa]{display:flex;align-items:center}.cum-card .ico[data-v-d169bdaa]{width:30px;height:30px;border-radius:9px;justify-content:center;flex-shrink:0;font-size:14px;filter:saturate(.65);opacity:.85}.cum-card .body[data-v-d169bdaa]{min-width:0}.cum-card .lbl[data-v-d169bdaa]{font-size:11.5px;color:#94a3b8;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cum-card .val[data-v-d169bdaa]{font-size:17px;font-weight:700;color:#64748b;line-height:1.3;letter-spacing:-.01em;margin-top:1px}.today-wrap[data-v-d169bdaa]{background:linear-gradient(180deg,#e8f1ff,#f5f9ff);border:1px solid #d6e4ff;border-radius:22px;padding:20px;box-shadow:0 1px 3px #0d6efd0d}.today-card[data-v-d169bdaa]{position:relative;background:#fff;border:1px solid #e6eefb;border-radius:18px;padding:17px 19px;box-shadow:0 6px 18px #0d6efd14;transition:transform .18s ease,box-shadow .18s ease;overflow:hidden}.today-card[data-v-d169bdaa]:hover{transform:translateY(-3px);box-shadow:0 14px 32px #0d6efd26}.today-card .accent[data-v-d169bdaa]{position:absolute;left:0;top:0;bottom:0;width:5px}.today-card-top[data-v-d169bdaa]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.today-card .lbl[data-v-d169bdaa]{font-size:13px;color:#475569;font-weight:600}.today-card .ico[data-v-d169bdaa]{width:42px;height:42px;border-radius:13px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px}.today-card .val[data-v-d169bdaa]{font-size:31px;font-weight:800;color:#0f172a;line-height:1.05;letter-spacing:-.02em}.today-card .foot[data-v-d169bdaa]{margin-top:9px;font-size:12px;color:#94a3b8;display:flex;align-items:center;gap:6px}.delta[data-v-d169bdaa]{display:inline-flex;align-items:center;gap:2px;font-weight:700;padding:2px 7px;border-radius:7px;font-size:11.5px}.delta.up[data-v-d169bdaa]{color:#059669;background:#ecfdf5}.delta.down[data-v-d169bdaa]{color:#dc2626;background:#fef2f2}.delta.flat[data-v-d169bdaa],.tbtn[data-v-d169bdaa]{color:#64748b;background:#f1f5f9}.tbtn[data-v-d169bdaa]{font-size:11px;padding:3px 9px;border-radius:7px;line-height:1.4}.tbtn[data-v-d169bdaa]:hover{background:#e2e8f0}.tbtn-on[data-v-d169bdaa]{background:#1e293b;color:#fff}

1
apps/admin/.output/public/_nuxt/dashboard.bI0rfjl_.css

@ -0,0 +1 @@
.panel[data-v-7dbe8712]{background:#fff;border:1px solid #f1f5f9;border-radius:16px;box-shadow:0 1px 2px #0000000a;overflow:hidden}.panel-head[data-v-7dbe8712]{padding:12px 18px;gap:10px;border-bottom:1px solid #f8fafc;flex-wrap:wrap}.panel-dot[data-v-7dbe8712],.panel-head[data-v-7dbe8712]{display:flex;align-items:center}.panel-dot[data-v-7dbe8712]{width:30px;height:30px;border-radius:9px;justify-content:center;flex-shrink:0}.stat-box[data-v-7dbe8712]{padding:10px 12px;border-radius:10px;background:#fafbfc}.stat-label[data-v-7dbe8712]{font-size:11px;color:#94a3b8;margin-bottom:3px}.stat-val[data-v-7dbe8712]{font-size:20px;font-weight:700;color:#1e293b;line-height:1.1;letter-spacing:-.02em}.sec-title[data-v-7dbe8712]{display:flex;align-items:center;gap:10px;margin:0 0 14px}.sec-title .bar[data-v-7dbe8712]{width:4px;height:18px;border-radius:3px}.sec-title h2[data-v-7dbe8712]{font-size:15px;font-weight:700;color:#0f172a;letter-spacing:-.01em}.sec-title .sub[data-v-7dbe8712]{font-size:12px;color:#94a3b8}.sec-title .tag[data-v-7dbe8712]{font-size:11px;font-weight:600;padding:2px 9px;border-radius:999px}.sec-title.muted .bar[data-v-7dbe8712]{height:14px;opacity:.6}.sec-title.muted h2[data-v-7dbe8712]{font-size:13px;font-weight:600;color:#94a3b8}.sec-title.hero .bar[data-v-7dbe8712]{width:5px;height:22px}.sec-title.hero h2[data-v-7dbe8712]{font-size:18px;font-weight:800;color:#0f172a}.cum-card[data-v-7dbe8712]{gap:11px;background:#f8fafc;border:1px solid #eef2f7;border-radius:12px;padding:10px 13px}.cum-card[data-v-7dbe8712],.cum-card .ico[data-v-7dbe8712]{display:flex;align-items:center}.cum-card .ico[data-v-7dbe8712]{width:30px;height:30px;border-radius:9px;justify-content:center;flex-shrink:0;font-size:14px;filter:saturate(.65);opacity:.85}.cum-card .body[data-v-7dbe8712]{min-width:0}.cum-card .lbl[data-v-7dbe8712]{font-size:11.5px;color:#94a3b8;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cum-card .val[data-v-7dbe8712]{font-size:17px;font-weight:700;color:#64748b;line-height:1.3;letter-spacing:-.01em;margin-top:1px}.today-wrap[data-v-7dbe8712]{background:linear-gradient(180deg,#e8f1ff,#f5f9ff);border:1px solid #d6e4ff;border-radius:22px;padding:20px;box-shadow:0 1px 3px #0d6efd0d}.today-card[data-v-7dbe8712]{position:relative;background:#fff;border:1px solid #e6eefb;border-radius:18px;padding:17px 19px;box-shadow:0 6px 18px #0d6efd14;transition:transform .18s ease,box-shadow .18s ease;overflow:hidden}.today-card[data-v-7dbe8712]:hover{transform:translateY(-3px);box-shadow:0 14px 32px #0d6efd26}.today-card .accent[data-v-7dbe8712]{position:absolute;left:0;top:0;bottom:0;width:5px}.today-card-top[data-v-7dbe8712]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.today-card .lbl[data-v-7dbe8712]{font-size:13px;color:#475569;font-weight:600}.today-card .ico[data-v-7dbe8712]{width:42px;height:42px;border-radius:13px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px}.today-card .val[data-v-7dbe8712]{font-size:31px;font-weight:800;color:#0f172a;line-height:1.05;letter-spacing:-.02em}.today-card .foot[data-v-7dbe8712]{margin-top:9px;font-size:12px;color:#94a3b8;display:flex;align-items:center;gap:6px}.delta[data-v-7dbe8712]{display:inline-flex;align-items:center;gap:2px;font-weight:700;padding:2px 7px;border-radius:7px;font-size:11.5px}.delta.up[data-v-7dbe8712]{color:#059669;background:#ecfdf5}.delta.down[data-v-7dbe8712]{color:#dc2626;background:#fef2f2}.delta.flat[data-v-7dbe8712],.tbtn[data-v-7dbe8712]{color:#64748b;background:#f1f5f9}.tbtn[data-v-7dbe8712]{font-size:11px;padding:3px 9px;border-radius:7px;line-height:1.4}.tbtn[data-v-7dbe8712]:hover{background:#e2e8f0}.tbtn-on[data-v-7dbe8712]{background:#1e293b;color:#fff}

1
apps/admin/.output/public/_nuxt/default.miyQHb0v.css

@ -0,0 +1 @@
.fade-enter-active[data-v-c1ace0c2],.fade-leave-active[data-v-c1ace0c2]{transition:opacity .15s ease}.fade-enter-from[data-v-c1ace0c2],.fade-leave-to[data-v-c1ace0c2]{opacity:0}

1
apps/admin/.output/public/_nuxt/dltdoXck.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/entry.BUc396Qi.css

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/entry.DS97S_sV.css

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/lLLegusN.js

@ -0,0 +1 @@
import{u as a}from"./yUUyh6cG.js";let i=0;function f(){const o=a("app:toasts",()=>[]);function e(s,t="info",r=3e3){const u=++i;o.value.push({id:u,type:t,msg:s}),r>0&&setTimeout(()=>{o.value=o.value.filter(n=>n.id!==u)},r)}return{toasts:o,toast:e,success:(s,t)=>e(s,"success",t),error:(s,t)=>e(s,"error",t),info:(s,t)=>e(s,"info",t),warn:(s,t)=>e(s,"warning",t)}}export{f as u};

1
apps/admin/.output/public/_nuxt/p0Tfj-xC.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/serviceconfig.Io3AqtMK.css

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/serviceconfig.htjoqj-Q.css

@ -1 +0,0 @@
.svc-item[data-v-97419e3c]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid #eef2f7;background:#fff;cursor:pointer;transition:all .15s}.svc-item[data-v-97419e3c]:hover{border-color:#c7d2fe;background:#f5f3ff}.svc-item.active[data-v-97419e3c]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff);box-shadow:0 4px 12px #6366f11f}.svc-logo[data-v-97419e3c]{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;color:#fff;font-weight:700}.cat-chip[data-v-97419e3c]{font-weight:700;padding:2px 7px}.cat-chip[data-v-97419e3c],.lock-badge[data-v-97419e3c]{display:inline-flex;font-size:10px;border-radius:6px}.lock-badge[data-v-97419e3c]{align-items:center;gap:3px;font-weight:600;padding:1px 7px;background:#fef2f2;color:#dc2626}.inherit-badge[data-v-97419e3c]{background:#f1f5f9;color:#94a3b8}.inherit-badge[data-v-97419e3c],.override-badge[data-v-97419e3c]{font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px}.override-badge[data-v-97419e3c]{background:#fef3c7;color:#b45309}.field-input[data-v-97419e3c]{border:1px solid #e2e8f0;border-radius:7px;padding:5px 9px;font-size:12.5px;font-family:SF Mono,Menlo,monospace;width:100%}.field-input[data-v-97419e3c]:focus{border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a;outline:none}.sync-overlay[data-v-97419e3c]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-97419e3c]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-97419e3c]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-97419e3c]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-97419e3c]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-97419e3c]{border-color:#6366f1;background:#eef2ff;color:#4338ca}

1
apps/admin/.output/public/_nuxt/systemconfig.DaWusDMu.css

@ -0,0 +1 @@
.cat-item[data-v-96602b99]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:11px;border:1px solid #eef2f7;background:#fff;cursor:pointer;transition:all .15s}.cat-item[data-v-96602b99]:hover{border-color:#c7d2fe;background:#f5f3ff}.cat-item.active[data-v-96602b99]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff);box-shadow:0 4px 12px #6366f11f}.cat-icon[data-v-96602b99]{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.dot-on[data-v-96602b99]{width:7px;height:7px;border-radius:50%;background:#10b981;box-shadow:0 0 0 3px #10b98126;flex-shrink:0}.provider-card[data-v-96602b99]{padding:12px 14px;border-radius:13px;border:1.5px solid #eef2f7;background:#fff;cursor:pointer;transition:all .15s}.provider-card[data-v-96602b99]:hover{border-color:#c7d2fe}.provider-card.active[data-v-96602b99]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#faf5ff);box-shadow:0 4px 14px #6366f11f}.provider-card.is-default[data-v-96602b99]{box-shadow:inset 0 0 0 1.5px #10b981}.provider-logo[data-v-96602b99]{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:12px;letter-spacing:-.02em}.default-badge[data-v-96602b99]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:6px;background:#dcfce7;color:#15803d}.default-pick[data-v-96602b99]{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;color:#94a3b8;cursor:pointer;padding:3px 8px;border-radius:7px;border:1px solid #eef2f7;transition:all .15s}.default-pick[data-v-96602b99]:hover{border-color:#c7d2fe;color:#6366f1}.default-pick.on[data-v-96602b99]{color:#15803d;background:#dcfce7;border-color:#bbf7d0}.lock-tag[data-v-96602b99]{font-size:10px;font-weight:600;color:#dc2626;background:#fef2f2;padding:1px 6px;border-radius:5px}.rule-box[data-v-96602b99]{background:#f8fafc;border:1px solid #eef2f7;border-radius:11px;padding:10px 14px}

1
apps/admin/.output/public/_nuxt/uwVesjjP.js

File diff suppressed because one or more lines are too long

4
apps/admin/.output/public/_nuxt/v5y5DMRc.js

@ -1,4 +0,0 @@
import{g as G,j as K,H as P,c as a,a as e,d as u,k as x,p as U,F as f,r as B,m as Y,q as Z,t as n,s as i,C as E,o,n as F,l as I,_ as J}from"./96IDI_OR.js";import{u as Q}from"./Do83zqYq.js";import{u as W}from"./CVUxyiJx.js";const X=globalThis.setInterval,$={class:"flex items-center justify-between mb-4 flex-wrap gap-3"},tt={class:"flex items-center gap-2 flex-wrap"},et=["value"],st={class:"flex items-center gap-1 text-xs text-slate-500 cursor-pointer"},lt={class:"flex items-center gap-4 mb-3 text-xs text-slate-500"},nt={class:"text-slate-700"},at={class:"text-slate-700"},ot={class:"text-slate-700"},rt={class:"muted"},ut={class:"panel overflow-hidden"},it={id:"logBody",style:{"max-height":"calc(100vh - 230px)","overflow-y":"auto"}},ct={key:0,class:"text-center text-slate-400 py-10"},dt={key:1,class:"text-center text-red-400 py-10"},vt={key:2,class:"text-center text-slate-400 py-10"},pt={class:"t"},mt={class:"app-name"},ft={key:0,class:"unreg",title:"该应用名未在 console 注册,快照已收到但不会写入统计库"},gt={key:1,class:"muted"},xt={class:"muted"},_t={class:"muted"},yt={class:"muted"},bt={key:0,class:"muted"},ht={class:"t"},wt={key:0,class:"late"},kt=G({__name:"statlog",setup(Ct){const{webApi:A}=Q(),{success:H,error:O}=W(),R={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?R[l]||l:"-"}const c=i([]),_=i(!1),g=i(""),L=i("-"),N=i("-"),y=i(""),v=i(0),b=i(""),h=i(""),w=i(!1);let d=null;function p(l=0){const s=new Date(Date.now()+l*864e5),t=new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).format(s);return parseInt(t.replace(/-/g,""),10)}function k(l){const s=""+l;return s.length===8?s.slice(0,4)+"-"+s.slice(4,6)+"-"+s.slice(6,8):s}function C(l){if(!l)return"--";const s=new Date(l*1e3),t=r=>r<10?"0"+r:""+r;return t(s.getHours())+":"+t(s.getMinutes())+":"+t(s.getSeconds())}function S(l){return l?"0x"+(l>>>0).toString(16).toUpperCase():"全部"}const V=E(()=>[{value:p(0),label:"今天 "+k(p(0))},{value:p(-1),label:"昨天 "+k(p(-1))}]);function M(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function j(l){return!!(l.snap_ts&&l.ts&&l.ts-l.snap_ts>120)}const T=E(()=>{const l=b.value,s=h.value.trim().toLowerCase();return c.value.filter(t=>!(l&&t.level!==l||s&&((t.app||"")+" "+(t.region||"")+" "+D(t.region)+" "+(t.product_id||"")+" "+S(t.product_id)+" "+(t.stat_day||"")).toLowerCase().indexOf(s)<0))});async function m(){_.value=!0,g.value="";try{const l=await A("getstatlogs",{day:v.value||0});c.value=l?.entries||[],L.value=l?.total!=null?l.total:c.value.length,N.value=c.value.length?C(c.value[0].ts):"--"}catch(l){g.value=l?.message||"网络异常"}finally{_.value=!1}}async function q(){const l=v.value||0,s=V.value.find(r=>r.value===l),t=s?s.label:""+l;if(window.confirm("确定清空「"+t+`」的接收流水吗?
只清除本核对面板的记录,不影响已落库的统计数据。
清空后可重新触发埋点,观察是否正常进来。`))try{const r=await A("clearstatlogs",{day:l});H("已清空 "+(r&&r.cleared!=null?r.cleared:0)+" 条"),m()}catch(r){O("清空失败:"+(r?.message||"网络异常"))}}function z(){w.value?(d=X(m,15e3),y.value="· 每 15 秒自动刷新"):(d&&clearInterval(d),d=null,y.value="")}return K(()=>{v.value=p(0),m()}),P(()=>{d&&clearInterval(d)}),(l,s)=>(o(),a("div",null,[e("div",$,[s[6]||(s[6]=e("div",null,[e("h2",{class:"text-lg font-bold text-slate-700"},"统计日志"),e("p",{class:"text-xs text-slate-400 mt-0.5"},[u("console 从 NATS 收到的「当日统计快照」接收流水(最新在前,按接收时间分天存 Redis)。各业务部署每个同步周期/启动时/0点 推送一次当日绝对快照,console 收到后覆盖落库。用于核对每个部署是否在正常汇报;带 "),e("span",{class:"unreg"},"未注册"),u(" 的应用快照已收到但"),e("b",null,"不会落库"),u("(应用名需与 console 注册表完全一致)。")])],-1)),e("div",tt,[x(e("select",{"onUpdate:modelValue":s[0]||(s[0]=t=>v.value=t),class:"select select-bordered select-sm",onChange:m},[(o(!0),a(f,null,B(V.value,t=>(o(),a("option",{key:t.value,value:t.value},n(t.label),9,et))),128))],544),[[U,v.value,void 0,{number:!0}]]),x(e("select",{"onUpdate:modelValue":s[1]||(s[1]=t=>b.value=t),class:"select select-bordered select-sm"},[...s[4]||(s[4]=[e("option",{value:""},"全部级别",-1),e("option",{value:"info"},"已落库",-1),e("option",{value:"warn"},"未落库",-1),e("option",{value:"error"},"解析失败",-1)])],512),[[U,b.value]]),x(e("input",{"onUpdate:modelValue":s[2]||(s[2]=t=>h.value=t),class:"input input-bordered input-sm w-44",placeholder:"筛选 应用/区域/产品"},null,512),[[Y,h.value]]),e("label",st,[x(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>w.value=t),type:"checkbox",class:"checkbox checkbox-xs",onChange:z},null,544),[[Z,w.value]]),s[5]||(s[5]=u(" 自动刷新 ",-1))]),e("button",{class:"btn btn-primary btn-sm text-white",onClick:m},"刷新"),e("button",{class:"btn btn-outline btn-error btn-sm",title:"清空本日核对流水(不影响已落库的统计数据),清空后可重新观察埋点是否正常进来",onClick:q},"清空本日")])]),e("div",lt,[e("span",null,[s[7]||(s[7]=u("该日保留 ",-1)),e("b",nt,n(L.value),1),s[8]||(s[8]=u(" 条",-1))]),e("span",null,[s[9]||(s[9]=u("当前显示 ",-1)),e("b",at,n(T.value.length),1),s[10]||(s[10]=u(" 条",-1))]),e("span",null,[s[11]||(s[11]=u("最近接收 ",-1)),e("b",ot,n(N.value),1)]),e("span",rt,n(y.value),1)]),e("div",ut,[s[12]||(s[12]=e("div",{id:"logHead"},[e("div",null,"接收时间"),e("div",null,"级别"),e("div",null,"应用 · 区域 · 产品"),e("div",null,"统计日"),e("div",null,"指标摘要 / 说明"),e("div",null,"快照时间")],-1)),e("div",it,[_.value?(o(),a("div",ct,"加载中...")):g.value?(o(),a("div",dt,"加载失败:"+n(g.value),1)):T.value.length?(o(!0),a(f,{key:3},B(T.value,(t,r)=>(o(),a("div",{key:r,class:"logrow"},[e("div",pt,n(C(t.ts)),1),e("div",null,[e("span",{class:F(["lv",M(t.level).cls])},n(M(t.level).txt),3)]),e("div",null,[t.app?(o(),a(f,{key:0},[e("span",mt,n(t.app),1),t.registered?I("",!0):(o(),a("span",ft,"未注册"))],64)):(o(),a("span",gt,"(无应用名)")),e("span",xt," · "+n(D(t.region)),1),e("span",_t," · "+n(S(t.product_id)),1)]),e("div",yt,n(t.stat_day?k(t.stat_day):"-"),1),e("div",null,[t.msg?(o(),a(f,{key:0},[e("span",{class:F(t.level==="error"?"text-red-600":"text-amber-600")},n(t.msg),3),t.summary?(o(),a("span",bt," · "+n(t.summary),1)):I("",!0)],64)):(o(),a(f,{key:1},[u(n(t.summary||"无增量"),1)],64))]),e("div",ht,[u(n(C(t.snap_ts)),1),j(t)?(o(),a("span",wt,"迟到"+n(t.ts-t.snap_ts)+"s",1)):I("",!0)])]))),128)):(o(),a("div",vt,n(c.value.length?"无匹配记录":"该日暂无接收记录"),1))])])]))}}),Dt=J(kt,[["__scopeId","data-v-742ee359"]]);export{Dt as default};

7
apps/admin/.output/public/_nuxt/vesedpp3.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/yUUyh6cG.js

@ -0,0 +1 @@
import{e as f,a5 as p,a6 as r}from"./CTAruH_8.js";const y="$s";function l(...e){const a=typeof e[e.length-1]=="string"?e.pop():void 0;typeof e[0]!="string"&&e.unshift(a);const[n,t]=e;if(!n||typeof n!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+n);if(t!==void 0&&typeof t!="function")throw new Error("[nuxt] [useState] init must be a function: "+t);const i=y+n,s=f(),u=p(s.payload.state,i);if(t&&(s._state[i]??={_default:t}),u.value===void 0&&t){const o=t();if(r(o))return s.payload.state[i]=o,o;u.value=o}return u}export{l as u};

8
apps/admin/.output/server/chunks/build/LangSelect-styles.C7_U3Izz.mjs

@ -0,0 +1,8 @@
import { L as LangSelect_vue_vue_type_style_index_0_scoped_4903af59_lang } from './serviceconfig-styles-1.mjs-BjhBSOse.mjs';
const LangSelectStyles_C7_U3Izz = [
LangSelect_vue_vue_type_style_index_0_scoped_4903af59_lang
];
export { LangSelectStyles_C7_U3Izz as default };
//# sourceMappingURL=LangSelect-styles.C7_U3Izz.mjs.map

1
apps/admin/.output/server/chunks/build/LangSelect-styles.C7_U3Izz.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"LangSelect-styles.C7_U3Izz.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/LangSelect-styles.C7_U3Izz.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0]}

8
apps/admin/.output/server/chunks/build/accounts-Bou39dJh.mjs → apps/admin/.output/server/chunks/build/accounts-BlBS367g.mjs

@ -1,10 +1,12 @@
import { defineComponent, ref, reactive, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderStyle, ssrRenderList, ssrInterpolate, ssrRenderClass, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual } from 'vue/server-renderer';
import { u as useApi } from './useApi-B7CB0Cnn.mjs';
import { u as useToast } from './useToast-BwtTR9dH.mjs';
import { u as useApi } from './useApi-B6h53Mkt.mjs';
import { u as useToast } from './useToast-C76a6bSX.mjs';
import { _ as _export_sfc } from './server.mjs';
import './auth-QFkCoU1C.mjs';
import 'pinia';
import './useLoading-D6mc40Wj.mjs';
import './state-DQnwRar-.mjs';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
@ -161,4 +163,4 @@ _sfc_main.setup = (props, ctx) => {
const accounts = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-eb25cf37"]]);
export { accounts as default };
//# sourceMappingURL=accounts-Bou39dJh.mjs.map
//# sourceMappingURL=accounts-BlBS367g.mjs.map

1
apps/admin/.output/server/chunks/build/accounts-BlBS367g.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"accounts-BlBS367g.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/accounts-BlBS367g.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

1
apps/admin/.output/server/chunks/build/accounts-Bou39dJh.mjs.map

@ -1 +0,0 @@
{"version":3,"file":"accounts-Bou39dJh.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/accounts-Bou39dJh.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

192
apps/admin/.output/server/chunks/build/appconfig-b7qb0UVr.mjs

@ -0,0 +1,192 @@
import { defineComponent, computed, reactive, ref, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderStyle, ssrInterpolate, ssrIncludeBooleanAttr, ssrRenderAttr, ssrLooseContain, ssrLooseEqual, ssrRenderList, ssrRenderClass, ssrRenderDynamicModel } from 'vue/server-renderer';
import { u as useApi } from './useApi-B6h53Mkt.mjs';
import { u as useToast } from './useToast-C76a6bSX.mjs';
import { _ as _export_sfc, a as useRoute$1, b as useRouter } from './server.mjs';
import './auth-QFkCoU1C.mjs';
import 'pinia';
import './useLoading-D6mc40Wj.mjs';
import './state-DQnwRar-.mjs';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'perfect-debounce';
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "appconfig",
__ssrInlineRender: true,
setup(__props) {
useApi();
useToast();
const route = useRoute$1();
useRouter();
const appId = computed(() => Number(route.query.id) || 0);
const appName = computed(() => route.query.name || "未指定应用");
const appInitial = computed(() => (dep.app_name || appName.value || "A").charAt(0).toUpperCase());
const dep = reactive({ id: 0, app_name: "", status: "", name: "", region: "", env_id: 0, base_url: "", service_dsn: "" });
const envs = ref([]);
const envId = ref(0);
const envSaving = ref(false);
const catalog = ref([]);
const curModule = ref("");
const values = reactive({});
const dataModules = reactive(/* @__PURE__ */ new Set());
const show = reactive({});
const loading = ref(false);
const saving = ref(false);
const dbError = ref("");
const curDef = computed(() => catalog.value.find((m) => m.module === curModule.value) || null);
const cur = computed(() => values[curModule.value] || {});
const groups = computed(() => {
const order = [];
const map = /* @__PURE__ */ new Map();
for (const m of catalog.value) {
if (!map.has(m.group)) {
map.set(m.group, []);
order.push(m.group);
}
map.get(m.group).push(m);
}
return order.map((name) => ({ name, modules: map.get(name) }));
});
function dbName(dsn) {
const m = (dsn || "").match(/\/([^/?]+)\?/);
return m ? m[1] : dsn ? "(自定义)" : "—";
}
return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(_attrs)} data-v-a2d8388e><div class="flex items-center gap-2 mb-4" data-v-a2d8388e><button class="btn btn-ghost btn-sm" data-v-a2d8388e>← 返回应用列表</button><span class="text-slate-300" data-v-a2d8388e>/</span><h2 class="text-lg font-semibold text-slate-800" data-v-a2d8388e>应用服务配置</h2></div><div class="rounded-xl px-5 py-4 mb-5" style="${ssrRenderStyle({ "background": "linear-gradient(135deg,#eef2ff,#faf5ff)", "border": "1px solid #e0e7ff" })}" data-v-a2d8388e><div class="flex items-center gap-4" data-v-a2d8388e><div class="app-avatar" data-v-a2d8388e>${ssrInterpolate(appInitial.value)}</div><div class="flex-1 min-w-0" data-v-a2d8388e><div class="flex items-center gap-2 flex-wrap" data-v-a2d8388e><span class="text-base font-bold text-slate-800" data-v-a2d8388e>${ssrInterpolate(dep.name || appName.value)}</span><span class="badge badge-sm" style="${ssrRenderStyle({ "background": "#e0e7ff", "color": "#4338ca", "border": "none" })}" data-v-a2d8388e>#${ssrInterpolate(appId.value)}</span>`);
if (dep.app_name) {
_push(`<span class="badge badge-ghost badge-sm" data-v-a2d8388e>应用:${ssrInterpolate(dep.app_name)}</span>`);
} else {
_push(`<!---->`);
}
if (dep.region) {
_push(`<span class="badge badge-ghost badge-sm" data-v-a2d8388e>${ssrInterpolate(dep.region)}</span>`);
} else {
_push(`<!---->`);
}
if (dep.status === "pending") {
_push(`<span class="badge badge-warning badge-sm text-amber-900" data-v-a2d8388e>待部署</span>`);
} else {
_push(`<span class="badge badge-success badge-sm text-white" data-v-a2d8388e>已接入</span>`);
}
_push(`</div><div class="text-[11px] text-slate-500 mt-1 flex flex-wrap gap-x-4 gap-y-0.5" data-v-a2d8388e>`);
if (dep.base_url) {
_push(`<span data-v-a2d8388e>地址:<span class="font-mono" data-v-a2d8388e>${ssrInterpolate(dep.base_url)}</span></span>`);
} else {
_push(`<!---->`);
}
_push(`<span data-v-a2d8388e>业务库:<span class="font-mono" data-v-a2d8388e>${ssrInterpolate(dbName(dep.service_dsn))}</span></span></div></div></div><div class="flex items-center gap-2 mt-3 pt-3 border-t border-indigo-100" data-v-a2d8388e><span class="text-xs text-slate-500 shrink-0" data-v-a2d8388e>部署环境</span><select class="select select-bordered select-sm w-64"${ssrIncludeBooleanAttr(envSaving.value) ? " disabled" : ""} data-v-a2d8388e><option${ssrRenderAttr("value", 0)} data-v-a2d8388e${ssrIncludeBooleanAttr(Array.isArray(envId.value) ? ssrLooseContain(envId.value, 0) : ssrLooseEqual(envId.value, 0)) ? " selected" : ""}>未绑定</option><!--[-->`);
ssrRenderList(envs.value, (e) => {
_push(`<option${ssrRenderAttr("value", e.id)} data-v-a2d8388e${ssrIncludeBooleanAttr(Array.isArray(envId.value) ? ssrLooseContain(envId.value, e.id) : ssrLooseEqual(envId.value, e.id)) ? " selected" : ""}>${ssrInterpolate(e.name)}(${ssrInterpolate(e.code || "-")})</option>`);
});
_push(`<!--]--></select>`);
if (envSaving.value) {
_push(`<span class="loading loading-spinner loading-xs text-indigo-400" data-v-a2d8388e></span>`);
} else {
_push(`<!---->`);
}
_push(`<span class="text-[11px] text-slate-400" data-v-a2d8388e>切换后即时保存。</span></div></div><div class="bg-white rounded-2xl border border-slate-100 shadow-sm p-5" data-v-a2d8388e><div class="mb-3" data-v-a2d8388e><h3 class="text-base font-semibold text-slate-800" data-v-a2d8388e>业务功能配置</h3><p class="text-[11px] text-slate-400 mt-0.5" data-v-a2d8388e> 登录 / 短信 / 邮件 / 支付等应用独立配置,保存在<b data-v-a2d8388e>该部署的业务库</b>(不进公共库)。密钥字段加密落库,显示时脱敏。 </p></div>`);
if (dbError.value) {
_push(`<div class="alert alert-warning py-2 text-sm mb-3" data-v-a2d8388e><span data-v-a2d8388e>无法连接应用业务库:${ssrInterpolate(dbError.value)}<br data-v-a2d8388e><span class="text-xs opacity-70" data-v-a2d8388e>待部署的应用先完成部署、或检查业务库 DSN 连通后再配置。</span></span></div>`);
} else {
_push(`<!---->`);
}
if (loading.value) {
_push(`<div class="py-12 text-center" data-v-a2d8388e><span class="loading loading-spinner loading-sm" data-v-a2d8388e></span></div>`);
} else {
_push(`<div class="flex gap-5" data-v-a2d8388e><aside class="w-48 shrink-0" data-v-a2d8388e><!--[-->`);
ssrRenderList(groups.value, (grp) => {
_push(`<div class="mb-3" data-v-a2d8388e><div class="text-[11px] font-semibold text-slate-400 px-2 mb-1" data-v-a2d8388e>${ssrInterpolate(grp.name)}</div><!--[-->`);
ssrRenderList(grp.modules, (m) => {
_push(`<button class="${ssrRenderClass([curModule.value === m.module ? "bg-indigo-50 text-indigo-700 font-medium" : "text-slate-600 hover:bg-slate-50", "w-full flex items-center justify-between text-left px-3 py-2 rounded-lg text-sm mb-0.5 transition-colors"])}" data-v-a2d8388e><span data-v-a2d8388e>${ssrInterpolate(m.name)}</span>`);
if (dataModules.has(m.module)) {
_push(`<span class="w-1.5 h-1.5 rounded-full bg-emerald-400 inline-block" data-v-a2d8388e></span>`);
} else {
_push(`<!---->`);
}
_push(`</button>`);
});
_push(`<!--]--></div>`);
});
_push(`<!--]--></aside><section class="flex-1 min-w-0" data-v-a2d8388e>`);
if (curDef.value) {
_push(`<!--[--><div class="flex items-center justify-between mb-3" data-v-a2d8388e><div data-v-a2d8388e><div class="text-sm font-semibold text-slate-800" data-v-a2d8388e>${ssrInterpolate(curDef.value.name)}</div>`);
if (curDef.value.desc) {
_push(`<div class="text-[11px] text-slate-400 mt-0.5" data-v-a2d8388e>${ssrInterpolate(curDef.value.desc)}</div>`);
} else {
_push(`<!---->`);
}
_push(`</div><div class="flex items-center gap-2" data-v-a2d8388e>`);
if (dataModules.has(curModule.value)) {
_push(`<button class="btn btn-ghost btn-xs text-rose-500"${ssrIncludeBooleanAttr(saving.value) ? " disabled" : ""} data-v-a2d8388e>清空</button>`);
} else {
_push(`<!---->`);
}
_push(`<button class="btn btn-primary btn-sm text-white"${ssrIncludeBooleanAttr(saving.value || dbError.value !== "") ? " disabled" : ""} data-v-a2d8388e>${ssrInterpolate(saving.value ? "保存中…" : "保存")}</button></div></div><div class="grid grid-cols-1 gap-3 max-w-2xl" data-v-a2d8388e><!--[-->`);
ssrRenderList(curDef.value.fields, (f) => {
_push(`<div class="form-control" data-v-a2d8388e><label class="label py-0.5" data-v-a2d8388e><span class="label-text text-sm" data-v-a2d8388e>${ssrInterpolate(f.label)} `);
if (f.required) {
_push(`<span class="text-rose-400" data-v-a2d8388e>*</span>`);
} else {
_push(`<!---->`);
}
if (f.secret) {
_push(`<span class="lock-tag ml-1" data-v-a2d8388e>🔒</span>`);
} else {
_push(`<!---->`);
}
_push(`<span class="text-[10px] font-normal text-slate-300 ml-1 font-mono" data-v-a2d8388e>${ssrInterpolate(f.key)}</span></span></label>`);
if (f.type === "bool") {
_push(`<label class="cursor-pointer flex items-center gap-2" data-v-a2d8388e><input type="checkbox" class="toggle toggle-sm toggle-primary"${ssrIncludeBooleanAttr(cur.value[f.key] === "true") ? " checked" : ""} data-v-a2d8388e><span class="text-xs text-slate-500" data-v-a2d8388e>${ssrInterpolate(cur.value[f.key] === "true" ? "开启" : "关闭")}</span></label>`);
} else if (f.type === "select") {
_push(`<select class="select select-bordered select-sm w-full" data-v-a2d8388e><option value="" data-v-a2d8388e${ssrIncludeBooleanAttr(Array.isArray(cur.value[f.key]) ? ssrLooseContain(cur.value[f.key], "") : ssrLooseEqual(cur.value[f.key], "")) ? " selected" : ""}>请选择</option><!--[-->`);
ssrRenderList(f.options, (o) => {
_push(`<option${ssrRenderAttr("value", o.value)} data-v-a2d8388e${ssrIncludeBooleanAttr(Array.isArray(cur.value[f.key]) ? ssrLooseContain(cur.value[f.key], o.value) : ssrLooseEqual(cur.value[f.key], o.value)) ? " selected" : ""}>${ssrInterpolate(o.label)}</option>`);
});
_push(`<!--]--></select>`);
} else if (f.type === "textarea") {
_push(`<textarea class="textarea textarea-bordered w-full font-mono text-xs" rows="3"${ssrRenderAttr("placeholder", f.secret ? "留空/保持 [encrypted] 则不变" : f.placeholder || "")} data-v-a2d8388e>${ssrInterpolate(cur.value[f.key])}</textarea>`);
} else if (f.type === "password") {
_push(`<div class="relative" data-v-a2d8388e><input${ssrRenderDynamicModel(show[f.key] ? "text" : "password", cur.value[f.key], null)}${ssrRenderAttr("type", show[f.key] ? "text" : "password")} class="input input-bordered input-sm w-full font-mono text-xs pr-14"${ssrRenderAttr("placeholder", "留空/保持 [encrypted] 则不变")} data-v-a2d8388e><button type="button" class="absolute right-3 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700" data-v-a2d8388e>${ssrInterpolate(show[f.key] ? "隐藏" : "显示")}</button></div>`);
} else {
_push(`<input${ssrRenderAttr("value", cur.value[f.key])} type="text" class="input input-bordered input-sm w-full font-mono text-xs"${ssrRenderAttr("placeholder", f.placeholder || "")} data-v-a2d8388e>`);
}
if (f.desc) {
_push(`<span class="text-[11px] text-slate-400 mt-0.5" data-v-a2d8388e>${ssrInterpolate(f.desc)}</span>`);
} else {
_push(`<!---->`);
}
_push(`</div>`);
});
_push(`<!--]--></div><!--]-->`);
} else {
_push(`<div class="py-10 text-center text-slate-400 text-sm" data-v-a2d8388e>暂无可配置的业务模块。</div>`);
}
_push(`</section></div>`);
}
_push(`</div></div>`);
};
}
});
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/appconfig.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
const appconfig = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a2d8388e"]]);
export { appconfig as default };
//# sourceMappingURL=appconfig-b7qb0UVr.mjs.map

1
apps/admin/.output/server/chunks/build/appconfig-b7qb0UVr.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"appconfig-b7qb0UVr.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/appconfig-b7qb0UVr.js"],"names":["useRoute"],"mappings":"","x_google_ignoreList":[0]}

8
apps/admin/.output/server/chunks/build/appconfig-styles.C960WaXM.mjs

@ -0,0 +1,8 @@
const appconfig_vue_vue_type_style_index_0_scoped_a2d8388e_lang = ".app-avatar[data-v-a2d8388e]{width:48px;height:48px;border-radius:13px;background:linear-gradient(135deg,#4f46e5,#7c3aed);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:20px;flex-shrink:0;box-shadow:0 6px 18px #4f46e54d}.lock-tag[data-v-a2d8388e]{font-size:10px;font-weight:600;color:#dc2626;background:#fef2f2;padding:1px 5px;border-radius:5px}";
const appconfigStyles_C960WaXM = [
appconfig_vue_vue_type_style_index_0_scoped_a2d8388e_lang
];
export { appconfigStyles_C960WaXM as default };
//# sourceMappingURL=appconfig-styles.C960WaXM.mjs.map

1
apps/admin/.output/server/chunks/build/appconfig-styles.C960WaXM.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"appconfig-styles.C960WaXM.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/appconfig-styles-1.mjs-D6A0tq1Y.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/appconfig-styles.C960WaXM.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0,1]}

140
apps/admin/.output/server/chunks/build/apps-DL1E6wot.mjs

File diff suppressed because one or more lines are too long

1
apps/admin/.output/server/chunks/build/apps-DL1E6wot.mjs.map

@ -1 +0,0 @@
{"version":3,"file":"apps-DL1E6wot.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/apps-DL1E6wot.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

273
apps/admin/.output/server/chunks/build/apps-DkgvJNjV.mjs

@ -0,0 +1,273 @@
import { defineComponent, ref, reactive, computed, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderStyle, ssrRenderList, ssrRenderClass, ssrInterpolate, ssrIncludeBooleanAttr, ssrRenderAttr, ssrLooseContain, ssrLooseEqual } from 'vue/server-renderer';
import { u as useApi } from './useApi-B6h53Mkt.mjs';
import { u as useToast } from './useToast-C76a6bSX.mjs';
import { u as useAuthStore } from './auth-QFkCoU1C.mjs';
import { _ as _export_sfc, b as useRouter } from './server.mjs';
import './useLoading-D6mc40Wj.mjs';
import './state-DQnwRar-.mjs';
import 'pinia';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'perfect-debounce';
const ORPHAN_KEY = "__orphan__";
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "apps",
__ssrInlineRender: true,
setup(__props) {
useApi();
useToast();
useAuthStore();
useRouter();
const view = ref("list");
const products = ref([]);
const apps2 = ref([]);
const envs = ref([]);
const loading = ref(false);
const envSavingId = ref(0);
const expanded = reactive({});
const regionOptions = ["中国", "美国", "东亚", "东南亚", "南亚", "中东", "欧洲", "俄罗斯", "非洲", "南美", "北美", "大洋洲", "巴西", "印度"];
const groups = computed(() => {
const byName = /* @__PURE__ */ new Map();
for (const d of apps2.value) {
const name = d.app_name || "";
if (!byName.has(name)) byName.set(name, []);
byName.get(name).push(d);
}
const known = new Set(products.value.map((p) => p.name));
const res = products.value.map((p) => ({ key: p.name, product: p, deployments: byName.get(p.name) || [] }));
const orphan = [];
for (const [name, ds] of byName) {
if (name === "" || !known.has(name)) orphan.push(...ds);
}
if (orphan.length) res.push({ key: ORPHAN_KEY, product: null, deployments: orphan });
return res;
});
function isExpanded(key) {
return expanded[key] !== false;
}
function dbName(dsn) {
const m = (dsn || "").match(/\/([^/?]+)\?/);
return m ? m[1] : "-";
}
const pIsEditing = ref(false);
const pForm = reactive({ id: 0, name: "", image_name: "", remark: "", enabled: true });
const dIsEditing = ref(false);
const dMode = ref("existing");
const dForm = reactive({ id: 0, app_name: "", name: "", region: "", env_id: 0, base_url: "", service_dsn: "", deploy_dir: "", image_name: "", image_tag: "", remark: "", enabled: true });
const availableRegions = computed(() => {
const used = new Set(
apps2.value.filter((d) => d.app_name === dForm.app_name && d.id !== dForm.id).map((d) => d.region).filter(Boolean)
);
return regionOptions.filter((r) => !used.has(r));
});
const testPassed = ref(false);
const testing = ref(false);
const testResult = reactive({ show: false, apiOk: false, apiMsg: "", dbOk: false, dbMsg: "" });
ref(null);
const az = reactive({
appId: 0,
appLabel: "",
start: "",
end: "",
resultShow: false,
resultClass: "",
mode: "",
steps: [],
curIndex: 0,
curTotal: 0,
curName: "",
pct: 0,
errMsg: "",
report: null,
running: false,
btnText: "开始分析"
});
ref(null);
ref(null);
const up = reactive({
id: 0,
label: "",
envName: "",
deployDir: "",
tag: "",
log: "",
show: false,
running: false,
ok: false,
canRun: false,
btnText: "开始升级"
});
return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(_attrs)} data-v-f8779360><div style="${ssrRenderStyle(view.value === "list" ? null : { display: "none" })}" data-v-f8779360><div class="flex items-center justify-between mb-5" data-v-f8779360><div data-v-f8779360><h2 class="text-lg font-semibold text-slate-800" data-v-f8779360>应用管理</h2><p class="text-sm text-slate-400 mt-1" data-v-f8779360><span class="chip-app" data-v-f8779360>应用</span> 是一个产品(如 Voitrans);其下挂多条 <span class="chip-dep" data-v-f8779360>部署</span>(各区域一份)。 卡片 = 应用;卡片内表格 = 该应用的区域部署。 </p></div><button class="btn btn-primary btn-sm text-white" data-v-f8779360>+ 添加应用</button></div>`);
if (loading.value) {
_push(`<div class="bg-white rounded-xl border border-slate-100 py-14 text-center" data-v-f8779360><span class="loading loading-spinner loading-sm" data-v-f8779360></span></div>`);
} else if (!groups.value.length) {
_push(`<div class="bg-white rounded-xl border border-slate-100 py-14 text-center text-slate-400" data-v-f8779360>暂无应用,先「添加应用」</div>`);
} else {
_push(`<div class="space-y-4" data-v-f8779360><!--[-->`);
ssrRenderList(groups.value, (g) => {
_push(`<div class="${ssrRenderClass([{ orphan: !g.product }, "app-card"])}" data-v-f8779360><div class="app-head" data-v-f8779360><button class="chev" data-v-f8779360>${ssrInterpolate(isExpanded(g.key) ? "▾" : "▸")}</button><div class="${ssrRenderClass([{ "orphan-logo": !g.product }, "app-logo"])}" data-v-f8779360>${ssrInterpolate(g.product ? (g.product.name || "?").charAt(0).toUpperCase() : "?")}</div><div class="min-w-0 flex-1" data-v-f8779360><div class="flex items-center gap-2 flex-wrap" data-v-f8779360><span class="chip-app" data-v-f8779360>应用</span><span class="app-name" data-v-f8779360>${ssrInterpolate(g.product ? g.product.name : "未分组部署")}</span>`);
if (g.product) {
_push(`<span class="${ssrRenderClass([g.product.enabled ? "badge-success" : "badge-ghost", "badge badge-xs"])}" data-v-f8779360>${ssrInterpolate(g.product.enabled ? "启用" : "停用")}</span>`);
} else {
_push(`<!---->`);
}
if (g.product && g.product.image_name) {
_push(`<span class="chip-mono" data-v-f8779360>🐳 ${ssrInterpolate(g.product.image_name)}</span>`);
} else {
_push(`<!---->`);
}
_push(`<span class="chip-count" data-v-f8779360>${ssrInterpolate(g.deployments.length)} 个部署</span></div><p class="text-xs text-slate-400 mt-0.5 truncate" data-v-f8779360>${ssrInterpolate(g.product ? g.product.remark || "—" : "未填所属应用名、或应用已删除的历史部署;编辑部署可归位到某个应用")}</p></div>`);
if (g.product) {
_push(`<div class="flex gap-1 shrink-0" data-v-f8779360><button class="btn btn-primary btn-xs text-white" data-v-f8779360>+ 部署</button><button class="btn btn-ghost btn-xs" data-v-f8779360>编辑应用</button><button class="btn btn-ghost btn-xs text-red-500" data-v-f8779360>删除</button></div>`);
} else {
_push(`<!---->`);
}
_push(`</div><div class="app-body" style="${ssrRenderStyle(isExpanded(g.key) ? null : { display: "none" })}" data-v-f8779360>`);
if (!g.deployments.length) {
_push(`<div class="text-center text-slate-300 py-5 text-xs" data-v-f8779360> 该应用暂无部署`);
if (g.product) {
_push(`<!--[-->,点右上「+ 部署」添加<!--]-->`);
} else {
_push(`<!---->`);
}
_push(`</div>`);
} else {
_push(`<div class="overflow-x-auto" data-v-f8779360><table class="table table-sm text-sm" data-v-f8779360><thead data-v-f8779360><tr class="text-slate-400" data-v-f8779360><th data-v-f8779360>部署</th><th data-v-f8779360>区域</th><th data-v-f8779360>环境</th><th data-v-f8779360>状态</th><th data-v-f8779360>业务库</th><th data-v-f8779360>启用</th><th class="text-right" data-v-f8779360>操作</th></tr></thead><tbody data-v-f8779360><!--[-->`);
ssrRenderList(g.deployments, (a) => {
_push(`<tr class="dep-row hover" data-v-f8779360><td data-v-f8779360><span class="chip-dep" data-v-f8779360>部署</span><span class="font-medium text-slate-700 ml-1" data-v-f8779360>${ssrInterpolate(a.name || "部署#" + a.id)}</span><span class="text-xs text-slate-400 ml-1 font-mono" data-v-f8779360>#${ssrInterpolate(a.id)}</span></td><td data-v-f8779360>${ssrInterpolate(a.region || "—")}</td><td data-v-f8779360><select class="select select-bordered select-xs w-36 text-xs"${ssrIncludeBooleanAttr(envSavingId.value === a.id) ? " disabled" : ""} data-v-f8779360><option${ssrRenderAttr("value", 0)} data-v-f8779360${ssrIncludeBooleanAttr(Array.isArray(a.env_id) ? ssrLooseContain(a.env_id, 0) : ssrLooseEqual(a.env_id, 0)) ? " selected" : ""}>未绑定</option><!--[-->`);
ssrRenderList(envs.value, (e) => {
_push(`<option${ssrRenderAttr("value", e.id)} data-v-f8779360${ssrIncludeBooleanAttr(Array.isArray(a.env_id) ? ssrLooseContain(a.env_id, e.id) : ssrLooseEqual(a.env_id, e.id)) ? " selected" : ""}>${ssrInterpolate(e.name)}</option>`);
});
_push(`<!--]--></select></td><td data-v-f8779360>`);
if (a.status === "pending") {
_push(`<span class="badge badge-warning badge-sm text-amber-900" data-v-f8779360>待部署</span>`);
} else {
_push(`<span class="badge badge-success badge-sm text-white" data-v-f8779360>已接入</span>`);
}
_push(`</td><td class="font-mono text-xs" data-v-f8779360>${ssrInterpolate(dbName(a.service_dsn))}</td><td data-v-f8779360>`);
if (a.enabled) {
_push(`<span class="text-green-600" data-v-f8779360>是</span>`);
} else {
_push(`<span class="text-slate-400" data-v-f8779360>否</span>`);
}
_push(`</td><td class="text-right" data-v-f8779360><div class="flex gap-1 justify-end" data-v-f8779360>`);
if (a.status !== "pending") {
_push(`<!--[--><button class="btn btn-ghost btn-xs text-indigo-600" data-v-f8779360>服务配置</button><button class="btn btn-ghost btn-xs text-slate-500" data-v-f8779360>编辑</button><button class="btn btn-ghost btn-xs text-amber-600" data-v-f8779360>升级</button><button class="btn btn-ghost btn-xs text-emerald-600" data-v-f8779360>分析</button><button class="btn btn-ghost btn-xs text-indigo-500" data-v-f8779360>发事件</button><!--]-->`);
} else {
_push(`<button class="btn btn-ghost btn-xs text-amber-600" data-v-f8779360>编辑</button>`);
}
_push(`<button class="btn btn-ghost btn-xs text-red-500" data-v-f8779360>删除</button></div></td></tr>`);
});
_push(`<!--]--></tbody></table></div>`);
}
_push(`</div></div>`);
});
_push(`<!--]--></div>`);
}
_push(`</div><div style="${ssrRenderStyle(view.value === "productForm" ? null : { display: "none" })}" data-v-f8779360><div class="flex items-center gap-3 mb-5" data-v-f8779360><button class="btn btn-ghost btn-sm" data-v-f8779360>← 返回</button><h2 class="text-lg font-semibold text-slate-800" data-v-f8779360>${ssrInterpolate(pIsEditing.value ? "编辑应用" : "添加应用")}</h2></div><div class="bg-white rounded-xl shadow-sm border border-slate-100 p-6 max-w-xl" data-v-f8779360><form data-v-f8779360><div class="form-control" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>应用名 *</span></label><input${ssrRenderAttr("value", pForm.name)} type="text" class="input input-bordered w-full" required placeholder="如 Voitrans" data-v-f8779360><span class="text-xs text-slate-400 mt-1" data-v-f8779360>账号作用域按应用名绑定,尽量与统计/账号里一致。</span></div><div class="form-control mt-4" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>默认镜像名</span></label><input${ssrRenderAttr("value", pForm.image_name)} type="text" class="input input-bordered w-full" placeholder="voitrans-a11(部署时用,可留空)" data-v-f8779360></div><div class="form-control mt-4" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>备注</span></label><input${ssrRenderAttr("value", pForm.remark)} type="text" class="input input-bordered w-full" data-v-f8779360></div><div class="flex items-center gap-2 mt-4" data-v-f8779360><label class="flex items-center gap-2 cursor-pointer" data-v-f8779360><input${ssrIncludeBooleanAttr(Array.isArray(pForm.enabled) ? ssrLooseContain(pForm.enabled, null) : pForm.enabled) ? " checked" : ""} type="checkbox" class="toggle toggle-primary toggle-sm" data-v-f8779360><span class="text-sm" data-v-f8779360>启用</span></label></div><div class="flex gap-3 mt-6" data-v-f8779360><button type="button" class="btn btn-ghost" data-v-f8779360>取消</button><button type="submit" class="btn btn-primary text-white" data-v-f8779360>保存</button></div></form></div></div><div style="${ssrRenderStyle(view.value === "deployForm" ? null : { display: "none" })}" data-v-f8779360><div class="flex items-center gap-3 mb-5" data-v-f8779360><button class="btn btn-ghost btn-sm" data-v-f8779360>← 返回</button><h2 class="text-lg font-semibold text-slate-800" data-v-f8779360>${ssrInterpolate(dIsEditing.value ? "编辑部署" : "添加部署")}</h2></div><div class="bg-white rounded-xl shadow-sm border border-slate-100 p-6 max-w-3xl" data-v-f8779360><form data-v-f8779360>`);
if (!dIsEditing.value) {
_push(`<div class="tabs tabs-boxed bg-slate-100 w-fit mb-5" data-v-f8779360><a class="${ssrRenderClass([dMode.value === "existing" ? "tab-active" : "", "tab"])}" data-v-f8779360>添加现有</a><a class="${ssrRenderClass([dMode.value === "deploy" ? "tab-active" : "", "tab"])}" data-v-f8779360>部署到目标环境</a></div>`);
} else {
_push(`<!---->`);
}
_push(`<p class="${ssrRenderClass([dIsEditing.value ? "" : "-mt-3", "text-xs text-slate-400 mb-4"])}" data-v-f8779360>`);
if (dIsEditing.value) {
_push(`<!--[-->编辑该区域部署的配置(镜像 Tag / 部署目录 / 环境节点 等);改好后回列表点「升级」执行远程部署(拉新镜像并重启)。<!--]-->`);
} else if (dMode.value === "existing") {
_push(`<!--[-->把「已经部署好的应用区域」加进来:填地址与业务库 DSN,测试通过后保存。<!--]-->`);
} else {
_push(`<!--[-->选一个「部署目标环境」,先建关联并标记<b data-v-f8779360>待部署</b>;保存后回列表点「升级」执行远程部署。<!--]-->`);
}
_push(`</p><div class="grid grid-cols-2 gap-4" data-v-f8779360><div class="form-control" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>所属应用</span></label><input${ssrRenderAttr("value", dForm.app_name)} type="text" class="input input-bordered w-full bg-slate-100" readonly data-v-f8779360></div><div class="form-control" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>部署名称 *</span></label><input${ssrRenderAttr("value", dForm.name)} type="text" class="input input-bordered w-full" required placeholder="如 Voitrans(国内)" data-v-f8779360></div></div><div class="grid grid-cols-2 gap-4 mt-4" data-v-f8779360><div class="form-control" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>区域</span></label><select class="select select-bordered w-full" data-v-f8779360><option value="" data-v-f8779360${ssrIncludeBooleanAttr(Array.isArray(dForm.region) ? ssrLooseContain(dForm.region, "") : ssrLooseEqual(dForm.region, "")) ? " selected" : ""}>未指定</option><!--[-->`);
ssrRenderList(availableRegions.value, (r) => {
_push(`<option${ssrRenderAttr("value", r)} data-v-f8779360${ssrIncludeBooleanAttr(Array.isArray(dForm.region) ? ssrLooseContain(dForm.region, r) : ssrLooseEqual(dForm.region, r)) ? " selected" : ""}>${ssrInterpolate(r)}</option>`);
});
_push(`<!--]--></select><span class="text-xs text-slate-400 mt-1" data-v-f8779360>已部署的区域不再出现(一个应用每区域一份部署)。</span></div><div class="form-control" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>部署环境${ssrInterpolate(dMode.value === "deploy" ? " *" : "")}</span></label><select class="select select-bordered w-full" data-v-f8779360><option${ssrRenderAttr("value", 0)} data-v-f8779360${ssrIncludeBooleanAttr(Array.isArray(dForm.env_id) ? ssrLooseContain(dForm.env_id, 0) : ssrLooseEqual(dForm.env_id, 0)) ? " selected" : ""}>${ssrInterpolate(dMode.value === "deploy" ? "请选择目标环境" : "未关联")}</option><!--[-->`);
ssrRenderList(envs.value, (e) => {
_push(`<option${ssrRenderAttr("value", e.id)} data-v-f8779360${ssrIncludeBooleanAttr(Array.isArray(dForm.env_id) ? ssrLooseContain(dForm.env_id, e.id) : ssrLooseEqual(dForm.env_id, e.id)) ? " selected" : ""}>${ssrInterpolate(e.name)}(${ssrInterpolate(e.code || "-")})</option>`);
});
_push(`<!--]--></select></div></div><div class="grid grid-cols-3 gap-4 mt-4" data-v-f8779360><div class="form-control" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>部署目录</span></label><input${ssrRenderAttr("value", dForm.deploy_dir)} type="text" class="input input-bordered w-full font-mono text-xs" placeholder="/home/work/voitrans-a11" data-v-f8779360></div><div class="form-control" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>镜像名</span></label><input${ssrRenderAttr("value", dForm.image_name)} type="text" class="input input-bordered w-full" placeholder="voitrans-a11(默认取应用)" data-v-f8779360></div><div class="form-control" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>镜像 Tag</span></label><input${ssrRenderAttr("value", dForm.image_tag)} type="text" class="input input-bordered w-full" placeholder="0.1.1 / latest" data-v-f8779360></div></div><div class="form-control mt-4" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>业务库 DSN${ssrInterpolate(dMode.value === "existing" ? " *" : "")}</span></label><input${ssrRenderAttr("value", dForm.service_dsn)} type="text" class="input input-bordered w-full font-mono text-xs" placeholder="root:pwd@tcp(host:3306)/earphone?charset=utf8mb4&amp;parseTime=True&amp;loc=Local" data-v-f8779360><span class="text-xs text-slate-400 mt-1" data-v-f8779360>用于读取业务数据(重置设备码时清 userdevice/product_stat)</span></div>`);
if (dMode.value === "existing") {
_push(`<!--[--><div class="form-control mt-4" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>应用地址 *</span></label><input${ssrRenderAttr("value", dForm.base_url)} type="text" class="input input-bordered w-full" placeholder="https://api.xxx.com/" data-v-f8779360><span class="text-xs text-slate-400 mt-1" data-v-f8779360>用于通知应用业务服务事件(如配置更新)</span></div><div class="mt-4 text-sm" style="${ssrRenderStyle(testResult.show ? null : { display: "none" })}" data-v-f8779360><div class="${ssrRenderClass(testResult.apiOk ? "text-green-700" : "text-red-600")}" data-v-f8779360><span class="${ssrRenderClass(testResult.apiOk ? "text-green-600" : "text-red-500")}" data-v-f8779360>${ssrInterpolate(testResult.apiOk ? "✓" : "✗")}</span> 应用地址:${ssrInterpolate(testResult.apiMsg)}</div><div class="${ssrRenderClass(testResult.dbOk ? "text-green-700" : "text-red-600")}" data-v-f8779360><span class="${ssrRenderClass(testResult.dbOk ? "text-green-600" : "text-red-500")}" data-v-f8779360>${ssrInterpolate(testResult.dbOk ? "✓" : "✗")}</span> 业务库:${ssrInterpolate(testResult.dbMsg)}</div></div><!--]-->`);
} else {
_push(`<!---->`);
}
_push(`<div class="form-control mt-4" data-v-f8779360><label class="label" data-v-f8779360><span class="label-text font-medium" data-v-f8779360>备注</span></label><input${ssrRenderAttr("value", dForm.remark)} type="text" class="input input-bordered w-full" data-v-f8779360></div><div class="flex items-center gap-2 mt-4" data-v-f8779360><label class="flex items-center gap-2 cursor-pointer" data-v-f8779360><input${ssrIncludeBooleanAttr(Array.isArray(dForm.enabled) ? ssrLooseContain(dForm.enabled, null) : dForm.enabled) ? " checked" : ""} type="checkbox" class="toggle toggle-primary toggle-sm" data-v-f8779360><span class="text-sm" data-v-f8779360>启用</span></label></div><div class="flex gap-3 mt-6" data-v-f8779360><button type="button" class="btn btn-ghost" data-v-f8779360>取消</button>`);
if (dMode.value === "existing") {
_push(`<button type="button" class="btn btn-outline"${ssrIncludeBooleanAttr(testing.value) ? " disabled" : ""} data-v-f8779360>${ssrInterpolate(testing.value ? "测试中..." : "测试连接")}</button>`);
} else {
_push(`<!---->`);
}
_push(`<button type="submit" class="btn btn-primary text-white"${ssrIncludeBooleanAttr(!dIsEditing.value && dMode.value === "existing" && !testPassed.value) ? " disabled" : ""} data-v-f8779360>保存</button></div>`);
if (!dIsEditing.value && dMode.value === "existing") {
_push(`<p class="text-xs text-slate-400 mt-2" data-v-f8779360>需先「测试连接」通过(应用地址可达 + 业务库可连)才能保存。</p>`);
} else {
_push(`<!---->`);
}
_push(`</form></div></div><dialog class="modal" data-v-f8779360><div class="modal-box" data-v-f8779360><h3 class="font-bold text-lg" data-v-f8779360>分析历史数据</h3><p class="text-sm text-slate-500 mt-1" data-v-f8779360>${ssrInterpolate(az.appLabel)}</p><div class="text-xs text-amber-700 mt-3 bg-amber-50 border border-amber-100 rounded-lg p-3 leading-relaxed" data-v-f8779360> 扫描该应用业务库,按 <b data-v-f8779360>天 + 产品 + 区域</b> 生成历史统计(新增用户 / 订单 / 资源发放·使用 / 激活绑定设备),汇入 console 主库。<br data-v-f8779360> · <b data-v-f8779360>分析前会先清理该应用+区域在所选区间内的旧统计行</b>,避免数据重叠。<br data-v-f8779360> · 登录、活跃用户、AI对话等无每日原始记录,历史无法还原(由实时管道往后采集)。<br data-v-f8779360> · 仅对实时管道上线前的区间运行。留空 = 全部历史。大库可能耗时。 </div><div class="grid grid-cols-2 gap-3 mt-4" data-v-f8779360><div data-v-f8779360><label class="text-xs text-slate-500" data-v-f8779360>起始日(含)</label><input${ssrRenderAttr("value", az.start)} type="date" class="input input-bordered input-sm w-full" data-v-f8779360></div><div data-v-f8779360><label class="text-xs text-slate-500" data-v-f8779360>结束日(含)</label><input${ssrRenderAttr("value", az.end)} type="date" class="input input-bordered input-sm w-full" data-v-f8779360></div></div><div class="${ssrRenderClass([az.resultClass, "text-sm mt-3"])}" style="${ssrRenderStyle(az.resultShow ? null : { display: "none" })}" data-v-f8779360>`);
if (az.mode === "progress") {
_push(`<div class="bg-slate-50 border border-slate-200 rounded-lg p-3" data-v-f8779360><div class="flex justify-between items-center text-xs mb-1.5" data-v-f8779360><span class="text-slate-600" data-v-f8779360>`);
if (az.curName) {
_push(`<!--[--><span class="loading loading-spinner loading-xs" data-v-f8779360></span> 正在:${ssrInterpolate(az.curName)} (${ssrInterpolate(az.curIndex)}/${ssrInterpolate(az.curTotal)}) <!--]-->`);
} else {
_push(`<!--[-->准备中...<!--]-->`);
}
_push(`</span><span class="font-mono text-slate-400" data-v-f8779360>${ssrInterpolate(az.pct)}%</span></div><progress class="progress progress-primary w-full h-2"${ssrRenderAttr("value", az.pct)} max="100" data-v-f8779360></progress><div class="mt-2 text-xs space-y-0.5" data-v-f8779360><!--[-->`);
ssrRenderList(az.steps, (nm, i) => {
_push(`<div class="${ssrRenderClass(i === az.curIndex - 1 ? "text-slate-600" : "text-green-600")}" data-v-f8779360>`);
if (i === az.curIndex - 1) {
_push(`<!--[--><span class="loading loading-spinner loading-xs" data-v-f8779360></span> ${ssrInterpolate(nm)}<!--]-->`);
} else {
_push(`<!--[-->✓ ${ssrInterpolate(nm)}<!--]-->`);
}
_push(`</div>`);
});
_push(`<!--]--></div></div>`);
} else if (az.mode === "error") {
_push(`<div class="text-red-600" data-v-f8779360>✗ ${ssrInterpolate(az.errMsg)}</div>`);
} else if (az.mode === "done" && az.report) {
_push(`<div class="bg-green-50 border border-green-100 rounded-lg p-3" data-v-f8779360><div class="font-semibold text-green-700 mb-2" data-v-f8779360>✓ 分析完成</div><div class="grid grid-cols-2 gap-x-4 gap-y-1 text-xs text-slate-600 mb-2" data-v-f8779360><div data-v-f8779360>应用:<b data-v-f8779360>${ssrInterpolate(az.report.app_name || "")}</b></div><div data-v-f8779360>区域:${ssrInterpolate(az.report.region || "未指定")}</div><div data-v-f8779360>区间:${ssrInterpolate((az.report.start_day || "不限") + " ~ " + (az.report.end_day || "不限"))}</div><div data-v-f8779360>清理旧行:${ssrInterpolate(az.report.cleared_rows || 0)}</div><div data-v-f8779360>写入天数:<b data-v-f8779360>${ssrInterpolate(az.report.days_written || 0)}</b></div><div data-v-f8779360>写入行数:${ssrInterpolate(az.report.rows_written || 0)}</div></div><div class="border-t border-green-100 pt-2 text-xs" data-v-f8779360><!--[-->`);
ssrRenderList(az.report.steps || [], (s, i) => {
_push(`<div class="flex justify-between py-0.5" data-v-f8779360><span class="text-slate-500" data-v-f8779360>${ssrInterpolate(s.name)}</span><span class="font-mono text-slate-700" data-v-f8779360>${ssrInterpolate((s.groups || 0) + " 组")}</span></div>`);
});
_push(`<!--]--></div></div>`);
} else {
_push(`<!---->`);
}
_push(`</div><div class="modal-action" data-v-f8779360><button class="btn btn-ghost btn-sm" data-v-f8779360>关闭</button><button class="btn btn-primary btn-sm text-white"${ssrIncludeBooleanAttr(az.running) ? " disabled" : ""} data-v-f8779360>${ssrInterpolate(az.btnText)}</button></div></div><form method="dialog" class="modal-backdrop" data-v-f8779360><button data-v-f8779360>close</button></form></dialog><dialog class="modal" data-v-f8779360><div class="modal-box max-w-2xl" data-v-f8779360><h3 class="font-bold text-lg" data-v-f8779360>升级部署</h3><p class="text-sm text-slate-500 mt-1" data-v-f8779360>${ssrInterpolate(up.label)}</p><div class="text-xs text-amber-700 mt-3 bg-amber-50 border border-amber-100 rounded-lg p-3 leading-relaxed" data-v-f8779360> 将 <b data-v-f8779360>SSH 连接到该部署绑定的环境节点</b>,进入部署目录执行:<span class="font-mono" data-v-f8779360>docker login → compose pull → up -d 重启 → 清理旧镜像</span>。<br data-v-f8779360> · 需服务器上已维护好 <span class="font-mono" data-v-f8779360>docker-compose.yml / .env / confs</span>(本操作不上传真实配置)。<br data-v-f8779360> · 会<b data-v-f8779360>重启该部署的容器</b>,请确认无误后再执行。 </div><div class="grid grid-cols-1 gap-2 mt-4 text-xs" data-v-f8779360><div class="flex" data-v-f8779360><span class="w-20 text-slate-400 shrink-0" data-v-f8779360>环境节点</span><span class="${ssrRenderClass(up.envName ? "font-medium text-slate-700" : "font-medium text-red-500")}" data-v-f8779360>${ssrInterpolate(up.envName || "未绑定 —— 请先在「编辑」里选择环境节点")}</span></div><div class="flex" data-v-f8779360><span class="w-20 text-slate-400 shrink-0" data-v-f8779360>部署目录</span><span class="${ssrRenderClass(up.deployDir ? "font-mono text-slate-700" : "font-medium text-red-500")}" data-v-f8779360>${ssrInterpolate(up.deployDir || "未填 —— 请先在「编辑」里填写远端部署目录")}</span></div></div><div class="mt-3" data-v-f8779360><label class="text-xs text-slate-500" data-v-f8779360>镜像 Tag(留空 = latest)</label><input${ssrRenderAttr("value", up.tag)} type="text" class="input input-bordered input-sm w-full font-mono" placeholder="latest"${ssrIncludeBooleanAttr(up.running) ? " disabled" : ""} data-v-f8779360></div><div class="mt-3" style="${ssrRenderStyle(up.show ? null : { display: "none" })}" data-v-f8779360><div class="flex items-center gap-2 text-xs mb-1" data-v-f8779360>`);
if (up.running) {
_push(`<span class="loading loading-spinner loading-xs text-amber-500" data-v-f8779360></span>`);
} else if (up.ok) {
_push(`<span class="text-green-600 font-semibold" data-v-f8779360>✓ 部署完成</span>`);
} else {
_push(`<span class="text-red-600 font-semibold" data-v-f8779360>✗ 部署失败</span>`);
}
_push(`<span class="text-slate-400" data-v-f8779360>${ssrInterpolate(up.running ? "执行中…" : "")}</span></div><pre class="bg-slate-900 text-slate-100 text-[11px] leading-relaxed rounded-lg p-3 h-64 overflow-auto font-mono whitespace-pre-wrap" data-v-f8779360>${ssrInterpolate(up.log || "(等待输出…)")}</pre></div><div class="modal-action" data-v-f8779360><button class="btn btn-ghost btn-sm"${ssrIncludeBooleanAttr(up.running) ? " disabled" : ""} data-v-f8779360>关闭</button><button class="btn btn-warning btn-sm"${ssrIncludeBooleanAttr(up.running) ? " disabled" : ""} data-v-f8779360>${ssrInterpolate(up.btnText)}</button></div></div><form method="dialog" class="modal-backdrop" data-v-f8779360><button${ssrIncludeBooleanAttr(up.running) ? " disabled" : ""} data-v-f8779360>close</button></form></dialog></div>`);
};
}
});
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/apps.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
const apps = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f8779360"]]);
export { apps as default };
//# sourceMappingURL=apps-DkgvJNjV.mjs.map

1
apps/admin/.output/server/chunks/build/apps-DkgvJNjV.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"apps-DkgvJNjV.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/apps-DkgvJNjV.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

8
apps/admin/.output/server/chunks/build/apps-styles._bNp0Sh6.mjs

@ -0,0 +1,8 @@
const apps_vue_vue_type_style_index_0_scoped_f8779360_lang = ".app-card[data-v-f8779360]{background:#fff;border:1px solid #eef2f7;border-radius:14px;box-shadow:0 1px 2px #00000008;overflow:hidden}.app-card.orphan[data-v-f8779360]{border-color:#fde68a}.app-head[data-v-f8779360]{display:flex;align-items:center;gap:12px;padding:13px 16px;cursor:pointer;background:linear-gradient(90deg,#f5f7ff,#fff);border-left:4px solid #6366f1;transition:background .15s}.app-card.orphan .app-head[data-v-f8779360]{background:linear-gradient(90deg,#fffbeb,#fff);border-left-color:#f59e0b}.app-head[data-v-f8779360]:hover{background:linear-gradient(90deg,#eef2ff,#fff)}.chev[data-v-f8779360]{color:#94a3b8;font-size:12px;width:16px;flex-shrink:0}.app-logo[data-v-f8779360]{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,#4f46e5,#7c3aed);color:#fff;font-weight:700;font-size:17px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.app-logo.orphan-logo[data-v-f8779360]{background:#f59e0b}.app-name[data-v-f8779360]{font-size:15px;font-weight:700;color:#1e293b}.chip-app[data-v-f8779360]{font-size:10px;padding:1px 8px;border-radius:6px;background:#eef2ff;color:#4338ca}.chip-app[data-v-f8779360],.chip-dep[data-v-f8779360]{display:inline-flex;font-weight:700}.chip-dep[data-v-f8779360]{font-size:9px;padding:1px 6px;border-radius:5px;background:#ecfeff;color:#0e7490}.chip-mono[data-v-f8779360]{color:#475569;font-family:SF Mono,Menlo,monospace}.chip-count[data-v-f8779360],.chip-mono[data-v-f8779360]{display:inline-flex;font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px;background:#f1f5f9}.chip-count[data-v-f8779360]{color:#64748b}.app-body[data-v-f8779360]{padding:4px 12px 10px;border-top:1px solid #f1f5f9;background:#fcfcfd}.dep-row td[data-v-f8779360]{vertical-align:middle}";
const appsStyles__bNp0Sh6 = [
apps_vue_vue_type_style_index_0_scoped_f8779360_lang
];
export { appsStyles__bNp0Sh6 as default };
//# sourceMappingURL=apps-styles._bNp0Sh6.mjs.map

1
apps/admin/.output/server/chunks/build/apps-styles._bNp0Sh6.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"apps-styles._bNp0Sh6.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/apps-styles-1.mjs-BfSytJy7.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/apps-styles._bNp0Sh6.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0,1]}

8
apps/admin/.output/server/chunks/build/calltranslate-C6glzS4R.mjs → apps/admin/.output/server/chunks/build/calltranslate-B1hhAqN7.mjs

@ -1,10 +1,12 @@
import { defineComponent, ref, reactive, computed, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderStyle, ssrRenderList, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrInterpolate, ssrRenderClass } from 'vue/server-renderer';
import { u as useApi } from './useApi-B7CB0Cnn.mjs';
import { u as useToast } from './useToast-BwtTR9dH.mjs';
import { u as useApi } from './useApi-B6h53Mkt.mjs';
import { u as useToast } from './useToast-C76a6bSX.mjs';
import { _ as _export_sfc } from './server.mjs';
import './auth-QFkCoU1C.mjs';
import 'pinia';
import './useLoading-D6mc40Wj.mjs';
import './state-DQnwRar-.mjs';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
@ -208,4 +210,4 @@ _sfc_main.setup = (props, ctx) => {
const calltranslate = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-51f11136"]]);
export { calltranslate as default };
//# sourceMappingURL=calltranslate-C6glzS4R.mjs.map
//# sourceMappingURL=calltranslate-B1hhAqN7.mjs.map

1
apps/admin/.output/server/chunks/build/calltranslate-B1hhAqN7.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"calltranslate-B1hhAqN7.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-B1hhAqN7.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

1
apps/admin/.output/server/chunks/build/calltranslate-C6glzS4R.mjs.map

@ -1 +0,0 @@
{"version":3,"file":"calltranslate-C6glzS4R.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-C6glzS4R.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

2
apps/admin/.output/server/chunks/build/client.precomputed.mjs

File diff suppressed because one or more lines are too long

8
apps/admin/.output/server/chunks/build/code-Bi0p3nMD.mjs → apps/admin/.output/server/chunks/build/code-BQgGcfFH.mjs

@ -1,7 +1,7 @@
import { defineComponent, ref, reactive, mergeProps, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderStyle, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrRenderList, ssrInterpolate } from 'vue/server-renderer';
import { u as useApi } from './useApi-B7CB0Cnn.mjs';
import { u as useToast } from './useToast-BwtTR9dH.mjs';
import { u as useApi } from './useApi-B6h53Mkt.mjs';
import { u as useToast } from './useToast-C76a6bSX.mjs';
import './auth-QFkCoU1C.mjs';
import 'pinia';
import './server.mjs';
@ -20,6 +20,8 @@ import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'perfect-debounce';
import './useLoading-D6mc40Wj.mjs';
import './state-DQnwRar-.mjs';
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "code",
@ -100,4 +102,4 @@ _sfc_main.setup = (props, ctx) => {
};
export { _sfc_main as default };
//# sourceMappingURL=code-Bi0p3nMD.mjs.map
//# sourceMappingURL=code-BQgGcfFH.mjs.map

1
apps/admin/.output/server/chunks/build/code-BQgGcfFH.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"code-BQgGcfFH.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/code-BQgGcfFH.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

1
apps/admin/.output/server/chunks/build/code-Bi0p3nMD.mjs.map

@ -1 +0,0 @@
{"version":3,"file":"code-Bi0p3nMD.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/code-Bi0p3nMD.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

50
apps/admin/.output/server/chunks/build/dashboard-ClL32CVK.mjs → apps/admin/.output/server/chunks/build/dashboard-BeG8w5Q7.mjs

@ -1,9 +1,11 @@
import { defineComponent, computed, reactive, ref, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrRenderList, ssrRenderAttr, ssrInterpolate, ssrRenderStyle, ssrRenderClass } from 'vue/server-renderer';
import { u as useAuthStore } from './auth-QFkCoU1C.mjs';
import { u as useApi } from './useApi-B7CB0Cnn.mjs';
import { u as useApi } from './useApi-B6h53Mkt.mjs';
import { _ as _export_sfc } from './server.mjs';
import 'pinia';
import './useLoading-D6mc40Wj.mjs';
import './state-DQnwRar-.mjs';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
@ -199,53 +201,53 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
return fmtStat((panelStats.value[p.key] || {})[s[0]], s[2], s[3]);
}
return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(_attrs)} data-v-d169bdaa><div class="panel p-4 mb-5" data-v-d169bdaa><div class="flex flex-wrap items-end gap-3" data-v-d169bdaa><div class="form-control" data-v-d169bdaa><label class="label py-1" data-v-d169bdaa><span class="label-text text-xs text-slate-500" data-v-d169bdaa>应用</span></label><select class="select select-bordered select-sm w-40" data-v-d169bdaa><option value="" data-v-d169bdaa${ssrIncludeBooleanAttr(Array.isArray(filters.app) ? ssrLooseContain(filters.app, "") : ssrLooseEqual(filters.app, "")) ? " selected" : ""}>全部应用</option><!--[-->`);
_push(`<div${ssrRenderAttrs(_attrs)} data-v-7dbe8712><div class="panel p-4 mb-5" data-v-7dbe8712><div class="flex flex-wrap items-end gap-3" data-v-7dbe8712><div class="form-control" data-v-7dbe8712><label class="label py-1" data-v-7dbe8712><span class="label-text text-xs text-slate-500" data-v-7dbe8712>应用</span></label><select class="select select-bordered select-sm w-40" data-v-7dbe8712><option value="" data-v-7dbe8712${ssrIncludeBooleanAttr(Array.isArray(filters.app) ? ssrLooseContain(filters.app, "") : ssrLooseEqual(filters.app, "")) ? " selected" : ""}>全部应用</option><!--[-->`);
ssrRenderList(appOptions.value, (a) => {
_push(`<option${ssrRenderAttr("value", a.value)} data-v-d169bdaa${ssrIncludeBooleanAttr(Array.isArray(filters.app) ? ssrLooseContain(filters.app, a.value) : ssrLooseEqual(filters.app, a.value)) ? " selected" : ""}>${ssrInterpolate(a.label)}</option>`);
_push(`<option${ssrRenderAttr("value", a.value)} data-v-7dbe8712${ssrIncludeBooleanAttr(Array.isArray(filters.app) ? ssrLooseContain(filters.app, a.value) : ssrLooseEqual(filters.app, a.value)) ? " selected" : ""}>${ssrInterpolate(a.label)}</option>`);
});
_push(`<!--]--></select></div><div class="form-control" data-v-d169bdaa><label class="label py-1" data-v-d169bdaa><span class="label-text text-xs text-slate-500" data-v-d169bdaa>区域</span></label><select class="select select-bordered select-sm w-32" data-v-d169bdaa><option value="" data-v-d169bdaa${ssrIncludeBooleanAttr(Array.isArray(filters.region) ? ssrLooseContain(filters.region, "") : ssrLooseEqual(filters.region, "")) ? " selected" : ""}>全部区域</option><!--[-->`);
_push(`<!--]--></select></div><div class="form-control" data-v-7dbe8712><label class="label py-1" data-v-7dbe8712><span class="label-text text-xs text-slate-500" data-v-7dbe8712>区域</span></label><select class="select select-bordered select-sm w-32" data-v-7dbe8712><option value="" data-v-7dbe8712${ssrIncludeBooleanAttr(Array.isArray(filters.region) ? ssrLooseContain(filters.region, "") : ssrLooseEqual(filters.region, "")) ? " selected" : ""}>全部区域</option><!--[-->`);
ssrRenderList(regionOptions.value, (r) => {
_push(`<option${ssrRenderAttr("value", r.value)} data-v-d169bdaa${ssrIncludeBooleanAttr(Array.isArray(filters.region) ? ssrLooseContain(filters.region, r.value) : ssrLooseEqual(filters.region, r.value)) ? " selected" : ""}>${ssrInterpolate(r.label)}</option>`);
_push(`<option${ssrRenderAttr("value", r.value)} data-v-7dbe8712${ssrIncludeBooleanAttr(Array.isArray(filters.region) ? ssrLooseContain(filters.region, r.value) : ssrLooseEqual(filters.region, r.value)) ? " selected" : ""}>${ssrInterpolate(r.label)}</option>`);
});
_push(`<!--]--></select></div><div class="form-control" data-v-d169bdaa><label class="label py-1" data-v-d169bdaa><span class="label-text text-xs text-slate-500" data-v-d169bdaa>产品</span></label><select class="select select-bordered select-sm w-48" data-v-d169bdaa><option value="" data-v-d169bdaa${ssrIncludeBooleanAttr(Array.isArray(filters.product) ? ssrLooseContain(filters.product, "") : ssrLooseEqual(filters.product, "")) ? " selected" : ""}>全部产品</option><!--[-->`);
_push(`<!--]--></select></div><div class="form-control" data-v-7dbe8712><label class="label py-1" data-v-7dbe8712><span class="label-text text-xs text-slate-500" data-v-7dbe8712>产品</span></label><select class="select select-bordered select-sm w-48" data-v-7dbe8712><option value="" data-v-7dbe8712${ssrIncludeBooleanAttr(Array.isArray(filters.product) ? ssrLooseContain(filters.product, "") : ssrLooseEqual(filters.product, "")) ? " selected" : ""}>全部产品</option><!--[-->`);
ssrRenderList(productOptions.value, (p) => {
_push(`<option${ssrRenderAttr("value", p.value)} data-v-d169bdaa${ssrIncludeBooleanAttr(Array.isArray(filters.product) ? ssrLooseContain(filters.product, p.value) : ssrLooseEqual(filters.product, p.value)) ? " selected" : ""}>${ssrInterpolate(p.label)}</option>`);
_push(`<option${ssrRenderAttr("value", p.value)} data-v-7dbe8712${ssrIncludeBooleanAttr(Array.isArray(filters.product) ? ssrLooseContain(filters.product, p.value) : ssrLooseEqual(filters.product, p.value)) ? " selected" : ""}>${ssrInterpolate(p.label)}</option>`);
});
_push(`<!--]--></select></div><button class="btn btn-primary btn-sm text-white" data-v-d169bdaa>查询</button><span class="text-xs text-slate-400 ml-auto self-center" data-v-d169bdaa>顶部为全量总览;各版面右上角可单独选时间周期</span></div></div><div class="sec-title muted" data-v-d169bdaa><span class="bar" style="${ssrRenderStyle({ "background": "#cbd5e1" })}" data-v-d169bdaa></span><h2 data-v-d169bdaa>累计数据</h2><span class="sub" data-v-d169bdaa>全量累计 · 随筛选条件变化</span></div><div class="grid grid-cols-2 md:grid-cols-4 gap-3 mb-8" data-v-d169bdaa><!--[-->`);
_push(`<!--]--></select></div><button class="btn btn-primary btn-sm text-white" data-v-7dbe8712>查询</button><span class="text-xs text-slate-400 ml-auto self-center" data-v-7dbe8712>顶部为全量总览;各版面右上角可单独选时间周期</span></div></div><div class="sec-title muted" data-v-7dbe8712><span class="bar" style="${ssrRenderStyle({ "background": "#cbd5e1" })}" data-v-7dbe8712></span><h2 data-v-7dbe8712>累计数据</h2><span class="sub" data-v-7dbe8712>全量累计 · 随筛选条件变化</span></div><div class="grid grid-cols-2 md:grid-cols-4 gap-3 mb-8" data-v-7dbe8712><!--[-->`);
ssrRenderList(globalCards.value, (c) => {
_push(`<div class="cum-card" data-v-d169bdaa><span class="ico" style="${ssrRenderStyle({ background: cardStyle(c[0])[1] })}" data-v-d169bdaa>${ssrInterpolate(cardStyle(c[0])[0])}</span><div class="body" data-v-d169bdaa><div class="lbl" data-v-d169bdaa>${ssrInterpolate(c[1])}</div><div class="val" data-v-d169bdaa>${ssrInterpolate(globalVal(c))}</div></div></div>`);
_push(`<div class="cum-card" data-v-7dbe8712><span class="ico" style="${ssrRenderStyle({ background: cardStyle(c[0])[1] })}" data-v-7dbe8712>${ssrInterpolate(cardStyle(c[0])[0])}</span><div class="body" data-v-7dbe8712><div class="lbl" data-v-7dbe8712>${ssrInterpolate(c[1])}</div><div class="val" data-v-7dbe8712>${ssrInterpolate(globalVal(c))}</div></div></div>`);
});
_push(`<!--]--></div><div class="today-wrap mb-8" data-v-d169bdaa><div class="sec-title hero" style="${ssrRenderStyle({ "margin-bottom": "16px" })}" data-v-d169bdaa><span class="bar" style="${ssrRenderStyle({ "background": "linear-gradient(180deg,#0EA5E9,#22D3EE)" })}" data-v-d169bdaa></span><h2 data-v-d169bdaa>今日数据</h2><span class="tag" style="${ssrRenderStyle({ "color": "#0369a1", "background": "#dbeafe" })}" data-v-d169bdaa>${ssrInterpolate(todayTag.value)}</span><span class="sub" data-v-d169bdaa>今日 0 点至现在 · 含较昨日同比(设备类无日期维度,仅见累计)</span></div><div class="grid grid-cols-2 md:grid-cols-4 gap-4" data-v-d169bdaa><!--[-->`);
_push(`<!--]--></div><div class="today-wrap mb-8" data-v-7dbe8712><div class="sec-title hero" style="${ssrRenderStyle({ "margin-bottom": "16px" })}" data-v-7dbe8712><span class="bar" style="${ssrRenderStyle({ "background": "linear-gradient(180deg,#0EA5E9,#22D3EE)" })}" data-v-7dbe8712></span><h2 data-v-7dbe8712>今日数据</h2><span class="tag" style="${ssrRenderStyle({ "color": "#0369a1", "background": "#dbeafe" })}" data-v-7dbe8712>${ssrInterpolate(todayTag.value)}</span><span class="sub" data-v-7dbe8712>今日 0 点至现在 · 含较昨日同比(设备类无日期维度,仅见累计)</span></div><div class="grid grid-cols-2 md:grid-cols-4 gap-4" data-v-7dbe8712><!--[-->`);
ssrRenderList(todayCards.value, (c) => {
_push(`<div class="today-card" data-v-d169bdaa><span class="accent" style="${ssrRenderStyle({ background: cardStyle(c[0])[2] })}" data-v-d169bdaa></span><div class="today-card-top" data-v-d169bdaa><span class="lbl" data-v-d169bdaa>${ssrInterpolate(c[1])}</span><span class="ico" style="${ssrRenderStyle({ background: cardStyle(c[0])[1] })}" data-v-d169bdaa>${ssrInterpolate(cardStyle(c[0])[0])}</span></div><div class="val" data-v-d169bdaa>${ssrInterpolate(todayVal(c))}</div><div class="foot" data-v-d169bdaa>`);
_push(`<div class="today-card" data-v-7dbe8712><span class="accent" style="${ssrRenderStyle({ background: cardStyle(c[0])[2] })}" data-v-7dbe8712></span><div class="today-card-top" data-v-7dbe8712><span class="lbl" data-v-7dbe8712>${ssrInterpolate(c[1])}</span><span class="ico" style="${ssrRenderStyle({ background: cardStyle(c[0])[1] })}" data-v-7dbe8712>${ssrInterpolate(cardStyle(c[0])[0])}</span></div><div class="val" data-v-7dbe8712>${ssrInterpolate(todayVal(c))}</div><div class="foot" data-v-7dbe8712>`);
if (todayDelta(c).type === "new") {
_push(`<span class="delta up" data-v-d169bdaa>新</span>`);
_push(`<span class="delta up" data-v-7dbe8712>新</span>`);
} else if (todayDelta(c).type !== "none") {
_push(`<span class="${ssrRenderClass([todayDelta(c).type, "delta"])}" data-v-d169bdaa>${ssrInterpolate(todayDelta(c).arrow)} ${ssrInterpolate(todayDelta(c).abs)}%</span>`);
_push(`<span class="${ssrRenderClass([todayDelta(c).type, "delta"])}" data-v-7dbe8712>${ssrInterpolate(todayDelta(c).arrow)} ${ssrInterpolate(todayDelta(c).abs)}%</span>`);
} else {
_push(`<!---->`);
}
_push(`<span data-v-d169bdaa>较昨日</span></div></div>`);
_push(`<span data-v-7dbe8712>较昨日</span></div></div>`);
});
_push(`<!--]--></div></div><div class="sec-title" data-v-d169bdaa><span class="bar" style="${ssrRenderStyle({ "background": "linear-gradient(180deg,#10B981,#22D3EE)" })}" data-v-d169bdaa></span><h2 data-v-d169bdaa>趋势分析</h2><span class="sub" data-v-d169bdaa>各版面右上角可独立选择时间周期</span></div><div class="grid grid-cols-1 xl:grid-cols-2 gap-6" data-v-d169bdaa><!--[-->`);
_push(`<!--]--></div></div><div class="sec-title" data-v-7dbe8712><span class="bar" style="${ssrRenderStyle({ "background": "linear-gradient(180deg,#10B981,#22D3EE)" })}" data-v-7dbe8712></span><h2 data-v-7dbe8712>趋势分析</h2><span class="sub" data-v-7dbe8712>各版面右上角可独立选择时间周期</span></div><div class="grid grid-cols-1 xl:grid-cols-2 gap-6" data-v-7dbe8712><!--[-->`);
ssrRenderList(panels.value, (p) => {
_push(`<div class="panel" data-v-d169bdaa><div class="panel-head" data-v-d169bdaa><span class="panel-dot" style="${ssrRenderStyle({ background: p.tint })}" data-v-d169bdaa><svg width="17" height="17" fill="none" viewBox="0 0 24 24"${ssrRenderAttr("stroke", p.color)} data-v-d169bdaa><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"${ssrRenderAttr("d", p.icon)} data-v-d169bdaa></path></svg></span><span class="font-semibold text-slate-700 text-sm" data-v-d169bdaa>${ssrInterpolate(p.title)}</span>`);
_push(`<div class="panel" data-v-7dbe8712><div class="panel-head" data-v-7dbe8712><span class="panel-dot" style="${ssrRenderStyle({ background: p.tint })}" data-v-7dbe8712><svg width="17" height="17" fill="none" viewBox="0 0 24 24"${ssrRenderAttr("stroke", p.color)} data-v-7dbe8712><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"${ssrRenderAttr("d", p.icon)} data-v-7dbe8712></path></svg></span><span class="font-semibold text-slate-700 text-sm" data-v-7dbe8712>${ssrInterpolate(p.title)}</span>`);
if (p.key === "device") {
_push(`<span class="ml-auto text-xs text-slate-400" data-v-d169bdaa>当前累计 · 无日期维度</span>`);
_push(`<span class="ml-auto text-xs text-slate-400" data-v-7dbe8712>当前累计 · 无日期维度</span>`);
} else {
_push(`<div class="ml-auto flex items-center gap-1" data-v-d169bdaa><!--[-->`);
_push(`<div class="ml-auto flex items-center gap-1" data-v-7dbe8712><!--[-->`);
ssrRenderList(rangeBtns, (d) => {
_push(`<button class="${ssrRenderClass([{ "tbtn-on": d[0] === panelDays[p.key] }, "tbtn"])}" data-v-d169bdaa>${ssrInterpolate(d[1])}</button>`);
_push(`<button class="${ssrRenderClass([{ "tbtn-on": d[0] === panelDays[p.key] }, "tbtn"])}" data-v-7dbe8712>${ssrInterpolate(d[1])}</button>`);
});
_push(`<!--]--></div>`);
}
_push(`</div><div class="px-5 py-4" data-v-d169bdaa><div class="grid grid-cols-2 sm:grid-cols-3 gap-2.5" data-v-d169bdaa><!--[-->`);
_push(`</div><div class="px-5 py-4" data-v-7dbe8712><div class="grid grid-cols-2 sm:grid-cols-3 gap-2.5" data-v-7dbe8712><!--[-->`);
ssrRenderList(p.stats, (s) => {
_push(`<div class="stat-box" data-v-d169bdaa><div class="stat-label" data-v-d169bdaa>${ssrInterpolate(s[1])}</div><div class="stat-val" data-v-d169bdaa>${ssrInterpolate(panelStatVal(p, s))}</div></div>`);
_push(`<div class="stat-box" data-v-7dbe8712><div class="stat-label" data-v-7dbe8712>${ssrInterpolate(s[1])}</div><div class="stat-val" data-v-7dbe8712>${ssrInterpolate(panelStatVal(p, s))}</div></div>`);
});
_push(`<!--]--></div>`);
if (p.key !== "device") {
_push(`<div style="${ssrRenderStyle({ "height": "170px", "margin-top": "1rem" })}" data-v-d169bdaa><canvas data-v-d169bdaa></canvas></div>`);
_push(`<div style="${ssrRenderStyle({ "height": "170px", "margin-top": "1rem" })}" data-v-7dbe8712><canvas data-v-7dbe8712></canvas></div>`);
} else {
_push(`<!---->`);
}
@ -261,7 +263,7 @@ _sfc_main.setup = (props, ctx) => {
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/dashboard.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
const dashboard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d169bdaa"]]);
const dashboard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7dbe8712"]]);
export { dashboard as default };
//# sourceMappingURL=dashboard-ClL32CVK.mjs.map
//# sourceMappingURL=dashboard-BeG8w5Q7.mjs.map

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save