初始版本

This commit is contained in:
2026-04-23 16:30:57 +08:00
commit 0d0683a6e6
538 changed files with 113042 additions and 0 deletions

8
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

12
.idea/jczxw-pc.iml generated Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

7
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KubernetesApiPersistence">{}</component>
<component name="KubernetesApiProvider">{
&quot;isMigrated&quot;: true
}</component>
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/jczxw-pc.iml" filepath="$PROJECT_DIR$/.idea/jczxw-pc.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

21
.nuxt/app.config.mjs Normal file
View File

@@ -0,0 +1,21 @@
import { defuFn } from 'defu'
const inlineConfig = {
"nuxt": {}
}
/** client **/
import { _replaceAppConfig } from '#app/config'
// Vite - webpack is handled directly in #app/config
if (import.meta.dev && !import.meta.nitro && import.meta.hot) {
import.meta.hot.accept((newModule) => {
_replaceAppConfig(newModule.default)
})
}
/** client-end **/
export default /*@__PURE__*/ defuFn(inlineConfig)

164
.nuxt/components.d.ts vendored Normal file
View File

@@ -0,0 +1,164 @@
import type { DefineComponent, SlotsType } from 'vue'
type IslandComponent<T> = DefineComponent<{}, {refresh: () => Promise<void>}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, SlotsType<{ fallback: { error: unknown } }>> & T
type HydrationStrategies = {
hydrateOnVisible?: IntersectionObserverInit | true
hydrateOnIdle?: number | true
hydrateOnInteraction?: keyof HTMLElementEventMap | Array<keyof HTMLElementEventMap> | true
hydrateOnMediaQuery?: string
hydrateAfter?: number
hydrateWhen?: boolean
hydrateNever?: true
}
type LazyComponent<T> = DefineComponent<HydrationStrategies, {}, {}, {}, {}, {}, {}, { hydrated: () => void }> & T
export const LangSwitch: typeof import("../app/components/LangSwitch.vue").default
export const NotificationBell: typeof import("../app/components/NotificationBell.vue").default
export const QrCodeModal: typeof import("../app/components/QrCodeModal.vue").default
export const QrLogin: typeof import("../app/components/QrLogin.vue").default
export const SiteFooter: typeof import("../app/components/SiteFooter.vue").default
export const SiteHeader: typeof import("../app/components/SiteHeader.vue").default
export const AdminMarkdownEditor: typeof import("../app/components/admin/MarkdownEditor.vue").default
export const AdminMarkdownRenderer: typeof import("../app/components/admin/MarkdownRenderer.vue").default
export const ConsoleAppsCenter: typeof import("../app/components/console/AppsCenter.vue").default
export const ConsoleHeader: typeof import("../app/components/console/ConsoleHeader.vue").default
export const ConsoleContractManagement: typeof import("../app/components/console/ContractManagement.vue").default
export const DeveloperAppDetail: typeof import("../app/components/developer/AppDetail.vue").default
export const DeveloperAppsCenter: typeof import("../app/components/developer/AppsCenter.vue").default
export const DeveloperPermissionGuard: typeof import("../app/components/developer/PermissionGuard.vue").default
export const DeveloperRoleTag: typeof import("../app/components/developer/RoleTag.vue").default
export const InviteBell: typeof import("../app/components/invite/InviteBell.vue").default
export const InviteNotification: typeof import("../app/components/invite/InviteNotification.vue").default
export const PaymentModal: typeof import("../app/components/payment/PaymentModal.vue").default
export const ProseA: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseA.vue").default
export const ProseBlockquote: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseBlockquote.vue").default
export const ProseCode: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseCode.vue").default
export const ProseEm: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseEm.vue").default
export const ProseH1: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH1.vue").default
export const ProseH2: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH2.vue").default
export const ProseH3: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH3.vue").default
export const ProseH4: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH4.vue").default
export const ProseH5: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH5.vue").default
export const ProseH6: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH6.vue").default
export const ProseHr: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseHr.vue").default
export const ProseImg: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseImg.vue").default
export const ProseLi: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseLi.vue").default
export const ProseOl: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseOl.vue").default
export const ProseP: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseP.vue").default
export const ProsePre: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProsePre.vue").default
export const ProseScript: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseScript.vue").default
export const ProseStrong: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseStrong.vue").default
export const ProseTable: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTable.vue").default
export const ProseTbody: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTbody.vue").default
export const ProseTd: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTd.vue").default
export const ProseTh: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTh.vue").default
export const ProseThead: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseThead.vue").default
export const ProseTr: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTr.vue").default
export const ProseUl: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseUl.vue").default
export const NuxtWelcome: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/welcome.vue").default
export const NuxtLayout: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-layout").default
export const NuxtErrorBoundary: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue").default
export const ClientOnly: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/client-only").default
export const DevOnly: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/dev-only").default
export const ServerPlaceholder: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/server-placeholder").default
export const NuxtLink: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-link").default
export const NuxtLoadingIndicator: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-loading-indicator").default
export const NuxtTime: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-time.vue").default
export const NuxtRouteAnnouncer: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-route-announcer").default
export const NuxtImg: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-stubs").NuxtImg
export const NuxtPicture: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-stubs").NuxtPicture
export const ContentRenderer: typeof import("../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/components/ContentRenderer.vue").default
export const NuxtLinkLocale: typeof import("../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/components/NuxtLinkLocale").default
export const SwitchLocalePathLink: typeof import("../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/components/SwitchLocalePathLink").default
export const NuxtPage: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/pages/runtime/page").default
export const NoScript: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").NoScript
export const Link: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Link
export const Base: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Base
export const Title: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Title
export const Meta: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Meta
export const Style: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Style
export const Head: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Head
export const Html: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Html
export const Body: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Body
export const MDC: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDC.vue").default
export const MDCCached: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCCached.vue").default
export const MDCRenderer: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCRenderer.vue").default
export const MDCSlot: typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCSlot.vue").default
export const NuxtIsland: typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-island").default
export const LazyLangSwitch: LazyComponent<typeof import("../app/components/LangSwitch.vue").default>
export const LazyNotificationBell: LazyComponent<typeof import("../app/components/NotificationBell.vue").default>
export const LazyQrCodeModal: LazyComponent<typeof import("../app/components/QrCodeModal.vue").default>
export const LazyQrLogin: LazyComponent<typeof import("../app/components/QrLogin.vue").default>
export const LazySiteFooter: LazyComponent<typeof import("../app/components/SiteFooter.vue").default>
export const LazySiteHeader: LazyComponent<typeof import("../app/components/SiteHeader.vue").default>
export const LazyAdminMarkdownEditor: LazyComponent<typeof import("../app/components/admin/MarkdownEditor.vue").default>
export const LazyAdminMarkdownRenderer: LazyComponent<typeof import("../app/components/admin/MarkdownRenderer.vue").default>
export const LazyConsoleAppsCenter: LazyComponent<typeof import("../app/components/console/AppsCenter.vue").default>
export const LazyConsoleHeader: LazyComponent<typeof import("../app/components/console/ConsoleHeader.vue").default>
export const LazyConsoleContractManagement: LazyComponent<typeof import("../app/components/console/ContractManagement.vue").default>
export const LazyDeveloperAppDetail: LazyComponent<typeof import("../app/components/developer/AppDetail.vue").default>
export const LazyDeveloperAppsCenter: LazyComponent<typeof import("../app/components/developer/AppsCenter.vue").default>
export const LazyDeveloperPermissionGuard: LazyComponent<typeof import("../app/components/developer/PermissionGuard.vue").default>
export const LazyDeveloperRoleTag: LazyComponent<typeof import("../app/components/developer/RoleTag.vue").default>
export const LazyInviteBell: LazyComponent<typeof import("../app/components/invite/InviteBell.vue").default>
export const LazyInviteNotification: LazyComponent<typeof import("../app/components/invite/InviteNotification.vue").default>
export const LazyPaymentModal: LazyComponent<typeof import("../app/components/payment/PaymentModal.vue").default>
export const LazyProseA: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseA.vue").default>
export const LazyProseBlockquote: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseBlockquote.vue").default>
export const LazyProseCode: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseCode.vue").default>
export const LazyProseEm: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseEm.vue").default>
export const LazyProseH1: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH1.vue").default>
export const LazyProseH2: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH2.vue").default>
export const LazyProseH3: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH3.vue").default>
export const LazyProseH4: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH4.vue").default>
export const LazyProseH5: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH5.vue").default>
export const LazyProseH6: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH6.vue").default>
export const LazyProseHr: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseHr.vue").default>
export const LazyProseImg: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseImg.vue").default>
export const LazyProseLi: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseLi.vue").default>
export const LazyProseOl: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseOl.vue").default>
export const LazyProseP: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseP.vue").default>
export const LazyProsePre: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProsePre.vue").default>
export const LazyProseScript: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseScript.vue").default>
export const LazyProseStrong: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseStrong.vue").default>
export const LazyProseTable: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTable.vue").default>
export const LazyProseTbody: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTbody.vue").default>
export const LazyProseTd: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTd.vue").default>
export const LazyProseTh: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTh.vue").default>
export const LazyProseThead: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseThead.vue").default>
export const LazyProseTr: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTr.vue").default>
export const LazyProseUl: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseUl.vue").default>
export const LazyNuxtWelcome: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/welcome.vue").default>
export const LazyNuxtLayout: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-layout").default>
export const LazyNuxtErrorBoundary: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue").default>
export const LazyClientOnly: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/client-only").default>
export const LazyDevOnly: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/dev-only").default>
export const LazyServerPlaceholder: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/server-placeholder").default>
export const LazyNuxtLink: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-link").default>
export const LazyNuxtLoadingIndicator: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-loading-indicator").default>
export const LazyNuxtTime: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-time.vue").default>
export const LazyNuxtRouteAnnouncer: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-route-announcer").default>
export const LazyNuxtImg: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-stubs").NuxtImg>
export const LazyNuxtPicture: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-stubs").NuxtPicture>
export const LazyContentRenderer: LazyComponent<typeof import("../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/components/ContentRenderer.vue").default>
export const LazyNuxtLinkLocale: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/components/NuxtLinkLocale").default>
export const LazySwitchLocalePathLink: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/components/SwitchLocalePathLink").default>
export const LazyNuxtPage: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/pages/runtime/page").default>
export const LazyNoScript: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").NoScript>
export const LazyLink: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Link>
export const LazyBase: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Base>
export const LazyTitle: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Title>
export const LazyMeta: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Meta>
export const LazyStyle: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Style>
export const LazyHead: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Head>
export const LazyHtml: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Html>
export const LazyBody: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Body>
export const LazyMDC: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDC.vue").default>
export const LazyMDCCached: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCCached.vue").default>
export const LazyMDCRenderer: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCRenderer.vue").default>
export const LazyMDCSlot: LazyComponent<typeof import("../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCSlot.vue").default>
export const LazyNuxtIsland: LazyComponent<typeof import("../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-island").default>
export const componentNames: string[]

View File

@@ -0,0 +1,11 @@
const pickExport = (mod, exportName, componentName, path) => {
const resolved = exportName === 'default' ? mod?.default : mod?.[exportName]
if (!resolved) {
throw new Error(`[nuxt-content] Missing export "${exportName}" for component "${componentName}" in "${path}".`)
}
return resolved
}
export const localComponentLoaders = {
}
export const globalComponents: string[] = ["ProseA","ProseBlockquote","ProseCode","ProseEm","ProseH1","ProseH2","ProseH3","ProseH4","ProseH5","ProseH6","ProseHr","ProseImg","ProseLi","ProseOl","ProseP","ProsePre","ProseScript","ProseStrong","ProseTable","ProseTbody","ProseTd","ProseTh","ProseThead","ProseTr","ProseUl"]
export const localComponents: string[] = []

View File

29
.nuxt/content/manifest.ts Normal file
View File

@@ -0,0 +1,29 @@
export const checksums = {}
export const checksumsStructure = {}
export const tables = {
"docs": "_content_docs",
"info": "_content_info"
}
export default {
"docs": {
"type": "page",
"fields": {
"id": "string",
"title": "string",
"body": "json",
"description": "string",
"extension": "string",
"meta": "json",
"navigation": "json",
"path": "string",
"seo": "json",
"stem": "string"
}
},
"info": {
"type": "data",
"fields": {}
}
}

View File

21
.nuxt/content/types.d.ts vendored Normal file
View File

@@ -0,0 +1,21 @@
import type { PageCollectionItemBase, DataCollectionItemBase } from '@nuxt/content'
declare module '@nuxt/content' {
/* eslint-disable */
/**
* This file was automatically generated by json-schema-to-typescript.
* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
* and run json-schema-to-typescript to regenerate this file.
*/
interface DocsCollectionItem extends PageCollectionItemBase {}
interface PageCollections {
docs: DocsCollectionItem
}
interface Collections {
docs: DocsCollectionItem
}
}

View File

@@ -0,0 +1,3 @@
// Generated by @nuxtjs/i18n
export const pathToI18nConfig = {};
export const i18nPathToPath = {};

48
.nuxt/imports.d.ts vendored Normal file
View File

@@ -0,0 +1,48 @@
export { useScriptTriggerConsent, useScriptEventPage, useScriptTriggerElement, useScript, useScriptGoogleAnalytics, useScriptPlausibleAnalytics, useScriptCrisp, useScriptClarity, useScriptCloudflareWebAnalytics, useScriptFathomAnalytics, useScriptMatomoAnalytics, useScriptGoogleTagManager, useScriptGoogleAdsense, useScriptSegment, useScriptMetaPixel, useScriptXPixel, useScriptIntercom, useScriptHotjar, useScriptStripe, useScriptLemonSqueezy, useScriptVimeoPlayer, useScriptYouTubePlayer, useScriptGoogleMaps, useScriptNpm, useScriptUmamiAnalytics, useScriptSnapchatPixel, useScriptRybbitAnalytics, useScriptDatabuddyAnalytics, useScriptRedditPixel, useScriptPayPal } from '#app/composables/script-stubs';
export { isVue2, isVue3 } from 'vue-demi';
export { defineNuxtLink } from '#app/components/nuxt-link';
export { useNuxtApp, tryUseNuxtApp, defineNuxtPlugin, definePayloadPlugin, useRuntimeConfig, defineAppConfig } from '#app/nuxt';
export { useAppConfig, updateAppConfig } from '#app/config';
export { defineNuxtComponent } from '#app/composables/component';
export { useAsyncData, useLazyAsyncData, useNuxtData, refreshNuxtData, clearNuxtData } from '#app/composables/asyncData';
export { useHydration } from '#app/composables/hydrate';
export { callOnce } from '#app/composables/once';
export { useState, clearNuxtState } from '#app/composables/state';
export { clearError, createError, isNuxtError, showError, useError } from '#app/composables/error';
export { useFetch, useLazyFetch } from '#app/composables/fetch';
export { useCookie, refreshCookie } from '#app/composables/cookie';
export { onPrehydrate, prerenderRoutes, useRequestHeader, useRequestHeaders, useResponseHeader, useRequestEvent, useRequestFetch, setResponseStatus } from '#app/composables/ssr';
export { onNuxtReady } from '#app/composables/ready';
export { preloadComponents, prefetchComponents, preloadRouteComponents } from '#app/composables/preload';
export { abortNavigation, addRouteMiddleware, defineNuxtRouteMiddleware, setPageLayout, navigateTo, useRoute, useRouter } from '#app/composables/router';
export { isPrerendered, loadPayload, preloadPayload, definePayloadReducer, definePayloadReviver } from '#app/composables/payload';
export { useLoadingIndicator } from '#app/composables/loading-indicator';
export { getAppManifest, getRouteRules } from '#app/composables/manifest';
export { reloadNuxtApp } from '#app/composables/chunk';
export { useRequestURL } from '#app/composables/url';
export { usePreviewMode } from '#app/composables/preview';
export { useRouteAnnouncer } from '#app/composables/route-announcer';
export { useRuntimeHook } from '#app/composables/runtime-hook';
export { useHead, useHeadSafe, useServerHeadSafe, useServerHead, useSeoMeta, useServerSeoMeta, injectHead } from '#app/composables/head';
export { onBeforeRouteLeave, onBeforeRouteUpdate, useLink } from 'vue-router';
export { withCtx, withDirectives, withKeys, withMemo, withModifiers, withScopeId, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, computed, customRef, isProxy, isReactive, isReadonly, isRef, markRaw, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, watch, watchEffect, watchPostEffect, watchSyncEffect, onWatcherCleanup, isShallow, effect, effectScope, getCurrentScope, onScopeDispose, defineComponent, defineAsyncComponent, resolveComponent, getCurrentInstance, h, inject, hasInjectionContext, nextTick, provide, toValue, useModel, useAttrs, useCssModule, useCssVars, useSlots, useTransitionState, useId, useTemplateRef, useShadowRoot, Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue';
export { requestIdleCallback, cancelIdleCallback } from '#app/compat/idle-callback';
export { setInterval } from '#app/compat/interval';
export { useRouteBaseName, useLocalePath, useLocaleRoute, useSwitchLocalePath, useLocaleHead, useBrowserLocale, useCookieLocale, useSetI18nParams, useI18nPreloadKeys, defineI18nRoute, defineI18nLocale, defineI18nConfig } from '../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index';
export { definePageMeta } from '../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/pages/runtime/composables';
export { defineLazyHydrationComponent } from '#app/composables/lazy-hydration';
export { ROLE_HIERARCHY, ROLE_LABEL, ROLE_COLOR, useAppPermission, AppPermission } from '../app/composables/useAppPermission';
export { notificationTypeMap, useNotificationCenter } from '../app/composables/useNotificationCenter';
export { usePageSeo } from '../app/composables/usePageSeo';
export { generateQrCodeDataUrl, generateQrCodeCanvas } from '../app/composables/useQRCode';
export { isResourceOwner, getResourceAccessLevel, canViewBasic, canViewConnection, canViewSensitive, canManageResource, isMaskedValue, useResourceAccess, enrichResourcesWithPermission, ResourceAccessLevel } from '../app/composables/useResourceAccess';
export { resolveWebHomeUrl, getAppEntries, getPrimaryEntry, getScanTip, executeEntry, EntryType, AppEntry } from '../app/utils/appEntry';
export { getTenantId } from '../app/utils/domain';
export { default as permission, setAuthz, clearAuthz, setAuthzFromUser, hasRole, hasAnyRole, hasPermission, hasAnyPermission } from '../app/utils/permission';
export { default as request } from '../app/utils/request';
export { setToken, getToken, removeToken } from '../app/utils/token-util';
export { queryCollection, queryCollectionSearchSections, queryCollectionNavigation, queryCollectionItemSurroundings } from '../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/client';
export { useI18n } from 'vue-i18n';
export { flatUnwrap as unwrapSlot } from '../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/utils/node';
export { parseMarkdown } from '../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/parser';
export { stringifyMarkdown } from '../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/stringify';

8
.nuxt/mdc-configs.mjs Normal file
View File

@@ -0,0 +1,8 @@
let configs
export function getMdcConfigs () {
if (!configs) {
configs = Promise.all([
])
}
return configs
}

217
.nuxt/mdc-highlighter.mjs Normal file
View File

@@ -0,0 +1,217 @@
import { getMdcConfigs } from '#mdc-configs'
import { createOnigurumaEngine } from '@shikijs/engine-oniguruma'
import { createJavaScriptRegexEngine } from "@shikijs/engine-javascript";
export function createShikiHighlighter({
langs = [],
themes = [],
bundledLangs = {},
bundledThemes = {},
getMdcConfigs,
options: shikiOptions,
engine
} = {}) {
let shiki;
let configs;
async function _getShiki() {
const { createHighlighterCore, addClassToHast, isSpecialLang, isSpecialTheme } = await import("@shikijs/core");
const { transformerNotationDiff, transformerNotationErrorLevel, transformerNotationFocus, transformerNotationHighlight } = await import("@shikijs/transformers");
const shiki2 = await createHighlighterCore({
langs,
themes,
engine: engine || createJavaScriptRegexEngine()
});
for await (const config of await getConfigs()) {
await config.shiki?.setup?.(shiki2);
}
return {
shiki: shiki2,
addClassToHast,
isSpecialLang,
isSpecialTheme,
transformers: [
transformerNotationDiff(),
transformerNotationErrorLevel(),
transformerNotationFocus(),
transformerNotationHighlight()
]
};
}
async function getShiki() {
if (!shiki) {
shiki = _getShiki();
}
return shiki;
}
async function getConfigs() {
if (!configs) {
configs = Promise.resolve(getMdcConfigs?.() || []);
}
return configs;
}
const highlighter = async (code, lang, theme, options = {}) => {
const {
shiki: shiki2,
addClassToHast,
isSpecialLang,
isSpecialTheme,
transformers: baseTransformers
} = await getShiki();
const codeToHastOptions = {
defaultColor: false,
meta: {
__raw: options.meta
}
};
if (lang === "ts-type" || lang === "typescript-type") {
lang = "typescript";
codeToHastOptions.grammarContextCode = "let a:";
} else if (lang === "vue-html" || lang === "vue-template") {
lang = "vue";
codeToHastOptions.grammarContextCode = "<template>";
}
const themesObject = { ...typeof theme === "string" ? { default: theme } : theme || {} };
const loadedThemes = shiki2.getLoadedThemes();
const loadedLanguages = shiki2.getLoadedLanguages();
if (typeof lang === "string" && !loadedLanguages.includes(lang) && !isSpecialLang(lang)) {
if (bundledLangs[lang]) {
await shiki2.loadLanguage(bundledLangs[lang]);
} else {
if (process.dev) {
console.warn(`[@nuxtjs/mdc] Language "${lang}" is not loaded to the Shiki highlighter, fallback to plain text. Add the language to "mdc.highlight.langs" to fix this.`);
}
lang = "text";
}
}
for (const [color, theme2] of Object.entries(themesObject)) {
if (typeof theme2 === "string" && !loadedThemes.includes(theme2) && !isSpecialTheme(theme2)) {
if (bundledThemes[theme2]) {
await shiki2.loadTheme(bundledThemes[theme2]);
} else {
if (process.dev) {
console.warn(`[@nuxtjs/mdc] Theme "${theme2}" is not loaded to the Shiki highlighter. Add the theme to "mdc.highlight.themes" to fix this.`);
}
themesObject[color] = "none";
}
}
}
const transformersMap = /* @__PURE__ */ new Map();
for (const transformer of baseTransformers) {
transformersMap.set(transformer.name || `transformer:${Math.random()}-${transformer.constructor.name}`, transformer);
}
for (const config of await getConfigs()) {
const newTransformers = typeof config.shiki?.transformers === "function" ? await config.shiki?.transformers(code, lang, theme, options) : config.shiki?.transformers || [];
for (const transformer of newTransformers) {
transformersMap.set(transformer.name || `transformer:${Math.random()}-${transformer.constructor.name}`, transformer);
}
}
const root = shiki2.codeToHast(code.trimEnd(), {
lang,
...codeToHastOptions,
themes: themesObject,
transformers: [
...transformersMap.values(),
{
name: "mdc:highlight",
line(node, line) {
if (options.highlights?.includes(line))
addClassToHast(node, "highlight");
node.properties.line = line;
}
},
{
name: "mdc:newline",
line(node) {
if (code?.includes("\n")) {
if (node.children.length === 0 || node.children.length === 1 && node.children[0].type === "element" && node.children[0].children.length === 1 && node.children[0].children[0].type === "text" && node.children[0].children[0].value === "") {
node.children = [{
type: "element",
tagName: "span",
properties: {
emptyLinePlaceholder: true
},
children: [{ type: "text", value: "\n" }]
}];
return;
}
const last = node.children.at(-1);
if (last?.type === "element" && last.tagName === "span") {
const text = last.children.at(-1);
if (text?.type === "text")
text.value += "\n";
}
}
}
}
]
});
const preEl = root.children[0];
const codeEl = preEl.children[0];
const wrapperStyle = shikiOptions?.wrapperStyle;
preEl.properties.style = wrapperStyle ? typeof wrapperStyle === "string" ? wrapperStyle : preEl.properties.style : "";
const styles = [];
Object.keys(themesObject).forEach((color) => {
const colorScheme = color !== "default" ? `.${color}` : "";
styles.push(
wrapperStyle ? `${colorScheme} .shiki,` : "",
`html .${color} .shiki span {`,
`color: var(--shiki-${color});`,
`background: var(--shiki-${color}-bg);`,
`font-style: var(--shiki-${color}-font-style);`,
`font-weight: var(--shiki-${color}-font-weight);`,
`text-decoration: var(--shiki-${color}-text-decoration);`,
"}"
);
styles.push(
`html${colorScheme} .shiki span {`,
`color: var(--shiki-${color});`,
`background: var(--shiki-${color}-bg);`,
`font-style: var(--shiki-${color}-font-style);`,
`font-weight: var(--shiki-${color}-font-weight);`,
`text-decoration: var(--shiki-${color}-text-decoration);`,
"}"
);
});
return {
tree: codeEl.children,
className: Array.isArray(preEl.properties.class) ? preEl.properties.class.join(" ") : preEl.properties.class,
inlineStyle: preEl.properties.style,
style: styles.join("")
};
};
return highlighter;
}
const bundledLangs = {
"javascript": () => import('@shikijs/langs/javascript').then(r => r.default || r),
"js": () => import('@shikijs/langs/javascript').then(r => r.default || r),
"cjs": () => import('@shikijs/langs/javascript').then(r => r.default || r),
"mjs": () => import('@shikijs/langs/javascript').then(r => r.default || r),
"jsx": () => import('@shikijs/langs/jsx').then(r => r.default || r),
"json": () => import('@shikijs/langs/json').then(r => r.default || r),
"typescript": () => import('@shikijs/langs/typescript').then(r => r.default || r),
"ts": () => import('@shikijs/langs/typescript').then(r => r.default || r),
"cts": () => import('@shikijs/langs/typescript').then(r => r.default || r),
"mts": () => import('@shikijs/langs/typescript').then(r => r.default || r),
"tsx": () => import('@shikijs/langs/tsx').then(r => r.default || r),
"vue": () => import('@shikijs/langs/vue').then(r => r.default || r),
"css": () => import('@shikijs/langs/css').then(r => r.default || r),
"html": () => import('@shikijs/langs/html').then(r => r.default || r),
"shellscript": () => import('@shikijs/langs/shellscript').then(r => r.default || r),
"bash": () => import('@shikijs/langs/shellscript').then(r => r.default || r),
"sh": () => import('@shikijs/langs/shellscript').then(r => r.default || r),
"shell": () => import('@shikijs/langs/shellscript').then(r => r.default || r),
"zsh": () => import('@shikijs/langs/shellscript').then(r => r.default || r),
"markdown": () => import('@shikijs/langs/markdown').then(r => r.default || r),
"md": () => import('@shikijs/langs/markdown').then(r => r.default || r),
"mdc": () => import('@shikijs/langs/mdc').then(r => r.default || r),
"yaml": () => import('@shikijs/langs/yaml').then(r => r.default || r),
"yml": () => import('@shikijs/langs/yaml').then(r => r.default || r),
}
const bundledThemes = {
"github-light": () => import('@shikijs/themes/github-light').then(r => r.default || r),
"github-dark": () => import('@shikijs/themes/github-dark').then(r => r.default || r),
}
const options = {"theme":{"default":"github-light","dark":"github-dark"}}
const engine = createOnigurumaEngine(() => import('shiki/wasm'))
const highlighter = createShikiHighlighter({ bundledLangs, bundledThemes, options, getMdcConfigs, engine })
export default highlighter

View File

@@ -0,0 +1 @@
export default "img"

12
.nuxt/mdc-imports.mjs Normal file
View File

@@ -0,0 +1,12 @@
import _RemarkEmoji from 'remark-emoji'
import _Highlight from '/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/highlighter/rehype-nuxt.js'
export const remarkPlugins = {
'remark-emoji': { instance: _RemarkEmoji },
}
export const rehypePlugins = {
'highlight': { instance: _Highlight, options: {} },
}
export const highlight = {"theme":{"default":"github-light","dark":"github-dark"}}

26
.nuxt/nuxt.d.ts vendored Normal file
View File

@@ -0,0 +1,26 @@
/// <reference types="./modules/fix-tailwind-postcss" />
/// <reference types="@nuxt/content" />
/// <reference types="@nuxtjs/i18n" />
/// <reference types="@nuxt/telemetry" />
/// <reference types="@nuxtjs/tailwindcss" />
/// <reference types="@nuxt/devtools" />
/// <reference path="types/builder-env.d.ts" />
/// <reference path="types/plugins.d.ts" />
/// <reference path="types/build.d.ts" />
/// <reference path="types/app.config.d.ts" />
/// <reference path="types/runtime-config.d.ts" />
/// <reference types="nuxt/app" />
/// <reference types="/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxt+nitro-server@4.2.2_better-sqlite3@12.8.0_db0@0.3.4_better-sqlite3@12.8.0__ioredis_a0a2be7525d559e696e64db570f075d2/node_modules/@nuxt/nitro-server/dist/index.mjs" />
/// <reference path="content/types.d.ts" />
/// <reference path="types/i18n-plugin.d.ts" />
/// <reference types="vue-router" />
/// <reference path="types/middleware.d.ts" />
/// <reference path="types/nitro-middleware.d.ts" />
/// <reference path="types/layouts.d.ts" />
/// <reference path="types/components.d.ts" />
/// <reference path="imports.d.ts" />
/// <reference path="types/imports.d.ts" />
/// <reference path="schema/nuxt.schema.d.ts" />
/// <reference path="types/nitro.d.ts" />
export {}

16
.nuxt/nuxt.node.d.ts vendored Normal file
View File

@@ -0,0 +1,16 @@
/// <reference types="./modules/fix-tailwind-postcss" />
/// <reference types="@nuxt/content" />
/// <reference types="@nuxtjs/i18n" />
/// <reference types="@nuxt/telemetry" />
/// <reference types="@nuxtjs/tailwindcss" />
/// <reference types="@nuxt/devtools" />
/// <reference path="types/modules.d.ts" />
/// <reference path="types/runtime-config.d.ts" />
/// <reference path="types/app.config.d.ts" />
/// <reference types="nuxt" />
/// <reference types="../node_modules/.pnpm/@nuxt+vite-builder@4.2.2_@types+node@25.0.3_eslint@9.39.2_jiti@2.6.1__magicast@0.5.1_nu_d02b07d05348134360f42d727d38b333/node_modules/@nuxt/vite-builder/dist/index.mjs" />
/// <reference types="/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxt+nitro-server@4.2.2_better-sqlite3@12.8.0_db0@0.3.4_better-sqlite3@12.8.0__ioredis_a0a2be7525d559e696e64db570f075d2/node_modules/@nuxt/nitro-server/dist/index.mjs" />
/// <reference path="types/nitro-middleware.d.ts" />
/// <reference path="schema/nuxt.schema.d.ts" />
export {}

5
.nuxt/nuxt.shared.d.ts vendored Normal file
View File

@@ -0,0 +1,5 @@
/// <reference path="types/runtime-config.d.ts" />
/// <reference path="types/app.config.d.ts" />
/// <reference path="schema/nuxt.schema.d.ts" />
export {}

17
.nuxt/schema/nuxt.schema.d.ts vendored Normal file
View File

@@ -0,0 +1,17 @@
export interface NuxtCustomSchema {
}
export type CustomAppConfig = Exclude<NuxtCustomSchema['appConfig'], undefined>
type _CustomAppConfig = CustomAppConfig
declare module '@nuxt/schema' {
interface NuxtConfig extends Omit<NuxtCustomSchema, 'appConfig'> {}
interface NuxtOptions extends Omit<NuxtCustomSchema, 'appConfig'> {}
interface CustomAppConfig extends _CustomAppConfig {}
}
declare module 'nuxt/schema' {
interface NuxtConfig extends Omit<NuxtCustomSchema, 'appConfig'> {}
interface NuxtOptions extends Omit<NuxtCustomSchema, 'appConfig'> {}
interface CustomAppConfig extends _CustomAppConfig {}
}

View File

@@ -0,0 +1,3 @@
{
"id": "#"
}

View File

@@ -0,0 +1,16 @@
// generated by the @nuxtjs/tailwindcss <https://github.com/nuxt-modules/tailwindcss> module at 4/23/2026, 4:30:14 PM
import "@nuxtjs/tailwindcss/config-ctx"
import configMerger from "@nuxtjs/tailwindcss/merger";
import cfg2 from "./../../tailwind.config.cjs";
import cfg3 from "./../../tailwind.config.cjs";
const config = [
{"content":{"files":["/Users/gxwebsoft/VUE/jczxw-pc/app/components/**/*.{vue,js,jsx,mjs,ts,tsx}","/Users/gxwebsoft/VUE/jczxw-pc/app/components/global/**/*.{vue,js,jsx,mjs,ts,tsx}","/Users/gxwebsoft/VUE/jczxw-pc/app/components/**/*.{vue,js,jsx,mjs,ts,tsx}","/Users/gxwebsoft/VUE/jczxw-pc/app/layouts/**/*.{vue,js,jsx,mjs,ts,tsx}","/Users/gxwebsoft/VUE/jczxw-pc/app/plugins/**/*.{js,ts,mjs}","/Users/gxwebsoft/VUE/jczxw-pc/app/composables/**/*.{js,ts,mjs}","/Users/gxwebsoft/VUE/jczxw-pc/app/utils/**/*.{js,ts,mjs}","/Users/gxwebsoft/VUE/jczxw-pc/app/pages/**/*.{vue,js,jsx,mjs,ts,tsx}","/Users/gxwebsoft/VUE/jczxw-pc/app/{A,a}pp.{vue,js,jsx,mjs,ts,tsx}","/Users/gxwebsoft/VUE/jczxw-pc/app/{E,e}rror.{vue,js,jsx,mjs,ts,tsx}","/Users/gxwebsoft/VUE/jczxw-pc/app/app.config.{js,ts,mjs}"]}},
{},
cfg2,
cfg3
].reduce((acc, curr) => configMerger(acc, curr), {});
const resolvedConfig = config;
export default resolvedConfig;

263
.nuxt/tsconfig.app.json Normal file
View File

@@ -0,0 +1,263 @@
{
"compilerOptions": {
"paths": {
"nitropack/types": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/types"
],
"nitropack/runtime": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/runtime"
],
"nitropack": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack"
],
"defu": [
"../node_modules/.pnpm/defu@6.1.4/node_modules/defu"
],
"h3": [
"../node_modules/.pnpm/h3@1.15.4/node_modules/h3"
],
"consola": [
"../node_modules/.pnpm/consola@3.4.2/node_modules/consola"
],
"ofetch": [
"../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch"
],
"@unhead/vue": [
"../node_modules/.pnpm/@unhead+vue@2.1.1_vue@3.5.26_typescript@5.9.3_/node_modules/@unhead/vue"
],
"@nuxt/devtools": [
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/@nuxt/devtools"
],
"@vue/runtime-core": [
"../node_modules/.pnpm/@vue+runtime-core@3.5.26/node_modules/@vue/runtime-core"
],
"@vue/compiler-sfc": [
"../node_modules/.pnpm/@vue+compiler-sfc@3.5.26/node_modules/@vue/compiler-sfc"
],
"unplugin-vue-router/client": [
"../node_modules/.pnpm/unplugin-vue-router@0.19.1_@vue+compiler-sfc@3.5.26_vue-router@4.6.4_vue@3.5.26_typescr_afeae63e4951cf0abe0304554948e4ca/node_modules/unplugin-vue-router/client"
],
"@nuxt/schema": [
"../node_modules/.pnpm/@nuxt+schema@4.2.2/node_modules/@nuxt/schema"
],
"nuxt": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt"
],
"vite/client": [
"../node_modules/.pnpm/vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2/node_modules/vite/client"
],
"@nuxtjs/mdc": [
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc"
],
"vue-i18n": [
"../node_modules/.pnpm/vue-i18n@11.3.0_vue@3.5.26_typescript@5.9.3_/node_modules/vue-i18n/dist/vue-i18n",
"../node_modules/.pnpm/vue-i18n@11.3.0_vue@3.5.26_typescript@5.9.3_/node_modules/vue-i18n"
],
"@intlify/shared": [
"../node_modules/.pnpm/@intlify+shared@11.3.0/node_modules/@intlify/shared/dist/shared",
"../node_modules/.pnpm/@intlify+shared@11.3.0/node_modules/@intlify/shared"
],
"@intlify/core": [
"../node_modules/.pnpm/@intlify+core@11.3.0/node_modules/@intlify/core/dist/core.node",
"../node_modules/.pnpm/@intlify+core@11.3.0/node_modules/@intlify/core"
],
"@intlify/core-base": [
"../node_modules/.pnpm/@intlify+core-base@11.3.0/node_modules/@intlify/core-base/dist/core-base",
"../node_modules/.pnpm/@intlify+core-base@11.3.0/node_modules/@intlify/core-base"
],
"@intlify/utils": [
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/index",
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils"
],
"@intlify/utils/h3": [
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3",
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils"
],
"@intlify/message-compiler": [
"../node_modules/.pnpm/@intlify+message-compiler@11.3.0/node_modules/@intlify/message-compiler/dist/message-compiler",
"../node_modules/.pnpm/@intlify+message-compiler@11.3.0/node_modules/@intlify/message-compiler"
],
"#content/components": [
"./content/components"
],
"#content/manifest": [
"./content/manifest"
],
"~": [
"../app"
],
"~/*": [
"../app/*"
],
"@": [
"../app"
],
"@/*": [
"../app/*"
],
"~~": [
".."
],
"~~/*": [
"../*"
],
"@@": [
".."
],
"@@/*": [
"../*"
],
"#shared": [
"../shared"
],
"#shared/*": [
"../shared/*"
],
"#app": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app"
],
"#app/*": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/*"
],
"vue-demi": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/vue-demi"
],
"#i18n": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index"
],
"#i18n-kit": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/kit"
],
"#i18n-kit/*": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/kit/*"
],
"#internal-i18n-types": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/types"
],
"#vue-router": [
"../node_modules/.pnpm/vue-router@4.6.4_vue@3.5.26_typescript@5.9.3_/node_modules/vue-router"
],
"#unhead/composables": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/composables"
],
"#imports": [
"./imports"
],
"#mdc-configs": [
"./mdc-configs"
],
"#mdc-highlighter": [
"./mdc-highlighter"
],
"#mdc-imports": [
"./mdc-imports"
],
"#app-manifest": [
"../node_modules/.pnpm/mocked-exports@0.1.1/node_modules/mocked-exports/lib/proxy"
],
"#components": [
"./components"
],
"#build": [
"."
],
"#build/*": [
"./*"
]
},
"esModuleInterop": true,
"skipLibCheck": true,
"target": "ESNext",
"allowJs": true,
"resolveJsonModule": true,
"moduleDetection": "force",
"isolatedModules": true,
"verbatimModuleSyntax": true,
"strict": true,
"noUncheckedIndexedAccess": true,
"forceConsistentCasingInFileNames": true,
"noImplicitOverride": true,
"module": "preserve",
"noEmit": true,
"lib": [
"ESNext",
"dom",
"dom.iterable",
"webworker"
],
"jsx": "preserve",
"jsxImportSource": "vue",
"types": [],
"moduleResolution": "Bundler",
"useDefineForClassFields": true,
"noImplicitThis": true,
"allowSyntheticDefaultImports": true
},
"include": [
"../i18n/**/*",
"./nuxt.d.ts",
"../app/**/*",
"../modules/*/runtime/**/*",
"../test/nuxt/**/*",
"../tests/nuxt/**/*",
"../layers/*/app/**/*",
"../layers/*/modules/*/runtime/**/*",
"../shared/**/*.d.ts",
"../modules/*/shared/**/*.d.ts",
"../layers/*/shared/**/*.d.ts",
"../*.d.ts",
"../layers/*/*.d.ts",
"../modules/runtime",
"../modules/dist/runtime"
],
"exclude": [
"../node_modules",
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/node_modules",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/node_modules",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/@nuxtjs/tailwindcss/node_modules",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/node_modules",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/@nuxt/devtools/node_modules",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/@nuxt/telemetry/node_modules",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/node_modules",
"../dist",
"../.data",
"../modules/*/runtime/server/**/*",
"../layers/*/server/**/*",
"../layers/*/modules/*/runtime/server/**/*",
"../modules/*.*",
"../nuxt.config.*",
"../.config/nuxt.*",
"../layers/*/nuxt.config.*",
"../layers/*/.config/nuxt.*",
"../layers/*/modules/**/*",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/*.*",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/dist/*.*",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/*.*",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/dist/*.*",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/*.*",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/dist/*.*",
"../modules/runtime/server",
"../modules/dist/runtime/server",
"../modules/dist/*.*",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/*.*",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/dist/*.*",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/*.*",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/dist/*.*",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/*.*",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/dist/*.*",
"../.output",
"../server"
]
}

264
.nuxt/tsconfig.json Normal file
View File

@@ -0,0 +1,264 @@
{
"compilerOptions": {
"paths": {
"nitropack/types": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/types"
],
"nitropack/runtime": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/runtime"
],
"nitropack": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack"
],
"defu": [
"../node_modules/.pnpm/defu@6.1.4/node_modules/defu"
],
"h3": [
"../node_modules/.pnpm/h3@1.15.4/node_modules/h3"
],
"consola": [
"../node_modules/.pnpm/consola@3.4.2/node_modules/consola"
],
"ofetch": [
"../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch"
],
"@unhead/vue": [
"../node_modules/.pnpm/@unhead+vue@2.1.1_vue@3.5.26_typescript@5.9.3_/node_modules/@unhead/vue"
],
"@nuxt/devtools": [
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/@nuxt/devtools"
],
"@vue/runtime-core": [
"../node_modules/.pnpm/@vue+runtime-core@3.5.26/node_modules/@vue/runtime-core"
],
"@vue/compiler-sfc": [
"../node_modules/.pnpm/@vue+compiler-sfc@3.5.26/node_modules/@vue/compiler-sfc"
],
"unplugin-vue-router/client": [
"../node_modules/.pnpm/unplugin-vue-router@0.19.1_@vue+compiler-sfc@3.5.26_vue-router@4.6.4_vue@3.5.26_typescr_afeae63e4951cf0abe0304554948e4ca/node_modules/unplugin-vue-router/client"
],
"@nuxt/schema": [
"../node_modules/.pnpm/@nuxt+schema@4.2.2/node_modules/@nuxt/schema"
],
"nuxt": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt"
],
"vite/client": [
"../node_modules/.pnpm/vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2/node_modules/vite/client"
],
"@nuxtjs/mdc": [
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc"
],
"vue-i18n": [
"../node_modules/.pnpm/vue-i18n@11.3.0_vue@3.5.26_typescript@5.9.3_/node_modules/vue-i18n/dist/vue-i18n",
"../node_modules/.pnpm/vue-i18n@11.3.0_vue@3.5.26_typescript@5.9.3_/node_modules/vue-i18n"
],
"@intlify/shared": [
"../node_modules/.pnpm/@intlify+shared@11.3.0/node_modules/@intlify/shared/dist/shared",
"../node_modules/.pnpm/@intlify+shared@11.3.0/node_modules/@intlify/shared"
],
"@intlify/core": [
"../node_modules/.pnpm/@intlify+core@11.3.0/node_modules/@intlify/core/dist/core.node",
"../node_modules/.pnpm/@intlify+core@11.3.0/node_modules/@intlify/core"
],
"@intlify/core-base": [
"../node_modules/.pnpm/@intlify+core-base@11.3.0/node_modules/@intlify/core-base/dist/core-base",
"../node_modules/.pnpm/@intlify+core-base@11.3.0/node_modules/@intlify/core-base"
],
"@intlify/utils": [
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/index",
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils"
],
"@intlify/utils/h3": [
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3",
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils"
],
"@intlify/message-compiler": [
"../node_modules/.pnpm/@intlify+message-compiler@11.3.0/node_modules/@intlify/message-compiler/dist/message-compiler",
"../node_modules/.pnpm/@intlify+message-compiler@11.3.0/node_modules/@intlify/message-compiler"
],
"#content/components": [
"./content/components"
],
"#content/manifest": [
"./content/manifest"
],
"~": [
"../app"
],
"~/*": [
"../app/*"
],
"@": [
"../app"
],
"@/*": [
"../app/*"
],
"~~": [
".."
],
"~~/*": [
"../*"
],
"@@": [
".."
],
"@@/*": [
"../*"
],
"#shared": [
"../shared"
],
"#shared/*": [
"../shared/*"
],
"#app": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app"
],
"#app/*": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/*"
],
"vue-demi": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/vue-demi"
],
"#i18n": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index"
],
"#i18n-kit": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/kit"
],
"#i18n-kit/*": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/kit/*"
],
"#internal-i18n-types": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/types"
],
"#vue-router": [
"../node_modules/.pnpm/vue-router@4.6.4_vue@3.5.26_typescript@5.9.3_/node_modules/vue-router"
],
"#unhead/composables": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/composables"
],
"#imports": [
"./imports"
],
"#mdc-configs": [
"./mdc-configs"
],
"#mdc-highlighter": [
"./mdc-highlighter"
],
"#mdc-imports": [
"./mdc-imports"
],
"#app-manifest": [
"../node_modules/.pnpm/mocked-exports@0.1.1/node_modules/mocked-exports/lib/proxy"
],
"#components": [
"./components"
],
"#build": [
"."
],
"#build/*": [
"./*"
]
},
"esModuleInterop": true,
"skipLibCheck": true,
"target": "ESNext",
"allowJs": true,
"resolveJsonModule": true,
"moduleDetection": "force",
"isolatedModules": true,
"verbatimModuleSyntax": true,
"strict": true,
"noUncheckedIndexedAccess": true,
"forceConsistentCasingInFileNames": true,
"noImplicitOverride": true,
"module": "preserve",
"noEmit": true,
"lib": [
"ESNext",
"dom",
"dom.iterable",
"webworker"
],
"jsx": "preserve",
"jsxImportSource": "vue",
"types": [],
"moduleResolution": "Bundler",
"useDefineForClassFields": true,
"noImplicitThis": true,
"allowSyntheticDefaultImports": true
},
"include": [
"../i18n/**/*",
"./nuxt.d.ts",
"../app/**/*",
"../modules/*/runtime/**/*",
"../test/nuxt/**/*",
"../tests/nuxt/**/*",
"../layers/*/app/**/*",
"../layers/*/modules/*/runtime/**/*",
"../shared/**/*.d.ts",
"../modules/*/shared/**/*.d.ts",
"../layers/*/shared/**/*.d.ts",
"../*.d.ts",
"../layers/*/*.d.ts",
"../modules/runtime",
"../modules/dist/runtime",
"./nuxt.node.d.ts",
"../modules/*.*",
"../nuxt.config.*",
"../.config/nuxt.*",
"../layers/*/nuxt.config.*",
"../layers/*/.config/nuxt.*",
"../layers/*/modules/**/*",
"../shared/**/*",
"../modules/*/shared/**/*",
"../layers/*/shared/**/*",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/runtime",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/dist/runtime",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/runtime",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/dist/runtime",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/runtime",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/dist/runtime",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/runtime",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/dist/runtime",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/runtime",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/dist/runtime",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/runtime",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/dist/runtime"
],
"exclude": [
"../node_modules",
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/node_modules",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/node_modules",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/@nuxtjs/tailwindcss/node_modules",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/node_modules",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/@nuxt/devtools/node_modules",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/@nuxt/telemetry/node_modules",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/node_modules",
"../dist",
"../.data",
"../modules/*/runtime/server/**/*",
"../layers/*/server/**/*",
"../layers/*/modules/*/runtime/server/**/*",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/dist/runtime/server",
"../modules/runtime/server",
"../modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/dist/runtime/server"
]
}

140
.nuxt/tsconfig.node.json Normal file
View File

@@ -0,0 +1,140 @@
{
"compilerOptions": {
"paths": {
"nitropack/types": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/types"
],
"nitropack/runtime": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/runtime"
],
"nitropack": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack"
],
"defu": [
"../node_modules/.pnpm/defu@6.1.4/node_modules/defu"
],
"h3": [
"../node_modules/.pnpm/h3@1.15.4/node_modules/h3"
],
"consola": [
"../node_modules/.pnpm/consola@3.4.2/node_modules/consola"
],
"ofetch": [
"../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch"
],
"@unhead/vue": [
"../node_modules/.pnpm/@unhead+vue@2.1.1_vue@3.5.26_typescript@5.9.3_/node_modules/@unhead/vue"
],
"@nuxt/devtools": [
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/@nuxt/devtools"
],
"@vue/runtime-core": [
"../node_modules/.pnpm/@vue+runtime-core@3.5.26/node_modules/@vue/runtime-core"
],
"@vue/compiler-sfc": [
"../node_modules/.pnpm/@vue+compiler-sfc@3.5.26/node_modules/@vue/compiler-sfc"
],
"unplugin-vue-router/client": [
"../node_modules/.pnpm/unplugin-vue-router@0.19.1_@vue+compiler-sfc@3.5.26_vue-router@4.6.4_vue@3.5.26_typescr_afeae63e4951cf0abe0304554948e4ca/node_modules/unplugin-vue-router/client"
],
"@nuxt/schema": [
"../node_modules/.pnpm/@nuxt+schema@4.2.2/node_modules/@nuxt/schema"
],
"nuxt": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt"
],
"vite/client": [
"../node_modules/.pnpm/vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2/node_modules/vite/client"
],
"@nuxtjs/mdc": [
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc"
],
"vue-i18n": [
"../node_modules/.pnpm/vue-i18n@11.3.0_vue@3.5.26_typescript@5.9.3_/node_modules/vue-i18n"
],
"@intlify/shared": [
"../node_modules/.pnpm/@intlify+shared@11.3.0/node_modules/@intlify/shared"
],
"@intlify/core": [
"../node_modules/.pnpm/@intlify+core@11.3.0/node_modules/@intlify/core"
],
"@intlify/core-base": [
"../node_modules/.pnpm/@intlify+core-base@11.3.0/node_modules/@intlify/core-base"
],
"@intlify/utils": [
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils"
],
"@intlify/utils/h3": [
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils"
],
"@intlify/message-compiler": [
"../node_modules/.pnpm/@intlify+message-compiler@11.3.0/node_modules/@intlify/message-compiler"
]
},
"esModuleInterop": true,
"skipLibCheck": true,
"target": "ESNext",
"allowJs": true,
"resolveJsonModule": true,
"moduleDetection": "force",
"isolatedModules": true,
"verbatimModuleSyntax": true,
"strict": true,
"noUncheckedIndexedAccess": true,
"forceConsistentCasingInFileNames": true,
"noImplicitOverride": true,
"module": "preserve",
"noEmit": true,
"types": [],
"moduleResolution": "Bundler",
"useDefineForClassFields": true,
"noImplicitThis": true,
"allowSyntheticDefaultImports": true
},
"include": [
"./nuxt.node.d.ts",
"../modules/*.*",
"../nuxt.config.*",
"../.config/nuxt.*",
"../layers/*/nuxt.config.*",
"../layers/*/.config/nuxt.*",
"../layers/*/modules/**/*",
"../nuxt.schema.*",
"../layers/*/nuxt.schema.*"
],
"exclude": [
"../node_modules",
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/node_modules",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/node_modules",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/@nuxtjs/tailwindcss/node_modules",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/node_modules",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/@nuxt/devtools/node_modules",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/@nuxt/telemetry/node_modules",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/node_modules",
"../dist",
"../.data",
"../app/**/*",
"../modules/*/runtime/**/*",
"../test/nuxt/**/*",
"../tests/nuxt/**/*",
"../layers/*/app/**/*",
"../layers/*/modules/*/runtime/**/*",
"../modules/*/runtime/server/**/*",
"../layers/*/server/**/*",
"../layers/*/modules/*/runtime/server/**/*",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/runtime",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/dist/runtime",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/runtime",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/dist/runtime",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/runtime",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/dist/runtime",
"../modules/runtime",
"../modules/dist/runtime",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/runtime",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/dist/runtime",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/runtime",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/dist/runtime",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/runtime",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/dist/runtime"
]
}

194
.nuxt/tsconfig.server.json Normal file
View File

@@ -0,0 +1,194 @@
{
"compilerOptions": {
"forceConsistentCasingInFileNames": true,
"strict": true,
"noEmit": true,
"skipLibCheck": true,
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "Bundler",
"allowJs": true,
"resolveJsonModule": true,
"jsx": "preserve",
"allowSyntheticDefaultImports": true,
"jsxFactory": "h",
"jsxFragmentFactory": "Fragment",
"paths": {
"#imports": [
"./types/nitro-imports"
],
"~/*": [
"../app/*"
],
"@/*": [
"../app/*"
],
"~~/*": [
"../*"
],
"@@/*": [
"../*"
],
"nitropack/types": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/types"
],
"nitropack/runtime": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/runtime"
],
"nitropack": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack"
],
"defu": [
"../node_modules/.pnpm/defu@6.1.4/node_modules/defu"
],
"h3": [
"../node_modules/.pnpm/h3@1.15.4/node_modules/h3"
],
"consola": [
"../node_modules/.pnpm/consola@3.4.2/node_modules/consola"
],
"ofetch": [
"../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch"
],
"@unhead/vue": [
"../node_modules/.pnpm/@unhead+vue@2.1.1_vue@3.5.26_typescript@5.9.3_/node_modules/@unhead/vue"
],
"@nuxt/devtools": [
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/@nuxt/devtools"
],
"@vue/runtime-core": [
"../node_modules/.pnpm/@vue+runtime-core@3.5.26/node_modules/@vue/runtime-core"
],
"@vue/compiler-sfc": [
"../node_modules/.pnpm/@vue+compiler-sfc@3.5.26/node_modules/@vue/compiler-sfc"
],
"unplugin-vue-router/client": [
"../node_modules/.pnpm/unplugin-vue-router@0.19.1_@vue+compiler-sfc@3.5.26_vue-router@4.6.4_vue@3.5.26_typescr_afeae63e4951cf0abe0304554948e4ca/node_modules/unplugin-vue-router/client"
],
"@nuxt/schema": [
"../node_modules/.pnpm/@nuxt+schema@4.2.2/node_modules/@nuxt/schema"
],
"nuxt": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt"
],
"vite/client": [
"../node_modules/.pnpm/vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2/node_modules/vite/client"
],
"@nuxtjs/mdc": [
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc"
],
"vue-i18n": [
"../node_modules/.pnpm/vue-i18n@11.3.0_vue@3.5.26_typescript@5.9.3_/node_modules/vue-i18n"
],
"@intlify/shared": [
"../node_modules/.pnpm/@intlify+shared@11.3.0/node_modules/@intlify/shared"
],
"@intlify/core": [
"../node_modules/.pnpm/@intlify+core@11.3.0/node_modules/@intlify/core"
],
"@intlify/core-base": [
"../node_modules/.pnpm/@intlify+core-base@11.3.0/node_modules/@intlify/core-base"
],
"@intlify/utils": [
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils"
],
"@intlify/utils/h3": [
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils"
],
"@intlify/message-compiler": [
"../node_modules/.pnpm/@intlify+message-compiler@11.3.0/node_modules/@intlify/message-compiler"
],
"#content/components": [
"./content/components"
],
"#content/manifest": [
"./content/manifest"
],
"#shared": [
"../shared"
],
"#shared/*": [
"../shared/*"
],
"#build": [
"./"
],
"#build/*": [
"./*"
],
"#internal/nuxt/paths": [
"../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_better-sqlite3@12.8.0_db0@0.3.4_better-sqlite3@12.8.0__ioredis_a0a2be7525d559e696e64db570f075d2/node_modules/@nuxt/nitro-server/dist/runtime/utils/paths"
],
"#i18n": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index-server"
],
"#i18n-kit": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/kit"
],
"#i18n-kit/*": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/kit/*"
],
"#internal-i18n-types": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/types"
],
"#unhead/composables": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/composables"
],
"#mdc-configs": [
"./mdc-configs"
],
"#mdc-highlighter": [
"./mdc-highlighter"
],
"#mdc-imports": [
"./mdc-imports"
],
"#content/dump": [
"./content/database.compressed"
],
"#content/adapter": [
"./db0/connectors/better-sqlite3"
],
"#content/local-adapter": [
"./db0/connectors/better-sqlite3"
]
},
"lib": [
"esnext",
"webworker",
"dom.iterable"
]
},
"include": [
"./content/types.d.ts",
"./types/nitro-nuxt.d.ts",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/dist/runtime/server",
"../modules/runtime/server",
"../modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/dist/runtime/server",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/runtime/server",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/dist/runtime/server",
"../server/**/*",
"../shared/**/*.d.ts",
"./types/nitro.d.ts"
],
"exclude": [
"../node_modules",
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/node_modules",
"../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/node_modules",
"../node_modules/.pnpm/@nuxtjs+tailwindcss@6.14.0_magicast@0.5.1_yaml@2.8.2/node_modules/@nuxtjs/tailwindcss/node_modules",
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/node_modules",
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/@nuxt/devtools/node_modules",
"../node_modules/.pnpm/@nuxt+telemetry@2.6.6_magicast@0.5.1/node_modules/@nuxt/telemetry/node_modules",
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/node_modules",
"../dist"
]
}

188
.nuxt/tsconfig.shared.json Normal file
View File

@@ -0,0 +1,188 @@
{
"compilerOptions": {
"paths": {
"nitropack/types": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/types"
],
"nitropack/runtime": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/runtime"
],
"nitropack": [
"../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack"
],
"defu": [
"../node_modules/.pnpm/defu@6.1.4/node_modules/defu"
],
"h3": [
"../node_modules/.pnpm/h3@1.15.4/node_modules/h3"
],
"consola": [
"../node_modules/.pnpm/consola@3.4.2/node_modules/consola"
],
"ofetch": [
"../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch"
],
"@unhead/vue": [
"../node_modules/.pnpm/@unhead+vue@2.1.1_vue@3.5.26_typescript@5.9.3_/node_modules/@unhead/vue"
],
"@nuxt/devtools": [
"../node_modules/.pnpm/@nuxt+devtools@3.1.1_vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2__vue@3.5.26_typescript@5.9.3_/node_modules/@nuxt/devtools"
],
"@vue/runtime-core": [
"../node_modules/.pnpm/@vue+runtime-core@3.5.26/node_modules/@vue/runtime-core"
],
"@vue/compiler-sfc": [
"../node_modules/.pnpm/@vue+compiler-sfc@3.5.26/node_modules/@vue/compiler-sfc"
],
"unplugin-vue-router/client": [
"../node_modules/.pnpm/unplugin-vue-router@0.19.1_@vue+compiler-sfc@3.5.26_vue-router@4.6.4_vue@3.5.26_typescr_afeae63e4951cf0abe0304554948e4ca/node_modules/unplugin-vue-router/client"
],
"@nuxt/schema": [
"../node_modules/.pnpm/@nuxt+schema@4.2.2/node_modules/@nuxt/schema"
],
"nuxt": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt"
],
"vite/client": [
"../node_modules/.pnpm/vite@7.3.0_@types+node@25.0.3_jiti@2.6.1_terser@5.44.1_yaml@2.8.2/node_modules/vite/client"
],
"@nuxtjs/mdc": [
"../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc"
],
"vue-i18n": [
"../node_modules/.pnpm/vue-i18n@11.3.0_vue@3.5.26_typescript@5.9.3_/node_modules/vue-i18n/dist/vue-i18n",
"../node_modules/.pnpm/vue-i18n@11.3.0_vue@3.5.26_typescript@5.9.3_/node_modules/vue-i18n"
],
"@intlify/shared": [
"../node_modules/.pnpm/@intlify+shared@11.3.0/node_modules/@intlify/shared/dist/shared",
"../node_modules/.pnpm/@intlify+shared@11.3.0/node_modules/@intlify/shared"
],
"@intlify/core": [
"../node_modules/.pnpm/@intlify+core@11.3.0/node_modules/@intlify/core/dist/core.node",
"../node_modules/.pnpm/@intlify+core@11.3.0/node_modules/@intlify/core"
],
"@intlify/core-base": [
"../node_modules/.pnpm/@intlify+core-base@11.3.0/node_modules/@intlify/core-base/dist/core-base",
"../node_modules/.pnpm/@intlify+core-base@11.3.0/node_modules/@intlify/core-base"
],
"@intlify/utils": [
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/index",
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils"
],
"@intlify/utils/h3": [
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3",
"../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils"
],
"@intlify/message-compiler": [
"../node_modules/.pnpm/@intlify+message-compiler@11.3.0/node_modules/@intlify/message-compiler/dist/message-compiler",
"../node_modules/.pnpm/@intlify+message-compiler@11.3.0/node_modules/@intlify/message-compiler"
],
"#content/components": [
"./content/components"
],
"#content/manifest": [
"./content/manifest"
],
"~": [
"../app"
],
"~/*": [
"../app/*"
],
"@": [
"../app"
],
"@/*": [
"../app/*"
],
"~~": [
".."
],
"~~/*": [
"../*"
],
"@@": [
".."
],
"@@/*": [
"../*"
],
"#shared": [
"../shared"
],
"#shared/*": [
"../shared/*"
],
"#app": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app"
],
"#app/*": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/*"
],
"vue-demi": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/vue-demi"
],
"#i18n-kit": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/kit"
],
"#i18n-kit/*": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/kit/*"
],
"#internal-i18n-types": [
"../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/types"
],
"#vue-router": [
"../node_modules/.pnpm/vue-router@4.6.4_vue@3.5.26_typescript@5.9.3_/node_modules/vue-router"
],
"#unhead/composables": [
"../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/composables"
],
"#imports": [
"./imports"
],
"#mdc-configs": [
"./mdc-configs"
],
"#mdc-highlighter": [
"./mdc-highlighter"
],
"#mdc-imports": [
"./mdc-imports"
],
"#build": [
"."
],
"#build/*": [
"./*"
]
},
"esModuleInterop": true,
"skipLibCheck": true,
"target": "ESNext",
"allowJs": true,
"resolveJsonModule": true,
"moduleDetection": "force",
"isolatedModules": true,
"verbatimModuleSyntax": true,
"strict": true,
"noUncheckedIndexedAccess": true,
"forceConsistentCasingInFileNames": true,
"noImplicitOverride": true,
"module": "preserve",
"noEmit": true,
"types": [],
"moduleResolution": "Bundler",
"useDefineForClassFields": true,
"noImplicitThis": true,
"allowSyntheticDefaultImports": true
},
"include": [
"./nuxt.shared.d.ts",
"../shared/**/*",
"../modules/*/shared/**/*",
"../layers/*/shared/**/*",
"../*.d.ts",
"../layers/*/*.d.ts"
],
"exclude": []
}

35
.nuxt/types/app.config.d.ts vendored Normal file
View File

@@ -0,0 +1,35 @@
import type { AppConfigInput, CustomAppConfig } from 'nuxt/schema'
import type { Defu } from 'defu'
declare global {
const defineAppConfig: <C extends AppConfigInput> (config: C) => C
}
declare const inlineConfig = {
"nuxt": {}
}
type ResolvedAppConfig = Defu<typeof inlineConfig, []>
type IsAny<T> = 0 extends 1 & T ? true : false
type MergedAppConfig<Resolved extends Record<string, unknown>, Custom extends Record<string, unknown>> = {
[K in keyof (Resolved & Custom)]: K extends keyof Custom
? unknown extends Custom[K]
? Resolved[K]
: IsAny<Custom[K]> extends true
? Resolved[K]
: Custom[K] extends Record<string, any>
? Resolved[K] extends Record<string, any>
? MergedAppConfig<Resolved[K], Custom[K]>
: Exclude<Custom[K], undefined>
: Exclude<Custom[K], undefined>
: Resolved[K]
}
declare module 'nuxt/schema' {
interface AppConfig extends MergedAppConfig<ResolvedAppConfig, CustomAppConfig> { }
}
declare module '@nuxt/schema' {
interface AppConfig extends MergedAppConfig<ResolvedAppConfig, CustomAppConfig> { }
}

24
.nuxt/types/build.d.ts vendored Normal file
View File

@@ -0,0 +1,24 @@
declare module "#build/app-component.mjs";
declare module "#build/nitro.client.mjs";
declare module "#build/plugins.client.mjs";
declare module "#build/css.mjs";
declare module "#build/fetch.mjs";
declare module "#build/error-component.mjs";
declare module "#build/global-polyfills.mjs";
declare module "#build/layouts.mjs";
declare module "#build/middleware.mjs";
declare module "#build/nuxt.config.mjs";
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/i18n-options.mjs";
declare module "#build/routes.mjs";
declare module "#build/pages.mjs";
declare module "#build/router.options.mjs";
declare module "#build/unhead-options.mjs";
declare module "#build/unhead.config.mjs";
declare module "#build/components.plugin.mjs";
declare module "#build/component-names.mjs";
declare module "#build/components.islands.mjs";
declare module "#build/component-chunk.mjs";

1
.nuxt/types/builder-env.d.ts vendored Normal file
View File

@@ -0,0 +1 @@
import "vite/client";

169
.nuxt/types/components.d.ts vendored Normal file
View File

@@ -0,0 +1,169 @@
import type { DefineComponent, SlotsType } from 'vue'
type IslandComponent<T> = DefineComponent<{}, {refresh: () => Promise<void>}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, SlotsType<{ fallback: { error: unknown } }>> & T
type HydrationStrategies = {
hydrateOnVisible?: IntersectionObserverInit | true
hydrateOnIdle?: number | true
hydrateOnInteraction?: keyof HTMLElementEventMap | Array<keyof HTMLElementEventMap> | true
hydrateOnMediaQuery?: string
hydrateAfter?: number
hydrateWhen?: boolean
hydrateNever?: true
}
type LazyComponent<T> = DefineComponent<HydrationStrategies, {}, {}, {}, {}, {}, {}, { hydrated: () => void }> & T
interface _GlobalComponents {
'LangSwitch': typeof import("../../app/components/LangSwitch.vue").default
'NotificationBell': typeof import("../../app/components/NotificationBell.vue").default
'QrCodeModal': typeof import("../../app/components/QrCodeModal.vue").default
'QrLogin': typeof import("../../app/components/QrLogin.vue").default
'SiteFooter': typeof import("../../app/components/SiteFooter.vue").default
'SiteHeader': typeof import("../../app/components/SiteHeader.vue").default
'AdminMarkdownEditor': typeof import("../../app/components/admin/MarkdownEditor.vue").default
'AdminMarkdownRenderer': typeof import("../../app/components/admin/MarkdownRenderer.vue").default
'ConsoleAppsCenter': typeof import("../../app/components/console/AppsCenter.vue").default
'ConsoleHeader': typeof import("../../app/components/console/ConsoleHeader.vue").default
'ConsoleContractManagement': typeof import("../../app/components/console/ContractManagement.vue").default
'DeveloperAppDetail': typeof import("../../app/components/developer/AppDetail.vue").default
'DeveloperAppsCenter': typeof import("../../app/components/developer/AppsCenter.vue").default
'DeveloperPermissionGuard': typeof import("../../app/components/developer/PermissionGuard.vue").default
'DeveloperRoleTag': typeof import("../../app/components/developer/RoleTag.vue").default
'InviteBell': typeof import("../../app/components/invite/InviteBell.vue").default
'InviteNotification': typeof import("../../app/components/invite/InviteNotification.vue").default
'PaymentModal': typeof import("../../app/components/payment/PaymentModal.vue").default
'ProseA': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseA.vue").default
'ProseBlockquote': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseBlockquote.vue").default
'ProseCode': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseCode.vue").default
'ProseEm': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseEm.vue").default
'ProseH1': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH1.vue").default
'ProseH2': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH2.vue").default
'ProseH3': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH3.vue").default
'ProseH4': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH4.vue").default
'ProseH5': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH5.vue").default
'ProseH6': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH6.vue").default
'ProseHr': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseHr.vue").default
'ProseImg': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseImg.vue").default
'ProseLi': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseLi.vue").default
'ProseOl': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseOl.vue").default
'ProseP': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseP.vue").default
'ProsePre': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProsePre.vue").default
'ProseScript': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseScript.vue").default
'ProseStrong': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseStrong.vue").default
'ProseTable': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTable.vue").default
'ProseTbody': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTbody.vue").default
'ProseTd': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTd.vue").default
'ProseTh': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTh.vue").default
'ProseThead': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseThead.vue").default
'ProseTr': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTr.vue").default
'ProseUl': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseUl.vue").default
'NuxtWelcome': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/welcome.vue").default
'NuxtLayout': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-layout").default
'NuxtErrorBoundary': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue").default
'ClientOnly': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/client-only").default
'DevOnly': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/dev-only").default
'ServerPlaceholder': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/server-placeholder").default
'NuxtLink': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-link").default
'NuxtLoadingIndicator': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-loading-indicator").default
'NuxtTime': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-time.vue").default
'NuxtRouteAnnouncer': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-route-announcer").default
'NuxtImg': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-stubs").NuxtImg
'NuxtPicture': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-stubs").NuxtPicture
'ContentRenderer': typeof import("../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/components/ContentRenderer.vue").default
'NuxtLinkLocale': typeof import("../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/components/NuxtLinkLocale").default
'SwitchLocalePathLink': typeof import("../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/components/SwitchLocalePathLink").default
'NuxtPage': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/pages/runtime/page").default
'NoScript': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").NoScript
'Link': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Link
'Base': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Base
'Title': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Title
'Meta': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Meta
'Style': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Style
'Head': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Head
'Html': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Html
'Body': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Body
'MDC': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDC.vue").default
'MDCCached': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCCached.vue").default
'MDCRenderer': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCRenderer.vue").default
'MDCSlot': typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCSlot.vue").default
'NuxtIsland': typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-island").default
'LazyLangSwitch': LazyComponent<typeof import("../../app/components/LangSwitch.vue").default>
'LazyNotificationBell': LazyComponent<typeof import("../../app/components/NotificationBell.vue").default>
'LazyQrCodeModal': LazyComponent<typeof import("../../app/components/QrCodeModal.vue").default>
'LazyQrLogin': LazyComponent<typeof import("../../app/components/QrLogin.vue").default>
'LazySiteFooter': LazyComponent<typeof import("../../app/components/SiteFooter.vue").default>
'LazySiteHeader': LazyComponent<typeof import("../../app/components/SiteHeader.vue").default>
'LazyAdminMarkdownEditor': LazyComponent<typeof import("../../app/components/admin/MarkdownEditor.vue").default>
'LazyAdminMarkdownRenderer': LazyComponent<typeof import("../../app/components/admin/MarkdownRenderer.vue").default>
'LazyConsoleAppsCenter': LazyComponent<typeof import("../../app/components/console/AppsCenter.vue").default>
'LazyConsoleHeader': LazyComponent<typeof import("../../app/components/console/ConsoleHeader.vue").default>
'LazyConsoleContractManagement': LazyComponent<typeof import("../../app/components/console/ContractManagement.vue").default>
'LazyDeveloperAppDetail': LazyComponent<typeof import("../../app/components/developer/AppDetail.vue").default>
'LazyDeveloperAppsCenter': LazyComponent<typeof import("../../app/components/developer/AppsCenter.vue").default>
'LazyDeveloperPermissionGuard': LazyComponent<typeof import("../../app/components/developer/PermissionGuard.vue").default>
'LazyDeveloperRoleTag': LazyComponent<typeof import("../../app/components/developer/RoleTag.vue").default>
'LazyInviteBell': LazyComponent<typeof import("../../app/components/invite/InviteBell.vue").default>
'LazyInviteNotification': LazyComponent<typeof import("../../app/components/invite/InviteNotification.vue").default>
'LazyPaymentModal': LazyComponent<typeof import("../../app/components/payment/PaymentModal.vue").default>
'LazyProseA': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseA.vue").default>
'LazyProseBlockquote': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseBlockquote.vue").default>
'LazyProseCode': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseCode.vue").default>
'LazyProseEm': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseEm.vue").default>
'LazyProseH1': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH1.vue").default>
'LazyProseH2': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH2.vue").default>
'LazyProseH3': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH3.vue").default>
'LazyProseH4': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH4.vue").default>
'LazyProseH5': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH5.vue").default>
'LazyProseH6': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH6.vue").default>
'LazyProseHr': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseHr.vue").default>
'LazyProseImg': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseImg.vue").default>
'LazyProseLi': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseLi.vue").default>
'LazyProseOl': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseOl.vue").default>
'LazyProseP': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseP.vue").default>
'LazyProsePre': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProsePre.vue").default>
'LazyProseScript': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseScript.vue").default>
'LazyProseStrong': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseStrong.vue").default>
'LazyProseTable': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTable.vue").default>
'LazyProseTbody': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTbody.vue").default>
'LazyProseTd': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTd.vue").default>
'LazyProseTh': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTh.vue").default>
'LazyProseThead': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseThead.vue").default>
'LazyProseTr': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTr.vue").default>
'LazyProseUl': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseUl.vue").default>
'LazyNuxtWelcome': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/welcome.vue").default>
'LazyNuxtLayout': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-layout").default>
'LazyNuxtErrorBoundary': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue").default>
'LazyClientOnly': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/client-only").default>
'LazyDevOnly': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/dev-only").default>
'LazyServerPlaceholder': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/server-placeholder").default>
'LazyNuxtLink': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-link").default>
'LazyNuxtLoadingIndicator': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-loading-indicator").default>
'LazyNuxtTime': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-time.vue").default>
'LazyNuxtRouteAnnouncer': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-route-announcer").default>
'LazyNuxtImg': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-stubs").NuxtImg>
'LazyNuxtPicture': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-stubs").NuxtPicture>
'LazyContentRenderer': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/components/ContentRenderer.vue").default>
'LazyNuxtLinkLocale': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/components/NuxtLinkLocale").default>
'LazySwitchLocalePathLink': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/components/SwitchLocalePathLink").default>
'LazyNuxtPage': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/pages/runtime/page").default>
'LazyNoScript': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").NoScript>
'LazyLink': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Link>
'LazyBase': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Base>
'LazyTitle': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Title>
'LazyMeta': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Meta>
'LazyStyle': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Style>
'LazyHead': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Head>
'LazyHtml': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Html>
'LazyBody': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/components").Body>
'LazyMDC': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDC.vue").default>
'LazyMDCCached': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCCached.vue").default>
'LazyMDCRenderer': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCRenderer.vue").default>
'LazyMDCSlot': LazyComponent<typeof import("../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCSlot.vue").default>
'LazyNuxtIsland': LazyComponent<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-island").default>
}
declare module 'vue' {
export interface GlobalComponents extends _GlobalComponents { }
}
export {}

115
.nuxt/types/i18n-plugin.d.ts vendored Normal file
View File

@@ -0,0 +1,115 @@
// Generated by @nuxtjs/i18n
import type { Composer } from 'vue-i18n'
import type { ComposerCustomProperties } from '../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/types.ts'
import type { Strategies, Directions, LocaleObject } from '../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/types.d.mts'
import type { I18nRoute } from '#i18n'
declare module 'vue-i18n' {
interface ComposerCustom extends ComposerCustomProperties<LocaleObject[]> {}
interface ExportedGlobalComposer extends ComposerCustomProperties<LocaleObject[]> {}
interface VueI18n extends ComposerCustomProperties<LocaleObject[]> {}
}
declare module '@intlify/core-base' {
// generated based on configured locales
interface GeneratedTypeConfig {
locale: "zh-CN" | "en"
legacy: false
}
}
interface I18nMeta {
i18n?: I18nRoute | false
}
declare module '#app' {
interface NuxtApp {
$i18n: Composer
}
interface PageMeta extends I18nMeta {}
}
declare module 'vue-router' {
interface RouteMeta extends I18nMeta {}
}
declare module 'vue-router' {
export type RouteMapI18n =
TypesConfig extends Record<'RouteNamedMapI18n', infer RouteNamedMap> ? RouteNamedMap : RouteMapGeneric
// Prefer named resolution for i18n
export type RouteLocationNamedI18n<Name extends keyof RouteMapI18n = keyof RouteMapI18n> =
| Name
| Omit<RouteLocationAsRelativeI18n, 'path'> & { path?: string }
/**
* Note: disabled route path string autocompletion, this can break depending on `strategy`
* this can be enabled again after route resolve has been improved.
*/
// | RouteLocationAsStringI18n
// | RouteLocationAsPathI18n
export type RouteLocationRawI18n<Name extends keyof RouteMapI18n = keyof RouteMapI18n> =
RouteMapGeneric extends RouteMapI18n
? RouteLocationAsStringI18n | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric
:
| _LiteralUnion<RouteLocationAsStringTypedList<RouteMapI18n>[Name], string>
| RouteLocationAsRelativeTypedList<RouteMapI18n>[Name]
export type RouteLocationResolvedI18n<Name extends keyof RouteMapI18n = keyof RouteMapI18n> =
RouteMapGeneric extends RouteMapI18n
? RouteLocationResolvedGeneric
: RouteLocationResolvedTypedList<RouteMapI18n>[Name]
export interface RouteLocationNormalizedLoadedTypedI18n<
RouteMapI18n extends RouteMapGeneric = RouteMapGeneric,
Name extends keyof RouteMapI18n = keyof RouteMapI18n
> extends RouteLocationNormalizedLoadedGeneric {
name: Extract<Name, string | symbol>
params: RouteMapI18n[Name]['params']
}
export type RouteLocationNormalizedLoadedTypedListI18n<RouteMapOriginal extends RouteMapGeneric = RouteMapGeneric> = {
[N in keyof RouteMapOriginal]: RouteLocationNormalizedLoadedTypedI18n<RouteMapOriginal, N>
}
export type RouteLocationNormalizedLoadedI18n<Name extends keyof RouteMapI18n = keyof RouteMapI18n> =
RouteMapGeneric extends RouteMapI18n
? RouteLocationNormalizedLoadedGeneric
: RouteLocationNormalizedLoadedTypedListI18n<RouteMapI18n>[Name]
export type RouteLocationAsStringI18n<Name extends keyof RouteMapI18n = keyof RouteMapI18n> =
RouteMapGeneric extends RouteMapI18n
? string
: _LiteralUnion<RouteLocationAsStringTypedList<RouteMapI18n>[Name], string>
export type RouteLocationAsRelativeI18n<Name extends keyof RouteMapI18n = keyof RouteMapI18n> =
RouteMapGeneric extends RouteMapI18n
? RouteLocationAsRelativeGeneric
: RouteLocationAsRelativeTypedList<RouteMapI18n>[Name]
export type RouteLocationAsPathI18n<Name extends keyof RouteMapI18n = keyof RouteMapI18n> =
RouteMapGeneric extends RouteMapI18n ? RouteLocationAsPathGeneric : RouteLocationAsPathTypedList<RouteMapI18n>[Name]
/**
* Helper to generate a type safe version of the {@link RouteLocationAsRelative} type.
*/
export interface RouteLocationAsRelativeTypedI18n<
RouteMapI18n extends RouteMapGeneric = RouteMapGeneric,
Name extends keyof RouteMapI18n = keyof RouteMapI18n
> extends RouteLocationAsRelativeGeneric {
name?: Extract<Name, string | symbol>
params?: RouteMapI18n[Name]['paramsRaw']
}
}
declare global {
var $t: (Composer)['t']
var $rt: (Composer)['rt']
var $n: (Composer)['n']
var $d: (Composer)['d']
var $tm: (Composer)['tm']
var $te: (Composer)['te']
}
export {}

483
.nuxt/types/imports.d.ts vendored Normal file
View File

@@ -0,0 +1,483 @@
// Generated by auto imports
export {}
declare global {
const ROLE_COLOR: typeof import('../../app/composables/useAppPermission').ROLE_COLOR
const ROLE_HIERARCHY: typeof import('../../app/composables/useAppPermission').ROLE_HIERARCHY
const ROLE_LABEL: typeof import('../../app/composables/useAppPermission').ROLE_LABEL
const abortNavigation: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router').abortNavigation
const addRouteMiddleware: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router').addRouteMiddleware
const callOnce: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/once').callOnce
const canManageResource: typeof import('../../app/composables/useResourceAccess').canManageResource
const canViewBasic: typeof import('../../app/composables/useResourceAccess').canViewBasic
const canViewConnection: typeof import('../../app/composables/useResourceAccess').canViewConnection
const canViewSensitive: typeof import('../../app/composables/useResourceAccess').canViewSensitive
const cancelIdleCallback: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/idle-callback').cancelIdleCallback
const clearAuthz: typeof import('../../app/utils/permission').clearAuthz
const clearError: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/error').clearError
const clearNuxtData: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/asyncData').clearNuxtData
const clearNuxtState: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/state').clearNuxtState
const computed: typeof import('vue').computed
const createError: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/error').createError
const customRef: typeof import('vue').customRef
const defineAppConfig: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt').defineAppConfig
const defineAsyncComponent: typeof import('vue').defineAsyncComponent
const defineComponent: typeof import('vue').defineComponent
const defineI18nConfig: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').defineI18nConfig
const defineI18nLocale: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').defineI18nLocale
const defineI18nRoute: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').defineI18nRoute
const defineLazyHydrationComponent: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/lazy-hydration').defineLazyHydrationComponent
const defineNuxtComponent: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/component').defineNuxtComponent
const defineNuxtLink: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-link').defineNuxtLink
const defineNuxtPlugin: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt').defineNuxtPlugin
const defineNuxtRouteMiddleware: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router').defineNuxtRouteMiddleware
const definePageMeta: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/pages/runtime/composables').definePageMeta
const definePayloadPlugin: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt').definePayloadPlugin
const definePayloadReducer: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/payload').definePayloadReducer
const definePayloadReviver: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/payload').definePayloadReviver
const effect: typeof import('vue').effect
const effectScope: typeof import('vue').effectScope
const enrichResourcesWithPermission: typeof import('../../app/composables/useResourceAccess').enrichResourcesWithPermission
const executeEntry: typeof import('../../app/utils/appEntry').executeEntry
const generateQrCodeCanvas: typeof import('../../app/composables/useQRCode').generateQrCodeCanvas
const generateQrCodeDataUrl: typeof import('../../app/composables/useQRCode').generateQrCodeDataUrl
const getAppEntries: typeof import('../../app/utils/appEntry').getAppEntries
const getAppManifest: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/manifest').getAppManifest
const getCurrentInstance: typeof import('vue').getCurrentInstance
const getCurrentScope: typeof import('vue').getCurrentScope
const getPrimaryEntry: typeof import('../../app/utils/appEntry').getPrimaryEntry
const getResourceAccessLevel: typeof import('../../app/composables/useResourceAccess').getResourceAccessLevel
const getRouteRules: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/manifest').getRouteRules
const getScanTip: typeof import('../../app/utils/appEntry').getScanTip
const getTenantId: typeof import('../../app/utils/domain').getTenantId
const getToken: typeof import('../../app/utils/token-util').getToken
const h: typeof import('vue').h
const hasAnyPermission: typeof import('../../app/utils/permission').hasAnyPermission
const hasAnyRole: typeof import('../../app/utils/permission').hasAnyRole
const hasInjectionContext: typeof import('vue').hasInjectionContext
const hasPermission: typeof import('../../app/utils/permission').hasPermission
const hasRole: typeof import('../../app/utils/permission').hasRole
const inject: typeof import('vue').inject
const injectHead: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head').injectHead
const isMaskedValue: typeof import('../../app/composables/useResourceAccess').isMaskedValue
const isNuxtError: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/error').isNuxtError
const isPrerendered: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/payload').isPrerendered
const isProxy: typeof import('vue').isProxy
const isReactive: typeof import('vue').isReactive
const isReadonly: typeof import('vue').isReadonly
const isRef: typeof import('vue').isRef
const isResourceOwner: typeof import('../../app/composables/useResourceAccess').isResourceOwner
const isShallow: typeof import('vue').isShallow
const isVue2: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/vue-demi').isVue2
const isVue3: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/vue-demi').isVue3
const loadPayload: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/payload').loadPayload
const markRaw: typeof import('vue').markRaw
const navigateTo: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router').navigateTo
const nextTick: typeof import('vue').nextTick
const notificationTypeMap: typeof import('../../app/composables/useNotificationCenter').notificationTypeMap
const onActivated: typeof import('vue').onActivated
const onBeforeMount: typeof import('vue').onBeforeMount
const onBeforeRouteLeave: typeof import('vue-router').onBeforeRouteLeave
const onBeforeRouteUpdate: typeof import('vue-router').onBeforeRouteUpdate
const onBeforeUnmount: typeof import('vue').onBeforeUnmount
const onBeforeUpdate: typeof import('vue').onBeforeUpdate
const onDeactivated: typeof import('vue').onDeactivated
const onErrorCaptured: typeof import('vue').onErrorCaptured
const onMounted: typeof import('vue').onMounted
const onNuxtReady: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ready').onNuxtReady
const onPrehydrate: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr').onPrehydrate
const onRenderTracked: typeof import('vue').onRenderTracked
const onRenderTriggered: typeof import('vue').onRenderTriggered
const onScopeDispose: typeof import('vue').onScopeDispose
const onServerPrefetch: typeof import('vue').onServerPrefetch
const onUnmounted: typeof import('vue').onUnmounted
const onUpdated: typeof import('vue').onUpdated
const onWatcherCleanup: typeof import('vue').onWatcherCleanup
const parseMarkdown: typeof import('../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/parser').parseMarkdown
const permission: typeof import('../../app/utils/permission').default
const prefetchComponents: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/preload').prefetchComponents
const preloadComponents: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/preload').preloadComponents
const preloadPayload: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/payload').preloadPayload
const preloadRouteComponents: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/preload').preloadRouteComponents
const prerenderRoutes: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr').prerenderRoutes
const provide: typeof import('vue').provide
const proxyRefs: typeof import('vue').proxyRefs
const queryCollection: typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/client').queryCollection
const queryCollectionItemSurroundings: typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/client').queryCollectionItemSurroundings
const queryCollectionNavigation: typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/client').queryCollectionNavigation
const queryCollectionSearchSections: typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/client').queryCollectionSearchSections
const reactive: typeof import('vue').reactive
const readonly: typeof import('vue').readonly
const ref: typeof import('vue').ref
const refreshCookie: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/cookie').refreshCookie
const refreshNuxtData: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/asyncData').refreshNuxtData
const reloadNuxtApp: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/chunk').reloadNuxtApp
const removeToken: typeof import('../../app/utils/token-util').removeToken
const request: typeof import('../../app/utils/request').default
const requestIdleCallback: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/idle-callback').requestIdleCallback
const resolveComponent: typeof import('vue').resolveComponent
const resolveWebHomeUrl: typeof import('../../app/utils/appEntry').resolveWebHomeUrl
const setAuthz: typeof import('../../app/utils/permission').setAuthz
const setAuthzFromUser: typeof import('../../app/utils/permission').setAuthzFromUser
const setInterval: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/interval').setInterval
const setPageLayout: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router').setPageLayout
const setResponseStatus: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr').setResponseStatus
const setToken: typeof import('../../app/utils/token-util').setToken
const shallowReactive: typeof import('vue').shallowReactive
const shallowReadonly: typeof import('vue').shallowReadonly
const shallowRef: typeof import('vue').shallowRef
const showError: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/error').showError
const stringifyMarkdown: typeof import('../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/stringify').stringifyMarkdown
const toRaw: typeof import('vue').toRaw
const toRef: typeof import('vue').toRef
const toRefs: typeof import('vue').toRefs
const toValue: typeof import('vue').toValue
const triggerRef: typeof import('vue').triggerRef
const tryUseNuxtApp: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt').tryUseNuxtApp
const unref: typeof import('vue').unref
const unwrapSlot: typeof import('../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/utils/node').flatUnwrap
const updateAppConfig: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/config').updateAppConfig
const useAppConfig: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/config').useAppConfig
const useAppPermission: typeof import('../../app/composables/useAppPermission').useAppPermission
const useAsyncData: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/asyncData').useAsyncData
const useAttrs: typeof import('vue').useAttrs
const useBrowserLocale: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').useBrowserLocale
const useCookie: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/cookie').useCookie
const useCookieLocale: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').useCookieLocale
const useCssModule: typeof import('vue').useCssModule
const useCssVars: typeof import('vue').useCssVars
const useError: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/error').useError
const useFetch: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/fetch').useFetch
const useHead: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head').useHead
const useHeadSafe: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head').useHeadSafe
const useHydration: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/hydrate').useHydration
const useI18n: typeof import('../../node_modules/.pnpm/vue-i18n@11.3.0_vue@3.5.26_typescript@5.9.3_/node_modules/vue-i18n/dist/vue-i18n').useI18n
const useI18nPreloadKeys: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').useI18nPreloadKeys
const useId: typeof import('vue').useId
const useLazyAsyncData: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/asyncData').useLazyAsyncData
const useLazyFetch: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/fetch').useLazyFetch
const useLink: typeof import('vue-router').useLink
const useLoadingIndicator: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/loading-indicator').useLoadingIndicator
const useLocaleHead: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').useLocaleHead
const useLocalePath: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').useLocalePath
const useLocaleRoute: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').useLocaleRoute
const useModel: typeof import('vue').useModel
const useNotificationCenter: typeof import('../../app/composables/useNotificationCenter').useNotificationCenter
const useNuxtApp: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt').useNuxtApp
const useNuxtData: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/asyncData').useNuxtData
const usePageSeo: typeof import('../../app/composables/usePageSeo').usePageSeo
const usePreviewMode: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/preview').usePreviewMode
const useRequestEvent: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr').useRequestEvent
const useRequestFetch: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr').useRequestFetch
const useRequestHeader: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr').useRequestHeader
const useRequestHeaders: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr').useRequestHeaders
const useRequestURL: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/url').useRequestURL
const useResourceAccess: typeof import('../../app/composables/useResourceAccess').useResourceAccess
const useResponseHeader: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr').useResponseHeader
const useRoute: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router').useRoute
const useRouteAnnouncer: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/route-announcer').useRouteAnnouncer
const useRouteBaseName: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').useRouteBaseName
const useRouter: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router').useRouter
const useRuntimeConfig: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt').useRuntimeConfig
const useRuntimeHook: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/runtime-hook').useRuntimeHook
const useScript: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScript
const useScriptClarity: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptClarity
const useScriptCloudflareWebAnalytics: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptCloudflareWebAnalytics
const useScriptCrisp: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptCrisp
const useScriptDatabuddyAnalytics: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptDatabuddyAnalytics
const useScriptEventPage: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptEventPage
const useScriptFathomAnalytics: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptFathomAnalytics
const useScriptGoogleAdsense: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptGoogleAdsense
const useScriptGoogleAnalytics: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptGoogleAnalytics
const useScriptGoogleMaps: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptGoogleMaps
const useScriptGoogleTagManager: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptGoogleTagManager
const useScriptHotjar: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptHotjar
const useScriptIntercom: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptIntercom
const useScriptLemonSqueezy: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptLemonSqueezy
const useScriptMatomoAnalytics: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptMatomoAnalytics
const useScriptMetaPixel: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptMetaPixel
const useScriptNpm: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptNpm
const useScriptPayPal: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptPayPal
const useScriptPlausibleAnalytics: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptPlausibleAnalytics
const useScriptRedditPixel: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptRedditPixel
const useScriptRybbitAnalytics: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptRybbitAnalytics
const useScriptSegment: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptSegment
const useScriptSnapchatPixel: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptSnapchatPixel
const useScriptStripe: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptStripe
const useScriptTriggerConsent: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptTriggerConsent
const useScriptTriggerElement: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptTriggerElement
const useScriptUmamiAnalytics: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptUmamiAnalytics
const useScriptVimeoPlayer: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptVimeoPlayer
const useScriptXPixel: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptXPixel
const useScriptYouTubePlayer: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs').useScriptYouTubePlayer
const useSeoMeta: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head').useSeoMeta
const useServerHead: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head').useServerHead
const useServerHeadSafe: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head').useServerHeadSafe
const useServerSeoMeta: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head').useServerSeoMeta
const useSetI18nParams: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').useSetI18nParams
const useShadowRoot: typeof import('vue').useShadowRoot
const useSlots: typeof import('vue').useSlots
const useState: typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/state').useState
const useSwitchLocalePath: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index').useSwitchLocalePath
const useTemplateRef: typeof import('vue').useTemplateRef
const useTransitionState: typeof import('vue').useTransitionState
const watch: typeof import('vue').watch
const watchEffect: typeof import('vue').watchEffect
const watchPostEffect: typeof import('vue').watchPostEffect
const watchSyncEffect: typeof import('vue').watchSyncEffect
const withCtx: typeof import('vue').withCtx
const withDirectives: typeof import('vue').withDirectives
const withKeys: typeof import('vue').withKeys
const withMemo: typeof import('vue').withMemo
const withModifiers: typeof import('vue').withModifiers
const withScopeId: typeof import('vue').withScopeId
}
// for type re-export
declare global {
// @ts-ignore
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
import('vue')
// @ts-ignore
export type { AppPermission } from '../../app/composables/useAppPermission'
import('../../app/composables/useAppPermission')
// @ts-ignore
export type { ResourceAccessLevel } from '../../app/composables/useResourceAccess'
import('../../app/composables/useResourceAccess')
// @ts-ignore
export type { EntryType, AppEntry } from '../../app/utils/appEntry'
import('../../app/utils/appEntry')
}
// for vue template auto import
import { UnwrapRef } from 'vue'
declare module 'vue' {
interface ComponentCustomProperties {
readonly ROLE_COLOR: UnwrapRef<typeof import('../../app/composables/useAppPermission')['ROLE_COLOR']>
readonly ROLE_HIERARCHY: UnwrapRef<typeof import('../../app/composables/useAppPermission')['ROLE_HIERARCHY']>
readonly ROLE_LABEL: UnwrapRef<typeof import('../../app/composables/useAppPermission')['ROLE_LABEL']>
readonly abortNavigation: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router')['abortNavigation']>
readonly addRouteMiddleware: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router')['addRouteMiddleware']>
readonly callOnce: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/once')['callOnce']>
readonly canManageResource: UnwrapRef<typeof import('../../app/composables/useResourceAccess')['canManageResource']>
readonly canViewBasic: UnwrapRef<typeof import('../../app/composables/useResourceAccess')['canViewBasic']>
readonly canViewConnection: UnwrapRef<typeof import('../../app/composables/useResourceAccess')['canViewConnection']>
readonly canViewSensitive: UnwrapRef<typeof import('../../app/composables/useResourceAccess')['canViewSensitive']>
readonly cancelIdleCallback: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/idle-callback')['cancelIdleCallback']>
readonly clearAuthz: UnwrapRef<typeof import('../../app/utils/permission')['clearAuthz']>
readonly clearError: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/error')['clearError']>
readonly clearNuxtData: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/asyncData')['clearNuxtData']>
readonly clearNuxtState: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/state')['clearNuxtState']>
readonly computed: UnwrapRef<typeof import('vue')['computed']>
readonly createError: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/error')['createError']>
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
readonly defineAppConfig: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt')['defineAppConfig']>
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
readonly defineI18nConfig: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['defineI18nConfig']>
readonly defineI18nLocale: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['defineI18nLocale']>
readonly defineI18nRoute: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['defineI18nRoute']>
readonly defineLazyHydrationComponent: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/lazy-hydration')['defineLazyHydrationComponent']>
readonly defineNuxtComponent: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/component')['defineNuxtComponent']>
readonly defineNuxtLink: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/components/nuxt-link')['defineNuxtLink']>
readonly defineNuxtPlugin: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt')['defineNuxtPlugin']>
readonly defineNuxtRouteMiddleware: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router')['defineNuxtRouteMiddleware']>
readonly definePageMeta: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/pages/runtime/composables')['definePageMeta']>
readonly definePayloadPlugin: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt')['definePayloadPlugin']>
readonly definePayloadReducer: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/payload')['definePayloadReducer']>
readonly definePayloadReviver: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/payload')['definePayloadReviver']>
readonly effect: UnwrapRef<typeof import('vue')['effect']>
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
readonly enrichResourcesWithPermission: UnwrapRef<typeof import('../../app/composables/useResourceAccess')['enrichResourcesWithPermission']>
readonly executeEntry: UnwrapRef<typeof import('../../app/utils/appEntry')['executeEntry']>
readonly generateQrCodeCanvas: UnwrapRef<typeof import('../../app/composables/useQRCode')['generateQrCodeCanvas']>
readonly generateQrCodeDataUrl: UnwrapRef<typeof import('../../app/composables/useQRCode')['generateQrCodeDataUrl']>
readonly getAppEntries: UnwrapRef<typeof import('../../app/utils/appEntry')['getAppEntries']>
readonly getAppManifest: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/manifest')['getAppManifest']>
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
readonly getPrimaryEntry: UnwrapRef<typeof import('../../app/utils/appEntry')['getPrimaryEntry']>
readonly getResourceAccessLevel: UnwrapRef<typeof import('../../app/composables/useResourceAccess')['getResourceAccessLevel']>
readonly getRouteRules: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/manifest')['getRouteRules']>
readonly getScanTip: UnwrapRef<typeof import('../../app/utils/appEntry')['getScanTip']>
readonly getTenantId: UnwrapRef<typeof import('../../app/utils/domain')['getTenantId']>
readonly getToken: UnwrapRef<typeof import('../../app/utils/token-util')['getToken']>
readonly h: UnwrapRef<typeof import('vue')['h']>
readonly hasAnyPermission: UnwrapRef<typeof import('../../app/utils/permission')['hasAnyPermission']>
readonly hasAnyRole: UnwrapRef<typeof import('../../app/utils/permission')['hasAnyRole']>
readonly hasInjectionContext: UnwrapRef<typeof import('vue')['hasInjectionContext']>
readonly hasPermission: UnwrapRef<typeof import('../../app/utils/permission')['hasPermission']>
readonly hasRole: UnwrapRef<typeof import('../../app/utils/permission')['hasRole']>
readonly inject: UnwrapRef<typeof import('vue')['inject']>
readonly injectHead: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head')['injectHead']>
readonly isMaskedValue: UnwrapRef<typeof import('../../app/composables/useResourceAccess')['isMaskedValue']>
readonly isNuxtError: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/error')['isNuxtError']>
readonly isPrerendered: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/payload')['isPrerendered']>
readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
readonly isResourceOwner: UnwrapRef<typeof import('../../app/composables/useResourceAccess')['isResourceOwner']>
readonly isShallow: UnwrapRef<typeof import('vue')['isShallow']>
readonly isVue2: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/vue-demi')['isVue2']>
readonly isVue3: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/vue-demi')['isVue3']>
readonly loadPayload: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/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.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router')['navigateTo']>
readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
readonly notificationTypeMap: UnwrapRef<typeof import('../../app/composables/useNotificationCenter')['notificationTypeMap']>
readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
readonly onBeforeRouteLeave: UnwrapRef<typeof import('vue-router')['onBeforeRouteLeave']>
readonly onBeforeRouteUpdate: UnwrapRef<typeof import('vue-router')['onBeforeRouteUpdate']>
readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
readonly onNuxtReady: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ready')['onNuxtReady']>
readonly onPrehydrate: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr')['onPrehydrate']>
readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
readonly onWatcherCleanup: UnwrapRef<typeof import('vue')['onWatcherCleanup']>
readonly parseMarkdown: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/parser')['parseMarkdown']>
readonly permission: UnwrapRef<typeof import('../../app/utils/permission')['default']>
readonly prefetchComponents: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/preload')['prefetchComponents']>
readonly preloadComponents: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/preload')['preloadComponents']>
readonly preloadPayload: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/payload')['preloadPayload']>
readonly preloadRouteComponents: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/preload')['preloadRouteComponents']>
readonly prerenderRoutes: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr')['prerenderRoutes']>
readonly provide: UnwrapRef<typeof import('vue')['provide']>
readonly proxyRefs: UnwrapRef<typeof import('vue')['proxyRefs']>
readonly queryCollection: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/client')['queryCollection']>
readonly queryCollectionItemSurroundings: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/client')['queryCollectionItemSurroundings']>
readonly queryCollectionNavigation: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/client')['queryCollectionNavigation']>
readonly queryCollectionSearchSections: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/client')['queryCollectionSearchSections']>
readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
readonly ref: UnwrapRef<typeof import('vue')['ref']>
readonly refreshCookie: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/cookie')['refreshCookie']>
readonly refreshNuxtData: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/asyncData')['refreshNuxtData']>
readonly reloadNuxtApp: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/chunk')['reloadNuxtApp']>
readonly removeToken: UnwrapRef<typeof import('../../app/utils/token-util')['removeToken']>
readonly request: UnwrapRef<typeof import('../../app/utils/request')['default']>
readonly requestIdleCallback: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/idle-callback')['requestIdleCallback']>
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
readonly resolveWebHomeUrl: UnwrapRef<typeof import('../../app/utils/appEntry')['resolveWebHomeUrl']>
readonly setAuthz: UnwrapRef<typeof import('../../app/utils/permission')['setAuthz']>
readonly setAuthzFromUser: UnwrapRef<typeof import('../../app/utils/permission')['setAuthzFromUser']>
readonly setInterval: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/compat/interval')['setInterval']>
readonly setPageLayout: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router')['setPageLayout']>
readonly setResponseStatus: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr')['setResponseStatus']>
readonly setToken: UnwrapRef<typeof import('../../app/utils/token-util')['setToken']>
readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
readonly showError: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/error')['showError']>
readonly stringifyMarkdown: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/stringify')['stringifyMarkdown']>
readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
readonly toValue: UnwrapRef<typeof import('vue')['toValue']>
readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
readonly tryUseNuxtApp: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt')['tryUseNuxtApp']>
readonly unref: UnwrapRef<typeof import('vue')['unref']>
readonly unwrapSlot: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/utils/node')['flatUnwrap']>
readonly updateAppConfig: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/config')['updateAppConfig']>
readonly useAppConfig: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/config')['useAppConfig']>
readonly useAppPermission: UnwrapRef<typeof import('../../app/composables/useAppPermission')['useAppPermission']>
readonly useAsyncData: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/asyncData')['useAsyncData']>
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
readonly useBrowserLocale: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['useBrowserLocale']>
readonly useCookie: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/cookie')['useCookie']>
readonly useCookieLocale: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['useCookieLocale']>
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
readonly useError: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/error')['useError']>
readonly useFetch: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/fetch')['useFetch']>
readonly useHead: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head')['useHead']>
readonly useHeadSafe: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head')['useHeadSafe']>
readonly useHydration: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/hydrate')['useHydration']>
readonly useI18n: UnwrapRef<typeof import('../../node_modules/.pnpm/vue-i18n@11.3.0_vue@3.5.26_typescript@5.9.3_/node_modules/vue-i18n/dist/vue-i18n')['useI18n']>
readonly useI18nPreloadKeys: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['useI18nPreloadKeys']>
readonly useId: UnwrapRef<typeof import('vue')['useId']>
readonly useLazyAsyncData: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/asyncData')['useLazyAsyncData']>
readonly useLazyFetch: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/fetch')['useLazyFetch']>
readonly useLink: UnwrapRef<typeof import('vue-router')['useLink']>
readonly useLoadingIndicator: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/loading-indicator')['useLoadingIndicator']>
readonly useLocaleHead: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['useLocaleHead']>
readonly useLocalePath: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['useLocalePath']>
readonly useLocaleRoute: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['useLocaleRoute']>
readonly useModel: UnwrapRef<typeof import('vue')['useModel']>
readonly useNotificationCenter: UnwrapRef<typeof import('../../app/composables/useNotificationCenter')['useNotificationCenter']>
readonly useNuxtApp: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt')['useNuxtApp']>
readonly useNuxtData: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/asyncData')['useNuxtData']>
readonly usePageSeo: UnwrapRef<typeof import('../../app/composables/usePageSeo')['usePageSeo']>
readonly usePreviewMode: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/preview')['usePreviewMode']>
readonly useRequestEvent: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr')['useRequestEvent']>
readonly useRequestFetch: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr')['useRequestFetch']>
readonly useRequestHeader: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr')['useRequestHeader']>
readonly useRequestHeaders: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr')['useRequestHeaders']>
readonly useRequestURL: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/url')['useRequestURL']>
readonly useResourceAccess: UnwrapRef<typeof import('../../app/composables/useResourceAccess')['useResourceAccess']>
readonly useResponseHeader: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/ssr')['useResponseHeader']>
readonly useRoute: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router')['useRoute']>
readonly useRouteAnnouncer: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/route-announcer')['useRouteAnnouncer']>
readonly useRouteBaseName: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['useRouteBaseName']>
readonly useRouter: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/router')['useRouter']>
readonly useRuntimeConfig: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/nuxt')['useRuntimeConfig']>
readonly useRuntimeHook: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/runtime-hook')['useRuntimeHook']>
readonly useScript: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScript']>
readonly useScriptClarity: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptClarity']>
readonly useScriptCloudflareWebAnalytics: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptCloudflareWebAnalytics']>
readonly useScriptCrisp: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptCrisp']>
readonly useScriptDatabuddyAnalytics: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptDatabuddyAnalytics']>
readonly useScriptEventPage: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptEventPage']>
readonly useScriptFathomAnalytics: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptFathomAnalytics']>
readonly useScriptGoogleAdsense: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptGoogleAdsense']>
readonly useScriptGoogleAnalytics: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptGoogleAnalytics']>
readonly useScriptGoogleMaps: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptGoogleMaps']>
readonly useScriptGoogleTagManager: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptGoogleTagManager']>
readonly useScriptHotjar: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptHotjar']>
readonly useScriptIntercom: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptIntercom']>
readonly useScriptLemonSqueezy: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptLemonSqueezy']>
readonly useScriptMatomoAnalytics: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptMatomoAnalytics']>
readonly useScriptMetaPixel: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptMetaPixel']>
readonly useScriptNpm: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptNpm']>
readonly useScriptPayPal: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptPayPal']>
readonly useScriptPlausibleAnalytics: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptPlausibleAnalytics']>
readonly useScriptRedditPixel: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptRedditPixel']>
readonly useScriptRybbitAnalytics: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptRybbitAnalytics']>
readonly useScriptSegment: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptSegment']>
readonly useScriptSnapchatPixel: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptSnapchatPixel']>
readonly useScriptStripe: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptStripe']>
readonly useScriptTriggerConsent: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptTriggerConsent']>
readonly useScriptTriggerElement: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptTriggerElement']>
readonly useScriptUmamiAnalytics: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptUmamiAnalytics']>
readonly useScriptVimeoPlayer: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptVimeoPlayer']>
readonly useScriptXPixel: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptXPixel']>
readonly useScriptYouTubePlayer: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/script-stubs')['useScriptYouTubePlayer']>
readonly useSeoMeta: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head')['useSeoMeta']>
readonly useServerHead: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head')['useServerHead']>
readonly useServerHeadSafe: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head')['useServerHeadSafe']>
readonly useServerSeoMeta: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/head')['useServerSeoMeta']>
readonly useSetI18nParams: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['useSetI18nParams']>
readonly useShadowRoot: UnwrapRef<typeof import('vue')['useShadowRoot']>
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
readonly useState: UnwrapRef<typeof import('../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/composables/state')['useState']>
readonly useSwitchLocalePath: UnwrapRef<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/index')['useSwitchLocalePath']>
readonly useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']>
readonly useTransitionState: UnwrapRef<typeof import('vue')['useTransitionState']>
readonly watch: UnwrapRef<typeof import('vue')['watch']>
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
readonly withCtx: UnwrapRef<typeof import('vue')['withCtx']>
readonly withDirectives: UnwrapRef<typeof import('vue')['withDirectives']>
readonly withKeys: UnwrapRef<typeof import('vue')['withKeys']>
readonly withMemo: UnwrapRef<typeof import('vue')['withMemo']>
readonly withModifiers: UnwrapRef<typeof import('vue')['withModifiers']>
readonly withScopeId: UnwrapRef<typeof import('vue')['withScopeId']>
}
}

7
.nuxt/types/layouts.d.ts vendored Normal file
View File

@@ -0,0 +1,7 @@
import type { ComputedRef, MaybeRef } from 'vue'
export type LayoutKey = "admin" | "blank" | "console" | "default" | "developer" | "oa"
declare module 'nuxt/app' {
interface PageMeta {
layout?: MaybeRef<LayoutKey | false> | ComputedRef<LayoutKey | false>
}
}

7
.nuxt/types/middleware.d.ts vendored Normal file
View File

@@ -0,0 +1,7 @@
import type { NavigationGuard } from 'vue-router'
export type MiddlewareKey = never
declare module 'nuxt/app' {
interface PageMeta {
middleware?: MiddlewareKey | NavigationGuard | Array<MiddlewareKey | NavigationGuard>
}
}

139
.nuxt/types/modules.d.ts vendored Normal file
View File

@@ -0,0 +1,139 @@
import { NuxtModule, ModuleDependencyMeta } from '@nuxt/schema'
declare module '@nuxt/schema' {
interface ModuleDependencies {
["@nuxt/content"]?: ModuleDependencyMeta<typeof import("@nuxt/content").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
["@nuxtjs/tailwindcss"]?: ModuleDependencyMeta<typeof import("@nuxtjs/tailwindcss").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
["@nuxtjs/i18n"]?: ModuleDependencyMeta<typeof import("@nuxtjs/i18n").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
["@nuxt/devtools"]?: ModuleDependencyMeta<typeof import("@nuxt/devtools").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
["@nuxt/telemetry"]?: ModuleDependencyMeta<typeof import("@nuxt/telemetry").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
["@nuxtjs/mdc"]?: ModuleDependencyMeta<typeof import("@nuxtjs/mdc").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
}
interface NuxtOptions {
/**
* Configuration for `@nuxt/content`
*/
["content"]: typeof import("@nuxt/content").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
/**
* Configuration for `@nuxtjs/tailwindcss`
*/
["tailwindcss"]: typeof import("@nuxtjs/tailwindcss").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
/**
* Configuration for `@nuxtjs/i18n`
*/
["i18n"]: typeof import("@nuxtjs/i18n").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
/**
* Configuration for `@nuxt/devtools`
*/
["devtools"]: typeof import("@nuxt/devtools").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
/**
* Configuration for `@nuxt/telemetry`
*/
["telemetry"]: typeof import("@nuxt/telemetry").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
/**
* Configuration for `@nuxtjs/mdc`
*/
["mdc"]: typeof import("@nuxtjs/mdc").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
}
interface NuxtConfig {
/**
* Configuration for `@nuxt/content`
*/
["content"]?: typeof import("@nuxt/content").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
/**
* Configuration for `@nuxtjs/tailwindcss`
*/
["tailwindcss"]?: typeof import("@nuxtjs/tailwindcss").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
/**
* Configuration for `@nuxtjs/i18n`
*/
["i18n"]?: typeof import("@nuxtjs/i18n").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
/**
* Configuration for `@nuxt/devtools`
*/
["devtools"]?: typeof import("@nuxt/devtools").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
/**
* Configuration for `@nuxt/telemetry`
*/
["telemetry"]?: typeof import("@nuxt/telemetry").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
/**
* Configuration for `@nuxtjs/mdc`
*/
["mdc"]?: typeof import("@nuxtjs/mdc").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
modules?: (undefined | null | false | NuxtModule<any> | string | [NuxtModule | string, Record<string, any>] | ["@nuxt/content", Exclude<NuxtConfig["content"], boolean>] | ["@nuxtjs/tailwindcss", Exclude<NuxtConfig["tailwindcss"], boolean>] | ["@nuxtjs/i18n", Exclude<NuxtConfig["i18n"], boolean>] | ["@nuxt/devtools", Exclude<NuxtConfig["devtools"], boolean>] | ["@nuxt/telemetry", Exclude<NuxtConfig["telemetry"], boolean>] | ["@nuxtjs/mdc", Exclude<NuxtConfig["mdc"], boolean>])[],
}
}
declare module 'nuxt/schema' {
interface ModuleDependencies {
["@nuxt/content"]?: ModuleDependencyMeta<typeof import("@nuxt/content").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
["@nuxtjs/tailwindcss"]?: ModuleDependencyMeta<typeof import("@nuxtjs/tailwindcss").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
["@nuxtjs/i18n"]?: ModuleDependencyMeta<typeof import("@nuxtjs/i18n").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
["@nuxt/devtools"]?: ModuleDependencyMeta<typeof import("@nuxt/devtools").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
["@nuxt/telemetry"]?: ModuleDependencyMeta<typeof import("@nuxt/telemetry").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
["@nuxtjs/mdc"]?: ModuleDependencyMeta<typeof import("@nuxtjs/mdc").default extends NuxtModule<infer O> ? O : Record<string, unknown>>
}
interface NuxtOptions {
/**
* Configuration for `@nuxt/content`
* @see https://content.nuxt.com
*/
["content"]: typeof import("@nuxt/content").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
/**
* Configuration for `@nuxtjs/tailwindcss`
* @see https://www.npmjs.com/package/@nuxtjs/tailwindcss
*/
["tailwindcss"]: typeof import("@nuxtjs/tailwindcss").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
/**
* Configuration for `@nuxtjs/i18n`
* @see https://www.npmjs.com/package/@nuxtjs/i18n
*/
["i18n"]: typeof import("@nuxtjs/i18n").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
/**
* Configuration for `@nuxt/devtools`
* @see https://www.npmjs.com/package/@nuxt/devtools
*/
["devtools"]: typeof import("@nuxt/devtools").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
/**
* Configuration for `@nuxt/telemetry`
* @see https://www.npmjs.com/package/@nuxt/telemetry
*/
["telemetry"]: typeof import("@nuxt/telemetry").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
/**
* Configuration for `@nuxtjs/mdc`
* @see https://www.npmjs.com/package/@nuxtjs/mdc
*/
["mdc"]: typeof import("@nuxtjs/mdc").default extends NuxtModule<infer O, unknown, boolean> ? O : Record<string, any>
}
interface NuxtConfig {
/**
* Configuration for `@nuxt/content`
* @see https://content.nuxt.com
*/
["content"]?: typeof import("@nuxt/content").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
/**
* Configuration for `@nuxtjs/tailwindcss`
* @see https://www.npmjs.com/package/@nuxtjs/tailwindcss
*/
["tailwindcss"]?: typeof import("@nuxtjs/tailwindcss").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
/**
* Configuration for `@nuxtjs/i18n`
* @see https://www.npmjs.com/package/@nuxtjs/i18n
*/
["i18n"]?: typeof import("@nuxtjs/i18n").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
/**
* Configuration for `@nuxt/devtools`
* @see https://www.npmjs.com/package/@nuxt/devtools
*/
["devtools"]?: typeof import("@nuxt/devtools").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
/**
* Configuration for `@nuxt/telemetry`
* @see https://www.npmjs.com/package/@nuxt/telemetry
*/
["telemetry"]?: typeof import("@nuxt/telemetry").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
/**
* Configuration for `@nuxtjs/mdc`
* @see https://www.npmjs.com/package/@nuxtjs/mdc
*/
["mdc"]?: typeof import("@nuxtjs/mdc").default extends NuxtModule<infer O, unknown, boolean> ? Partial<O> : Record<string, any>
modules?: (undefined | null | false | NuxtModule<any> | string | [NuxtModule | string, Record<string, any>] | ["@nuxt/content", Exclude<NuxtConfig["content"], boolean>] | ["@nuxtjs/tailwindcss", Exclude<NuxtConfig["tailwindcss"], boolean>] | ["@nuxtjs/i18n", Exclude<NuxtConfig["i18n"], boolean>] | ["@nuxt/devtools", Exclude<NuxtConfig["devtools"], boolean>] | ["@nuxt/telemetry", Exclude<NuxtConfig["telemetry"], boolean>] | ["@nuxtjs/mdc", Exclude<NuxtConfig["mdc"], boolean>])[],
}
}

14
.nuxt/types/nitro-config.d.ts vendored Normal file
View File

@@ -0,0 +1,14 @@
// Generated by nitro
// App Config
import type { Defu } from 'defu'
type UserAppConfig = Defu<{}, []>
declare module "nitropack/types" {
interface AppConfig extends UserAppConfig {}
}
export {}

171
.nuxt/types/nitro-imports.d.ts vendored Normal file
View File

@@ -0,0 +1,171 @@
declare global {
const __buildAssetsURL: typeof import('../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_better-sqlite3@12.8.0_db0@0.3.4_better-sqlite3@12.8.0__ioredis_a0a2be7525d559e696e64db570f075d2/node_modules/@nuxt/nitro-server/dist/runtime/utils/paths').buildAssetsURL
const __publicAssetsURL: typeof import('../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_better-sqlite3@12.8.0_db0@0.3.4_better-sqlite3@12.8.0__ioredis_a0a2be7525d559e696e64db570f075d2/node_modules/@nuxt/nitro-server/dist/runtime/utils/paths').publicAssetsURL
const appendCorsHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').appendCorsHeaders
const appendCorsPreflightHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').appendCorsPreflightHeaders
const appendHeader: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').appendHeader
const appendHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').appendHeaders
const appendResponseHeader: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').appendResponseHeader
const appendResponseHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').appendResponseHeaders
const assertMethod: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').assertMethod
const cachedEventHandler: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/cache').cachedEventHandler
const cachedFunction: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/cache').cachedFunction
const callNodeListener: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').callNodeListener
const clearResponseHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').clearResponseHeaders
const clearSession: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').clearSession
const createApp: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').createApp
const createAppEventHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').createAppEventHandler
const createError: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').createError
const createEvent: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').createEvent
const createEventStream: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').createEventStream
const createRouter: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').createRouter
const defaultContentType: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').defaultContentType
const defineAppConfig: typeof import('../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_better-sqlite3@12.8.0_db0@0.3.4_better-sqlite3@12.8.0__ioredis_a0a2be7525d559e696e64db570f075d2/node_modules/@nuxt/nitro-server/dist/runtime/utils/config').defineAppConfig
const defineCachedEventHandler: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/cache').defineCachedEventHandler
const defineCachedFunction: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/cache').defineCachedFunction
const defineEventHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').defineEventHandler
const defineI18nConfig: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/shared').defineI18nConfig
const defineI18nLocale: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/shared').defineI18nLocale
const defineI18nLocaleDetector: typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/server').defineI18nLocaleDetector
const defineLazyEventHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').defineLazyEventHandler
const defineNitroErrorHandler: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/error/utils').defineNitroErrorHandler
const defineNitroPlugin: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/plugin').defineNitroPlugin
const defineNodeListener: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').defineNodeListener
const defineNodeMiddleware: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').defineNodeMiddleware
const defineRenderHandler: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/renderer').defineRenderHandler
const defineRequestMiddleware: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').defineRequestMiddleware
const defineResponseMiddleware: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').defineResponseMiddleware
const defineRouteMeta: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/meta').defineRouteMeta
const defineTask: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/task').defineTask
const defineWebSocket: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').defineWebSocket
const defineWebSocketHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').defineWebSocketHandler
const deleteCookie: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').deleteCookie
const dynamicEventHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').dynamicEventHandler
const eventHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').eventHandler
const fetchWithEvent: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').fetchWithEvent
const fromNodeMiddleware: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').fromNodeMiddleware
const fromPlainHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').fromPlainHandler
const fromWebHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').fromWebHandler
const getCookie: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getCookie
const getCookieLocale: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').getCookieLocale
const getHeader: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getHeader
const getHeaderLanguage: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').getHeaderLanguage
const getHeaderLanguages: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').getHeaderLanguages
const getHeaderLocale: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').getHeaderLocale
const getHeaderLocales: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').getHeaderLocales
const getHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getHeaders
const getMethod: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getMethod
const getPathLocale: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').getPathLocale
const getProxyRequestHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getProxyRequestHeaders
const getQuery: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getQuery
const getQueryLocale: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').getQueryLocale
const getRequestFingerprint: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRequestFingerprint
const getRequestHeader: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRequestHeader
const getRequestHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRequestHeaders
const getRequestHost: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRequestHost
const getRequestIP: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRequestIP
const getRequestPath: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRequestPath
const getRequestProtocol: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRequestProtocol
const getRequestURL: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRequestURL
const getRequestWebStream: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRequestWebStream
const getResponseHeader: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getResponseHeader
const getResponseHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getResponseHeaders
const getResponseStatus: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getResponseStatus
const getResponseStatusText: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getResponseStatusText
const getRouteRules: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/route-rules').getRouteRules
const getRouterParam: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRouterParam
const getRouterParams: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getRouterParams
const getSession: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getSession
const getValidatedQuery: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getValidatedQuery
const getValidatedRouterParams: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').getValidatedRouterParams
const handleCacheHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').handleCacheHeaders
const handleCors: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').handleCors
const isCorsOriginAllowed: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').isCorsOriginAllowed
const isError: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').isError
const isEvent: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').isEvent
const isEventHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').isEventHandler
const isMethod: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').isMethod
const isPreflightRequest: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').isPreflightRequest
const isStream: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').isStream
const isWebResponse: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').isWebResponse
const lazyEventHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').lazyEventHandler
const nitroPlugin: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/plugin').nitroPlugin
const parseCookies: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').parseCookies
const parseMarkdown: typeof import('../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/parser').parseMarkdown
const promisifyNodeListener: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').promisifyNodeListener
const proxyRequest: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').proxyRequest
const queryCollection: typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/nitro').queryCollection
const queryCollectionItemSurroundings: typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/nitro').queryCollectionItemSurroundings
const queryCollectionNavigation: typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/nitro').queryCollectionNavigation
const queryCollectionSearchSections: typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/nitro').queryCollectionSearchSections
const readBody: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').readBody
const readFormData: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').readFormData
const readMultipartFormData: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').readMultipartFormData
const readRawBody: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').readRawBody
const readValidatedBody: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').readValidatedBody
const removeResponseHeader: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').removeResponseHeader
const runTask: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/task').runTask
const sanitizeStatusCode: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').sanitizeStatusCode
const sanitizeStatusMessage: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').sanitizeStatusMessage
const sealSession: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').sealSession
const send: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').send
const sendError: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').sendError
const sendIterable: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').sendIterable
const sendNoContent: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').sendNoContent
const sendProxy: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').sendProxy
const sendRedirect: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').sendRedirect
const sendStream: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').sendStream
const sendWebResponse: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').sendWebResponse
const serveStatic: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').serveStatic
const setCookie: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').setCookie
const setCookieLocale: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').setCookieLocale
const setHeader: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').setHeader
const setHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').setHeaders
const setResponseHeader: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').setResponseHeader
const setResponseHeaders: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').setResponseHeaders
const setResponseStatus: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').setResponseStatus
const splitCookiesString: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').splitCookiesString
const stringifyMarkdown: typeof import('../../node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/stringify').stringifyMarkdown
const toEventHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').toEventHandler
const toNodeListener: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').toNodeListener
const toPlainHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').toPlainHandler
const toWebHandler: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').toWebHandler
const toWebRequest: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').toWebRequest
const tryCookieLocale: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').tryCookieLocale
const tryHeaderLocale: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').tryHeaderLocale
const tryHeaderLocales: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').tryHeaderLocales
const tryPathLocale: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').tryPathLocale
const tryQueryLocale: typeof import('../../node_modules/.pnpm/@intlify+utils@0.14.1/node_modules/@intlify/utils/dist/h3').tryQueryLocale
const unsealSession: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').unsealSession
const updateSession: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').updateSession
const useAppConfig: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/config').useAppConfig
const useBase: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').useBase
const useEvent: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/context').useEvent
const useNitroApp: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/app').useNitroApp
const useRuntimeConfig: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/config').useRuntimeConfig
const useSession: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').useSession
const useStorage: typeof import('../../node_modules/.pnpm/nitropack@2.12.9_better-sqlite3@12.8.0/node_modules/nitropack/dist/runtime/internal/storage').useStorage
const useTranslation: typeof import('../../node_modules/.pnpm/@intlify+h3@0.7.4/node_modules/@intlify/h3').useTranslation
const writeEarlyHints: typeof import('../../node_modules/.pnpm/h3@1.15.4/node_modules/h3').writeEarlyHints
}
export { useNitroApp } from 'nitropack/runtime/internal/app';
export { useRuntimeConfig, useAppConfig } from 'nitropack/runtime/internal/config';
export { defineNitroPlugin, nitroPlugin } from 'nitropack/runtime/internal/plugin';
export { defineCachedFunction, defineCachedEventHandler, cachedFunction, cachedEventHandler } from 'nitropack/runtime/internal/cache';
export { useStorage } from 'nitropack/runtime/internal/storage';
export { defineRenderHandler } from 'nitropack/runtime/internal/renderer';
export { defineRouteMeta } from 'nitropack/runtime/internal/meta';
export { getRouteRules } from 'nitropack/runtime/internal/route-rules';
export { useEvent } from 'nitropack/runtime/internal/context';
export { defineTask, runTask } from 'nitropack/runtime/internal/task';
export { defineNitroErrorHandler } from 'nitropack/runtime/internal/error/utils';
export { appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, callNodeListener, clearResponseHeaders, clearSession, createApp, createAppEventHandler, createError, createEvent, createEventStream, createRouter, defaultContentType, defineEventHandler, defineLazyEventHandler, defineNodeListener, defineNodeMiddleware, defineRequestMiddleware, defineResponseMiddleware, defineWebSocket, defineWebSocketHandler, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeMiddleware, fromPlainHandler, fromWebHandler, getCookie, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, isCorsOriginAllowed, isError, isEvent, isEventHandler, isMethod, isPreflightRequest, isStream, isWebResponse, lazyEventHandler, parseCookies, promisifyNodeListener, proxyRequest, readBody, readFormData, readMultipartFormData, readRawBody, readValidatedBody, removeResponseHeader, sanitizeStatusCode, sanitizeStatusMessage, sealSession, send, sendError, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serveStatic, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, splitCookiesString, toEventHandler, toNodeListener, toPlainHandler, toWebHandler, toWebRequest, unsealSession, updateSession, useBase, useSession, writeEarlyHints } from 'h3';
export { buildAssetsURL as __buildAssetsURL, publicAssetsURL as __publicAssetsURL } from '/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxt+nitro-server@4.2.2_better-sqlite3@12.8.0_db0@0.3.4_better-sqlite3@12.8.0__ioredis_a0a2be7525d559e696e64db570f075d2/node_modules/@nuxt/nitro-server/dist/runtime/utils/paths';
export { defineAppConfig } from '/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxt+nitro-server@4.2.2_better-sqlite3@12.8.0_db0@0.3.4_better-sqlite3@12.8.0__ioredis_a0a2be7525d559e696e64db570f075d2/node_modules/@nuxt/nitro-server/dist/runtime/utils/config';
export { queryCollection, queryCollectionSearchSections, queryCollectionNavigation, queryCollectionItemSurroundings } from '/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/nitro';
export { parseMarkdown } from '/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/parser';
export { stringifyMarkdown } from '/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxtjs+mdc@0.20.2_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/stringify';
export { defineI18nLocale, defineI18nConfig } from '/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/shared';
export { defineI18nLocaleDetector } from '/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/composables/server';
export { useTranslation } from '@intlify/h3';
export { getCookieLocale, getHeaderLanguage, getHeaderLanguages, getHeaderLocale, getHeaderLocales, getPathLocale, getQueryLocale, setCookieLocale, tryCookieLocale, tryHeaderLocale, tryHeaderLocales, tryPathLocale, tryQueryLocale } from '@intlify/utils/h3';

11
.nuxt/types/nitro-middleware.d.ts vendored Normal file
View File

@@ -0,0 +1,11 @@
export type MiddlewareKey = never
declare module 'nitropack/types' {
interface NitroRouteConfig {
appMiddleware?: MiddlewareKey | MiddlewareKey[] | Record<MiddlewareKey, boolean>
}
}
declare module 'nitropack' {
interface NitroRouteConfig {
appMiddleware?: MiddlewareKey | MiddlewareKey[] | Record<MiddlewareKey, boolean>
}
}

61
.nuxt/types/nitro-nuxt.d.ts vendored Normal file
View File

@@ -0,0 +1,61 @@
/// <reference path="app.config.d.ts" />
/// <reference path="runtime-config.d.ts" />
/// <reference types="/Users/gxwebsoft/VUE/jczxw-pc/node_modules/.pnpm/@nuxt+nitro-server@4.2.2_better-sqlite3@12.8.0_db0@0.3.4_better-sqlite3@12.8.0__ioredis_a0a2be7525d559e696e64db570f075d2/node_modules/@nuxt/nitro-server/dist/index.mjs" />
/// <reference path="nitro-middleware.d.ts" />
import type { RuntimeConfig } from 'nuxt/schema'
import type { H3Event } from 'h3'
import type { LogObject } from 'consola'
import type { NuxtIslandContext, NuxtIslandResponse, NuxtRenderHTMLContext } from 'nuxt/app'
declare module 'nitropack' {
interface NitroRuntimeConfigApp {
buildAssetsDir: string
cdnURL: string
}
interface NitroRuntimeConfig extends RuntimeConfig {}
interface NitroRouteConfig {
ssr?: boolean
noScripts?: boolean
/** @deprecated Use `noScripts` instead */
experimentalNoScripts?: boolean
}
interface NitroRouteRules {
ssr?: boolean
noScripts?: boolean
/** @deprecated Use `noScripts` instead */
experimentalNoScripts?: boolean
appMiddleware?: Record<string, boolean>
}
interface NitroRuntimeHooks {
'dev:ssr-logs': (ctx: { logs: LogObject[], path: string }) => void | Promise<void>
'render:html': (htmlContext: NuxtRenderHTMLContext, context: { event: H3Event }) => void | Promise<void>
'render:island': (islandResponse: NuxtIslandResponse, context: { event: H3Event, islandContext: NuxtIslandContext }) => void | Promise<void>
}
}
declare module 'nitropack/types' {
interface NitroRuntimeConfigApp {
buildAssetsDir: string
cdnURL: string
}
interface NitroRuntimeConfig extends RuntimeConfig {}
interface NitroRouteConfig {
ssr?: boolean
noScripts?: boolean
/** @deprecated Use `noScripts` instead */
experimentalNoScripts?: boolean
}
interface NitroRouteRules {
ssr?: boolean
noScripts?: boolean
/** @deprecated Use `noScripts` instead */
experimentalNoScripts?: boolean
appMiddleware?: Record<string, boolean>
}
interface NitroRuntimeHooks {
'dev:ssr-logs': (ctx: { logs: LogObject[], path: string }) => void | Promise<void>
'render:html': (htmlContext: NuxtRenderHTMLContext, context: { event: H3Event }) => void | Promise<void>
'render:island': (islandResponse: NuxtIslandResponse, context: { event: H3Event, islandContext: NuxtIslandContext }) => void | Promise<void>
}
}

50
.nuxt/types/nitro-routes.d.ts vendored Normal file
View File

@@ -0,0 +1,50 @@
// Generated by nitro
import type { Serialize, Simplify } from "nitropack/types";
declare module "nitropack/types" {
type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T
interface InternalApi {
'/api/_app/**:path': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../server/api/_app/[...path]').default>>>>
}
'/api/_file/**:path': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../server/api/_file/[...path]').default>>>>
}
'/api/_modules/**:path': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../server/api/_modules/[...path]').default>>>>
}
'/api/_server/**:path': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../server/api/_server/[...path]').default>>>>
}
'/api/cms/**:path': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../server/api/cms/[...path]').default>>>>
}
'/api/cms/cms-website/getSiteInfo': {
'get': Simplify<Serialize<Awaited<ReturnType<typeof import('../../server/api/cms/cms-website/getSiteInfo.get').default>>>>
}
'/api/cms/cms-website/pageAll': {
'get': Simplify<Serialize<Awaited<ReturnType<typeof import('../../server/api/cms/cms-website/pageAll.get').default>>>>
}
'/__nuxt_error': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_better-sqlite3@12.8.0_db0@0.3.4_better-sqlite3@12.8.0__ioredis_a0a2be7525d559e696e64db570f075d2/node_modules/@nuxt/nitro-server/dist/runtime/handlers/renderer').default>>>>
}
'/__nuxt_island/**': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../server/#internal/nuxt/island-renderer').default>>>>
}
'/__nuxt_content/docs/sql_dump.txt': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/presets/node/database-handler').default>>>>
}
'/__nuxt_content/info/sql_dump.txt': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/presets/node/database-handler').default>>>>
}
'/_i18n/:hash/:locale/messages.json': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/server/routes/messages').default>>>>
}
'/__nuxt_content/docs/query': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/api/query.post').default>>>>
}
'/__nuxt_content/info/query': {
'default': Simplify<Serialize<Awaited<ReturnType<typeof import('../../node_modules/.pnpm/@nuxt+content@3.12.0_better-sqlite3@12.8.0_magicast@0.5.1/node_modules/@nuxt/content/dist/runtime/api/query.post').default>>>>
}
}
}
export {}

3
.nuxt/types/nitro.d.ts vendored Normal file
View File

@@ -0,0 +1,3 @@
/// <reference path="./nitro-routes.d.ts" />
/// <reference path="./nitro-config.d.ts" />
/// <reference path="./nitro-imports.d.ts" />

38
.nuxt/types/plugins.d.ts vendored Normal file
View File

@@ -0,0 +1,38 @@
// Generated by Nuxt'
import type { Plugin } from '#app'
type Decorate<T extends Record<string, any>> = { [K in keyof T as K extends string ? `$${K}` : never]: T[K] }
type InjectionType<A extends Plugin> = A extends {default: Plugin<infer T>} ? Decorate<T> : unknown
type NuxtAppInjections =
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/plugins/revive-payload.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/head/runtime/plugins/unhead.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/pages/runtime/plugins/router.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/plugins/payload.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/plugins/navigation-repaint.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/plugins/revive-payload.server.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/app/plugins/chunk-reload.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/pages/runtime/plugins/prefetch.client.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/plugins/switch-locale-path-ssr.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/plugins/route-locale-detect.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/plugins/preload.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/plugins/dev.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/plugins/i18n.js")> &
InjectionType<typeof import("../../app/plugins/antd")> &
InjectionType<typeof import("../../node_modules/.pnpm/nuxt@4.2.2_@parcel+watcher@2.5.1_@types+node@25.0.3_@vue+compiler-sfc@3.5.26_better-sql_ac6a4d57fe59bc83c2ad1951937f70f6/node_modules/nuxt/dist/pages/runtime/plugins/prerender.server.js")> &
InjectionType<typeof import("../../node_modules/.pnpm/@nuxtjs+i18n@10.2.4_@emnapi+core@1.7.1_@emnapi+runtime@1.7.1_@vue+compiler-dom@3.5.26_d_a5323b549840adcc2cb57cfe4f807173/node_modules/@nuxtjs/i18n/dist/runtime/plugins/ssg-detect.js")>
declare module '#app' {
interface NuxtApp extends NuxtAppInjections { }
interface NuxtAppLiterals {
pluginName: 'nuxt:revive-payload:client' | 'nuxt:head' | 'nuxt:router' | 'nuxt:payload' | 'nuxt:revive-payload:server' | 'nuxt:chunk-reload' | 'nuxt:global-components' | 'nuxt:prefetch' | 'i18n:plugin:switch-locale-path-ssr' | 'i18n:plugin:route-locale-detect' | 'i18n:plugin:preload' | 'i18n:dev' | 'i18n:plugin' | 'i18n:plugin:ssg-detect'
}
}
declare module 'vue' {
interface ComponentCustomProperties extends NuxtAppInjections { }
}
export { }

184
.nuxt/types/runtime-config.d.ts vendored Normal file
View File

@@ -0,0 +1,184 @@
import { RuntimeConfig as UserRuntimeConfig, PublicRuntimeConfig as UserPublicRuntimeConfig } from 'nuxt/schema'
interface SharedRuntimeConfig {
app: {
buildId: string,
baseURL: string,
buildAssetsDir: string,
cdnURL: string,
},
nitro: {
envPrefix: string,
},
content: {
databaseVersion: string,
version: string,
database: {
type: string,
filename: string,
},
localDatabase: {
type: string,
filename: string,
},
integrityCheck: boolean,
},
}
interface SharedPublicRuntimeConfig {
tenantId: string,
serverApiBase: string,
modulesApiBase: string,
appApiBase: string,
mpApiBase: string,
fileServerBase: string,
templateId: string,
ServerApi: string,
ApiBase: string,
TenantId: string,
mdc: {
components: {
prose: boolean,
map: any,
customElements: Array<any>,
},
headings: {
anchorLinks: {
h1: boolean,
h2: boolean,
h3: boolean,
h4: boolean,
h5: boolean,
h6: boolean,
},
},
highlight: {
noApiRoute: boolean,
highlighter: string,
theme: {
default: string,
dark: string,
},
shikiEngine: string,
langs: Array<string>,
},
},
content: {
wsUrl: string,
},
i18n: {
baseUrl: string,
defaultLocale: string,
rootRedirect: any,
redirectStatusCode: number,
skipSettingLocaleOnNavigate: boolean,
locales: Array<{
}>,
detectBrowserLanguage: {
alwaysRedirect: boolean,
cookieCrossOrigin: boolean,
cookieDomain: any,
cookieKey: string,
cookieSecure: boolean,
fallbackLocale: string,
redirectOn: string,
useCookie: boolean,
},
experimental: {
localeDetector: string,
typedPages: boolean,
typedOptionsAndMessages: boolean,
alternateLinkCanonicalQueries: boolean,
devCache: boolean,
cacheLifetime: any,
stripMessagesPayload: boolean,
preload: boolean,
strictSeo: boolean,
nitroContextDetection: boolean,
httpCacheDuration: number,
},
domainLocales: {
"zh-CN": {
domain: string,
},
en: {
domain: string,
},
},
},
}
declare module '@nuxt/schema' {
interface RuntimeConfig extends UserRuntimeConfig {}
interface PublicRuntimeConfig extends UserPublicRuntimeConfig {}
}
declare module 'nuxt/schema' {
interface RuntimeConfig extends SharedRuntimeConfig {}
interface PublicRuntimeConfig extends SharedPublicRuntimeConfig {}
}
declare module 'vue' {
interface ComponentCustomProperties {
$config: UserRuntimeConfig
}
}

0
.nuxt/types/vue-shim.d.ts vendored Normal file
View File

33
Dockerfile Normal file
View File

@@ -0,0 +1,33 @@
# syntax=docker/dockerfile:1.7
ARG NODE_VERSION=20.19.0
FROM node:${NODE_VERSION}-slim AS build
WORKDIR /app
ENV NODE_ENV=development \
NUXT_TELEMETRY_DISABLED=1
COPY package.json package-lock.json ./
COPY scripts ./scripts
RUN npm ci --ignore-scripts
COPY . .
RUN npm rebuild
RUN npm run postinstall
RUN npm run build
FROM node:${NODE_VERSION}-slim AS runner
WORKDIR /app
ENV NODE_ENV=production \
HOST=0.0.0.0 \
PORT=3000 \
NUXT_TELEMETRY_DISABLED=1
COPY --from=build /app/.output ./.output
EXPOSE 3000
CMD ["node", ".output/server/index.mjs"]

193
README.md Normal file
View File

@@ -0,0 +1,193 @@
<div align="center">
<h1>🌐 Websopy Admin</h1>
<p><strong>葳溯科技 · 基于 Vue 3 + Ant Design Vue 的企业级后台管理系统</strong></p>
<p>
<img src="https://img.shields.io/badge/Vue-3.x-4FC08D" alt="Vue">
<img src="https://img.shields.io/badge/Ant%20Design%20Vue-3.x-1890FF" alt="Ant Design Vue">
<img src="https://img.shields.io/badge/TypeScript-4.x-3178C6" alt="TypeScript">
<img src="https://img.shields.io/badge/Vite-4.x-646CFF" alt="Vite">
<img src="https://img.shields.io/badge/License-MIT-blue" alt="License">
</p>
</div>
## 📖 项目简介
Websopy Admin葳溯科技是一个基于 **Vue 3 + Ant Design Vue** 构建的现代化企业级后台管理系统,采用最新的前端技术栈:
- **前端框架**Vue 3 + TypeScript + Vite
- **UI 组件库**Ant Design Vue 3.x
- **富文本编辑器**TinyMCE支持图片/视频上传、一键排版)
- **图表库**ECharts + G2
- **工具库**Lodash、Day.js、CryptoJS
## 项目演示
| 后台管理系统 | https://mp.websoft.top |
|--------|-------------------------------------------------------------------------------------------------------------------------------------|
| 账号密码 | [立即注册](https://mp.websoft.top/register/?inviteCode=github) |
| 关注公众号 | ![输入图片说明](https://oss.wsdns.cn/20240327/f1175cc5aae741d3af05484747270bd5.jpeg?x-oss-process=image/resize,m_fixed,w_150/quality,Q_90) |
## 🛠️ 技术栈
### 核心技术
| 技术 | 版本 | 说明 |
|------|------|------|
| Vue | 3.x | 渐进式 JavaScript 框架 |
| TypeScript | 4.x | JavaScript 的超集 |
| Vite | 4.x | 下一代前端构建工具 |
| Ant Design Vue | 3.2.11 | 企业级 UI 设计语言 |
| EleAdmin Pro | 1.10.1 | 企业级组件库 |
### 功能组件
- **TinyMCE** - 富文本编辑器,支持图片/视频上传
- **ECharts** - 数据可视化图表库
- **CropperJS** - 图片裁剪组件
- **ExcelJS** - Excel 文件处理
- **Ali OSS** - 阿里云对象存储
## 📋 环境要求
### 基础环境
- 🟢 **Node.js 16+**
- 📦 **npm 8+ / yarn 1.22+**
- 🌐 **现代浏览器**Chrome 63+、Firefox、Safari、Edge
### 开发工具
- **推荐**VS Code / WebStorm
- **插件**Vetur / VolarVue 3 支持)
## 🚀 快速开始
### 1. 克隆项目
```bash
git clone https://github.com/websoft-top/mp-vue.git
cd mp-vue
```
### 2. 安装依赖
```bash
# 使用 npm
npm install
# 或使用 yarn
yarn install
```
### 3. 配置环境变量
```bash
# 复制环境变量示例文件
cp .env.example .env
# 编辑 .env 文件,填入您的配置信息
# 注意:请不要将 .env 文件提交到版本控制系统
```
### 4. 启动开发服务器
```bash
# 开发模式
npm run dev
# 或
yarn dev
```
访问 `http://localhost:3000` 即可看到管理后台。
### 5. 构建生产版本
```bash
# 生产构建
npm run build
# 预览构建结果
npm run serve
```
## 🧩 常见问题
### ERROR: EMFILE: too many open files, watch
- 项目已在 `nuxt.config.ts` 中配置忽略 `node_modules/.nuxt/.output` 等目录以减少监听数量。
- 若仍出现该错误,可在启动前临时提高文件句柄上限后重试:`ulimit -n 8192 && npm run dev`
## ⚙️ 环境变量配置
项目使用环境变量来管理敏感信息和配置。请按照以下步骤配置:
### 必需配置
```bash
# API 配置
VITE_API_URL=https://your-api.com/api # 后端 API 地址
VITE_SERVER_API_URL=https://your-server.com/api # 服务端 API 地址
VITE_FILE_SERVER=https://your-file-server.com # 文件服务器地址
# 应用配置
VITE_APP_SECRET=your_app_secret # 应用密钥
VITE_TENANT_ID=your_tenant_id # 租户 ID
```
### 可选配置
```bash
# 高德地图 (如需使用地图功能)
VITE_MAP_KEY=your_map_key # 高德地图 Key
VITE_MAP_CODE=your_map_security_code # 高德地图安全密钥
# WebSoftAdmin 授权 (商业版功能)
VITE_LICENSE_CODE=your_license_code # 授权码
```
### 获取配置信息
- **高德地图密钥**:访问 [高德开放平台](https://lbs.amap.com/) 申请
- **WebSoftAdmin 授权码**:联系 [官方网站](https://websoft.top/) 获取
- **其他 API 配置**:根据您的后端服务配置
## 🎯 核心功能
### 📝 内容管理系统
- **文章管理**:支持富文本编辑、图片/视频上传
- **一键排版**智能文章格式优化包含10种专业排版样式
- **媒体库**:图片/视频文件管理,支持分组和搜索
- **首行缩进**:中文段落格式智能切换
### 🛒 商城管理
- **商品管理**:商品信息编辑、规格设置
- **订单管理**:订单流程跟踪
- **库存管理**:商品库存监控
### 👥 用户权限
- **用户管理**:用户信息维护
- **角色权限**:基于角色的访问控制
- **菜单管理**:动态菜单配置
## 🎨 富文本编辑器特色功能
### 📸 媒体上传
- **图片上传**:支持拖拽、粘贴、文件选择
- **视频上传**:支持多种视频格式
- **媒体库**:统一的媒体文件管理
- **OSS 存储**:阿里云对象存储集成
### ✨ 智能排版
- **一键排版**10种专业排版优化
- **首行缩进**:中文段落格式切换
- **样式优化**:标题、段落、列表、表格等元素美化
- **响应式**:适配不同屏幕尺寸
## 🏗️ 项目结构
```
src/
├── components/ # 公共组件
├── views/ # 页面组件
│ ├── cms/ # 内容管理
│ ├── shop/ # 商城管理
│ └── system/ # 系统管理
├── router/ # 路由配置
├── store/ # 状态管理
├── utils/ # 工具函数
└── assets/ # 静态资源
```

View File

@@ -0,0 +1,72 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { AppApiKey, AppApiKeyParam } from './model'
import { APP_API_URL } from '@/config/setting'
const BASE = APP_API_URL + '/apikey'
/** 分页查询 API Key - 直接用基础路径,后端 @GetMapping 支持分页参数 */
export async function pageAppApiKey(params: AppApiKeyParam) {
const res = await request.get<ApiResult<PageResult<AppApiKey>>>(BASE, { params })
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 查询全部 API Key */
export async function listAppApiKey(params?: AppApiKeyParam) {
const res = await request.get<ApiResult<AppApiKey[]>>(BASE, { params })
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 创建 API Key */
export async function createAppApiKey(data: {
name: string
expireTime?: string
scopes?: string
remark?: string
}) {
const res = await request.post<ApiResult<AppApiKey>>(BASE, data)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 更新 API Key 状态 */
export async function updateAppApiKeyStatus(id: number, status: number) {
const res = await request.put<ApiResult<unknown>>(BASE + `/${id}/status?status=${status}`)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 删除 API Key */
export async function removeAppApiKey(id: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/' + id)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 获取 API Key 速率限制 */
export async function getApiRateLimits() {
const res = await request.get<ApiResult<{
plan: string
rps: number
dailyLimit: number
usedToday: number
remainingToday: number
}>>(BASE + '/rate-limits')
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取 API Key 统计 */
export async function getAppApiKeyStats() {
const res = await request.get<ApiResult<{
total: number
active: number
expired: number
disabled: number
totalUsage: number
}>>(BASE + '/stats')
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,31 @@
/** API Key 数据模型 */
export interface AppApiKey {
id: number
name: string
apiKey: string
keyPrefix: string
status: number // 0=正常, 1=禁用
scopes?: string
expireTime?: string
lastUsedAt?: string
usageCount: number
remark?: string
createTime: string
updateTime: string
}
/** API Key 查询参数 */
export interface AppApiKeyParam {
page?: number
limit?: number // 与后端 BaseParam 一致
name?: string
status?: number
}
/** 分页结果 - 后端 MyBatis-Plus 返回 records */
export interface AppApiKeyPageResult {
records: AppApiKey[]
total: number
size: number
current: number
}

View File

@@ -0,0 +1,120 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { AppConfig, AppConfigParam, BatchSaveRequest } from './model';
import {APP_API_URL} from '@/config/setting';
/**
* 分页查询应用配置
*/
export async function pageAppConfig(params: AppConfigParam) {
const res = await request.get<ApiResult<PageResult<AppConfig>>>(
APP_API_URL + '/app-config/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 获取应用配置列表
*/
export async function listAppConfig(params?: AppConfigParam) {
const res = await request.get<ApiResult<AppConfig[]>>(
APP_API_URL + '/app-config',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据应用ID获取配置映射
*/
export async function getConfigsMap(productId: number) {
const res = await request.get<ApiResult<Record<string, any>>>(
APP_API_URL + `/app/app-config/map/${productId}`
);
if (res.data.code === 0) {
return res.data.data || {};
}
return Promise.reject(new Error(res.data.message));
}
/**
* 获取单个配置值
*/
export async function getConfigValue(productId: number, configKey: string) {
const res = await request.get<ApiResult<string>>(
APP_API_URL + '/app-config/value',
{
params: { productId, configKey }
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 保存配置
*/
export async function saveAppConfig(data: AppConfig) {
const res = await request.post<ApiResult<void>>(
APP_API_URL + '/app-config',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量保存配置
*/
export async function batchSaveAppConfig(data: BatchSaveRequest) {
const res = await request.post<ApiResult<void>>(
APP_API_URL + '/app-config/batch',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 更新配置
*/
export async function updateAppConfig(data: AppConfig) {
const res = await request.put<ApiResult<void>>(
APP_API_URL + '/app-config',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除配置
*/
export async function deleteAppConfig(configId: number) {
const res = await request.delete<ApiResult<void>>(
APP_API_URL + `/app-config/${configId}`
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,66 @@
import type { PageParam } from '@/api';
import type { PageResult } from '@/api';
/**
* 应用配置
*/
export interface AppConfig {
configId?: number;
productId?: number;
configKey?: string;
configValue?: string;
configType?: string;
isEncrypted?: number;
isSecret?: number;
description?: string;
sortNumber?: number;
tenantId?: number;
createdTime?: string;
updatedTime?: string;
deleted?: number;
}
/**
* 应用配置查询参数
*/
export interface AppConfigParam extends PageParam {
configId?: number;
productId?: number;
configKey?: string;
configType?: string;
isSecret?: number;
}
/**
* 批量保存请求
*/
export interface BatchSaveRequest {
productId: number;
configs: AppConfig[];
}
/**
* 配置类型定义
*/
export interface ConfigType {
key: string;
name: string;
icon: string;
description: string;
configs: ConfigField[];
}
/**
* 配置字段定义
*/
export interface ConfigField {
key: string;
label: string;
type: 'input' | 'textarea' | 'number' | 'select' | 'switch' | 'password' | 'json';
required?: boolean;
placeholder?: string;
options?: Array<{ label: string; value: any }>;
defaultValue?: any;
description?: string;
secret?: boolean;
}

View File

@@ -0,0 +1,62 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { AppCredential, AppCredentialParam } from './model'
import {APP_API_URL} from '@/config/setting'
const BASE = APP_API_URL + '/app-credential'
/** 分页查询凭证 */
export async function pageAppCredential(params: AppCredentialParam) {
const res = await request.get<ApiResult<PageResult<AppCredential>>>(BASE + '/page', { params })
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 查询全部凭证 */
export async function listAppCredential(params?: AppCredentialParam) {
const res = await request.get<ApiResult<AppCredential[]>>(BASE, { params })
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 根据ID查询凭证 */
export async function getAppCredential(id: number) {
const res = await request.get<ApiResult<AppCredential>>(BASE + '/' + id)
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 创建凭证(自动生成 AppID/AppSecret仅此次返回明文 */
export async function createAppCredential(data: AppCredential) {
const res = await request.post<ApiResult<AppCredential>>(BASE, data)
if (res.data.code === 0) return { message: res.data.message, data: res.data.data }
return Promise.reject(new Error(res.data.message))
}
/** 修改凭证信息(不含密钥) */
export async function updateAppCredential(data: AppCredential) {
const res = await request.put<ApiResult<unknown>>(BASE, data)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 重置 AppSecret */
export async function resetAppCredentialSecret(id: number) {
const res = await request.post<ApiResult<AppCredential>>(BASE + '/resetSecret/' + id)
if (res.data.code === 0) return { message: res.data.message, data: res.data.data }
return Promise.reject(new Error(res.data.message))
}
/** 禁用/启用凭证 */
export async function updateAppCredentialStatus(id: number, status: number) {
const res = await request.put<ApiResult<unknown>>(BASE + `/status/${id}/${status}`)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 删除凭证 */
export async function removeAppCredential(id: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/' + id)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,36 @@
import type { PageParam } from '@/api'
export interface AppCredential {
id?: number
/** 关联应用IDAppProduct.productId 的字符串形式),用于显示为 AppID */
appId?: string
/** OAuth Client ID格式app_xxxxxxxxxxxx */
clientId?: string
/** OAuth Client Secret */
clientSecret?: string
name?: string
type?: string
scopes?: string
expireTime?: string
lastUsedAt?: string
remark?: string
sortNumber?: number
status?: number
deleted?: number
userId?: number
tenantId?: number
createTime?: string
updateTime?: string
// 关联字段
productName?: string
productCode?: string
icon?: string
}
export interface AppCredentialParam extends PageParam {
appId?: string
name?: string
clientId?: string
type?: string
status?: number
}

View File

@@ -0,0 +1,43 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { AppEvent, AppEventParam } from './model'
import {APP_API_URL} from '@/config/setting'
const BASE = APP_API_URL + '/app-event'
/** 分页查询动态 */
export async function pageAppEvent(params: AppEventParam) {
const res = await request.get<ApiResult<PageResult<AppEvent>>>(BASE + '/page', { params })
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 查询全部动态 */
export async function listAppEvent(params?: AppEventParam) {
const res = await request.get<ApiResult<AppEvent[]>>(BASE, { params })
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取应用最新一条动态 */
export async function getLatestAppEvent(productId: number) {
const res = await request.get<ApiResult<AppEvent>>(BASE + '/latest/' + productId)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 记录一条操作动态(静默:失败不抛出) */
export async function addAppEvent(data: AppEvent): Promise<void> {
try {
await request.post<ApiResult<unknown>>(BASE, data)
} catch {
// 动态记录失败不影响主流程,静默处理
}
}
/** 清空应用所有动态 */
export async function clearAppEvents(productId: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/clear/' + productId)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,26 @@
import type { PageParam } from '@/api'
export interface AppEvent {
id?: number
appId?: number
eventType?: string
title?: string
content?: string
operatorId?: number
operator?: string
refId?: number
refType?: string
extra?: string
sortNumber?: number
status?: number
userId?: number
tenantId?: number
createTime?: string
updateTime?: string
}
export interface AppEventParam extends PageParam {
appId?: number
eventType?: string
operatorId?: number
}

View File

@@ -0,0 +1,222 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { AppProduct, AppProductParam } from './model'
import { APP_API_URL } from '@/config/setting'
const BASE = APP_API_URL + '/product'
/** 统一成功码判断:兼容 code=0旧约定和 code=200Spring Boot 默认) */
const ok = (code: number) => code === 0 || code === 200
// ============ 基础 CRUD ============
/** 分页查询应用产品 */
export async function pageAppProduct(params: AppProductParam) {
const res = await request.get<ApiResult<PageResult<AppProduct>>>(BASE + '/page', { params })
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 分页查询应用产品(别名,兼容 cmsWebsite 接口) */
export const page = pageAppProduct
/** 分页查询应用产品(别名,兼容旧代码) */
export async function pageAppProductAll(params: AppProductParam) {
return pageAppProduct(params)
}
/** 获取应用产品详情 */
export async function getAppProduct(productId: number) {
const res = await request.get<ApiResult<AppProduct>>(BASE + '/detail/' + productId)
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取应用产品详情ByCode */
export async function getAppProductByCode(code: string) {
const res = await request.get<ApiResult<AppProduct>>(BASE + '/info/' + code)
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 新增应用产品 */
export async function addAppProduct(data: Partial<AppProduct>) {
const res = await request.post<ApiResult<AppProduct>>(BASE + '/create', data)
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 修改应用产品 */
export async function updateAppProduct(data: Partial<AppProduct>) {
const res = await request.put<ApiResult<unknown>>(BASE + '/update', data)
if (ok(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 删除应用产品 */
export async function removeAppProduct(id: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/delete/' + id)
if (ok(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
// ============ 开发者相关 ============
/** 获取开发者应用列表 */
export async function getDeveloperApps(params?: AppProductParam) {
const res = await request.get<ApiResult<AppProduct[]>>(BASE + '/list', { params })
if (ok(res.data.code) && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 分页查询我的应用(创建者) */
export async function getMyApps(params: { page?: number; limit?: number }) {
const res = await request.get<ApiResult<PageResult<AppProduct>>>(BASE + '/my/page', { params })
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 分页查询我参与的应用 */
export async function getJoinedApps(params: { page?: number; limit?: number }) {
const res = await request.get<ApiResult<PageResult<AppProduct>>>(BASE + '/joined/page', { params })
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 开发者提交审核 */
export async function submitReview(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/submit/' + id)
if (ok(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 提交发布审核(别名) */
export const submitPublishReview = submitReview
/** 撤回审核申请 */
export async function withdrawPublishReview(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/withdraw/' + id)
if (ok(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 开发者下架应用 */
export async function deprecated(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/unpublish/' + id)
if (ok(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 下架应用(别名) */
export const unpublishAppProduct = deprecated
// ============ 市场相关 ============
/** 获取市场应用列表 */
export async function getMarketApps(params: AppProductParam) {
const res = await request.get<ApiResult<PageResult<AppProduct>>>(BASE + '/market/page', { params })
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取市场应用详情 */
export async function getMarketApp(productId: number) {
const res = await request.get<ApiResult<AppProduct>>(BASE + '/detail/' + productId)
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
// ============ 管理后台 ============
/** 获取待审核列表 */
export async function getPendingReviewApps(params: AppProductParam) {
const res = await request.get<ApiResult<PageResult<AppProduct>>>(BASE + '/page', {
params: { ...params, publishStatus: 'pending_review' },
})
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 分页查询发布审核列表(别名) */
export const pagePublishReviews = getPendingReviewApps
/** 审核通过 */
export async function approve(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/approve/' + id)
if (ok(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 审核通过(别名) */
export const approvePublishReview = approve
/** 审核拒绝 */
export async function reject(id: number, reason: string) {
const res = await request.post<ApiResult<unknown>>(BASE + '/reject/' + id, null, { params: { reason } })
if (ok(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 审核拒绝(别名,接收对象参数) */
export async function rejectPublishReview(params: { productId: number; rejectReason: string }) {
return reject(params.productId, params.rejectReason)
}
// ============ 其他 ============
/** 按用户ID列表批量统计应用数量 */
export interface UserAppStats {
userId: number
totalCount: number
publishedCount: number
}
export async function getUserAppStats(userIds: number[]) {
const res = await request.post<ApiResult<UserAppStats[]>>(BASE + '/user-stats', userIds)
if (ok(res.data.code) && res.data.data) return res.data.data
return []
}
/** 获取全部应用(下拉框用) */
export async function getAllAppProduct() {
const res = await request.get<ApiResult<AppProduct[]>>(BASE + '/all')
if (ok(res.data.code) && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取当前用户可访问的应用列表(带角色信息,用于权限过滤) */
export async function getMyAccessibleApps() {
const res = await request.get<ApiResult<AppProduct[]>>(BASE + '/accessible')
if (ok(res.data.code) && res.data.data) return res.data.data
return []
}
/** 更新访问量 */
export async function updateClicks(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/view/' + id)
if (ok(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 记录应用访问(更新最近访问时间) */
export async function recordVisit(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/visit/' + id)
// 静默失败,不影响主流程
if (!ok(res.data.code)) {
console.warn('记录访问失败', res.data.message)
}
}
/** 收藏/取消收藏 */
export async function toggleLike(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/like/' + id)
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 重新生成密钥 */
export async function regenerateSecret(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/regenerateSecret/' + id)
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,187 @@
import type { PageParam } from '@/api'
import type { AppRole } from '../appUser/model'
export interface AppProduct {
productId?: number
productName?: string
productCode?: string
productSecret?: string
appType?: number
categoryId?: number
industryParent?: string
industryChild?: string
logo?: string
icon?: string
qrcode?: string
screenshots?: string
description?: string
content?: string
keywords?: string
domain?: string
prefix?: string
packageName?: string
homeUrl?: string
adminUrl?: string
apiUrl?: string
downloadUrl?: string
version?: string
edition?: string
minVersion?: string
priceType?: string
price?: number
linePrice?: number
renewPrice?: number
deliveryMethod?: number
chargingMethod?: number
subscriptionPeriod?: string
publishStatus?: string
publishTime?: string
reviewTime?: string
reviewerId?: number
rejectReason?: string
clicks?: number
installs?: number
downloads?: number
rating?: number
likes?: number
developer?: string
developerPhone?: string
developerEmail?: string
recommend?: number
official?: number
market?: number
showIndex?: number
searchEnabled?: number
templateId?: number
style?: string
config?: string
themeColor?: string
lang?: string
icpNo?: string
policeNo?: string
status?: number
statusText?: string
running?: number
expirationTime?: string
sortNumber?: number
deleted?: number
userId?: number
tenantId?: number
createTime?: string
updateTime?: string
/** 当前用户在该应用中的角色(仅 joined/accessible 查询返回) */
myRole?: AppRole
}
export interface AppProductParam extends PageParam {
appType?: number
categoryId?: number
publishStatus?: string
status?: number
keywords?: string
developer?: string
market?: number
official?: number
recommend?: number
userId?: number
tenantId?: number
}
// App Type 枚举
export const APP_TYPE = {
WEBSITE: 10,
WECHAT_MP: 20,
DOUYIN_MP: 30,
BAIDU_MP: 40,
ALIPAY_MP: 50,
ANDROID: 60,
IOS: 70,
MACOS: 80,
WINDOWS: 90,
PLUGIN: 100,
} as const
export type APP_TYPE_KEY = keyof typeof APP_TYPE
export const APP_TYPE_NAME: Record<number, string> = {
[APP_TYPE.WEBSITE]: '网站',
[APP_TYPE.WECHAT_MP]: '微信小程序',
[APP_TYPE.DOUYIN_MP]: '抖音小程序',
[APP_TYPE.BAIDU_MP]: '百度小程序',
[APP_TYPE.ALIPAY_MP]: '支付宝小程序',
[APP_TYPE.ANDROID]: 'Android APP',
[APP_TYPE.IOS]: 'iOS APP',
[APP_TYPE.MACOS]: 'macOS 应用',
[APP_TYPE.WINDOWS]: 'Windows 应用',
[APP_TYPE.PLUGIN]: '插件',
}
// Publish Status 枚举
export const PUBLISH_STATUS = {
DEVELOPING: 'developing',
PENDING_REVIEW: 'pending_review',
PUBLISHED: 'published',
REJECTED: 'rejected',
DEPRECATED: 'deprecated',
} as const
export type PUBLISH_STATUS_KEY = keyof typeof PUBLISH_STATUS
export const PUBLISH_STATUS_NAME: Record<string, string> = {
[PUBLISH_STATUS.DEVELOPING]: '开发中',
[PUBLISH_STATUS.PENDING_REVIEW]: '待审核',
[PUBLISH_STATUS.PUBLISHED]: '已上架',
[PUBLISH_STATUS.REJECTED]: '审核未通过',
[PUBLISH_STATUS.DEPRECATED]: '已下架',
}
// Price Type 枚举
export const PRICE_TYPE = {
FREE: 'free',
ONE_TIME: 'one_time',
SUBSCRIPTION: 'subscription',
} as const
export type PRICE_TYPE_KEY = keyof typeof PRICE_TYPE
export const PRICE_TYPE_NAME: Record<string, string> = {
[PRICE_TYPE.FREE]: '免费',
[PRICE_TYPE.ONE_TIME]: '一次性',
[PRICE_TYPE.SUBSCRIPTION]: '订阅',
}
// Edition 枚举
export const EDITION = {
STANDARD: 'standard',
PROFESSIONAL: 'professional',
PERPETUAL: 'perpetual',
} as const
export type EDITION_KEY = keyof typeof EDITION
export const EDITION_NAME: Record<string, string> = {
[EDITION.STANDARD]: '标准版',
[EDITION.PROFESSIONAL]: '专业版',
[EDITION.PERPETUAL]: '永久授权',
}
// Status 枚举
export const STATUS = {
INACTIVE: 0,
RUNNING: 1,
MAINTENANCE: 2,
CLOSED: 3,
ARREARS: 4,
VIOLATION: 5,
} as const
export type STATUS_KEY = keyof typeof STATUS
export const STATUS_NAME: Record<number, string> = {
[STATUS.INACTIVE]: '未开通',
[STATUS.RUNNING]: '运行中',
[STATUS.MAINTENANCE]: '维护中',
[STATUS.CLOSED]: '已关闭',
[STATUS.ARREARS]: '已欠费',
[STATUS.VIOLATION]: '违规停机',
}

View File

@@ -0,0 +1,158 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { AppResource, AppResourceParam } from './model'
import {APP_API_URL} from '@/config/setting'
const BASE = APP_API_URL + '/developer-resource'
/** 分页查询资源 */
export async function pageAppResource(params: AppResourceParam) {
const res = await request.get<ApiResult<PageResult<AppResource>>>(BASE + '/page', { params })
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 查询资源列表(不分页) */
export async function listAppResource(params?: AppResourceParam) {
const res = await request.get<ApiResult<AppResource[]>>(BASE, { params })
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取资源详情 */
export async function getAppResource(resourceId: number) {
const res = await request.get<ApiResult<AppResource>>(BASE + '/' + resourceId)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 统计各类型资源数量 */
export async function statsAppResource(): Promise<Record<string, number>> {
const res = await request.get<ApiResult<Record<string, number>>>(BASE + '/stats')
if (res.data.code === 0) return res.data.data ?? {}
return Promise.reject(new Error(res.data.message))
}
/** 新增资源 */
export async function addAppResource(data: AppResource) {
const res = await request.post<ApiResult<AppResource>>(BASE, data)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 修改资源 */
export async function updateAppResource(data: AppResource) {
const res = await request.put<ApiResult<AppResource>>(BASE, data)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 删除资源 */
export async function removeAppResource(resourceId: number, code?: string) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/' + resourceId, code ? { data: { code } } : {})
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 批量删除资源 */
export async function removeBatchAppResource(ids: number[]) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/batch', { data: ids })
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 测试数据库连接 */
export async function testConnection(params: { host: string; port?: number; dbType?: string; username: string; password: string; dbName?: string }) {
const res = await request.post<ApiResult<{ success: boolean; message: string; detail?: string }>>(BASE + '/test-connection', params)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 测试 SSH 连接 */
export async function testSshConnection(params: { host: string; port?: number; username: string; password: string }) {
const res = await request.post<ApiResult<{ success: boolean; message: string; detail?: string }>>(BASE + '/test-ssh', params)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 重试创建数据库 */
export async function retryCreateDatabase(resourceId: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/retry-create-database/' + resourceId)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 重置数据库密码 */
export async function resetDatabasePassword(resourceId: number) {
const res = await request.post<ApiResult<{ password: string }>>(BASE + '/reset-password/' + resourceId)
if (res.data.code === 200 || res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 刷新存储桶信息 */
export async function refreshStorage(resourceId: number) {
const res = await request.post<ApiResult<{ usedBytes: number; objectCount: number }>>(BASE + '/refresh-storage/' + resourceId)
if (res.data.code === 200 || res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 检查域名 DNS 状态 */
export async function checkDomainDns(resourceId: number) {
const res = await request.post<ApiResult<{ status: 'ok' | 'error' | 'pending'; ip?: string; message?: string }>>(BASE + '/check-dns/' + resourceId)
if (res.data.code === 200 || res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 生成 Nginx 配置 */
export async function generateNginxConfig(resourceId: number) {
const res = await request.get<ApiResult<{ config: string }>>(BASE + '/nginx-config/' + resourceId)
if (res.data.code === 200 || res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取域名统计信息 */
export async function getDomainStats() {
const res = await request.get<ApiResult<{
total: number
icpCount: number
sslCount: number
expiringCount: number
errorCount: number
}>>(BASE + '/domain-stats')
if (res.data.code === 200 || res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 批量导入域名 */
export async function importDomains(data: { domains: Array<Partial<AppResource>> }) {
const res = await request.post<ApiResult<{ success: number; failed: number; errors: string[] }>>(BASE + '/import-domains', data)
if (res.data.code === 200 || res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 导出域名列表 */
export async function exportDomains(params?: AppResourceParam) {
const res = await request.get(BASE + '/export-domains', { params, responseType: 'blob' })
return res.data
}
/** 获取1Panel服务器状态 */
export interface ServerStatus {
cpu: string // CPU 使用率 %
memory: string // 内存使用率 %
memoryUsed: string // 内存已用
memoryTotal: string // 内存总量
disk: string // 磁盘使用率 %
diskUsed: string // 磁盘已用
diskTotal: string // 磁盘总量
load: string // 系统负载
uptime: string // 运行时间
online: number // 在线状态 1=在线 0=离线
message?: string // 错误信息
}
export async function getServerStatus(resourceId: number): Promise<ServerStatus> {
const res = await request.get<ApiResult<ServerStatus>>(BASE + '/server-status/' + resourceId)
if (res.data.code === 200 || res.data.code === 0) return res.data.data!
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,156 @@
import type { PageParam } from '@/api'
/**
* 开发者资源
*/
export interface AppResource {
resourceId?: number
resourceType?: string // server | database | storage | domain | ssl
name?: string
provider?: string // tencent | aliyun | huawei | other
// 服务器
ip?: string
sshPort?: number // SSH 端口默认22
sshUsername?: string // SSH 用户名(用于远程执行命令)
sshPassword?: string // SSH 密码AES加密用于远程执行命令
mysqlPort?: number // MySQL 端口默认3306
pgPort?: number // PostgreSQL 端口默认5432
panelPort?: number // 1Panel 面板端口默认8888
panelUsername?: string // 1Panel 面板用户名
panelPassword?: string // 1Panel 面板密码AES加密
panelPath?: string // 1Panel 面板路径前缀(如 /abc123
adminUsername?: string // MySQL/PostgreSQL 管理员用户名(用于远程建库)
adminPassword?: string // MySQL/PostgreSQL 管理员密码AES加密用于远程建库
// 数据库
dbType?: string // MySQL | PostgreSQL | Redis | MongoDB
serverResourceId?: number // 关联服务器资源ID
host?: string
port?: number
dbUsername?: string
dbPassword?: string
// 云存储
region?: string
acl?: string // public-read | private
usedBytes?: number
// 域名
domain?: string
registrar?: string
icp?: boolean
icpNo?: string
sslBound?: boolean
sslResourceId?: number // 关联的 SSL 证书资源ID
sslCertName?: string // 关联的 SSL 证书名称
dnsRecords?: DnsRecord[] // DNS 记录列表
whoisInfo?: WhoisInfo // WHOIS 信息
autoRenew?: boolean // 是否自动续费
// 域名健康状态
dnsStatus?: 'ok' | 'error' | 'pending' | 'unknown' // DNS 解析状态
dnsIp?: string // DNS 解析到的 IP
healthStatus?: 'healthy' | 'warning' | 'error' | 'unknown' // 综合健康状态
healthCheckAt?: string // 最后健康检查时间
subDomains?: AppResource[] // 子域名列表
parentDomainId?: number // 父域名 ID用于子域名
isWildcard?: boolean // 是否通配符域名
serverResourceId?: number // 关联的服务器资源ID
serverName?: string // 关联的服务器名称
nginxConfig?: string // Nginx 配置
// SSL
certType?: string // DV | OV | EV
issuer?: string
privateKey?: string // 私钥AES加密存储
publicKey?: string // 公钥
certificate?: string // 证书内容/证书文件
certChain?: string // 证书链(中间证书)
algorithm?: string // 加密算法RSA/ECC
keyBits?: number // 密钥长度2048/4096等
// Git仓库
gitPath?: string // Git仓库路径如: websopy/core
gitCloneUrl?: string // Git Clone URL
gitWebUrl?: string // Git Web访问URLGitea页面地址
gitAccessLevel?: string // Git权限级别: read/write/admin
// 云存储凭证
credentialId?: number // 关联的云账号凭证ID
// 通用
status?: string // running | stopped | expired | pending
appId?: number
productName?: string
expireAt?: string
remark?: string
userId?: number
tenantId?: number
deleted?: number
createTime?: string
updateTime?: string
// ─── 协作权限字段 ────────────────────────────────────────────
/**
* 资源所有者 userId创建者
* 后端在创建时自动设置,前端只读
*/
ownerUserId?: number
/**
* 当前访问者对该资源的权限级别(后端计算,前端只读)
* 0 - 无权限
* 1 - 基础查看(名称/IP/端口/状态,所有团队成员)
* 2 - 连接查看(用户名、连接方式,技术负责人)
* 3 - 完全权限(包含密码/私钥仅资源Owner
*/
accessLevel?: 0 | 1 | 2 | 3
/**
* 敏感字段是否为脱敏占位符(后端返回 "******" 表示已脱敏)
*/
isMasked?: boolean
/** 是否是资源创建者(前端根据 ownerUserId vs 当前 UserId 计算) */
isOwner?: boolean
}
/**
* DNS 记录
*/
export interface DnsRecord {
type: string // A, AAAA, CNAME, MX, TXT, NS
name: string
value: string
ttl?: number
priority?: number
}
/**
* WHOIS 信息
*/
export interface WhoisInfo {
registrar?: string
creationDate?: string
expirationDate?: string
updatedDate?: string
nameServers?: string[]
status?: string[]
}
/**
* 资源查询参数
*/
export interface AppResourceParam extends PageParam {
resourceId?: number
resourceType?: string
appId?: number
provider?: string
status?: string
userId?: number
tenantId?: number
keywords?: string
icp?: boolean
sslBound?: boolean
}

View File

@@ -0,0 +1,110 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { AppUser, AppUserParam, CheckAccessResult } from './model'
import { APP_API_URL } from '@/config/setting'
const BASE = APP_API_URL + '/app-user'
type InviteApiItem = AppUser & {
appName?: string
app_name?: string
product_name?: string
appIcon?: string
inviterName?: string
inviter_name?: string
productCode?: string
product_code?: string
}
function normalizeInvite(invite: InviteApiItem): AppUser {
return {
...invite,
productName: invite.productName || invite.appName || invite.product_name || invite.app_name,
productCode: invite.productCode || invite.product_code,
icon: invite.icon || invite.appIcon || invite.avatar,
username: invite.username || invite.inviterName || invite.inviter_name || invite.nickname
}
}
/** 分页查询成员 */
export async function pageAppUser(params: AppUserParam) {
const res = await request.get<ApiResult<PageResult<AppUser>>>(BASE + '/page', { params })
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 查询全部成员 */
export async function listAppUser(params?: AppUserParam) {
const res = await request.get<ApiResult<AppUser[]>>(BASE, { params })
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 邀请成员userId 或 phone 二选一) */
export async function inviteAppUser(data: { productId: number; userId?: number; phone?: string; role?: string }) {
const res = await request.post<ApiResult<AppUser>>(BASE + '/invite', data)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 修改成员角色 */
export async function updateAppUserRole(id: number, role: string) {
const res = await request.put<ApiResult<unknown>>(BASE + `/role/${id}/${role}`)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 删除成员 */
export async function removeAppUser(id: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/' + id)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
// ============ 邀请确认相关 ============
/** 查询当前用户的待确认邀请列表 */
export async function listPendingInvites() {
const res = await request.get<ApiResult<InviteApiItem[]>>(BASE + '/invites/pending')
const { code, data, message } = res.data
if (code === 0 || code === 200) {
return Array.isArray(data) ? data.map(normalizeInvite) : []
}
return Promise.reject(new Error(message))
}
/** 统计当前用户的待确认邀请数量 */
export async function countPendingInvites() {
const res = await request.get<ApiResult<{ count: number }>>(BASE + '/invites/pending/count')
const { code, data, message } = res.data
if ((code === 0 || code === 200) && data) return data.count
return Promise.reject(new Error(message))
}
/** 接受邀请 */
export async function acceptInvite(inviteId: number) {
const res = await request.post<ApiResult<unknown>>(BASE + `/invites/${inviteId}/accept`)
if (res.data.code === 0 || res.data.code === 200) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 拒绝邀请 */
export async function rejectInvite(inviteId: number) {
const res = await request.post<ApiResult<unknown>>(BASE + `/invites/${inviteId}/reject`)
if (res.data.code === 0 || res.data.code === 200) return res.data.message
return Promise.reject(new Error(res.data.message))
}
// ============ 权限相关 ============
/**
* 检查当前用户是否有开发者中心访问权限
* 返回accessible是否有权限、isPlatformDeveloper是否平台级开发者、apps可访问应用列表
*/
export async function checkAppAccess() {
const res = await request.get<ApiResult<CheckAccessResult>>(BASE + '/check-access')
if (res.data.code === 0 && res.data.data) return res.data.data
// 兼容 code=200
if (res.data.code === 200 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,54 @@
import type { PageParam } from '@/api'
/** 应用成员角色 */
export type AppRole = 'owner' | 'admin' | 'developer' | 'viewer'
export interface AppUser {
id?: number
appId?: number
userId?: number
username?: string
avatar?: string
role?: AppRole
inviteBy?: number
inviteTime?: string
inviteExpireTime?: string
sortNumber?: number
status?: number
inviteStatus?: number // 0-正常(直接加入), 1-待确认, 2-已拒绝
tenantId?: number
createTime?: string
updateTime?: string
// 关联字段(来自 sys_user
nickname?: string
userAvatar?: string
phone?: string
// 关联字段(来自 app_product
productName?: string
productCode?: string
icon?: string
}
export interface AppUserParam extends PageParam {
appId?: number
userId?: number
role?: string
status?: number
username?: string
}
/** 用户在某应用中的权限信息check-access / accessible 接口返回) */
export interface AppPermissionInfo {
appId: number
productName: string
productCode?: string
icon?: string
role: AppRole
}
/** check-access 接口返回 */
export interface CheckAccessResult {
accessible: boolean
isPlatformDeveloper: boolean
apps?: AppPermissionInfo[]
}

View File

@@ -0,0 +1,62 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { AppVersion, AppVersionParam } from './model'
import {APP_API_URL} from '@/config/setting'
const BASE = APP_API_URL + '/app-version'
/** 分页查询版本 */
export async function pageAppVersion(params: AppVersionParam) {
const res = await request.get<ApiResult<PageResult<AppVersion>>>(BASE + '/page', { params })
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 查询全部版本 */
export async function listAppVersion(params?: AppVersionParam) {
const res = await request.get<ApiResult<AppVersion[]>>(BASE, { params })
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取当前版本 */
export async function getCurrentVersion(productId: number) {
const res = await request.get<ApiResult<AppVersion>>(BASE + '/current/' + productId)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 新增版本 */
export async function addAppVersion(data: AppVersion) {
const res = await request.post<ApiResult<unknown>>(BASE, data)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 修改版本 */
export async function updateAppVersion(data: AppVersion) {
const res = await request.put<ApiResult<unknown>>(BASE, data)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 发布版本 */
export async function publishAppVersion(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/publish/' + id)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 回滚到指定版本 */
export async function rollbackAppVersion(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/rollback/' + id)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 删除版本 */
export async function removeAppVersion(id: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/' + id)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,32 @@
import type { PageParam } from '@/api'
export interface AppVersion {
id?: number
appId?: number
versionNo?: string
versionName?: string
changelog?: string
packageUrl?: string
packageSize?: number
packageHash?: string
env?: string
status?: number
isCurrent?: boolean
publishBy?: number
publishTime?: string
remark?: string
sortNumber?: number
userId?: number
tenantId?: number
createTime?: string
updateTime?: string
// 关联字段
productName?: string
}
export interface AppVersionParam extends PageParam {
appId?: number
env?: string
status?: number
isCurrent?: boolean
}

View File

@@ -0,0 +1,58 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { AppArticle, AppArticleParam, AppArticleCount } from './model'
import { APP_API_URL } from '@/config/setting'
const BASE = APP_API_URL + '/article'
function isSuccess(code?: number) {
return code === 0 || code === 200
}
export async function pageAppArticle(params: AppArticleParam) {
const res = await request.get<ApiResult<PageResult<AppArticle>>>(BASE + '/page', { params })
if (isSuccess(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
export async function listAppArticle(params?: AppArticleParam) {
const res = await request.get<ApiResult<AppArticle[]>>(BASE, { params })
if (isSuccess(res.data.code) && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
export async function addAppArticle(data: AppArticle) {
const res = await request.post<ApiResult<unknown>>(BASE, data)
if (isSuccess(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
export async function updateAppArticle(data: AppArticle) {
const res = await request.put<ApiResult<unknown>>(BASE, data)
if (isSuccess(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
export async function removeAppArticle(id?: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/' + id)
if (isSuccess(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
export async function getAppArticle(id: number) {
const res = await request.get<ApiResult<AppArticle>>(BASE + '/' + id)
if (isSuccess(res.data.code) && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
export async function getAppArticleByCode(code: string) {
const res = await request.get<ApiResult<AppArticle>>(BASE + '/getByCode/' + code)
if (isSuccess(res.data.code) && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
export async function getAppArticleCount(params: AppArticleParam) {
const res = await request.get<ApiResult<AppArticleCount>>(BASE + '/data', { params })
if (isSuccess(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,43 @@
import type { PageParam } from '@/api'
export interface AppArticle {
articleId?: number
title?: string
type?: number
model?: string
code?: string
categoryId?: number
categoryName?: string
parentId?: number
image?: string
source?: string
overview?: string
content?: string
actualViews?: number
likes?: number
userId?: number
author?: string
recommend?: number
sortNumber?: number
status?: number
deleted?: number
tenantId?: number
createTime?: string
updateTime?: string
}
export interface AppArticleParam extends PageParam {
articleId?: number
model?: string
status?: number
categoryId?: number
recommend?: number
keywords?: string
tenantId?: number
}
export interface AppArticleCount {
totalNum?: number
publishedNum?: number
recommendNum?: number
}

View File

@@ -0,0 +1,46 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { AppArticleCategory, AppArticleCategoryParam } from './model'
import { APP_API_URL } from '@/config/setting'
const BASE = APP_API_URL + '/article-category'
function isSuccess(code?: number) {
return code === 0 || code === 200
}
export async function pageAppArticleCategory(params: AppArticleCategoryParam) {
const res = await request.get<ApiResult<PageResult<AppArticleCategory>>>(BASE + '/page', { params })
if (isSuccess(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
export async function listAppArticleCategory(params?: AppArticleCategoryParam) {
const res = await request.get<ApiResult<AppArticleCategory[]>>(BASE, { params })
if (isSuccess(res.data.code) && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
export async function addAppArticleCategory(data: AppArticleCategory) {
const res = await request.post<ApiResult<unknown>>(BASE, data)
if (isSuccess(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
export async function updateAppArticleCategory(data: AppArticleCategory) {
const res = await request.put<ApiResult<unknown>>(BASE, data)
if (isSuccess(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
export async function removeAppArticleCategory(id?: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/' + id)
if (isSuccess(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
export async function getAppArticleCategory(id: number) {
const res = await request.get<ApiResult<AppArticleCategory>>(BASE + '/' + id)
if (isSuccess(res.data.code) && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,33 @@
import type { PageParam } from '@/api'
export interface AppArticleCategory {
categoryId?: number
categoryCode?: string
title?: string
type?: number
image?: string
parentId?: number
path?: string
userId?: number
count?: number
sortNumber?: number
comments?: string
description?: string
hide?: number
recommend?: number
showIndex?: number
status?: number
deleted?: number
tenantId?: number
createTime?: string
updateTime?: string
value?: number
label?: string
}
export interface AppArticleCategoryParam extends PageParam {
categoryId?: number
status?: number
keywords?: string
tenantId?: number
}

307
app/api/app/cicd.ts Normal file
View File

@@ -0,0 +1,307 @@
import request from '@/utils/request'
// ========== 流水线 API ==========
/**
* 分页查询流水线
*/
export function pagePipeline(params?: {
page?: number
limit?: number
appId?: number
ciType?: string
enabled?: boolean
}) {
return request.get<{
code: number
message: string
data: {
records: AppPipeline[]
total: number
}
}>('/api/app/cicd/pipeline/page', { params })
}
/**
* 查询应用的所有流水线
*/
export function listPipelineByApp(appId: number) {
return request.get<{
code: number
message: string
data: AppPipeline[]
}>('/api/app/cicd/pipeline/app/' + appId)
}
/**
* 查询流水线详情
*/
export function getPipeline(id: number) {
return request.get<{
code: number
message: string
data: AppPipeline
}>('/api/app/cicd/pipeline/' + id)
}
/**
* 创建流水线
*/
export function createPipeline(data: Partial<AppPipeline>) {
return request.post<{
code: number
message: string
}>('/api/app/cicd/pipeline', data)
}
/**
* 更新流水线
*/
export function updatePipeline(data: Partial<AppPipeline>) {
return request.put<{
code: number
message: string
}>('/api/app/cicd/pipeline', data)
}
/**
* 删除流水线
*/
export function deletePipeline(id: number) {
return request.delete<{
code: number
message: string
}>('/api/app/cicd/pipeline/' + id)
}
/**
* 启用/禁用流水线
*/
export function togglePipeline(id: number, enabled: boolean) {
return request.post<{
code: number
message: string
}>('/api/app/cicd/pipeline/' + id + '/toggle?enabled=' + enabled)
}
/**
* 获取流水线状态
*/
export function getPipelineStatus(id: number) {
return request.get<{
code: number
message: string
data: {
id: number
status: string
lastBuildId?: number
lastBuildTime?: string
successCount: number
failureCount: number
}
}>('/api/app/cicd/pipeline/' + id + '/status')
}
// ========== 构建 API ==========
/**
* 分页查询构建记录
*/
export function pageBuild(params?: {
page?: number
limit?: number
appId?: number
status?: string
ciType?: string
branch?: string
}) {
return request.get<{
code: number
message: string
data: {
records: AppBuild[]
total: number
}
}>('/api/app/cicd/build/page', { params })
}
/**
* 查询应用的所有构建记录
*/
export function listBuildByApp(appId: number) {
return request.get<{
code: number
message: string
data: AppBuild[]
}>('/api/app/cicd/build/app/' + appId)
}
/**
* 查询构建详情
*/
export function getBuild(id: number) {
return request.get<{
code: number
message: string
data: AppBuild
}>('/api/app/cicd/build/' + id)
}
/**
* 获取应用最新构建
*/
export function getLatestBuild(appId: number) {
return request.get<{
code: number
message: string
data: AppBuild | null
}>('/api/app/cicd/build/latest/' + appId)
}
/**
* 触发构建
*/
export function triggerBuild(appId: number, branch?: string) {
return request.post<{
code: number
message: string
data: {
id: number
buildNumber: string
status: string
branch: string
}
}>('/api/app/cicd/build/trigger', null, {
params: { appId, branch }
})
}
/**
* 获取构建日志
*/
export function getBuildLog(id: number) {
return request.get<{
code: number
message: string
data: {
log: string
buildId: number
}
}>('/api/app/cicd/build/' + id + '/log')
}
/**
* 取消构建
*/
export function cancelBuild(id: number) {
return request.post<{
code: number
message: string
}>('/api/app/cicd/build/' + id + '/cancel')
}
/**
* 重试构建
*/
export function retryBuild(id: number) {
return request.post<{
code: number
message: string
data: {
id: number
buildNumber: string
status: string
}
}>('/api/app/cicd/build/' + id + '/retry')
}
/**
* 获取构建统计
*/
export function getBuildStats(appId: number) {
return request.get<{
code: number
message: string
data: {
total: number
success: number
failed: number
running: number
}
}>('/api/app/cicd/build/stats/' + appId)
}
/**
* 获取CI系统配置
*/
export function getCIConfig() {
return request.get<{
code: number
message: string
data: {
supportedCI: string[]
defaultCI: string
giteaUrl: string
}
}>('/api/app/cicd/config')
}
// ========== 类型定义 ==========
export interface AppPipeline {
id?: number
appId?: number
name?: string
description?: string
ciType?: 'gitea' | 'jenkins' | 'github'
repoFullName?: string
workflowFile?: string
stages?: string
env?: 'development' | 'staging' | 'production'
defaultBranch?: string
enabled?: boolean
autoDeploy?: boolean
timeout?: number
config?: string
lastBuildId?: number
lastBuildStatus?: string
lastBuildTime?: string
successCount?: number
failureCount?: number
userId?: number
tenantId?: number
createTime?: string
updateTime?: string
}
export interface AppBuild {
id?: number
appId?: number
versionId?: number
buildNumber?: string
name?: string
branch?: string
commitSha?: string
commitMessage?: string
commitAuthor?: string
ciType?: 'gitea' | 'jenkins' | 'github'
ciJobId?: string
ciRunId?: string
ciApiUrl?: string
status?: 'pending' | 'running' | 'success' | 'failed' | 'cancelled'
startedAt?: string
finishedAt?: string
duration?: number
logUrl?: string
artifactUrl?: string
artifactName?: string
artifactSize?: number
errorMessage?: string
triggerType?: 'manual' | 'webhook' | 'schedule'
triggeredBy?: number
config?: string
userId?: number
tenantId?: number
createTime?: string
updateTime?: string
}

View File

@@ -0,0 +1,76 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { AppCloudCredential, AppCloudCredentialParam } from './model'
import {
CLOUD_PROVIDER_OPTIONS,
getProviderLabel,
getProviderIcon,
} from './model'
// 重新导出,保持向后兼容
export { CLOUD_PROVIDER_OPTIONS, getProviderLabel, getProviderIcon }
const BASE = '/api/app/cloud-credential'
/**
* 分页查询云账号凭证
*/
export async function pageCloudCredential(params?: AppCloudCredentialParam) {
const res = await request.get<ApiResult<PageResult<AppCloudCredential>>>(BASE + '/page', { params })
if (res.data.code === 200 || res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/**
* 查询用户全部云账号凭证
*/
export async function listCloudCredential(provider?: string) {
const res = await request.get<ApiResult<AppCloudCredential[]>>(BASE, { params: { provider } })
if ((res.data.code === 200 || res.data.code === 0) && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/**
* 根据ID查询云账号凭证
*/
export async function getCloudCredential(id: number) {
const res = await request.get<ApiResult<AppCloudCredential>>(BASE + '/' + id)
if ((res.data.code === 200 || res.data.code === 0) && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/**
* 创建云账号凭证
*/
export async function createCloudCredential(data: AppCloudCredential) {
const res = await request.post<ApiResult<AppCloudCredential>>(BASE, data)
if (res.data.code === 200 || res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/**
* 修改云账号凭证
*/
export async function updateCloudCredential(data: AppCloudCredential) {
const res = await request.put<ApiResult<unknown>>(BASE, data)
if (res.data.code === 200 || res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/**
* 删除云账号凭证
*/
export async function removeCloudCredential(id: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/' + id)
if (res.data.code === 200 || res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/**
* 测试云账号凭证连接
*/
export async function testCloudCredential(id: number) {
const res = await request.post<ApiResult<{ success: boolean; message: string }>>(BASE + '/test/' + id)
if (res.data.code === 200 || res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,61 @@
import type { PageParam } from '@/api'
/**
* 云账号凭证
*/
export interface AppCloudCredential {
id?: number
userId?: number
tenantId?: number
name?: string
provider?: string // aliyun/tencent/huawei/qiniu
accessKeyId?: string // AK
accessKeySecret?: string // SK (AES加密存储)
status?: number // 0-禁用 1-启用
testStatus?: number // 0-未测试 1-测试成功 2-测试失败
testMessage?: string
remark?: string
deleted?: number
createTime?: string
updateTime?: string
}
/**
* 查询参数
*/
export interface AppCloudCredentialParam extends PageParam {
provider?: string
status?: number
name?: string
}
/**
* 云服务商选项
*/
export const CLOUD_PROVIDER_OPTIONS = [
{ label: '阿里云 OSS', value: 'aliyun', icon: '🟢' },
{ label: '腾讯云 COS', value: 'tencent', icon: '🔵' },
{ label: '华为云 OBS', value: 'huawei', icon: '🟠' },
{ label: '七牛云 Kodo', value: 'qiniu', icon: '🟡' },
]
/**
* 获取云服务商显示文本
*/
export function getProviderLabel(provider: string) {
const opt = CLOUD_PROVIDER_OPTIONS.find((i) => i.value === provider)
return opt ? `${opt.icon} ${opt.label}` : provider
}
/**
* 获取云服务商图标
*/
export function getProviderIcon(provider: string) {
const iconMap: Record<string, string> = {
aliyun: '🟢',
tencent: '🔵',
huawei: '🟠',
qiniu: '🟡',
}
return iconMap[provider] || '☁️'
}

View File

@@ -0,0 +1,123 @@
import request from '@/utils/request'
import type { ApiResult } from '@/api'
import type { PageResult } from '@/api'
import { APP_API_URL } from '@/config/setting'
const BASE = APP_API_URL + '/contract'
// 合同类型
export type ContractType = 'service' | 'cooperation' | 'purchase' | 'other'
export type ContractStatus = 'draft' | 'pending' | 'active' | 'expired' | 'terminated'
// 合同模型
export interface Contract {
contractId?: number
contractNo?: string
title: string
contractType: ContractType
partyA?: string
partyB?: string
amount?: number
startDate?: string
endDate?: string
status: ContractStatus
fileUrl?: string
fileName?: string
remark?: string
userId?: number
userName?: string
createTime?: string
updateTime?: string
}
// 合同类型选项
export const contractTypeOptions = [
{ label: '服务合同', value: 'service' },
{ label: '合作协议', value: 'cooperation' },
{ label: '采购合同', value: 'purchase' },
{ label: '其他', value: 'other' },
]
// 合同状态选项
export const contractStatusOptions = [
{ label: '草稿', value: 'draft', color: 'default' },
{ label: '待签署', value: 'pending', color: 'orange' },
{ label: '生效中', value: 'active', color: 'green' },
{ label: '已过期', value: 'expired', color: 'red' },
{ label: '已终止', value: 'terminated', color: 'purple' },
]
/** 获取合同类型文本 */
export function contractTypeText(type?: ContractType | null): string {
if (!type) return '-'
const map: Record<ContractType, string> = {
service: '服务合同',
cooperation: '合作协议',
purchase: '采购合同',
other: '其他',
}
return map[type] || '-'
}
/** 获取合同状态标签 */
export function contractStatusInfo(status?: ContractStatus | null) {
if (!status) return { text: '-', color: 'default' }
const map: Record<ContractStatus, { text: string; color: string }> = {
draft: { text: '草稿', color: 'default' },
pending: { text: '待签署', color: 'orange' },
active: { text: '生效中', color: 'green' },
expired: { text: '已过期', color: 'red' },
terminated: { text: '已终止', color: 'purple' },
}
return map[status] || { text: '-', color: 'default' }
}
// ============ 接口方法 ============
/** 分页查询合同列表 */
export async function pageContract(params: {
page?: number
limit?: number
keywords?: string
contractType?: ContractType
status?: ContractStatus
}) {
const res = await request.get<ApiResult<PageResult<Contract>>>(BASE + '/page', { params })
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取合同详情 */
export async function getContract(contractId: number) {
const res = await request.get<ApiResult<Contract>>(BASE + '/' + contractId)
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 新增合同 */
export async function addContract(data: Partial<Contract>) {
const res = await request.post<ApiResult<Contract>>(BASE, data)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 更新合同 */
export async function updateContract(contractId: number, data: Partial<Contract>) {
const res = await request.put<ApiResult<Contract>>(BASE + '/' + contractId, data)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 删除合同 */
export async function removeContract(contractId: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/' + contractId)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 合同统计 */
export async function statsContract() {
const res = await request.get<ApiResult<Record<string, number>>>(BASE + '/stats')
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,90 @@
import request from '@/utils/request'
/**
* 生成二维码邀请
*/
export function generateInviteQrCode(data: {
appId: number
role: string
}) {
return request.post<{
code: number
message: string
data: {
token: string
inviteUrl: string // 邀请链接
miniprogramQrCode?: string // 小程序码Base64图片优先展示
expireTime?: string
}
}>('/api/app/developer/invite/qrcode', data)
}
/**
* 生成链接邀请
*/
export function generateInviteLink(data: {
appId: number
role: string
}) {
return request.post<{
code: number
message: string
data: {
inviteUrl: string
token: string
expireTime: string
}
}>('/api/app/developer/invite/link', data)
}
/**
* 验证邀请
*/
export function verifyInvite(data: {
token: string
appId?: number
}) {
return request.post<{
code: number
message: string
data: {
valid: boolean
appId: number
appName: string
role: string
inviterName: string
inviterAvatar?: string
expireTime: string
}
}>('/api/app/developer/invite/verify', data)
}
/**
* 接受邀请
*/
export function acceptInvite(data: {
token: string
appId?: number
role?: string
}) {
return request.post<{
code: number
message: string
data: null
}>('/api/app/developer/invite/accept', data)
}
/**
* 查询邀请状态(用于轮询检测是否被使用)
*/
export function getInviteStatus(token: string) {
return request.get<{
code: number
message: string
data: {
status: number // 0: 未使用, 1: 已使用
usedAt?: string // 使用时间
usedBy?: string // 使用者名称
}
}>('/api/app/developer/invite/status', { token })
}

View File

@@ -0,0 +1,55 @@
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import type { Notification, NotificationParam, UnreadCountResult } from './model'
import { APP_API_URL } from '@/config/setting'
const BASE = APP_API_URL + '/notification'
/** 分页查询通知列表 */
export async function pageNotification(params: NotificationParam) {
const res = await request.get<ApiResult<PageResult<Notification>>>(BASE + '/page', { params })
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 查询最近通知(用于铃铛下拉,最多 20 条) */
export async function listRecentNotification(params?: { type?: string; limit?: number }) {
const res = await request.get<ApiResult<Notification[]>>(BASE + '/recent', { params })
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取未读数量统计 */
export async function getUnreadCount() {
const res = await request.get<ApiResult<UnreadCountResult>>(BASE + '/unread-count')
if (res.data.code === 0 && res.data.data) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 标记单条通知为已读 */
export async function markRead(id: number) {
const res = await request.put<ApiResult<unknown>>(BASE + `/read/${id}`)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 标记全部已读 */
export async function markAllRead(data?: { type?: string }) {
const res = await request.put<ApiResult<unknown>>(BASE + '/read-all', data)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 删除单条通知 */
export async function removeNotification(id: number) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/' + id)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 清空全部已读通知 */
export async function clearReadNotifications(data?: { type?: string }) {
const res = await request.delete<ApiResult<unknown>>(BASE + '/clear-read', { data })
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,60 @@
import type { PageParam } from '@/api'
/** 通知类型枚举 */
export type NotificationType = 'ticket' | 'review' | 'system' | 'resource' | 'permission' | 'member' | 'payment'
/** 通知实体 */
export interface Notification {
/** 通知 ID */
id?: number
/** 接收用户 ID */
userId?: number
/** 通知类型 */
type?: NotificationType
/** 通知标题 */
title?: string
/** 通知内容摘要 */
content?: string
/** 是否已读0 未读1 已读 */
isRead?: number
/** 关联业务 ID如工单ID、权限申请ID等 */
refId?: number
/** 关联业务类型(如 ticket、permission_request 等) */
refType?: string
/** 跳转链接 */
linkUrl?: string
/** 发送者 ID系统通知为 0 */
senderId?: number
/** 发送者名称 */
senderName?: string
/** 发送者头像 */
senderAvatar?: string
/** 租户 ID */
tenantId?: number
/** 创建时间 */
createTime?: string
/** 更新时间(标记已读时间) */
updateTime?: string
}
/** 通知查询参数 */
export interface NotificationParam extends PageParam {
/** 通知类型筛选 */
type?: NotificationType | ''
/** 是否已读0 未读1 已读,不传查全部 */
isRead?: number
}
/** 未读统计 */
export interface UnreadCountResult {
/** 总未读数 */
total?: number
/** 各类型未读数 */
ticket?: number
review?: number
system?: number
resource?: number
permission?: number
member?: number
payment?: number
}

View File

@@ -0,0 +1,148 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { AppSetting } from './model';
/**
* 分页查询设置
*/
export async function pageSetting(params: any) {
const res = await request.get<ApiResult<PageResult<AppSetting>>>(
'/api/app/setting/page',
{ params }
);
// 兼容后端返回 0 或 200 作为成功码
if (res.data.code === 0 || res.data.code === 200) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 获取设置列表
*/
export async function listSetting(params?: any) {
const res = await request.get<ApiResult<AppSetting[]>>(
'/api/app/setting',
{ params }
);
// 兼容后端返回 0 或 200 作为成功码
if (res.data.code === 0 || res.data.code === 200) {
return res.data.data || [];
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据分类获取设置
*/
export async function getSettingsByCategory(category: string) {
const res = await request.get<ApiResult<AppSetting[]>>(
`/api/app/setting/category/${category}`
);
// 兼容后端返回 0 或 200 作为成功码
if (res.data.code === 0 || res.data.code === 200) {
return res.data.data || [];
}
return Promise.reject(new Error(res.data.message));
}
/**
* 获取分类设置值Map格式
*/
export async function getCategoryValues(category: string) {
const res = await request.get<ApiResult<Record<string, string>>>(
`/api/app/setting/category/${category}/values`
);
// 兼容后端返回 0 或 200 作为成功码
if (res.data.code === 0 || res.data.code === 200) {
return res.data.data || {};
}
return {};
}
/**
* 根据key获取设置值
*/
export async function getSettingValue(key: string) {
const res = await request.get<ApiResult<string>>(
`/api/app/setting/key/${key}`
);
// 兼容后端返回 0 或 200 作为成功码
if (res.data.code === 0 || res.data.code === 200) {
return res.data.data;
}
return null;
}
/**
* 根据key获取完整设置
*/
export async function getSettingByKey(key: string) {
const res = await request.get<ApiResult<AppSetting>>(
`/api/app/setting/info/${key}`
);
// 兼容后端返回 0 或 200 作为成功码
if (res.data.code === 0 || res.data.code === 200) {
return res.data.data;
}
return null;
}
/**
* 保存或更新设置
*/
export async function saveSetting(data: Partial<AppSetting>) {
const res = await request.post<ApiResult<unknown>>(
'/api/app/setting',
data
);
// 兼容后端返回 0 或 200 作为成功码
if (res.data.code === 0 || res.data.code === 200) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 更新设置
*/
export async function updateSetting(data: Partial<AppSetting>) {
const res = await request.put<ApiResult<unknown>>(
'/api/app/setting',
data
);
// 兼容后端返回 0 或 200 作为成功码
if (res.data.code === 0 || res.data.code === 200) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量保存分类设置
*/
export async function batchSaveCategory(category: string, values: Record<string, any>) {
const res = await request.post<ApiResult<unknown>>(
`/api/app/setting/batch/${category}`,
values
);
// 兼容后端返回 0 或 200 作为成功码
if (res.data.code === 0 || res.data.code === 200) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除设置
*/
export async function removeSetting(settingId: number) {
const res = await request.delete<ApiResult<unknown>>(
`/api/app/setting/${settingId}`
);
// 兼容后端返回 0 或 200 作为成功码
if (res.data.code === 0 || res.data.code === 200) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,45 @@
/**
* 平台设置
*/
export interface AppSetting {
/** 设置ID */
settingId?: number;
/** 设置分类basic/review/market/register/notify/maintenance */
category?: string;
/** 设置项标识 */
settingKey?: string;
/** 设置项名称 */
settingName?: string;
/** 设置值JSON格式 */
settingValue?: string;
/** 设置类型string/number/boolean/json */
valueType?: string;
/** 设置说明 */
description?: string;
/** 排序号 */
sortNumber?: number;
/** 是否启用 0否 1是 */
isEnabled?: number;
/** 是否公开前端可读0否 1是 */
isPublic?: number;
/** 租户id */
tenantId?: number;
/** 创建时间 */
createdTime?: number;
/** 更新时间 */
updatedTime?: number;
}
/**
* 平台设置查询参数
*/
export interface AppSettingParam {
settingId?: number;
category?: string;
settingKey?: string;
settingName?: string;
valueType?: string;
isEnabled?: number;
isPublic?: number;
tenantId?: number;
}

View File

@@ -0,0 +1,114 @@
/**
* 应用订阅 API
* 前端路径:/api/app/subscription → 后端 /api/app/subscription
*/
import request from '@/utils/request'
import type { ApiResult, PageResult } from '@/api'
import { APP_API_URL } from '@/config/setting'
import type { AppSubscription, AppSubscriptionParam, SubscribeResult } from './model'
const BASE = APP_API_URL + '/subscription'
/** 统一成功码判断:兼容 code=0旧约定和 code=200Spring Boot 默认) */
const ok = (code: number) => code === 0 || code === 200
// ============ 订阅操作 ============
/** 创建订阅(免费直接激活,付费创建待支付) */
export async function createSubscription(data: {
productId: number
priceType: 'free' | 'one_time' | 'subscription'
subscriptionPeriod?: 'month' | 'year'
quantity?: number
}) {
const res = await request.post<ApiResult<SubscribeResult>>(BASE + '/subscribe', data)
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 获取用户余额 */
export async function getUserBalance(): Promise<{ balance: number }> {
const res = await request.get<ApiResult<{ balance: number }>>(BASE + '/balance')
if (ok(res.data.code)) return res.data.data ?? { balance: 0 }
return Promise.reject(new Error(res.data.message))
}
/** 发起支付(支持微信/余额支付) */
export async function paySubscription(id: number, method: 'wechat' | 'balance' | 'alipay' = 'wechat') {
const res = await request.post<ApiResult<unknown>>(BASE + '/pay/' + id, null, {
params: { method }
})
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 查询支付状态(轮询用),同时返回订单详情 */
export async function checkPayStatus(subscriptionNo: string) {
const res = await request.get<ApiResult<{
paid: boolean
payStatus: number
status: string
payTime?: string
transactionId?: string
// 订单详情(供支付页直接使用,无需再调 getSubscription
id?: number
subscriptionNo?: string
productId?: number
productName?: string
productLogo?: string
priceType?: string
payPrice?: number
subscriptionPeriod?: string
}>>(BASE + '/check-status/' + subscriptionNo)
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
// ============ 我的订阅 ============
/** 我的订阅列表(分页) */
export async function mySubscriptions(params?: AppSubscriptionParam) {
const res = await request.get<ApiResult<PageResult<AppSubscription>>>(BASE + '/my/page', { params })
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 订阅详情 */
export async function getSubscription(id: number) {
const res = await request.get<ApiResult<AppSubscription>>(BASE + '/detail/' + id)
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
// ============ 订阅管理 ============
/** 续费 */
export async function renewSubscription(id: number, period: 'month' | 'year') {
const res = await request.post<ApiResult<unknown>>(BASE + '/renew/' + id, null, { params: { period } })
if (ok(res.data.code)) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/** 退订/取消 */
export async function cancelSubscription(id: number) {
const res = await request.post<ApiResult<unknown>>(BASE + '/cancel/' + id)
if (ok(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/** 启用/禁用 */
export async function toggleEnable(id: number, enabled: boolean) {
const res = await request.post<ApiResult<unknown>>(BASE + '/toggle-enable/' + id, null, { params: { enabled } })
if (ok(res.data.code)) return res.data.message
return Promise.reject(new Error(res.data.message))
}
// ============ 查询 ============
/** 检查是否已购买某应用 */
export async function checkPurchased(productId: number) {
const res = await request.get<ApiResult<boolean>>(BASE + '/check-purchased/' + productId)
if (ok(res.data.code)) return res.data.data ?? false
// 接口未实现时静默返回 false不影响主流程
return false
}

View File

@@ -0,0 +1,110 @@
import type { PageParam } from '@/api'
/**
* 应用订阅
*/
export interface AppSubscription {
id?: number
/** 订阅编号 */
subscriptionNo?: string
/** 购买用户ID */
userId?: number
/** 应用产品ID */
productId?: number
/** 租户ID */
tenantId?: number
/** 订阅状态: pending/active/expired/cancelled */
status?: string
/** 价格类型: free/one_time/subscription */
priceType?: string
/** 原价(分) */
originalPrice?: number
/** 实付金额(分) */
payPrice?: number
/** 支付方式: 0余额 1微信 3支付宝 12免费 */
payType?: number
/** 支付状态: 0未支付 1已支付 */
payStatus?: number
/** 支付时间 */
payTime?: string
/** 第三方交易号 */
transactionId?: string
/** 订阅周期: month/year */
subscriptionPeriod?: string
/** 生效时间 */
startTime?: string
/** 到期时间 */
expireTime?: string
/** 是否自动续费 */
autoRenew?: number
/** 分配的域名 */
instanceDomain?: string
/** 实例管理后台URL */
instanceAdminUrl?: string
/** 实例配置 JSON */
instanceConfig?: string
/** 关联的支付订单号 */
orderNo?: string
/** 关联的支付订单ID */
orderId?: number
/** 关联的产品信息(查询时返回) */
productName?: string
productIcon?: string
productLogo?: string
productAppType?: number
productDescription?: string
developerName?: string
remark?: string
deleted?: number
sortNumber?: number
createTime?: string
updateTime?: string
}
/**
* 订阅搜索条件
*/
export interface AppSubscriptionParam extends PageParam {
productId?: number
status?: string
priceType?: string
subscriptionNo?: string
keywords?: string
}
/**
* 订阅状态枚举
*/
export const SUBSCRIPTION_STATUS = {
PENDING: 'pending',
ACTIVE: 'active',
EXPIRED: 'expired',
CANCELLED: 'cancelled',
} as const
export type SUBSCRIPTION_STATUS_KEY = keyof typeof SUBSCRIPTION_STATUS
export const SUBSCRIPTION_STATUS_NAME: Record<string, string> = {
[SUBSCRIPTION_STATUS.PENDING]: '待支付',
[SUBSCRIPTION_STATUS.ACTIVE]: '生效中',
[SUBSCRIPTION_STATUS.EXPIRED]: '已过期',
[SUBSCRIPTION_STATUS.CANCELLED]: '已取消',
}
/**
* 订阅结果
*/
export interface SubscribeResult {
subscriptionId?: number
subscriptionNo?: string
status?: string
message?: string
payPrice?: number
orderNo?: string
}

106
app/api/cms/cmsAd/index.ts Normal file
View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { CmsAd, CmsAdParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询广告位
*/
export async function pageCmsAd(params: CmsAdParam) {
const res = await request.get<ApiResult<PageResult<CmsAd>>>(
MODULES_API_URL + '/cms/cms-ad/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询广告位列表
*/
export async function listCmsAd(params?: CmsAdParam) {
const res = await request.get<ApiResult<CmsAd[]>>(
MODULES_API_URL + '/cms/cms-ad',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加广告位
*/
export async function addCmsAd(data: CmsAd) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-ad',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改广告位
*/
export async function updateCmsAd(data: CmsAd) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-ad',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除广告位
*/
export async function removeCmsAd(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-ad/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除广告位
*/
export async function removeBatchCmsAd(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-ad/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询广告位
*/
export async function getCmsAd(id: number) {
const res = await request.get<ApiResult<CmsAd>>(
MODULES_API_URL + '/cms/cms-ad/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,65 @@
import type { PageParam } from '@/api';
/**
* 广告位
*/
export interface CmsAd {
// ID
adId?: number;
// 类型
type?: number;
// 唯一标识
code?: string;
// 栏目分类
categoryId?: number;
// 栏目名称
categoryName?: string;
// 页面ID
designId?: number;
// 广告类型
adType?: string;
// 广告位名称
name?: string;
// 宽
width?: string;
// 高
height?: string;
// css样式
style?: string;
// 广告图片
images?: any;
// 广告图片
imageList?: any;
// 路由/链接地址
path?: string;
// 用户ID
userId?: number;
// 语言
lang?: string;
// 页面ID
pageId?: number;
// 页面名称
pageName?: string;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
description?: string;
// 状态, 0正常, 1冻结
status?: number;
// 是否删除, 0否, 1是
deleted?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
merchantId?: number;
}
/**
* 广告位搜索条件
*/
export interface CmsAdParam extends PageParam {
adId?: number;
pageId?: number;
keywords?: string;
}

View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { CmsAdRecord, CmsAdRecordParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询广告图片
*/
export async function pageCmsAdRecord(params: CmsAdRecordParam) {
const res = await request.get<ApiResult<PageResult<CmsAdRecord>>>(
MODULES_API_URL + '/cms/cms-ad-record/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询广告图片列表
*/
export async function listCmsAdRecord(params?: CmsAdRecordParam) {
const res = await request.get<ApiResult<CmsAdRecord[]>>(
MODULES_API_URL + '/cms/cms-ad-record',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加广告图片
*/
export async function addCmsAdRecord(data: CmsAdRecord) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-ad-record',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改广告图片
*/
export async function updateCmsAdRecord(data: CmsAdRecord) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-ad-record',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除广告图片
*/
export async function removeCmsAdRecord(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-ad-record/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除广告图片
*/
export async function removeBatchCmsAdRecord(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-ad-record/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询广告图片
*/
export async function getCmsAdRecord(id: number) {
const res = await request.get<ApiResult<CmsAdRecord>>(
MODULES_API_URL + '/cms/cms-ad-record/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,35 @@
import type { PageParam } from '@/api';
/**
* 广告图片
*/
export interface CmsAdRecord {
// ID
adRecordId?: number;
// 广告标题
title?: string;
// 图片地址
path?: string;
// 链接地址
url?: string;
// 广告位ID
adId?: number;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
description?: string;
// 状态, 0正常, 1冻结
status?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
}
/**
* 广告图片搜索条件
*/
export interface CmsAdRecordParam extends PageParam {
adRecordId?: number;
keywords?: string;
}

View File

@@ -0,0 +1,120 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { CmsAppConfig, CmsAppConfigParam, BatchSaveRequest } from './model';
import {MODULES_API_URL} from '@/config/setting';
/**
* 分页查询应用配置
*/
export async function pageCmsAppConfig(params: CmsAppConfigParam) {
const res = await request.get<ApiResult<PageResult<CmsAppConfig>>>(
MODULES_API_URL + '/cms/cms-app-config/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 获取应用配置列表
*/
export async function listCmsAppConfig(params?: CmsAppConfigParam) {
const res = await request.get<ApiResult<CmsAppConfig[]>>(
MODULES_API_URL + '/cms/cms-app-config/list',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据应用ID获取配置映射
*/
export async function getConfigsMap(productId: number) {
const res = await request.get<ApiResult<Record<string, any>>>(
MODULES_API_URL + `/cms/cms-app-config/map/${productId}`
);
if (res.data.code === 0) {
return res.data.data || {};
}
return Promise.reject(new Error(res.data.message));
}
/**
* 获取单个配置值
*/
export async function getConfigValue(productId: number, configKey: string) {
const res = await request.get<ApiResult<string>>(
MODULES_API_URL + '/cms/cms-app-config/value',
{
params: { productId, configKey }
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 保存配置
*/
export async function saveCmsAppConfig(data: CmsAppConfig) {
const res = await request.post<ApiResult<void>>(
MODULES_API_URL + '/cms/cms-app-config',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量保存配置
*/
export async function batchSaveCmsAppConfig(data: BatchSaveRequest) {
const res = await request.post<ApiResult<void>>(
MODULES_API_URL + '/cms/cms-app-config/batch',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 更新配置
*/
export async function updateCmsAppConfig(data: CmsAppConfig) {
const res = await request.put<ApiResult<void>>(
MODULES_API_URL + '/cms/cms-app-config',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除配置
*/
export async function deleteCmsAppConfig(configId: number) {
const res = await request.delete<ApiResult<void>>(
MODULES_API_URL + `/cms/cms-app-config/${configId}`
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,66 @@
import type { PageParam } from '@/api';
import type { PageResult } from '@/api';
/**
* 应用配置
*/
export interface CmsAppConfig {
configId?: number;
productId?: number;
configKey?: string;
configValue?: string;
configType?: string;
isEncrypted?: number;
isSecret?: number;
description?: string;
sortNumber?: number;
tenantId?: number;
createdTime?: string;
updatedTime?: string;
deleted?: number;
}
/**
* 应用配置查询参数
*/
export interface CmsAppConfigParam extends PageParam {
configId?: number;
productId?: number;
configKey?: string;
configType?: string;
isSecret?: number;
}
/**
* 批量保存请求
*/
export interface BatchSaveRequest {
productId: number;
configs: CmsAppConfig[];
}
/**
* 配置类型定义
*/
export interface ConfigType {
key: string;
name: string;
icon: string;
description: string;
configs: ConfigField[];
}
/**
* 配置字段定义
*/
export interface ConfigField {
key: string;
label: string;
type: 'input' | 'textarea' | 'number' | 'select' | 'switch' | 'password' | 'json';
required?: boolean;
placeholder?: string;
options?: Array<{ label: string; value: any }>;
defaultValue?: any;
description?: string;
secret?: boolean;
}

View File

@@ -0,0 +1,162 @@
import request from '@/utils/request';
import type {ApiResult, PageResult} from '@/api';
import type {CmsArticle, CmsArticleParam} from './model';
function isSuccess(code?: number) {
return code === 0 || code === 200;
}
/**
* 分页查询文章
*/
export async function pageCmsArticle(params: CmsArticleParam) {
const res = await request.get<ApiResult<PageResult<CmsArticle>>>(
'/api/cms/cms-article/page',
{
params
}
);
if (isSuccess(res.data.code)) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询文章列表
*/
export async function listCmsArticle(params?: CmsArticleParam) {
const res = await request.get<ApiResult<CmsArticle[]>>(
'/api/cms/cms-article',
{
params
}
);
if (isSuccess(res.data.code) && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加文章
*/
export async function addCmsArticle(data: CmsArticle) {
const res = await request.post<ApiResult<unknown>>(
'/api/cms/cms-article',
data
);
if (isSuccess(res.data.code)) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改文章
*/
export async function updateCmsArticle(data: CmsArticle) {
const res = await request.put<ApiResult<unknown>>(
'/api/cms/cms-article',
data
);
if (isSuccess(res.data.code)) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量修改文章
*/
export async function updateBatchCmsArticle(data: any) {
const res = await request.put<ApiResult<unknown>>(
'/api/cms/cms-article/batch',
data
);
if (isSuccess(res.data.code)) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除文章
*/
export async function removeCmsArticle(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
'/api/cms/cms-article/' + id
);
if (isSuccess(res.data.code)) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除文章
*/
export async function removeBatchCmsArticle(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
'/api/cms/cms-article/batch',
{
data
}
);
if (isSuccess(res.data.code)) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询文章
*/
export async function getCmsArticle(id: number) {
const res = await request.get<ApiResult<CmsArticle>>(
'/api/cms/cms-article/' + id
);
if (isSuccess(res.data.code) && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据code查询文章
*/
export async function getByCode(code: string) {
const res = await request.get<ApiResult<CmsArticle>>(
'/api/cms/cms-article/getByCode/' + code
);
if (isSuccess(res.data.code) && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
export async function getCount(params: CmsArticleParam) {
const res = await request.get('/api/cms/cms-article/data', {
params
});
if (isSuccess(res.data.code)) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 文章批量导入
*/
export async function importArticles(file: File) {
const formData = new FormData();
formData.append('file', file);
const res = await request.post<ApiResult<unknown>>(
'/api/cms/cms-article/import',
formData
);
if (isSuccess(res.data.code)) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,133 @@
import type { PageParam } from '@/api';
/**
* 文章
*/
export interface CmsArticle {
// 文章ID
articleId?: number;
// 文章标题
title?: string;
// 文章类型 0常规 1视频
type?: number;
// 文章模型
model?: string;
// 文章编号
code?: string;
// 文章详情
detail?: string;
// 列表显示方式(10小图展示 20大图展示)
showType?: number;
// 话题
topic?: string;
// 标签
tags?: any;
// 父级ID
parentId?: number;
parentName?: string;
// 栏目ID
categoryId?: number;
// 栏目名称
categoryName?: string;
// 封面图
image?: string;
// 来源
source?: string;
// 摘要
overview?: string;
// 虚拟阅读量(仅用作展示)
virtualViews?: number;
// 实际阅读量
actualViews?: number;
// 浏览权限(0公开 1会员 2密码)
permission?: number;
// 访问密码
password?: string;
// 确认密码
password2?: string;
// 发布来源客户端 (APP、H5、小程序等)
platform?: string;
// 文章附件
files?: string;
// 视频地址
video?: string;
// 接受的文件类型
accept?: string;
// 经度
longitude?: string;
// 纬度
latitude?: string;
// 所在省份
province?: string;
// 所在城市
city?: string;
// 所在辖区
region?: string;
// 街道地址
address?: string;
// 点赞数
likes?: number;
// 评论数
commentNumbers?: number;
// 提醒谁看
toUsers?: string;
// 文章内容
content?: string;
// 编辑器类型
editor?: number;
// PDF地址
pdfUrl?: string;
// 用户ID
userId?: number;
// 商户ID
merchantId?: number;
// 作者
author?: string;
// 语言
lang?: string;
// 是否推荐
recommend?: number;
// 是否同步翻译其他语言版本
translation?: boolean;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
description?: string;
// 状态, 0已发布, 1待审核 2已驳回 3违规内容
status?: number;
// 状态描述
statusText?: string;
// 是否删除, 0否, 1是
deleted?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
// 修改时间
updateTime?: string;
// 是否移动端
isMobile?: boolean;
// 二维码
qrcode?: string;
// 文章路径
url?: string;
}
/**
* 文章搜索条件
*/
export interface CmsArticleParam extends PageParam {
articleId?: number;
model?: string;
status?: number;
categoryId?: number;
recommend?: number;
keywords?: string;
}
export interface CmsArticleCount {
totalNum?: number;
totalNum2?: number;
totalNum3?: number;
totalNum4?: number;
}

View File

@@ -0,0 +1,112 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { CmsArticleCategory, CmsArticleCategoryParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
function isSuccess(code?: number) {
return code === 0 || code === 200;
}
/**
* 分页查询文章分类表
*/
export async function pageCmsArticleCategory(params: CmsArticleCategoryParam) {
const res = await request.get<ApiResult<PageResult<CmsArticleCategory>>>(
MODULES_API_URL + '/cms/cms-article-category/page',
{
params
}
);
if (isSuccess(res.data.code)) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询文章分类表列表
*/
export async function listCmsArticleCategory(params?: CmsArticleCategoryParam) {
const res = await request.get<ApiResult<CmsArticleCategory[]>>(
MODULES_API_URL + '/cms/cms-article-category',
{
params
}
);
if (isSuccess(res.data.code) && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加文章分类表
*/
export async function addCmsArticleCategory(data: CmsArticleCategory) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-category',
data
);
if (isSuccess(res.data.code)) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改文章分类表
*/
export async function updateCmsArticleCategory(data: CmsArticleCategory) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-category',
data
);
if (isSuccess(res.data.code)) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除文章分类表
*/
export async function removeCmsArticleCategory(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-category/' + id
);
if (isSuccess(res.data.code)) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除文章分类表
*/
export async function removeBatchCmsArticleCategory(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-category/batch',
{
data
}
);
if (isSuccess(res.data.code)) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询文章分类表
*/
export async function getCmsArticleCategory(id: number) {
const res = await request.get<ApiResult<CmsArticleCategory>>(
MODULES_API_URL + '/cms/cms-article-category/' + id
);
if (isSuccess(res.data.code) && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,60 @@
import type { PageParam } from '@/api';
/**
* 文章分类表
*/
export interface CmsArticleCategory {
// 文章分类ID
categoryId?: number;
// 分类标识
categoryCode?: string;
// 分类名称
title?: string;
// 类型 0列表 1单页 2外链
type?: number;
// 分类图片
image?: string;
// 上级分类ID
parentId?: number;
// 路由/链接地址
path?: string;
// 组件路径
component?: string;
// 绑定的页面
pageId?: number;
// 用户ID
userId?: number;
// 文章数量
count?: number;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
description?: string;
// 是否隐藏, 0否, 1是(仅注册路由不显示在左侧菜单)
hide?: number;
// 是否推荐
recommend?: number;
// 是否显示在首页
showIndex?: number;
// 状态, 0正常, 1禁用
status?: number;
// 是否删除, 0否, 1是
deleted?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
// 修改时间
updateTime?: string;
value?: number;
label?: string;
}
/**
* 文章分类表搜索条件
*/
export interface CmsArticleCategoryParam extends PageParam {
categoryId?: number;
status?: number;
keywords?: string;
}

View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { CmsArticleComment, CmsArticleCommentParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询文章评论表
*/
export async function pageCmsArticleComment(params: CmsArticleCommentParam) {
const res = await request.get<ApiResult<PageResult<CmsArticleComment>>>(
MODULES_API_URL + '/cms/cms-article-comment/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询文章评论表列表
*/
export async function listCmsArticleComment(params?: CmsArticleCommentParam) {
const res = await request.get<ApiResult<CmsArticleComment[]>>(
MODULES_API_URL + '/cms/cms-article-comment',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加文章评论表
*/
export async function addCmsArticleComment(data: CmsArticleComment) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-comment',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改文章评论表
*/
export async function updateCmsArticleComment(data: CmsArticleComment) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-comment',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除文章评论表
*/
export async function removeCmsArticleComment(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-comment/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除文章评论表
*/
export async function removeBatchCmsArticleComment(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-comment/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询文章评论表
*/
export async function getCmsArticleComment(id: number) {
const res = await request.get<ApiResult<CmsArticleComment>>(
MODULES_API_URL + '/cms/cms-article-comment/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,47 @@
import type { PageParam } from '@/api';
/**
* 文章评论表
*/
export interface CmsArticleComment {
// 评价ID
commentId?: number;
// 文章ID
articleId?: number;
// 评分 (10好评 20中评 30差评)
score?: number;
// 评价内容
content?: string;
// 是否为图片评价
isPicture?: number;
// 评论者ID
userId?: number;
// 被评价者ID
toUserId?: number;
// 回复的评论ID
replyCommentId?: number;
// 回复者ID
replyUserId?: number;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
description?: string;
// 状态, 0未读, 1已读
status?: number;
// 是否删除, 0否, 1是
deleted?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
// 修改时间
updateTime?: string;
}
/**
* 文章评论表搜索条件
*/
export interface CmsArticleCommentParam extends PageParam {
commentId?: number;
keywords?: string;
}

View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { CmsArticleContent, CmsArticleContentParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询文章记录表
*/
export async function pageCmsArticleContent(params: CmsArticleContentParam) {
const res = await request.get<ApiResult<PageResult<CmsArticleContent>>>(
MODULES_API_URL + '/cms/cms-article-content/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询文章记录表列表
*/
export async function listCmsArticleContent(params?: CmsArticleContentParam) {
const res = await request.get<ApiResult<CmsArticleContent[]>>(
MODULES_API_URL + '/cms/cms-article-content',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加文章记录表
*/
export async function addCmsArticleContent(data: CmsArticleContent) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-content',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改文章记录表
*/
export async function updateCmsArticleContent(data: CmsArticleContent) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-content',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除文章记录表
*/
export async function removeCmsArticleContent(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-content/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除文章记录表
*/
export async function removeBatchCmsArticleContent(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-content/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询文章记录表
*/
export async function getCmsArticleContent(id: number) {
const res = await request.get<ApiResult<CmsArticleContent>>(
MODULES_API_URL + '/cms/cms-article-content/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,25 @@
import type { PageParam } from '@/api';
/**
* 文章记录表
*/
export interface CmsArticleContent {
//
id?: number;
// 文章ID
articleId?: number;
// 文章内容
content?: string;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
}
/**
* 文章记录表搜索条件
*/
export interface CmsArticleContentParam extends PageParam {
id?: number;
keywords?: string;
}

View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { CmsArticleCount, CmsArticleCountParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询点赞文章
*/
export async function pageCmsArticleCount(params: CmsArticleCountParam) {
const res = await request.get<ApiResult<PageResult<CmsArticleCount>>>(
MODULES_API_URL + '/cms/cms-article-count/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询点赞文章列表
*/
export async function listCmsArticleCount(params?: CmsArticleCountParam) {
const res = await request.get<ApiResult<CmsArticleCount[]>>(
MODULES_API_URL + '/cms/cms-article-count',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加点赞文章
*/
export async function addCmsArticleCount(data: CmsArticleCount) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-count',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改点赞文章
*/
export async function updateCmsArticleCount(data: CmsArticleCount) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-count',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除点赞文章
*/
export async function removeCmsArticleCount(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-count/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除点赞文章
*/
export async function removeBatchCmsArticleCount(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-count/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询点赞文章
*/
export async function getCmsArticleCount(id: number) {
const res = await request.get<ApiResult<CmsArticleCount>>(
MODULES_API_URL + '/cms/cms-article-count/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,25 @@
import type { PageParam } from '@/api';
/**
* 点赞文章
*/
export interface CmsArticleCount {
// 主键ID
id?: number;
// 文章ID
articleId?: number;
// 用户ID
userId?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
}
/**
* 点赞文章搜索条件
*/
export interface CmsArticleCountParam extends PageParam {
id?: number;
keywords?: string;
}

View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { CmsArticleLike, CmsArticleLikeParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询点赞文章
*/
export async function pageCmsArticleLike(params: CmsArticleLikeParam) {
const res = await request.get<ApiResult<PageResult<CmsArticleLike>>>(
MODULES_API_URL + '/cms/cms-article-like/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询点赞文章列表
*/
export async function listCmsArticleLike(params?: CmsArticleLikeParam) {
const res = await request.get<ApiResult<CmsArticleLike[]>>(
MODULES_API_URL + '/cms/cms-article-like',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加点赞文章
*/
export async function addCmsArticleLike(data: CmsArticleLike) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-like',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改点赞文章
*/
export async function updateCmsArticleLike(data: CmsArticleLike) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-like',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除点赞文章
*/
export async function removeCmsArticleLike(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-like/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除点赞文章
*/
export async function removeBatchCmsArticleLike(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-like/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询点赞文章
*/
export async function getCmsArticleLike(id: number) {
const res = await request.get<ApiResult<CmsArticleLike>>(
MODULES_API_URL + '/cms/cms-article-like/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,25 @@
import type { PageParam } from '@/api';
/**
* 点赞文章
*/
export interface CmsArticleLike {
// 主键ID
id?: number;
// 文章ID
articleId?: number;
// 用户ID
userId?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
}
/**
* 点赞文章搜索条件
*/
export interface CmsArticleLikeParam extends PageParam {
id?: number;
keywords?: string;
}

View File

@@ -0,0 +1,103 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { CmsContactLead, CmsContactLeadParam, ContactLeadSubmitForm } from './model';
import { MODULES_API_URL } from '@/config/setting';
// 公开 CMS 接口路径(无需登录,走 /api/cms/* 代理)
const CMS_PUBLIC_URL = '/api/cms';
/**
* 提交联系表单(公开接口,无需登录)
*/
export async function submitContactLead(data: ContactLeadSubmitForm) {
const res = await request.post<ApiResult<unknown>>(
CMS_PUBLIC_URL + '/cms-contact-lead/submit',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 分页查询销售线索(后台管理)
*/
export async function pageCmsContactLead(params: CmsContactLeadParam) {
const res = await request.get<ApiResult<PageResult<CmsContactLead>>>(
MODULES_API_URL + '/cms/cms-contact-lead/page',
{ params }
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询销售线索列表(后台管理)
*/
export async function listCmsContactLead(params?: CmsContactLeadParam) {
const res = await request.get<ApiResult<CmsContactLead[]>>(
MODULES_API_URL + '/cms/cms-contact-lead',
{ params }
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询销售线索
*/
export async function getCmsContactLead(id: number) {
const res = await request.get<ApiResult<CmsContactLead>>(
MODULES_API_URL + '/cms/cms-contact-lead/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改销售线索(跟进状态等)
*/
export async function updateCmsContactLead(data: CmsContactLead) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-contact-lead',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除销售线索
*/
export async function removeCmsContactLead(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-contact-lead/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除销售线索
*/
export async function removeBatchCmsContactLead(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-contact-lead/batch',
{ data }
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,54 @@
import type { PageParam } from '@/api';
/**
* 销售线索(联系表单)
*/
export interface CmsContactLead {
// 线索ID
leadId?: number;
// 姓名
name?: string;
// 手机号
phone?: string;
// 单位名称
company?: string;
// 交付方式: saas / private / hybrid
delivery?: string;
// 需求描述
need?: string;
// 来源页(页面 URL
source?: string;
// 客户IP
clientIp?: string;
// 跟进状态: 0待跟进 1跟进中 2已成单 3已放弃
followStatus?: number;
// 跟进备注
followRemark?: string;
// 创建时间
createTime?: string;
// 更新时间
updateTime?: string;
}
/**
* 销售线索搜索条件
*/
export interface CmsContactLeadParam extends PageParam {
leadId?: number;
keywords?: string;
followStatus?: number;
createTimeStart?: string;
createTimeEnd?: string;
}
/**
* 提交联系表单的请求参数
*/
export interface ContactLeadSubmitForm {
name: string;
phone: string;
company: string;
delivery?: string;
need: string;
source?: string;
}

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